unwind: explicitly align `_Unwind_Control_Block`
authorSaleem Abdulrasool <compnerd@compnerd.org>
Wed, 23 Aug 2017 15:33:45 +0000 (15:33 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Wed, 23 Aug 2017 15:33:45 +0000 (15:33 +0000)
The C++ ABI requires that the exception object is double-word aligned.
The alignment attribute was applied to the `_Unwind_Exception` type
which is used on non-EHABI targets.  On EHABI, the exception object type
is `_Unwind_Control_Block`.  Apply the explicit maximal alignment on the
type to ensure that the allocation has the correct alignment.

Resolves PR33858!

llvm-svn: 311562

libunwind/include/unwind.h

index fc7d122..a1a84e9 100644 (file)
@@ -100,7 +100,7 @@ struct _Unwind_Control_Block {
   } pr_cache;
 
   long long int :0; /* Enforce the 8-byte alignment */
-};
+} __attribute__((__aligned__));
 
 typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
       (_Unwind_State state,