This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PERL_DEBUG_READONLY_OPS with the new allocator
authorFather Chrysostomos <sprout@cpan.org>
Tue, 10 Jul 2012 07:26:12 +0000 (00:26 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 12 Jul 2012 20:20:10 +0000 (13:20 -0700)
commit3107b51fb9c191a2ee82450f00c4568640538e12
tree8dd54b1256f71ecfd6cd46f74ba82085dc6cc988
parent8f55039992b2378df3dcb99bb2ec67d80b7c8854
PERL_DEBUG_READONLY_OPS with the new allocator

I want to eliminate the old slab allocator (PL_OP_SLAB_ALLOC),
but this useful debugging tool needs to be rewritten for the new
one first.

This is slightly better than under PL_OP_SLAB_ALLOC, in that CVs cre-
ated after the main CV starts running will get read-only ops, too.  It
is when a CV finishes compiling and relinquishes ownership of the slab
that the slab is made read-only, because at that point it should not
be used again for allocation.

BEGIN blocks are exempt, as they are processed before the Slab_to_ro
call in newATTRSUB.  The Slab_to_ro call must come at the very end,
after LEAVE_SCOPE, because otherwise the ops freed via the stack (the
SAVEFREEOP calls near the top of newATTRSUB) will make the slab writa-
ble again.  At that point, the BEGIN block has already been run and
its slab freed.  Maybe slabs belonging to BEGIN blocks can be made
read-only later.

Under PERL_DEBUG_READONLY_OPS, op slabs have two extra fields to
record the size and readonliness of each slab.  (Only the first slab
in a CV’s slab chain uses the readonly flag, since it is conceptually
simpler to treat them all as one unit.)  Without recording this infor-
mation manually, things become unbearably slow, the tests taking hours
and hours instead of minutes.
embed.fnc
embed.h
intrpvar.h
makedef.pl
op.c
op.h
pad.c
perl.c
proto.h
sv.c