mirror of
https://github.com/Perl/perl5.git
synced 2026-01-26 08:38:23 +00:00
workaround a type handling bug in SystemTap Dtrace 1.2
It uses a construct similar to: __typeof__((func)) x = func; but hek_key is a char[1] so the above becomes: char arg1[1] = func; which is invalid. Using a temporary allows an implicit conversion to const char * and avoids possible bugs that might be hidden by an explicit cast.
This commit is contained in:
parent
44d8286067
commit
ee3ace03a4
27
mydtrace.h
27
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); \
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user