For macppc, add missing CFI for cr2, cr3, cr4
authorgkoehler <gkoehler@openbsd.org>
Sun, 3 Mar 2024 03:09:39 +0000 (03:09 +0000)
committergkoehler <gkoehler@openbsd.org>
Sun, 3 Mar 2024 03:09:39 +0000 (03:09 +0000)
clang -S was missing a line like ".cfi_offset cr2, -16" in functions
that spill cr2 (or cr3, cr4) to the stack.  This was breaking a few
C++ exceptions.  This fix adds the missing CFI.

This will fix the C++ exception that was crashing egdb from
ports/devel/gdb when you did "q to quit" in the pager.

ok kettenis@ tobhe@

gnu/llvm/llvm/lib/Target/PowerPC/PPCFrameLowering.cpp

index bb6a46b..7e54778 100644 (file)
@@ -1193,12 +1193,6 @@ void PPCFrameLowering::emitPrologue(MachineFunction &MF,
       if ((Reg == PPC::X2 || Reg == PPC::R2) && MustSaveTOC)
         continue;
 
-      // For SVR4, don't emit a move for the CR spill slot if we haven't
-      // spilled CRs.
-      if (isSVR4ABI && (PPC::CR2 <= Reg && Reg <= PPC::CR4)
-          && !MustSaveCR)
-        continue;
-
       // For 64-bit SVR4 when we have spilled CRs, the spill location
       // is SP+8, not a frame-relative slot.
       if (isSVR4ABI && isPPC64 && (PPC::CR2 <= Reg && Reg <= PPC::CR4)) {