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?