summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src/cxa_exception.hpp
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2017-11-28 00:36:29 +0000
committerAkira Hatanaka <ahatanaka@apple.com>2017-11-28 00:36:29 +0000
commit9ef1daa46edb80c47d0486148c0afc4e0d83ddcf (patch)
treef587cb6856f5123ca57d25309d50ac2879e111ae /libcxxabi/src/cxa_exception.hpp
parentce732e7c30e1b4ac18dfec4b347e486a3a66a8b0 (diff)
downloadbcm5719-llvm-9ef1daa46edb80c47d0486148c0afc4e0d83ddcf.tar.gz
bcm5719-llvm-9ef1daa46edb80c47d0486148c0afc4e0d83ddcf.zip
Insert padding before the __cxa_exception header to ensure the thrown
object is sufficiently aligned. r303175 annotated field unwindHeader of __cxa_exception with attribute 'aligned' to ensure the thrown object following the __cxa_exception header was sufficiently aligned. This caused changes in the field offsets of __cxa_exception relative to the start of the thrown object, which was an ABI breaking change for some clients. Instead of annotating field unwindHeader, this commit inserts extra space before the header. This ensures the thrown object following the header is sufficiently aligned without changing the field offsets, thus avoiding any ABI breakages. rdar://problem/25364625 rdar://problem/35556163 llvm-svn: 319123
Diffstat (limited to 'libcxxabi/src/cxa_exception.hpp')
-rw-r--r--libcxxabi/src/cxa_exception.hpp22
1 files changed, 0 insertions, 22 deletions
diff --git a/libcxxabi/src/cxa_exception.hpp b/libcxxabi/src/cxa_exception.hpp
index b9f74e3b0bb..c8b0fb1678e 100644
--- a/libcxxabi/src/cxa_exception.hpp
+++ b/libcxxabi/src/cxa_exception.hpp
@@ -60,22 +60,7 @@ struct _LIBCXXABI_HIDDEN __cxa_exception {
// previously adding padded to 64-bit align unwindHeader.
size_t referenceCount;
#endif
-
- // This field is annotated with attribute aligned so that the exception
- // object following the field is sufficiently aligned and there is no
- // gap between the field and the exception object. r276215 made a change to
- // annotate _Unwind_Exception in unwind.h with __attribute__((aligned)), but
- // we cannot incorporate the fix on Darwin since it is an ABI-breaking
- // change, which is why we need the attribute on this field.
- //
- // For ARM EHABI, we do not align this field since _Unwind_Exception is an
- // alias of _Unwind_Control_Block, which is not annotated with
- // __attribute__((aligned).
-#if defined(_LIBCXXABI_ARM_EHABI)
_Unwind_Exception unwindHeader;
-#else
- _Unwind_Exception unwindHeader __attribute__((aligned));
-#endif
};
// http://sourcery.mentor.com/archives/cxx-abi-dev/msg01924.html
@@ -109,14 +94,7 @@ struct _LIBCXXABI_HIDDEN __cxa_dependent_exception {
#if !defined(__LP64__) && !defined(_LIBCXXABI_ARM_EHABI)
void* primaryException;
#endif
-
- // See the comment in __cxa_exception as to why this field has attribute
- // aligned.
-#if defined(_LIBCXXABI_ARM_EHABI)
_Unwind_Exception unwindHeader;
-#else
- _Unwind_Exception unwindHeader __attribute__((aligned));
-#endif
};
struct _LIBCXXABI_HIDDEN __cxa_eh_globals {
OpenPOWER on IntegriCloud