Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Segmentation fault under -d flag

1 view
Skip to first unread message

KES

unread,
Dec 6, 2015, 2:30:02 PM12/6/15
to debu...@perl.org
Hi.

This code woks fine:
package Devel::KP;

our $VERSION = '0.01';


package # hide the package from the PAUSE indexer
DB;

sub sub {
goto &$DB::sub;
}

use Benchmark qw/ cmpthese /;
sub DB {
}

1;


But if I change DB::sub to look like:
sub sub {
print @_;
goto &$DB::sub;
}


I get segfault

Shlomi Fish

unread,
Dec 7, 2015, 9:15:03 AM12/7/15
to KES, debu...@perl.org
Hi KES,

I was able to reduce the code significantly and it seems to be caused by
Time::HiRes:

https://github.com/shlomif/perl5-Time-HiRes-perl-d-segfault

I was also able to reproduce it on the latest bleadperl. I'm going to report
this bug.

Thanks!

Regards,

Shlomi Fish
--
-----------------------------------------------------------------
Shlomi Fish http://www.shlomifish.org/
Perl Humour - http://perl-begin.org/humour/

To have bugs is human; to fix them — divine.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

KES

unread,
Dec 9, 2015, 6:15:02 AM12/9/15
to Shlomi Fish, debu...@perl.org
Here the another 'segmentation fault'

$cat t.pl
my $x;

$ cat Devel/PkgATCompileTime;
package Devel::PkgAtCompileTime;

use Devel::ImportArgs;

1;

$cat Devel/ImportArgs;
package Devel::ImportArgs;


sub import {
}



package # hide the package from the PAUSE indexer
DB;

use Package::Stash;
my $this = Package::Stash->new( 'DB' );

sub sub {
# I feel this is a crazy thing and I should not do it here. But occasionally I have did it.
my $all = $this->get_all_symbols;
&$DB::sub;
}


sub DB {
}

1;


$ perl -d:PkgAtCompileTime t.pl
Segmentation fault



07.12.2015, 16:05, "Shlomi Fish" <shl...@shlomifish.org>:

KES

unread,
Dec 9, 2015, 6:30:02 AM12/9/15
to Shlomi Fish, debu...@perl.org
That is because program run into recursion:
Package::Stash::XS::namespace
Package::Stash::XS::namespace
Package::Stash::XS::namespace
Package::Stash::XS::namespace
Segmentation fault

http://search.cpan.org/~abigail/perl-5.23.5/pod/perlvar.pod#$^P
Actually I should disable first bit:
local $^P = $^P & ~1
my $all = $this->get_all_symbols;

but the $^P does not work at runtime. Because the 'JMP' ops are created at compile time.
but the perl may check first $^P bit at run time. And if it is not set do not pass control to DB::sub/lsub/goto. And in compile time create 'JMP' not to DB::sub but to the
DB::_sub {
&DB::sub if $^P & 1;
}
same code for goto and lsub.

This seems simple to fix.

09.12.2015, 13:07, "KES" <kes...@yandex.ua>:
0 new messages