summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/cxxabi.h17
-rw-r--r--src/cxa_default_handlers.cpp13
-rw-r--r--src/cxa_default_handlers.hpp19
-rw-r--r--src/cxa_exception.hpp5
-rw-r--r--src/cxa_handlers.cpp13
-rw-r--r--src/cxa_handlers.hpp14
6 files changed, 31 insertions, 50 deletions
diff --git a/include/cxxabi.h b/include/cxxabi.h
index f769b86..66ef6d4 100644
--- a/include/cxxabi.h
+++ b/include/cxxabi.h
@@ -172,21 +172,4 @@ extern bool __cxa_uncaught_exception() throw();
namespace abi = __cxxabiv1;
-// Below are Apple extensions to support implementing C++ ABI in a seperate dylib
-namespace __cxxabiapple
-{
-extern "C"
-{
-
-// Apple additions to support multiple STL stacks that share common
-// terminate, unexpected, and new handlers
-// But touching these is a bad idea. It is not thread safe.
-// Use get_terminate, set_terminate, etc. instead.
-extern void (*__cxa_terminate_handler)();
-extern void (*__cxa_unexpected_handler)();
-extern void (*__cxa_new_handler)();
-
-} // extern "C"
-} // namespace __cxxabiv1
-
#endif // __CXXABI_H
diff --git a/src/cxa_default_handlers.cpp b/src/cxa_default_handlers.cpp
index 403ed04..726f7eb 100644
--- a/src/cxa_default_handlers.cpp
+++ b/src/cxa_default_handlers.cpp
@@ -17,7 +17,6 @@
#include "cxa_handlers.hpp"
#include "cxa_exception.hpp"
#include "private_typeinfo.h"
-#include "cxa_default_handlers.hpp"
__attribute__((noreturn))
static void default_handler(const char* cause)
@@ -76,14 +75,14 @@ static void default_handler(const char* cause)
}
-__attribute__((visibility("hidden"), noreturn))
-void default_terminate_handler()
+__attribute__((noreturn))
+static void default_terminate_handler()
{
default_handler("terminate");
}
-__attribute__((visibility("hidden"), noreturn))
-void default_unexpected_handler()
+__attribute__((noreturn))
+static void default_unexpected_handler()
{
default_handler("unexpected");
}
@@ -103,7 +102,7 @@ set_unexpected(unexpected_handler func) _NOEXCEPT
{
if (func == 0)
func = default_unexpected_handler;
- return __sync_swap(&__cxxabiapple::__cxa_unexpected_handler, func);
+ return __sync_swap(&__cxa_unexpected_handler, func);
}
terminate_handler
@@ -111,7 +110,7 @@ set_terminate(terminate_handler func) _NOEXCEPT
{
if (func == 0)
func = default_terminate_handler;
- return __sync_swap(&__cxxabiapple::__cxa_terminate_handler, func);
+ return __sync_swap(&__cxa_terminate_handler, func);
}
};
diff --git a/src/cxa_default_handlers.hpp b/src/cxa_default_handlers.hpp
deleted file mode 100644
index 6b02e97..0000000
--- a/src/cxa_default_handlers.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-//===------------------------- cxa_default_handlers.cpp -------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.TXT for details.
-//
-//
-// This file declares the default terminate_handler and unexpected_handler.
-//===----------------------------------------------------------------------===//
-
-
-__attribute__((visibility("hidden"), noreturn))
-void
-default_terminate_handler();
-
-__attribute__((visibility("hidden"), noreturn))
-void
-default_unexpected_handler();
diff --git a/src/cxa_exception.hpp b/src/cxa_exception.hpp
index cf019d4..66f05c4 100644
--- a/src/cxa_exception.hpp
+++ b/src/cxa_exception.hpp
@@ -11,6 +11,9 @@
//
//===----------------------------------------------------------------------===//
+#ifndef _CXA_EXCEPTION_H
+#define _CXA_EXCEPTION_H
+
#include <exception> // for std::unexpected_handler and std::terminate_handler
#include <cxxabi.h>
#include "unwind.h"
@@ -116,3 +119,5 @@ static const uint64_t get_vendor_and_language = 0xFFFFFFFFFFFFFF00; // mask
#pragma GCC visibility pop
}
+
+#endif // _CXA_EXCEPTION_H
diff --git a/src/cxa_handlers.cpp b/src/cxa_handlers.cpp
index 97f1347..3150c0a 100644
--- a/src/cxa_handlers.cpp
+++ b/src/cxa_handlers.cpp
@@ -17,18 +17,15 @@
#include "cxxabi.h"
#include "cxa_handlers.hpp"
#include "cxa_exception.hpp"
-#include "cxa_default_handlers.hpp"
#include "private_typeinfo.h"
-std::new_handler __cxa_new_handler = 0;
-
namespace std
{
unexpected_handler
get_unexpected() _NOEXCEPT
{
- return __cxxabiapple::__cxa_unexpected_handler;
+ return __cxa_unexpected_handler;
}
__attribute__((visibility("hidden"), noreturn))
@@ -50,7 +47,7 @@ unexpected()
terminate_handler
get_terminate() _NOEXCEPT
{
- return __cxxabiapple::__cxa_terminate_handler;
+ return __cxa_terminate_handler;
}
__attribute__((visibility("hidden"), noreturn))
@@ -98,16 +95,18 @@ terminate() _NOEXCEPT
__terminate(get_terminate());
}
+new_handler __cxa_new_handler = 0;
+
new_handler
set_new_handler(new_handler handler) _NOEXCEPT
{
- return __sync_swap(&__cxxabiapple::__cxa_new_handler, handler);
+ return __sync_swap(&__cxa_new_handler, handler);
}
new_handler
get_new_handler() _NOEXCEPT
{
- return __cxxabiapple::__cxa_new_handler;
+ return __cxa_new_handler;
}
} // std
diff --git a/src/cxa_handlers.hpp b/src/cxa_handlers.hpp
index a7f582c..95a320d 100644
--- a/src/cxa_handlers.hpp
+++ b/src/cxa_handlers.hpp
@@ -10,6 +10,9 @@
// unexpected_handler, and new_handler.
//===----------------------------------------------------------------------===//
+#ifndef _CXA_HANDLERS_H
+#define _CXA_HANDLERS_H
+
#include <exception>
namespace std
@@ -24,3 +27,14 @@ void
__terminate(terminate_handler func) _NOEXCEPT;
} // std
+
+extern "C"
+{
+
+extern void (*__cxa_terminate_handler)();
+extern void (*__cxa_unexpected_handler)();
+extern void (*__cxa_new_handler)();
+
+} // extern "C"
+
+#endif // _CXA_HANDLERS_H