[libcxxabi] Introduce a -fno-exceptions libc++abi libary variant
Currently there is only support for a -fno-exceptions libc++ build. This is
problematic for functions such as std::terminate() which are defined in
libc++abi and using any of those functions throws away most of the benefits
of using -fno-exceptions (code-size). This patch introduces a -fno-exceptions
libc++abi build to address this issue.
This new variant of libc++abi cannot be linked against any with-exceptions
code as some symbols necessary for handling exceptions are missing in this
library.
Differential revision: http://reviews.llvm.org/D20677
Reviewers: EricWF, mclow.lists, bcraig
git-svn-id: https://llvm.org/svn/llvm-project/libcxxabi/trunk@271267 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/src/cxa_new_delete.cpp b/src/cxa_new_delete.cpp
index 25a5454..7a2c864 100644
--- a/src/cxa_new_delete.cpp
+++ b/src/cxa_new_delete.cpp
@@ -47,7 +47,11 @@
if (nh)
nh();
else
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
throw std::bad_alloc();
+#else
+ break;
+#endif
}
return p;
}
@@ -74,13 +78,17 @@
#endif
{
void* p = 0;
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
try
{
+#endif
p = ::operator new(size);
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
}
catch (...)
{
}
+#endif
return p;
}
@@ -115,13 +123,17 @@
#endif
{
void* p = 0;
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
try
{
+#endif
p = ::operator new[](size);
+#ifndef _LIBCXXABI_NO_EXCEPTIONS
}
catch (...)
{
}
+#endif
return p;
}