X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/5ac1e9b286b068746476878a8a6206b06828a175..7ff1117359e03ce00638e9ee1daad537321e75d6:/mydtrace.h diff --git a/mydtrace.h b/mydtrace.h index daabcfa..5093f46 100644 --- a/mydtrace.h +++ b/mydtrace.h @@ -1,6 +1,6 @@ /* mydtrace.h * - * Copyright (C) 2008, by Larry Wall and others + * Copyright (C) 2008, 2010, 2011 by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -13,21 +13,80 @@ # include "perldtrace.h" -# define ENTRY_PROBE(func, file, line) \ - if (PERL_SUB_ENTRY_ENABLED()) { \ - PERL_SUB_ENTRY(func, file, line); \ +# 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); \ + } + +# define LOADING_FILE_PROBE(name) \ + if (PERL_LOADING_FILE_ENABLED()) { \ + const char *tmp_name = name; \ + PERL_LOADING_FILE(tmp_name); \ + } + +# define LOADED_FILE_PROBE(name) \ + if (PERL_LOADED_FILE_ENABLED()) { \ + const char *tmp_name = name; \ + PERL_LOADED_FILE(tmp_name); \ + } + +# 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) \ + if (PERL_SUB_RETURN_ENABLED()) { \ + PERL_SUB_RETURN(func, file, line, stash); \ + } + +# define LOADING_FILE_PROBE(name) \ + if (PERL_LOADING_FILE_ENABLED()) { \ + PERL_LOADING_FILE(name); \ + } + +# define LOADED_FILE_PROBE(name) \ + if (PERL_LOADED_FILE_ENABLED()) { \ + PERL_LOADED_FILE(name); \ + } + +# endif + +# define OP_ENTRY_PROBE(name) \ + if (PERL_OP_ENTRY_ENABLED()) { \ + PERL_OP_ENTRY(name); \ } -# define RETURN_PROBE(func, file, line) \ - if (PERL_SUB_RETURN_ENABLED()) { \ - PERL_SUB_RETURN(func, file, line); \ +# define PHASE_CHANGE_PROBE(new_phase, old_phase) \ + if (PERL_PHASE_CHANGE_ENABLED()) { \ + PERL_PHASE_CHANGE(new_phase, old_phase); \ } #else /* NOPs */ -# define ENTRY_PROBE(func, file, line) -# define RETURN_PROBE(func, file, line) +# define ENTRY_PROBE(func, file, line, stash) +# define RETURN_PROBE(func, file, line, stash) +# define PHASE_CHANGE_PROBE(new_phase, old_phase) +# define OP_ENTRY_PROBE(name) +# define LOADING_FILE_PROBE(name) +# define LOADED_FILE_PROBE(name) #endif @@ -35,8 +94,8 @@ * Local variables: * c-indentation-style: bsd * c-basic-offset: 4 - * indent-tabs-mode: t + * indent-tabs-mode: nil * End: * - * ex: set ts=8 sts=4 sw=4 noet: + * ex: set ts=8 sts=4 sw=4 et: */