Add another (and hopefully the last) exception case, where once we recalculate
authorBill Wendling <isanbard@gmail.com>
Fri, 26 Feb 2010 00:43:54 +0000 (00:43 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 26 Feb 2010 00:43:54 +0000 (00:43 +0000)
the alignment requirement, if it no longer makes the TType base offset overflow
into extra bytes, then we need to pad to those bytes ourselves.

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

lib/CodeGen/AsmPrinter/DwarfException.cpp

index c3cbd62365a6559399f655f0ca4fa1c37bfb80c8..99d235cf31b6a8b663d63e0fdf230dc36e4ea55b 100644 (file)
@@ -762,9 +762,16 @@ void DwarfException::EmitExceptionTable() {
       SizeAlign -= TTypeBaseOverflow;
     }
 
-    if (!TTypeBaseOverflow || SizeAlign != 0)
-      EmitULEB128(Offset, "@TType base offset");
-    else
+    if (!TTypeBaseOverflow) {
+      EmitULEB128(TTypeBaseOffset + SizeAlign, "@TType base offset");
+    } else if (SizeAlign != 0) {
+      // If the new "offset + alignment" size doesn't require extra the same
+      // extra padding that the original one did, then we need to insert that
+      // padding ourselves.
+      EmitULEB128(TTypeBaseOffset + SizeAlign, "@TType base offset",
+                  MCAsmInfo::getULEB128Size(TTypeBaseOffset + SizeAlign) !=
+                  OffsetSize ? TTypeBaseOverflow : 0);
+    } else {
       // If adding the extra padding to this offset causes it to buffer to the
       // size of the padding needed, then we should perform the padding here and
       // not at the call site table below. E.g. if we have this:
@@ -790,6 +797,7 @@ void DwarfException::EmitExceptionTable() {
       //
       // and not with padding on the "Call site table length" entry.
       EmitULEB128(TTypeBaseOffset, "@TType base offset", TTypeBaseOverflow);
+    }
   }
 
   // SjLj Exception handling