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
Howard Hinnant
0f73197364
Arm fixes in cxa_personality.cpp and a little refactoring.
...
llvm-svn: 152966
2012-03-17 00:10:52 +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
ffa26667d9
Missed an underscore on the last commit.
...
llvm-svn: 152736
2012-03-14 19:39:50 +00:00
Howard Hinnant
baae2be624
Enable __arm__ on apple
...
llvm-svn: 152735
2012-03-14 19:30:00 +00:00
Nick Kledzik
37cb6555f0
fix crash log magic
...
llvm-svn: 152693
2012-03-14 01:16:14 +00:00
Howard Hinnant
3bfc622bdb
Enable / silence -Wunused-parameter.
...
llvm-svn: 152415
2012-03-09 18:01:37 +00:00
Howard Hinnant
71c4857a07
Enable/silence -Wsign-compare.
...
llvm-svn: 152335
2012-03-08 20:50:28 +00:00
Howard Hinnant
37c247c13c
Enable/silence -Wmissing-field-initializers.
...
llvm-svn: 152334
2012-03-08 20:32:50 +00:00
Howard Hinnant
7cafb87441
Enable/silence -Wunused-variable.
...
llvm-svn: 152329
2012-03-08 20:23:24 +00:00
Howard Hinnant
d121eb2c24
Enable/silence -Wconversion.
...
llvm-svn: 152328
2012-03-08 20:16:45 +00:00
Howard Hinnant
11dd38dab0
Enable/silence -Wshadow.
...
llvm-svn: 152325
2012-03-08 19:34:58 +00:00
Howard Hinnant
41bcf33c63
Enable/silence -Wsign-conversion.
...
llvm-svn: 152323
2012-03-08 18:45:24 +00:00
Howard Hinnant
20d6c14c88
First attempt at arm support.
...
llvm-svn: 151765
2012-02-29 22:14:19 +00:00
Howard Hinnant
fdad25a40a
Insert a couple of dummy virtual functions to ease low level binary compatibility with other low level tools.
...
llvm-svn: 151282
2012-02-23 21:09:29 +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
Dave Zarzycki
3cd25390e5
Pedantic fix: missing newline at EOF
...
llvm-svn: 151132
2012-02-22 05:25:00 +00:00
Howard Hinnant
3e7d155768
Move typeinfos for exceptions in <stdexcept> to the abi
...
llvm-svn: 150834
2012-02-17 19:23:47 +00:00
Howard Hinnant
d901bb4de4
Remove outdated information from comment.
...
llvm-svn: 150827
2012-02-17 18:45:04 +00:00
Howard Hinnant
eaa65afc7b
Work on restricting symbol visibility.
...
llvm-svn: 149633
2012-02-02 20:47:28 +00:00
Howard Hinnant
30025116de
Changed a TODO to a 'maybe some time in the future'.
...
llvm-svn: 149539
2012-02-01 21:12:07 +00:00
Howard Hinnant
8030b7f751
Removed DEBUG statements.
...
llvm-svn: 149538
2012-02-01 21:08:30 +00:00
Howard Hinnant
089123e65f
Remove a TODO regarding where some can_catch are implemented. I opted to make can_catch pure virtual in the top __shim_type_info, and have each sub-class implement its own. There are some repeated definitions, but they are trivial.
...
llvm-svn: 149537
2012-02-01 21:06:46 +00:00
Howard Hinnant
2d6810fbd6
Quash a TODO related to catching pointer-to-member. These tests fail on my copy of gcc-4.2. But I believe the tests to be correct (and they pass for libc++abi). I've enquired on the C++ standards mailing list for a clarification in case I'm wrong. So far I've gotten one response that agrees with me.
...
llvm-svn: 149534
2012-02-01 20:53:21 +00:00
Howard Hinnant
a21f8c2acf
Quash TODO regarding catch by function type. Add tests to back it up.
...
llvm-svn: 149530
2012-02-01 19:42:45 +00:00
Howard Hinnant
26ffb64177
Quash TODO regarding catch by array type. Add tests to back it up.
...
llvm-svn: 149527
2012-02-01 19:21:28 +00:00
Howard Hinnant
69a10f466b
Removing a TODO: can_catch is fundamentally different than search_above_dst. can_catch is looking for an unamiguous public base class of a specific type, but at any address. search_above_dst is looking for an unambiguous public base class of a specific type, *and* at a specific address. Additionally can_catch is run for all types. search_above_dst is only run on class types. So these are only superficially similar. Not similar enough for resuse, at least without making the code unreadable.
...
llvm-svn: 149522
2012-02-01 18:52:35 +00:00
Howard Hinnant
d0bfbb336f
Teach exception_cleanup_func about dependent exceptions.
...
llvm-svn: 149520
2012-02-01 18:44:21 +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
62efe0b062
Nothing but polishing comments.
...
llvm-svn: 149515
2012-02-01 16:56:40 +00:00
Howard Hinnant
4ca103d14c
Move an error detector to a better place.
...
llvm-svn: 149513
2012-02-01 16:16:11 +00:00
Howard Hinnant
310fcc749d
Back the optimization down from -O3 to -Os. I'm getting an unexplained crasher on -O3. I've looked for a libc++abi bug and can't find one. I'm suspecting clang optimizer bug. But I don't have a good test case at the moment. Deferring investigation on this for now as I will soon be developing more and smaller tests.
...
llvm-svn: 149414
2012-01-31 20:22:59 +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
43f5fecdb5
Fix type-o in the comment of the last commit
...
llvm-svn: 149403
2012-01-31 19:05:08 +00:00
Howard Hinnant
6351792447
Found and fixed a bug in __cxa_call_unexpected. If the unexpected_handler rethrows the same exception then needed information gets overwritten in the original exception header. Therefore save it locally before executing the unexpected_handler.
...
llvm-svn: 149400
2012-01-31 18:57:20 +00:00
Howard Hinnant
d96cac1282
Found and fixed bug in personality function: Don't dive into the action table if the action entry is zero.
...
llvm-svn: 149389
2012-01-31 17:15:14 +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
c9204f6bed
Refactored personality function. Found one bug in scanning exception spec lists.
...
llvm-svn: 149272
2012-01-30 20:16:21 +00:00
Howard Hinnant
2c50972c32
Removed debugging print statements
...
llvm-svn: 149271
2012-01-30 20:13:37 +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
9aa4684fbb
Minor updates to a couple of comments.
...
llvm-svn: 149158
2012-01-28 00:34:46 +00:00
Howard Hinnant
ece71ead6d
Add a little paranoia for testing purposes.
...
llvm-svn: 149157
2012-01-28 00:32:31 +00:00
Howard Hinnant
ad048719a7
Sometimes it takes all day to write a decent comment. This is one of those times, and I'm still not quite sure I have them correct.
...
llvm-svn: 149154
2012-01-28 00:28:31 +00:00
Howard Hinnant
113cf60e0b
These commits are intended to be temporary in nature and are to facilitate the testing of libc++abi.dylib at this point in time.
...
llvm-svn: 148967
2012-01-25 19:27:42 +00:00
Howard Hinnant
db97064263
Add comment documenting extension behavior of __cxa_get_globals_fast().
...
llvm-svn: 148966
2012-01-25 19:19:13 +00:00
Howard Hinnant
5d6b9d28f7
cxa_guard.cpp didn't quite make it on the last commit: Restricted headers to cxa_guard.cpp and abort_messsage.h, and added a comment regarding reentrancy brought up by John McCall. Thanks John.
...
llvm-svn: 148965
2012-01-25 19:02:40 +00:00