This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
[perl5db-refactor] Extract a function.
[perl5.git] / mydtrace.h
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 OP_ENTRY_PROBE(name)                        \
36     if (PERL_OP_ENTRY_ENABLED()) {                      \
37         const char *tmp_name = name;                    \
38         PERL_OP_ENTRY(tmp_name, file, line, stash);     \
39     }
40
41 #    define LOADING_FILE_PROBE(name)                            \
42     if (PERL_LOADING_FILE_ENABLED()) {                          \
43         const char *tmp_name = name;                    \
44         PERL_LOADING_FILE(tmp_name);                            \
45     }
46
47 #    define LOADED_FILE_PROBE(name)                             \
48     if (PERL_LOADED_FILE_ENABLED()) {                           \
49         const char *tmp_name = name;                    \
50         PERL_LOADED_FILE(tmp_name);                             \
51     }
52
53 #  else
54
55 #    define ENTRY_PROBE(func, file, line, stash)        \
56     if (PERL_SUB_ENTRY_ENABLED()) {                     \
57         PERL_SUB_ENTRY(func, file, line, stash);        \
58     }
59
60 #    define RETURN_PROBE(func, file, line, stash)       \
61     if (PERL_SUB_RETURN_ENABLED()) {                    \
62         PERL_SUB_RETURN(func, file, line, stash);       \
63     }
64
65 #    define OP_ENTRY_PROBE(name)                        \
66     if (PERL_OP_ENTRY_ENABLED()) {                      \
67         PERL_OP_ENTRY(name);                            \
68     }
69
70 #    define LOADING_FILE_PROBE(name)                            \
71     if (PERL_LOADING_FILE_ENABLED()) {                          \
72         PERL_LOADING_FILE(name);                                        \
73     }
74
75 #    define LOADED_FILE_PROBE(name)                             \
76     if (PERL_LOADED_FILE_ENABLED()) {                           \
77         PERL_LOADED_FILE(name);                                         \
78     }
79
80 #  endif
81
82 #  define PHASE_CHANGE_PROBE(new_phase, old_phase)      \
83     if (PERL_PHASE_CHANGE_ENABLED()) {                  \
84         PERL_PHASE_CHANGE(new_phase, old_phase);        \
85     }
86
87 #else
88
89 /* NOPs */
90 #  define ENTRY_PROBE(func, file, line, stash)
91 #  define RETURN_PROBE(func, file, line, stash)
92 #  define PHASE_CHANGE_PROBE(new_phase, old_phase)
93 #  define OP_ENTRY_PROBE(name)
94 #  define LOADING_FILE_PROBE(name)
95 #  define LOADED_FILE_PROBE(name)
96
97 #endif
98
99 /*
100  * Local variables:
101  * c-indentation-style: bsd
102  * c-basic-offset: 4
103  * indent-tabs-mode: nil
104  * End:
105  *
106  * ex: set ts=8 sts=4 sw=4 et:
107  */