[libcxxabi] Don't process exceptions in cxa_handlers when they're disabled
When exceptions are disabled, avoid their processing altogether.
This avoids pulling in the depenency on demangler significantly
reducing binary size when statically linking against libc++abi
built without exception support.
Differential Revision: https://reviews.llvm.org/D64191
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@365944 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e197727..8ca1690 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -43,7 +43,9 @@
include(HandleCompilerRT)
# Define options.
-option(LIBCXXABI_ENABLE_EXCEPTIONS "Use exceptions." ON)
+option(LIBCXXABI_ENABLE_EXCEPTIONS
+ "Provide support for exceptions in the runtime.
+ When disabled, libc++abi does not support stack unwinding and other exceptions-related features." ON)
option(LIBCXXABI_ENABLE_ASSERTIONS "Enable assertions independent of build mode." ON)
option(LIBCXXABI_ENABLE_PEDANTIC "Compile with pedantic enabled." ON)
option(LIBCXXABI_ENABLE_PIC "Build Position-Independent Code, even in static library" ON)
diff --git a/src/cxa_default_handlers.cpp b/src/cxa_default_handlers.cpp
index 8110f6c..8cacb35 100644
--- a/src/cxa_default_handlers.cpp
+++ b/src/cxa_default_handlers.cpp
@@ -25,6 +25,7 @@
__attribute__((noreturn))
static void demangling_terminate_handler()
{
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
// If there might be an uncaught exception
using namespace __cxxabiv1;
__cxa_eh_globals* globals = __cxa_get_globals_fast();
@@ -71,6 +72,7 @@
abort_message("terminating with %s foreign exception", cause);
}
}
+#endif
// Else just note that we're terminating
abort_message("terminating");
}
diff --git a/src/cxa_handlers.cpp b/src/cxa_handlers.cpp
index 390bc65..4fdc190 100644
--- a/src/cxa_handlers.cpp
+++ b/src/cxa_handlers.cpp
@@ -73,6 +73,7 @@
void
terminate() _NOEXCEPT
{
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
// If there might be an uncaught exception
using namespace __cxxabiv1;
__cxa_eh_globals* globals = __cxa_get_globals_fast();
@@ -87,6 +88,7 @@
__terminate(exception_header->terminateHandler);
}
}
+#endif
__terminate(get_terminate());
}