https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108147

--- Comment #3 from Segher Boessenkool <segher at gcc dot gnu.org> ---
>    0x0000000010ffc2e0 <+0>:   lis     r2,4563
>    0x0000000010ffc2e4 <+4>:   addi    r2,r2,29696
>    0x0000000010ffc2e8 <+8>:   mflr    r0
>    0x0000000010ffc2ec <+12>:  std     r30,-16(r1)
>    0x0000000010ffc2f0 <+16>:  std     r31,-8(r1)
>    0x0000000010ffc2f4 <+20>:  std     r0,16(r1)
>    0x0000000010ffc2f8 <+24>:  stdu    r1,-368(r1)
>    0x0000000010ffc2fc <+28>:  vspltisw v0,0
>    0x0000000010ffc300 <+32>:  lis     r11,-32768
>    0x0000000010ffc304 <+36>:  mr      r30,r4
>    0x0000000010ffc308 <+40>:  ori     r11,r11,8
>    0x0000000010ffc30c <+44>:  std     r5,416(r1)
>    0x0000000010ffc310 <+48>:  std     r6,424(r1)
>    0x0000000010ffc314 <+52>:  xxswapd vs0,vs32
>    0x0000000010ffc318 <+56>:  li      r0,0
>    0x0000000010ffc31c <+60>:  clrldi  r11,r11,32
>    0x0000000010ffc320 <+64>:  std     r7,432(r1)
> => 0x0000000010ffc324 <+68>:  std     r8,440(r1)
> overwrites it.
> Now the sizes of the automatic variables in m2linemap_WarningAtf are:
> (gdb) p sizeof (diagnostic)
> $42 = 136
> (gdb) p sizeof (ap)
> $43 = 8
> (gdb) p sizeof (richloc)
> $44 = 168
> sum 312 bytes, the frame is 368 bytes.  But where do those std r{5,6,7,8}
> stores to 4{16,24,32,40}(r1) come from is something I haven't figured out
> yet, probably register saves, but why does that overwrite the saved link
> register?

Those look like register saves yes.  But the saved LR is at 384, not at 440?

Reply via email to