This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
rename and function-ise dtrace macros
authorDavid Mitchell <davem@iabyn.com>
Mon, 15 Feb 2016 13:48:24 +0000 (13:48 +0000)
committerDavid Mitchell <davem@iabyn.com>
Fri, 18 Mar 2016 23:45:25 +0000 (23:45 +0000)
commit3f6bd23a1b9204dda7aaaef6efe17dc87f50a675
tree3d11776a33725904ad8cc55dd664d693a7c0b7dd
parent5fa8e144165a5c086facccf35630b9c4a781c4ad
rename and function-ise dtrace macros

This commit:

1. Renames the various dtrace probe macros into a consistent and
self-documenting pattern, e.g.

ENTRY_PROBE  => PERL_DTRACE_PROBE_ENTRY
RETURN_PROBE => PERL_DTRACE_PROBE_RETURN

Since they're supposed to be defined only under PERL_CORE, this shouldn't
break anything that's not being naughty.

2. Implement the main body of these macros using a real function.

They were formerly defined along the lines of

    if (PERL_SUB_ENTRY_ENABLED())
        PERL_SUB_ENTRY(...);

The PERL_SUB_ENTRY() part is a macro generated by the dtrace system, which
for example on linux expands to a large bunch of assembly directives.
Replace the direct macro with a function wrapper, e.g.

    if (PERL_SUB_ENTRY_ENABLED())
        Perl_dtrace_probe_call(aTHX_ cv, TRUE);

This reduces to once the number of times the macro is expanded.

The new functions also take simpler args and then process the values they
need using intermediate temporary vars to avoid huge macro expansions.

For example

    ENTRY_PROBE(CvNAMED(cv)
                    ? HEK_KEY(CvNAME_HEK(cv))
                    : GvENAME(CvGV(cv)),
                CopFILE((const COP *)CvSTART(cv)),
                CopLINE((const COP *)CvSTART(cv)),
                CopSTASHPV((const COP *)CvSTART(cv)));

is now

    PERL_DTRACE_PROBE_ENTRY(cv);

This reduces the executable size by 1K on -O2 -Dusedtrace builds,
and by 45K on -DDEBUGGING -Dusedtrace builds.
dump.c
embed.fnc
inline.h
makedef.pl
mydtrace.h
perl.h
pp_ctl.c
proto.h
run.c
util.c