[CFI] Disable CFI checks for __cxa_decrement_exception_refcount

Summary:
exception_header->exceptionDestructor is a void(*)(void*) function
pointer; however, it can point to destructors like std::
exception::~exception that don't match that type signature.

Reviewers: pcc, vitalybuka

Reviewed By: vitalybuka

Subscribers: kcc, christof, cfe-commits

Differential Revision: https://reviews.llvm.org/D45455

llvm-svn: 329629
This commit is contained in:
Vlad Tsyrklevich 2018-04-09 22:11:28 +00:00
parent 9a9c823388
commit b89e9b5e2f
2 changed files with 12 additions and 2 deletions

View File

@ -60,4 +60,14 @@
#define _LIBCXXABI_WEAK __attribute__((__weak__))
#endif
#if defined(__clang__)
#define _LIBCXXABI_COMPILER_CLANG
#endif
#if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG)
#define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi")))
#else
#define _LIBCXXABI_NO_CFI
#endif
#endif // ____CXXABI_CONFIG_H

View File

@ -630,8 +630,8 @@ __cxa_increment_exception_refcount(void *thrown_object) throw() {
Requires: If thrown_object is not NULL, it is a native exception.
*/
void
__cxa_decrement_exception_refcount(void *thrown_object) throw() {
_LIBCXXABI_NO_CFI
void __cxa_decrement_exception_refcount(void *thrown_object) throw() {
if (thrown_object != NULL )
{
__cxa_exception* exception_header = cxa_exception_from_thrown_object(thrown_object);