On hppa, the seg-fault during rebuild of Puma happens in CSyntax::identifier. Here's an annotated disassembly of the function (and inlined callees) up to the failing instruction:
bool CSyntax::identifier () {
return predict_1 (_identifier_1) && parse (&CSyntax::rule_identifier);
0x0013c3e4 <Puma::Syntax::identifier()+0>: stw rp,-14(sp)
0x0013c3e8 <Puma::Syntax::identifier()+4>: ldil L%8000,r19
0x0013c3ec <Puma::Syntax::identifier()+8>: ldo 80(sp),sp
0x0013c3f0 <Puma::Syntax::identifier()+12>: stw r3,-68(sp)
-> inline bool CSyntax::predict_1 (const tokenset &ts) {
return ts[look_ahead ()];
-> inline int Syntax::look_ahead () const {
Token *token = token_provider->current ();
// get this->token_provider
0x0013c3f4 <Puma::Syntax::identifier()+16>: ldw 14(r26),ret0
0x0013c3f8 <Puma::Syntax::identifier()+20>: add,l ret0,r19,ret0
-> Token *current () const { return *_read_pos; }
0x0013c3fc <Puma::Syntax::identifier()+24>: copy r26,r3
0x0013c400 <Puma::Syntax::identifier()+28>: ldw 18(ret0),r20
0x0013c404 <Puma::Syntax::identifier()+32>: ldi 1,r21
0x0013c408 <Puma::Syntax::identifier()+36>: ldw 0(r20),r20
return token ? token->type () : 0;
0x0013c40c <Puma::Syntax::identifier()+40>: cmpib,= 0,r20,0x13c42c
<_ZN4Puma7CSyntax10identifierEv+72>
-> int type () const { return _type; }
0x0013c410 <Puma::Syntax::identifier()+44>: ldi 0,ret0
0x0013c414 <Puma::Syntax::identifier()+48>: ldw 10(r20),ret0
<-
<-
// split token type into word index and bit index
0x0013c418 <Puma::Syntax::identifier()+52>: extrw,u ret0,31,5,r19
0x0013c41c <Puma::Syntax::identifier()+56>: extrw,u ret0,26,27,ret0
0x0013c420 <Puma::Syntax::identifier()+60>: subi 1f,r19,r19
0x0013c424 <Puma::Syntax::identifier()+64>: mtsar r19
0x0013c428 <Puma::Syntax::identifier()+68>: depw,z r21,sar,32,r21
0x0013c42c <Puma::Syntax::identifier()+72>: shladd,l ret0,2,r3,r19
// fetch right word of _identifier_1 bitfield
0x0013c430 <Puma::Syntax::identifier()+76>: ldw 2e8(r19),ret0
At this point r19 is way out of range. So for some reason the token
returned by Puma::TokenProvider::current() is invalid.
Ben.
--
Ben Hutchings
Who are all these weirdos? - David Bowie, about L-Space IRC channel #afp
signature.asc
Description: Digital signature

