1 /* mydtrace.h 2 * 3 * Copyright (C) 2008, 2010, 2011 by Larry Wall and others 4 * 5 * You may distribute under the terms of either the GNU General Public 6 * License or the Artistic License, as specified in the README file. 7 * 8 * Provides macros that wrap the various DTrace probes we use. We add 9 * an extra level of wrapping to encapsulate the _ENABLED tests. 10 */ 11 12 #if defined(USE_DTRACE) && defined(PERL_CORE) 13 14 # include "perldtrace.h" 15 16 # if defined(STAP_PROBE_ADDR) && !defined(DEBUGGING) 17 18 /* SystemTap 1.2 uses a construct that chokes on passing a char array 19 * as a char *, in this case hek_key in struct hek. Workaround it 20 * with a temporary. 21 */ 22 23 # define ENTRY_PROBE(func, file, line, stash) \ 24 if (PERL_SUB_ENTRY_ENABLED()) { \ 25 const char *tmp_func = func; \ 26 PERL_SUB_ENTRY(tmp_func, file, line, stash); \ 27 } 28 29 # define RETURN_PROBE(func, file, line, stash) \ 30 if (PERL_SUB_RETURN_ENABLED()) { \ 31 const char *tmp_func = func; \ 32 PERL_SUB_RETURN(tmp_func, file, line, stash); \ 33 } 34 35 # define LOADING_FILE_PROBE(name) \ 36 if (PERL_LOADING_FILE_ENABLED()) { \ 37 const char *tmp_name = name; \ 38 PERL_LOADING_FILE(tmp_name); \ 39 } 40 41 # define LOADED_FILE_PROBE(name) \ 42 if (PERL_LOADED_FILE_ENABLED()) { \ 43 const char *tmp_name = name; \ 44 PERL_LOADED_FILE(tmp_name); \ 45 } 46 47 # else 48 49 # define ENTRY_PROBE(func, file, line, stash) \ 50 if (PERL_SUB_ENTRY_ENABLED()) { \ 51 PERL_SUB_ENTRY(func, file, line, stash); \ 52 } 53 54 # define RETURN_PROBE(func, file, line, stash) \ 55 if (PERL_SUB_RETURN_ENABLED()) { \ 56 PERL_SUB_RETURN(func, file, line, stash); \ 57 } 58 59 # define LOADING_FILE_PROBE(name) \ 60 if (PERL_LOADING_FILE_ENABLED()) { \ 61 PERL_LOADING_FILE(name); \ 62 } 63 64 # define LOADED_FILE_PROBE(name) \ 65 if (PERL_LOADED_FILE_ENABLED()) { \ 66 PERL_LOADED_FILE(name); \ 67 } 68 69 # endif 70 71 # define OP_ENTRY_PROBE(name) \ 72 if (PERL_OP_ENTRY_ENABLED()) { \ 73 PERL_OP_ENTRY(name); \ 74 } 75 76 # define PHASE_CHANGE_PROBE(new_phase, old_phase) \ 77 if (PERL_PHASE_CHANGE_ENABLED()) { \ 78 PERL_PHASE_CHANGE(new_phase, old_phase); \ 79 } 80 81 #else 82 83 /* NOPs */ 84 # define ENTRY_PROBE(func, file, line, stash) 85 # define RETURN_PROBE(func, file, line, stash) 86 # define PHASE_CHANGE_PROBE(new_phase, old_phase) 87 # define OP_ENTRY_PROBE(name) 88 # define LOADING_FILE_PROBE(name) 89 # define LOADED_FILE_PROBE(name) 90 91 #endif 92 93 /* 94 * Local variables: 95 * c-indentation-style: bsd 96 * c-basic-offset: 4 97 * indent-tabs-mode: nil 98 * End: 99 * 100 * ex: set ts=8 sts=4 sw=4 et: 101 */ 102