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?