This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

a question about rs6k's prologue analysis


In function skip_prologue of rs6000-tdep.c, when it finds an instruction like "bl foo", and that it is not within the first three instructions of the prologue, the prologue analysis will stop.

      else if ((op & 0xfc000001) == 0x48000001)
        {                       /* bl foo,
                                   to save fprs??? */

          fdata->frameless = 0;
          /* Don't skip over the subroutine call if it is not within
             the first three instructions of the prologue.  */
          if ((pc - fdata->func_start) > 8)
            break;
          ....
         }

Any specific reason for this?

I encountered some prologue code like this:

    61a0:       7c 08 02 a6     mflr    r0
    61a4:       94 21 ff f0     stwu    r1,-16(r1)
    61a8:       93 e1 00 0c     stw     r31,12(r1)
    61ac:       48 01 8a 81     bl      1ec2c <__JCR_END__+0x4>
    61b0:       7f e8 02 a6     mflr    r31
    61b4:       90 01 00 14     stw     r0,20(r1)

In the first instruction, lr is saved in r0, its content is saved on stack at the last instruction. But between these two instruction, a "bl foo" instruction exists, which make skip_prologue return. In this scenario, gdb won't have any way to know where lr is saved on the stack. This might make the backtrace loops at this point.

Could it be possible that we delete this conditional statement? I guess this will only make prologue analysis get a little longer. Any other impact?

Or that some changes in the compiler's side is needed? But now that these code are already there, and it also seems that they work ok, I guess it is not very easy for compiler to change that.

Any insight? Thanks a lot!

Regards
- Wu Zhou


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]