[libunwind] r276462 - Merging r276215:
Eric Fiselier via cfe-commits
cfe-commits at lists.llvm.org
Fri Jul 22 13:04:56 PDT 2016
Author: ericwf
Date: Fri Jul 22 15:04:56 2016
New Revision: 276462
URL: http://llvm.org/viewvc/llvm-project?rev=276462&view=rev
Log:
Merging r276215:
------------------------------------------------------------------------
r276215 | ericwf | 2016-07-20 17:56:42 -0600 (Wed, 20 Jul 2016) | 9 lines
[libunwind] Properly align _Unwind_Exception.
Summary: _Unwind_Exception is required to be double word aligned. Currently the struct is under aligned.
Reviewers: mclow.lists, compnerd, kledzik, emaste
Subscribers: emaste, cfe-commits
Differential Revision: https://reviews.llvm.org/D22543
------------------------------------------------------------------------
Added:
libunwind/branches/release_39/test/alignment.pass.cpp
Modified:
libunwind/branches/release_39/include/unwind.h
Modified: libunwind/branches/release_39/include/unwind.h
URL: http://llvm.org/viewvc/llvm-project/libunwind/branches/release_39/include/unwind.h?rev=276462&r1=276461&r2=276462&view=diff
==============================================================================
--- libunwind/branches/release_39/include/unwind.h (original)
+++ libunwind/branches/release_39/include/unwind.h Fri Jul 22 15:04:56 2016
@@ -122,13 +122,16 @@ struct _Unwind_Exception {
uintptr_t private_1; // non-zero means forced unwind
uintptr_t private_2; // holds sp that phase1 found for phase2 to use
#ifndef __LP64__
- // The gcc implementation of _Unwind_Exception used attribute mode on the
- // above fields which had the side effect of causing this whole struct to
+ // The implementation of _Unwind_Exception uses an attribute mode on the
+ // above fields which has the side effect of causing this whole struct to
// round up to 32 bytes in size. To be more explicit, we add pad fields
// added for binary compatibility.
uint32_t reserved[3];
#endif
-};
+ // The Itanium ABI requires that _Unwind_Exception objects are "double-word
+ // aligned". GCC has interpreted this to mean "use the maximum useful
+ // alignment for the target"; so do we.
+} __attribute__((__aligned__));
typedef _Unwind_Reason_Code (*_Unwind_Stop_Fn)
(int version,
Added: libunwind/branches/release_39/test/alignment.pass.cpp
URL: http://llvm.org/viewvc/llvm-project/libunwind/branches/release_39/test/alignment.pass.cpp?rev=276462&view=auto
==============================================================================
--- libunwind/branches/release_39/test/alignment.pass.cpp (added)
+++ libunwind/branches/release_39/test/alignment.pass.cpp Fri Jul 22 15:04:56 2016
@@ -0,0 +1,21 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+// The Itanium ABI requires that _Unwind_Exception objects are "double-word
+// aligned".
+
+#include <unwind.h>
+
+struct MaxAligned {} __attribute__((aligned));
+static_assert(alignof(_Unwind_Exception) == alignof(MaxAligned), "");
+
+int main()
+{
+}
More information about the cfe-commits
mailing list