summaryrefslogtreecommitdiffstats
path: root/libcxxabi/src/Unwind
Commit message (Collapse)AuthorAgeFilesLines
* libc++abi: remove the duplicated unwind contentSaleem Abdulrasool2015-04-2422-10394/+0
| | | | | | | | | | The unwinder has been moved into its own project setup at http://svn.llvm.org/projects/libunwind/trunk. This simply removes the now duplicated content. This move was previously discussed on llvmdev at [1]. [1] http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-January/081507.html llvm-svn: 235759
* Also use dl_iterate_phdr() on CloudABI.Ed Schouten2015-03-311-1/+1
| | | | | | | | | | The unwinder now works on CloudABI. All exception-related libc++ tests now pass. This change was actually part of D8169, which also adds support for FreeBSD. That, however, still requires some more polishing. llvm-svn: 233676
* Unwind: define more interfaces more oftenSaleem Abdulrasool2015-03-091-40/+36
| | | | | | | | | These are also part of the Unwind interfaces. However, their implementation is different in EHABI vs frame tables based exception handling. Always provide a definition. This partially undoes a movement change from earlier to make the handling a bit simpler rather than grouping the two implementations together. llvm-svn: 231690
* Unwind: always define unwind APIsSaleem Abdulrasool2015-03-091-4/+0
| | | | | | | | These interfaces are not zero cost related, but rather generic unwind APIs used by consumers of the Unwind library. Always provide the definition as they are needed for both Zero Cost and Frame Table based implementations. llvm-svn: 231666
* Unwind: remove unnecessary checkSaleem Abdulrasool2015-03-071-1/+0
| | | | | | | | | Linux/GNU on AArch64 EH ABI Level III is implemented using exception frame tables as defined in LSB II.11.6. The exception frame tables use the DWARF Exception Header Encoding as described in LSB II.11.5.1. We already defined the appropriate definition _LIBUNWIND_SUPPORT_DWARF_UNWIND to enable this. llvm-svn: 231580
* Unwind: tweak register handling for AArch64Saleem Abdulrasool2015-03-072-22/+22
| | | | | | | | | | | AArch64 uses // as the comment character (although, Darwin uses ;). However, since we are using the C preprocessor on these files, // can be used as the comment character across the board. Tweak the platform guard to recognise __aarch64__ as well as __arm64__ for the platform identifier. llvm-svn: 231578
* Unwind: make it build on Darwin againSaleem Abdulrasool2015-02-281-2/+5
| | | | | | | The support for the LSB eh_frame_hdr extension was overzealous in trying to include headers. Be more careful to permit building on Darwin. llvm-svn: 230837
* Add .eh_frame_hdr search to Linux unwinder.Dan Albert2015-02-274-10/+242
| | | | | | | | | | | This improves the performance of unwinding on DWARF based targets. The 32-bit x86 support for scanning the full eh_frame (CFI_Parser::findFDE) apparently does not work (at least not on Linux). Since the eh_frame_hdr code delegates to that, this still doesn't work for x86 Linux, but it has been tested on x86_64 Linux and aarch64 Android. llvm-svn: 230802
* Unwind: clean up some GCC warningsSaleem Abdulrasool2015-02-262-8/+9
| | | | | | | This cleans up a set of -Wsign-conversion, -Wint-conversion, and -Wformat warnings from GCC 4.9.2 on Linux. NFC. llvm-svn: 230606
* Add .fpu directives to ARM unwind save & restore functions.Jonathan Roelofs2015-02-242-36/+6
| | | | | | | | | | | | | | | TODO: The iwmmx register save & restore functions still need the same treatment. I didn't do that in this patch because the integrated assembler has a bug where it refuses to build them on -march=armv6-m, even with .march armv5t .arm in front of those functions. This should fix PR22384. http://reviews.llvm.org/D7258 llvm-svn: 230360
* Do not add -fno-exceptions without -funwind-tablesSergey Dmitrouk2015-02-161-2/+9
| | | | | | | | | | | | | | | Adding just -fno-exceptions breaks libunwind in quite mysterious way when it's there, but exception handling doesn't work because of dummy unwind tables. Also as using exceptions implies references to symbols defined in libcxx, abort build of libcxxabi as shared library if we have to keep exceptions (when compiler supports -fno-exceptions, but not -funwind-tables; one example would be a cross-compiler, in which case testing for -funwind-tables flag by CMake actually requires libunwind to be available before it's built). llvm-svn: 229427
* Moar post-commit review.Jonathan Roelofs2015-02-141-1/+1
| | | | | | Apparently typing is hard. llvm-svn: 229216
* Address post-commit review commentsJonathan Roelofs2015-02-141-0/+3
| | | | llvm-svn: 229207
* Make the unwinder build on thumbv6-m with the integrated assembler.Jonathan Roelofs2015-02-141-0/+4
| | | | | | http://reviews.llvm.org/D7630 llvm-svn: 229194
* unwind: always export unw_local_addr_spaceSaleem Abdulrasool2015-02-131-5/+4
| | | | | | | | | | It seems that the remote unwinder is entirely unused at this moment. unw_local_addr_space was referencing sThisAddressSpace which use to be a static in global namespace. It has since then become a member variable of LocalAddressSpace. Update this definition and always export it (needed to implement unw_get_proc_info_by_ip for ARM). llvm-svn: 229133
* unwind: use sizeof() instead of hardcoded sizesSaleem Abdulrasool2015-02-132-10/+15
| | | | | | | | The statically allocated strings have a fixed size which can be computed using the sizeof operator rather than duplicating the allocation size which can drift. NFC. llvm-svn: 229126
* Don't use bzero() and strcpy().Ed Schouten2015-02-133-16/+21
| | | | | | | | | | Instead of bzero(), we can simply use memset(). The strcpy() calls are unneeded, as we can simply keep track of a pointer to the constant strings we are copying. Reviewed by: Jonathan Roelofs llvm-svn: 229074
* unwind: use explicit memcpy for register savingSaleem Abdulrasool2015-02-121-6/+19
| | | | | | | | | | Convert the register saving code to use an explicit memcpy rather than the implicit memcpy from the assignment. This avoids warnings from -Wcast-qual on GCC and makes the code more explicit. Furthermore, use sizeof to calculate the offsets rather than adding magic numbers, improving legibility of the code. NFC. llvm-svn: 228904
* unwind: move exported APIs out of headerSaleem Abdulrasool2015-02-121-41/+72
| | | | | | | | | | | | | | | Ideally, we would do something like inline __declspec(dllexport) to ensure that the symbol was inlined within libunwind as well as emitted into the final DSO. This simply moves the definition out of the header to ensure that the *public* interfaces are defined and exported into the final DSO. This change also has "gratuitous" code movement so that the EHABI and generic implementations are co-located making it easier to find them. The movement from the header has one minor change introduced into the code: additional tracing to mirror the behaviour of the non-EHABI interfaces. llvm-svn: 228903
* unwind: tweak inclusion ordering to work around GCCSaleem Abdulrasool2015-02-112-0/+5
| | | | | | | | | | | | | This is a slightly convoluted workaround. GCC does not support the __has_feature extension of clang, and this results in some issues with static_asserts. config.h defines static_assert as a macro with a C-specific trickery. This then propagates into the C++ headers included after config.h, which are used with C++11 mode, enabling constexpr constructors. The macro'ed static_assert does not get treated as the static_assert builtin, and will cause an error due to a non-empty constexpr constructor. Tweaking the include order permits the use of libc++ headers to build libunwind with GCC on Linux. llvm-svn: 228809
* unwind: clean up some -Werror=return-type warningsSaleem Abdulrasool2015-02-111-17/+16
| | | | | | | | Mark that the functions always return or abort if the register class is unhandled. Avoid placing the abort in the switch to permit -Wswitch-cover to catch missing values. llvm-svn: 228808
* unwind: clean up more -Wformat warningsSaleem Abdulrasool2015-02-112-46/+56
| | | | | | This makes compilation on ARM -Wformat clean with GCC. NFC. llvm-svn: 228807
* unwind: clean up straggling -Wundef warningSaleem Abdulrasool2015-02-111-0/+4
| | | | | | | Conservatively define __ARM_ARCH to 4 in the case that it is undefined (e.g. with GCC). llvm-svn: 228806
* unwind: silence -Wconversion warningsSaleem Abdulrasool2015-02-112-6/+8
| | | | | | Clean up implicit uint8_t to uint32_t conversion warnings identified by GCC. llvm-svn: 228805
* unwind: improve compilation on Linux with gccSaleem Abdulrasool2015-02-101-23/+24
| | | | | | | | gcc still defaults to C89 which does not support BCPL style comments. This splits up the sources list in CMakeLists and selectively adds compile flags for using C99 which avoids a number of warnings in -Wpedantic mode. NFC. llvm-svn: 228665
* unwind: clean up some stray semicolonsSaleem Abdulrasool2015-02-102-2/+2
| | | | | | Clean up some stray semicolons found by GCC 4.9 -Wpedantic. NFC. llvm-svn: 228664
* unwind: clean up -Wundef warningsSaleem Abdulrasool2015-02-102-14/+14
| | | | | | | | The unified register management interfaces had multiple naked macros for conditional logic. This cleans them up to use the defined() form, avoiding -Wundef warnings. NFC. llvm-svn: 228663
* unwind: fix -Wformat warnings from gccSaleem Abdulrasool2015-02-103-95/+98
| | | | | | | Clean up the format specifiers for pedantic compilation with gcc 4.9 on Linux. NFC. llvm-svn: 228662
* Unwind: hoist placement delete into base classSaleem Abdulrasool2015-02-061-2/+4
| | | | | | | | | | Move the placement delete into the base class. This permits the proper emission of the virtual destructor in UnwindCursor by using the class specific placement delete instead of the normal single element ::operator delete. With this patch, we can finally build libunwind as a DSO without a runtime dependency on libc++/libc++abi. llvm-svn: 228436
* Unwind: replace pure virtual functions with abortsSaleem Abdulrasool2015-02-061-17/+33
| | | | | | | | | | | | Convert all pure virtual functions in the UnwindCursor with implementations that abort. This is effectively manually replicating the current behaviour, whilst removing the compiler generated calls to __cxa_pure_virtual, which will abort at runtime with a message indicating that a pure virtual call was made. The whitespace changes are the result of executing clang-format over the changed region. llvm-svn: 228423
* unwind: use -fno-rtti -fno-exceptions -funwind-tablesSaleem Abdulrasool2015-02-061-1/+7
| | | | | | | | | RTTI and exceptions are not needed for the unwinder, the use of C++ there is for very specific cases, and does not require dynamic_cast nor does it use exceptions. This avoids unnecessary references to type information being emitted. llvm-svn: 228408
* Fix build.Dan Albert2015-02-061-2/+0
| | | | | | Had a bad rebase that merged the #if in two places. Whoops. llvm-svn: 228366
* Revert "indicate tag type in C"Saleem Abdulrasool2015-02-052-9/+9
| | | | | | | | | | This reverts commit 4963ea3107a2fdfae21f7806896905f20b21ff0d. This change was wrong. The parameter type is sugared via a typedef. The errors generated may have been due to a different root cause, and should be fixed through the recent series of changes. llvm-svn: 228365
* [libcxxabi] Fix -Werror build for 32-bit non-ARM.Dan Albert2015-02-054-15/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | Summary: The inclusion of Unwind-EHABI.h was insufficiently guarded (LIBCXXABI_ARM_EHABI was beign checked without ever being defined). Move the check into the header file itself, add the check to the source file, and clean up the existing checks. LIBCXXABI_ARM_EHABI didn't have a canonical defintion; it was duplicated across cxxabi.h, libunwind.h, and unwind.h. Move the definition into __cxxabi_config.h and clean up the old cruft (note: we will have to ship this header). There are also a few drive-by formatting/whitespace cleanups. Reviewers: jroelofs, thakis, compnerd Reviewed By: compnerd Subscribers: compnerd, aemerson, cfe-commits Differential Revision: http://reviews.llvm.org/D7419 llvm-svn: 228363
* Formatting fixes.Dan Albert2015-02-051-22/+22
| | | | | | | We should clang-format the whole thing when we finally move the unwinder to its new home. llvm-svn: 228360
* Fix compilation of unwind on Darwin-x86_64Saleem Abdulrasool2015-02-051-0/+4
| | | | | | | | EHABI related typedef sugar is gated via LIBCXXABI_ARM_EHABI which did not protect the EHABI header. This would cause declarations to be emitted on non-EHABI targets, resulting in errors. This permits compilation on Darwin. llvm-svn: 228359
* Silence some -Wundef warningsSaleem Abdulrasool2015-02-052-4/+4
| | | | | | | | | | | | config.h:53:7: warning 'FOR_DYLD' is not defined, evaluates to 0 [-Wundef] Unwind_AppleExtras.cpp:44:5: warning '__arm__' is not defined, evaluates to 0 [-Wundef] Unwind_AppleExtras.cpp:60:7: warning '__arm64__' is not defined, evaluates to 0 [-Wundef] Unwind_AppleExtras.cpp:186:6: warning 'FOR_DYLD' is not defined, evaluates to 0 [-Wundef] Use defined(macro) which should be equivalent in these cases, silencing -Wundef warnings. NFC. llvm-svn: 228358
* Silence warning about loss of precisionSaleem Abdulrasool2015-02-051-1/+1
| | | | | | | | | | Explicitly cast to uintptr_t before casting to a 32-bit value. Because this code path is meant to be used in a 32-bit address space, this truncation should be safe. Unwind-EHABI.h:25:12: error: cast from pointer to smaller type 'uint32_t' (aka 'unsigned int') loses information llvm-svn: 228357
* indicate tag type in CSaleem Abdulrasool2015-02-052-9/+9
| | | | | | | Mark the tag type (struct) for the _Unwind_Exception in C code. This silences a warning from clang about missing struct specifier. llvm-svn: 228356
* Some more -Wundef issues.Dan Albert2015-02-051-3/+3
| | | | | | This should be all of them for Linux. Might be some for the others. llvm-svn: 228267
* Enable -Wundef.Dan Albert2015-02-056-33/+40
| | | | | | | | The problem that caused the need for http://reviews.llvm.org/D7419 was caused by testing the value of something that was undefined. This should prevent that in the future. llvm-svn: 228257
* Force unwind frame with user-defined personality.Logan Chien2015-01-224-69/+109
| | | | | | | | | | | | | | | | | | If libcxxabi is compiled as a shared library, and the executable references the user-defined personality routines (e.g. __gxx_personality_v0), then the pointer comparison in Unwind-EHABI.cpp won't work. This is due to the fact that the PREL31 will point to the PLT stubs for the personality routines (in the executable), while the __gxx_personality_v0 symbol reference is yet another (different) PLT stub (in the libunwind.) This will cause _Unwind_Backtrace() stops to unwind the frame whenever it reaches __gxx_personality_v0(). This CL fix the problem by calling the user-defined personality routines with an undocumented API for force unwinding. llvm-svn: 226822
* Remove _Unwind_{Get,Set}{GR,IP} from ARM EHABI build.Logan Chien2015-01-221-22/+0
| | | | | | | | | | | | | This commit partially reverts r219629. This functions are not a part of ARM EHABI specification, and AFAIK, the de facto implementation does not export these functions. Without this change, any programs compiled with this unwind.h will be incompatible with other implementations due to linkage error. llvm-svn: 226818
* Fix some formatting I messed up in r225187.Dan Albert2015-01-051-1/+1
| | | | llvm-svn: 225194
* Make the Unwinder -Werror clean.Dan Albert2015-01-055-95/+110
| | | | | | | Mostly just format string fixes. Tested clean on arm, x86, and x86_64 Linux. llvm-svn: 225187
* Typo.Joerg Sonnenberger2015-01-041-1/+1
| | | | llvm-svn: 225136
* Silence warnings in libunwind.Logan Chien2014-12-212-6/+9
| | | | | | | | | | | | | | * Remove the embedded directive undefined behavior by moving the the #ifdef out of the macro arguments. [-Wembedded-directive] * Remove the local variable shadowing warning by renaming frameInfo in UnwindLevel1-gcc-ext.c. [-Wshadow] * Explicitly cast the function pointer to void pointer to avoid the comparison between function pointer and void pointer. [-Wpedantic] llvm-svn: 224690
* [libcxxabi] Refactor CMakeLists.txt's handling of compile and link flags to ↵Eric Fiselier2014-11-181-9/+9
| | | | | | | | | | | | | | | | | | suppress warnings. Summary: This patch mirrors the recent change to libc++ found here http://reviews.llvm.org/D6277. This fixes PR20395 (http://llvm.org/bugs/show_bug.cgi?id=20395). Reviewers: jroelofs, mclow.lists, danalbert Reviewed By: danalbert Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D6286 llvm-svn: 222252
* Make sure only NEON enabled devices save/restore D16+ registersRenato Golin2014-11-072-2/+2
| | | | llvm-svn: 221532
* Correctly export _Unwind_[GS]et(GR|IP) for EHABI.Dan Albert2014-10-133-2/+24
| | | | | | | | | | | | | | | | | | These need to have normal linkage instead of being static inline as many libraries expect to be able to declare these and have the linker find them rather than needing to include the header. http://mentorembedded.github.io/cxx-abi/abi-eh.html Also clean up some warnings while I'm here. Reviewers: jroelofs, kledzik Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D5754 llvm-svn: 219629
OpenPOWER on IntegriCloud