Asiri Rathnayake
57e446dafa
[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
llvm-svn: 271267
2016-05-31 12:01:32 +00:00
Saleem Abdulrasool
18ef564c8b
libc++abi: build with -fvisibility=hidden
...
Enable building libc++abi with hidden visibility by default. The ABI mandated
interfaces (and a few extra) are already set up to be externally visible. This
allows us to ensure that any implementation details are not leaked.
llvm-svn: 270816
2016-05-26 02:12:20 +00:00
Reid Kleckner
fa990f0338
Declare __cxa_new_handler as extern "C", or it declares a new variable
...
Reverts change from r219012 to fix ABI incompatibility. Let's not worry
about the GCC warning here.
llvm-svn: 235013
2015-04-15 15:35:56 +00:00
Reid Kleckner
cf6b0c64b9
Use __atomic_exchange_n instead of Clang's __sync_swap
...
Also remove an extra extern "C" from a global variable redeclaration.
This allows building libcxxabi with GCC on my system.
Reviewers: majnemer
Differential Revision: http://reviews.llvm.org/D5604
llvm-svn: 219012
2014-10-03 20:03:47 +00:00
Nico Weber
49f09fd88a
Minor libc++abi changes to make things build better with gcc.
...
llvm-svn: 211748
2014-06-25 23:55:37 +00:00
Howard Hinnant
9de0b35648
Make __cxa_new_handler un-mangled
...
llvm-svn: 155763
2012-04-28 16:46:04 +00:00
Howard Hinnant
e59dbd7b82
I would really like to write the handlers in terms of C++11 atomics. This would give us the best performance, portablity, and safety tradeoff. Unfortunately I can not yet do that. So I've put the desired code in comments, and reverted the handler getters to the slower but safer legacy atomic intrinsics.
...
llvm-svn: 153041
2012-03-19 16:56:51 +00:00
Howard Hinnant
4ac72dd982
I've moved __cxa_terminate_handler, __cxa_unexpected_handler and __cxa_new_handler from the public header cxxabi.h into the private header cxa_handlers.hpp. During this move I've also moved them from namespace __cxxabiapple into the global namespace. They are, and have always been extern C and so the namespace (or lack of it) does not affect their ABI. In general external clients should not reference these symbols. They are atomic variables and will be changing into C++11 atomic variables in the future. However for those few clients who really need access to them, their name, mangling, size, alignment and layout will remain stable. You just may need your own declaration of them. Include guards have been added to the private header cxa_exception.hpp. The private header cxa_default_handlers.hpp has been removed and the default handlers are now file-static. Include guards have been added to the private header cxa_handlers.hpp.
...
llvm-svn: 153039
2012-03-19 16:20:34 +00:00
Dave Zarzycki
d6533ccd48
Less lame "concurrency" support
...
These APIs aren't thread safe, but they're pretending to be. Let's at
least make the getter as fast as they can be. The setters are a lost
cause unless the API can be fixed.
llvm-svn: 152786
2012-03-15 08:58:08 +00:00
Dave Zarzycki
13e35c086c
Be friendly to when dead_strip doesn't work
...
Apple Radar: 11053417
llvm-svn: 152785
2012-03-15 08:58:06 +00:00
Nick Kledzik
778324abe4
move default handlers to their own file so they can be overridden at build time (dyld)
...
llvm-svn: 152770
2012-03-15 01:52:12 +00:00
Howard Hinnant
11dd38dab0
Enable/silence -Wshadow.
...
llvm-svn: 152325
2012-03-08 19:34:58 +00:00
Howard Hinnant
2d809ac734
And the handlers should be extern C.
...
llvm-svn: 151261
2012-02-23 17:25:34 +00:00
Howard Hinnant
49f28b5a47
I had originally made the handler function pointers a static internal detail, not accessible to the outside world. I did this because they must be accessed in a thread-safe manner, and the library provides thread-safe getters and setters for these. However I am at least temporarily making them public and giving them the Apple-extension names. In the future these may disappear again, and I think that would probably be a good idea.
...
llvm-svn: 151256
2012-02-23 15:32:07 +00:00
Howard Hinnant
8aa78517ab
Treat all exceptions except that the ones that this library throws as foreign. Even other C++ exceptions.
...
llvm-svn: 149518
2012-02-01 18:15:15 +00:00
Howard Hinnant
fe2052d635
Have the default unexpected/terminate handler output *demangled* names for the type of exception instead of the mangled name.
...
llvm-svn: 149409
2012-01-31 19:48:06 +00:00
Howard Hinnant
d6d4c25ef0
Minor bug fix in __cxa_call_unexpected. Changed std::terminate to detect a caught-but-unhandled exception, and choose the handler out of that if found.
...
llvm-svn: 149329
2012-01-31 01:51:15 +00:00
Howard Hinnant
47cb854818
Add a descriptive name for a constant. Also I'm at least temporarily waging war on throw specs, both old and new style. Except where we have already publicly exposed the throw spec, I'm getting rid of them. They may come back later. But they seem somewhat prone to cyclic dependencies here. The throw spec implies compiler generated code that this library has to jump to during stack unwinding. I'd like to minimize the possiblity that the code used to properly make that jump is itself creating such jumps.
...
llvm-svn: 149251
2012-01-30 16:07:00 +00:00
Howard Hinnant
a9d8ec45f6
Remove dependence upon std::exception_ptr from the default_terminate_handler. Recovered the equivalent functionality at a lower level.
...
llvm-svn: 148830
2012-01-24 18:26:29 +00:00
Howard Hinnant
5ec9183afc
Reviewing cxa_exception.cpp and marking as implemented as I go. Not marking as implemented on arm when I'm not sure about that platform.
...
llvm-svn: 146072
2011-12-07 21:16:40 +00:00
Howard Hinnant
2642af9e23
terminate, unexpected and new handlers. If terminating while an exception is unwinding, an attempt is made to print out the what() string if the exception is derived from std::exception. __terminate(handler) and __unexpected(handler) helpers are present in anticipation of other parts of libc++abi needing to call these interfaces with custom handlers.
...
llvm-svn: 145948
2011-12-06 17:51:25 +00:00