xref: /openbsd/gnu/usr.bin/perl/mydtrace.h (revision cecf84d4)
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