The CIE says that the LSDA point in the FDE section is an "sdata4". That's fine,
authorBill Wendling <isanbard@gmail.com>
Mon, 14 Dec 2009 21:49:44 +0000 (21:49 +0000)
committerBill Wendling <isanbard@gmail.com>
Mon, 14 Dec 2009 21:49:44 +0000 (21:49 +0000)
but we need it to actually be 4-bytes in the FDE.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91337 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfException.cpp

index 1c8b8f46472091123fe6e237dde38e3ea58ef50b..3fd077f68731fa934298ba1fb4f8b483e7e93a32 100644 (file)
@@ -292,14 +292,13 @@ void DwarfException::EmitFDE(const FunctionEHFrameInfo &EHFrameInfo) {
       Asm->EmitULEB128Bytes(is4Byte ? 4 : 8);
       Asm->EOL("Augmentation size");
 
+      // We force 32-bits here because we've encoded our LSDA in the CIE with
+      // `dwarf::DW_EH_PE_sdata4'. And the CIE and FDE should agree.
       if (EHFrameInfo.hasLandingPads)
-        EmitReference("exception", EHFrameInfo.Number, true, false);
-      else {
-        if (is4Byte)
-          Asm->EmitInt32((int)0);
-        else
-          Asm->EmitInt64((int)0);
-      }
+        EmitReference("exception", EHFrameInfo.Number, true, true);
+      else
+        Asm->EmitInt32((int)0);
+
       Asm->EOL("Language Specific Data Area");
     } else {
       Asm->EmitULEB128Bytes(0);