diff options
-rw-r--r-- | mydtrace.h | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/mydtrace.h b/mydtrace.h index a7a4e470c6..01732742e4 100644 --- a/mydtrace.h +++ b/mydtrace.h @@ -13,16 +13,39 @@ # include "perldtrace.h" -# define ENTRY_PROBE(func, file, line, stash) \ +# if defined(STAP_PROBE_ADDR) && !defined(DEBUGGING) + +/* SystemTap 1.2 uses a construct that chokes on passing a char array + * as a char *, in this case hek_key in struct hek. Workaround it + * with a temporary. + */ + +# define ENTRY_PROBE(func, file, line, stash) \ + if (PERL_SUB_ENTRY_ENABLED()) { \ + const char *tmp_func = func; \ + PERL_SUB_ENTRY(tmp_func, file, line, stash); \ + } + +# define RETURN_PROBE(func, file, line, stash) \ + if (PERL_SUB_RETURN_ENABLED()) { \ + const char *tmp_func = func; \ + PERL_SUB_RETURN(tmp_func, file, line, stash); \ + } + +# else + +# define ENTRY_PROBE(func, file, line, stash) \ if (PERL_SUB_ENTRY_ENABLED()) { \ PERL_SUB_ENTRY(func, file, line, stash); \ } -# define RETURN_PROBE(func, file, line, stash) \ +# define RETURN_PROBE(func, file, line, stash) \ if (PERL_SUB_RETURN_ENABLED()) { \ PERL_SUB_RETURN(func, file, line, stash); \ } +# endif + # define PHASE_CHANGE_PROBE(new_phase, old_phase) \ if (PERL_PHASE_CHANGE_ENABLED()) { \ PERL_PHASE_CHANGE(new_phase, old_phase); \ |