Commit 765e9c1d authored by Eric Fiselier's avatar Eric Fiselier
Browse files

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
------------------------------------------------------------------------

llvm-svn: 276462
parent e24755b5
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -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,
+21 −0
Original line number Diff line number Diff line
// -*- 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()
{
}