Bug#869122: perl: 5.26 FTBFS on hppa: broken miniperl?
John David Anglin
dave.anglin at bell.net
Sun Jul 23 20:14:17 UTC 2017
On 2017-07-20, at 10:23 PM, John David Anglin wrote:
> On 2017-07-20, at 1:45 PM, Niko Tyni wrote:
>
>> so it looks like something's seriously wrong.
>
> It looks like miniperl branches to non existent code:
>
> Jul 20 20:18:48 mx3210 kernel: do_page_fault() command='miniperl' type=6 address=0xbf600703 in libcrypt-2.24.so[f77f9000+9000]
> Jul 20 20:18:48 mx3210 kernel: trap #6: Instruction TLB miss fault, vm_start = 0x001e3000, vm_end = 0x005b4000
>
> 0x0002eac8 <Perl_rpeep+2896>: b,l 0x1a8d0 <Perl_custom_op_get_field>,rp
> 0x0002eacc <Perl_rpeep+2900>: copy r4,r26
> 0x0002ead0 <Perl_rpeep+2904>: movb,= ret0,r22,0x2e284 <Perl_rpeep+780>
> 0x0002ead4 <Perl_rpeep+2908>: copy r3,r25
> 0x0002ead8 <Perl_rpeep+2912>: copy r15,r24
> 0x0002eadc <Perl_rpeep+2916>: copy r4,r26
> 0x0002eae0 <Perl_rpeep+2920>: b,l 0x3b218,r31
> 0x0002eae4 <Perl_rpeep+2924>: copy r31,rp
>
> The branch seems from 2eae0 which might be here:
>
> (gdb) break *0x0002eae0
> Breakpoint 1 at 0x2eae0: file op.c, line 14791.
>
> 0x0002eae4 14791 cpeep(aTHX_ o, oldop);
I stepped manually through the last call to Perl_rpeep.
(gdb) step
13595 if (!o || o->op_opt)
(gdb)
Perl_rpeep (my_perl=0x1e3008, o=0x5aee98) at op.c:13600
13600 ENTER;
(gdb)
13601 SAVEOP();
(gdb)
13602 SAVEVPTR(PL_curcop);
(gdb)
14355 if (oldop->op_type == OP_NEXTSTATE) {
(gdb)
14346 || o->op_next->op_type == OP_RV2AV
(gdb)
13602 SAVEVPTR(PL_curcop);
(gdb)
13592 int defer_base = 0;
(gdb)
13590 OP* oldoldop = NULL;
(gdb)
13589 OP* oldop = NULL;
(gdb)
14355 if (oldop->op_type == OP_NEXTSTATE) {
(gdb)
14346 || o->op_next->op_type == OP_RV2AV
(gdb)
13773 : MDEREF_HV_pop_rv2hv_helem;
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
13835 ||OP_TYPE_IS(sibling->op_next->op_next,
(gdb)
13624 o->op_opt = 1;
(gdb)
13647 switch (o2->op_type) {
(gdb)
13625 PL_op = o;
(gdb)
13647 switch (o2->op_type) {
(gdb)
14426 while (cLOGOP->op_other->op_type == OP_NULL)
(gdb)
14428 DEFER(cLOGOP->op_other);
(gdb)
14456 DEFER(cPMOP->op_pmstashstartu.op_pmreplstart);
(gdb)
14457 break;
(gdb)
14798 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
13835 ||OP_TYPE_IS(sibling->op_next->op_next,
(gdb)
13624 o->op_opt = 1;
(gdb)
13647 switch (o2->op_type) {
(gdb)
13625 PL_op = o;
(gdb)
13647 switch (o2->op_type) {
(gdb)
13807 switch (o->op_type) {
(gdb)
Perl_rpeep (my_perl=0x1e3008, o=0x5aeedc) at op.c:13807
13807 switch (o->op_type) {
(gdb)
14798 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
13835 ||OP_TYPE_IS(sibling->op_next->op_next,
(gdb)
13624 o->op_opt = 1;
(gdb)
13647 switch (o2->op_type) {
(gdb)
13625 PL_op = o;
(gdb)
13647 switch (o2->op_type) {
(gdb)
14798 if (o->op_type == OP_NULL && oldop && oldop->op_next == o) {
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
14318 (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127)
(gdb)
13604 if (o && o->op_opt)
(gdb)
13835 ||OP_TYPE_IS(sibling->op_next->op_next,
(gdb)
13624 o->op_opt = 1;
(gdb)
13647 switch (o2->op_type) {
(gdb)
13625 PL_op = o;
(gdb)
13647 switch (o2->op_type) {
(gdb)
14789 XopENTRYCUSTOM(o, xop_peep);
(gdb)
Perl_custom_op_get_field (my_perl=my_perl at entry=0x1e3008, o=o at entry=0x5aee38,
field=field at entry=XOPe_xop_peep) at op.c:14847
14847 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
(gdb)
14831 {
(gdb)
14847 keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr)));
(gdb)
14849 if (PL_custom_ops)
(gdb)
Perl_custom_op_get_field (my_perl=0x1e3008, o=0x5aee38, field=XOPe_xop_peep)
at op.c:14853
14853 if (!he && PL_custom_op_names &&
(gdb)
14879 if(field == XOPe_xop_ptr) {
(gdb)
14902 switch(field) {
(gdb)
14884 switch(field) {
(gdb)
Perl_custom_op_get_field (my_perl=0x1e3008, o=0x5aee38, field=XOPe_xop_peep)
at op.c:14896
14896 break;
(gdb)
Perl_custom_op_get_field (my_perl=my_perl at entry=0x1e3008, o=o at entry=0x5aee38,
field=field at entry=XOPe_xop_peep) at op.c:14929
14929 }
(gdb)
Perl_rpeep (my_perl=0x1e3008, o=0x5aee38) at op.c:14790
14790 if (cpeep)
(gdb)
14791 cpeep(aTHX_ o, oldop);
(gdb)
Thread 2.1 "miniperl" hit Breakpoint 2, 0x0002eae0 in Perl_rpeep (
my_perl=0x1e3008, o=0x5aee38) at op.c:14791
14791 cpeep(aTHX_ o, oldop);
(gdb) ptype cpeep
type = void (*)(PerlInterpreter *, OP *, OP *)
(gdb) p/x cpeep
$1 = 0xbf600701
(gdb) p o
$3 = (OP *) 0x5aee38
(gdb) p *o
$4 = {op_next = 0x0, op_sibparent = 0x5aee14,
op_ppaddr = @0x1e2016: 0xd07ac <Perl_pp_null>, op_targ = 0, op_type = 382,
op_opt = 1, op_slabbed = 1, op_savefree = 0, op_static = 0, op_folded = 0,
op_moresib = 0, op_spare = 0, op_flags = 7 '\a', op_private = 1 '\001'}
Problem is probably in Perl_custom_op_get_field. Need to figure out why it returns 0xbf600701.
Dave
--
John David Anglin dave.anglin at bell.net
More information about the Perl-maintainers
mailing list