aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/libcxxrt/exception.cc30
1 files changed, 6 insertions, 24 deletions
diff --git a/contrib/libcxxrt/exception.cc b/contrib/libcxxrt/exception.cc
index 0de878e9e6db..0fb26ddb4ed2 100644
--- a/contrib/libcxxrt/exception.cc
+++ b/contrib/libcxxrt/exception.cc
@@ -572,19 +572,6 @@ static void free_exception(char *e)
}
}
-#ifdef __LP64__
-/**
- * There's an ABI bug in __cxa_exception: unwindHeader requires 16-byte
- * alignment but it was broken by the addition of the referenceCount.
- * The unwindHeader is at offset 0x58 in __cxa_exception. In order to keep
- * compatibility with consumers of the broken __cxa_exception, explicitly add
- * padding on allocation (and account for it on free).
- */
-static const int exception_alignment_padding = 8;
-#else
-static const int exception_alignment_padding = 0;
-#endif
-
/**
* Allocates an exception structure. Returns a pointer to the space that can
* be used to store an object of thrown_size bytes. This function will use an
@@ -593,19 +580,16 @@ static const int exception_alignment_padding = 0;
*/
extern "C" void *__cxa_allocate_exception(size_t thrown_size)
{
- size_t size = exception_alignment_padding + sizeof(__cxa_exception) +
- thrown_size;
+ size_t size = thrown_size + sizeof(__cxa_exception);
char *buffer = alloc_or_die(size);
- return buffer + exception_alignment_padding + sizeof(__cxa_exception);
+ return buffer+sizeof(__cxa_exception);
}
extern "C" void *__cxa_allocate_dependent_exception(void)
{
- size_t size = exception_alignment_padding +
- sizeof(__cxa_dependent_exception);
+ size_t size = sizeof(__cxa_dependent_exception);
char *buffer = alloc_or_die(size);
- return buffer + exception_alignment_padding +
- sizeof(__cxa_dependent_exception);
+ return buffer+sizeof(__cxa_dependent_exception);
}
/**
@@ -633,8 +617,7 @@ extern "C" void __cxa_free_exception(void *thrown_exception)
}
}
- free_exception(reinterpret_cast<char*>(ex) -
- exception_alignment_padding);
+ free_exception(reinterpret_cast<char*>(ex));
}
static void releaseException(__cxa_exception *exception)
@@ -661,8 +644,7 @@ void __cxa_free_dependent_exception(void *thrown_exception)
{
releaseException(realExceptionFromException(reinterpret_cast<__cxa_exception*>(ex)));
}
- free_exception(reinterpret_cast<char*>(ex) -
- exception_alignment_padding);
+ free_exception(reinterpret_cast<char*>(ex));
}
/**