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

Attachment: signature.asc
Description: Digital signature

Reply via email to