diff options
author | Daniel Dragan <bulk88@hotmail.com> | 2015-07-30 02:00:07 -0400 |
---|---|---|
committer | Tony Cook <tony@develop-help.com> | 2015-08-12 14:49:55 +1000 |
commit | 9b669ea1e2997fbb78558e1fc0a7ecae3aa23af0 (patch) | |
tree | d48eb3f5011d45122e6976a92177c6a118651405 | |
parent | 9728ed0a4dcaca9d7fddf6ce9c5736ed3aacd487 (diff) | |
download | perl-9b669ea1e2997fbb78558e1fc0a7ecae3aa23af0.tar.gz |
dont create *{"_<$filename"} globs for perl lang debugging of XSUBs
1st problem, *{"_<$filename"} globs aren't created for PP code unless
PERLDB_LINE || PERLDB_SAVESRC are on (see Perl_yylex ). Creating XSUBs
unconditionally created the *{"_<$filename"} globs for XSUB, even if PP
subs were not getting the debugging globs created. This is probably an
oversight, from commit b195d4879f which tried to deprecate using
the *{"_<$filename"} GVs for storing the originating filename of the CV
which was partially reverted 2 months later in commit 57843af05b with
CvFILE becoming a char * instead of GV *. To speed up XSUB registration
time, and decrease memory when not in Perl lang debugging mode dont create
the debugging globs for XSUBs unless in Perl lang debugging mode.
see also
http://www.nntp.perl.org/group/perl.perl5.porters/2000/06/msg13832.html
2nd problem, since the perl debugger can't step into C code, nor set
breakpoints in it, there is no reason to create *{"_<$filename"} globs
for .c files. Since someone maybe one day might try to implement that
feature, comment out the code instead of deleting it. This will slightly
reduce the size of perl binary, and speed up XSUB registration time, and
decrease memory usage when using the Perl debugger.
see also (no responses)
http://www.nntp.perl.org/group/perl.perl5.porters/2015/06/msg229014.html
perl has a number of core perma-XSUBs
(UNIVERSAL/PerlIO/DynaLoader/Internals/mro/misc const subs/etc). Each of
these previously got a "_<foo.c" glob. I counted 7 .c debugging globs on
my perl. This commit, before on WinXP, running threaded perl with
-e"system 'pause'" as a sample script, "Private Bytes" (all process
unique memory, IE not shared, not mmaped) was 488 KB, after this commit
it was 484 KB, which means that enough malloc memory was saved plus a
little bit of chance, to cross one 4 KB page of memory. IDK the exact
amount of saved memory is over or under 4KB.
-rw-r--r-- | gv.c | 4 | ||||
-rw-r--r-- | op.c | 4 | ||||
-rw-r--r-- | pod/perldelta.pod | 8 | ||||
-rw-r--r-- | util.c | 4 |
4 files changed, 16 insertions, 4 deletions
@@ -572,7 +572,9 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, } CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE from PL_curcop. */ - (void)gv_fetchfile(file); + /* XSUBs can't be perl lang/perl5db.pl debugged + if (PERLDB_LINE_OR_SAVESRC) + (void)gv_fetchfile(file); */ CvFILE(cv) = (char *)file; /* XXX This is inefficient, as doing things this order causes a prototype check in newATTRSUB. But we have to do @@ -9116,7 +9116,9 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, CvGV_set(cv, gv); if(filename) { - (void)gv_fetchfile(filename); + /* XSUBs can't be perl lang/perl5db.pl debugged + if (PERLDB_LINE_OR_SAVESRC) + (void)gv_fetchfile(filename); */ assert(!CvDYNFILE(cv)); /* cv_undef should have turned it off */ if (flags & XS_DYNAMIC_FILENAME) { CvDYNFILE_on(cv); diff --git a/pod/perldelta.pod b/pod/perldelta.pod index 6ace170f45..8ae82cf35d 100644 --- a/pod/perldelta.pod +++ b/pod/perldelta.pod @@ -89,7 +89,13 @@ There may well be none in a stable release. =item * -XXX +Creating Perl debugger data structures (see L<perldebguts/"Debugger Internals">) +for XSUBs and const subs has been removed. This removed one glob/scalar combo +for each unique C<.c> file that XSUBs and const subs came from. On startup +(C<perl -e"0">) about half a dozen glob/scalar debugger combos were created. +Loading XS modules created more glob/scalar combos. These things were created +regardless if the perl debugger was being used or not, unlike for pure perl +subs, and ignores that the perl debugger can not debug C code. =back @@ -5452,7 +5452,9 @@ Perl_xs_handshake(const U32 key, void * v_my_perl, const char * file, ...) SAVEPPTR(PL_xsubfilename);/* which was require'd from a XSUB BEGIN */ PL_xsubfilename = file; /* so the old name must be restored for additional XSUBs to register themselves */ - (void)gv_fetchfile(file); + /* XSUBs can't be perl lang/perl5db.pl debugged + if (PERLDB_LINE_OR_SAVESRC) + (void)gv_fetchfile(file); */ } if(key & HSf_POPMARK) { |