summaryrefslogtreecommitdiffstats
path: root/libunwind
Commit message (Collapse)AuthorAgeFilesLines
* [cmake] Obtain LLVM_CMAKE_PATH from llvm-config if availableMichal Gorny2017-01-091-1/+12
| | | | | | | | Use the new --cmakedir option to obtain LLVM_CMAKE_PATH straight from llvm-config. Fallback to local reconstruction if llvm-config does not support this option. llvm-svn: 291505
* EHABI: mark some functions as exportedSaleem Abdulrasool2016-11-171-24/+17
| | | | | | | These are part of the EHABI specification and are exported to be available to users. Mark them as `_LIBUNWIND_EXPORT` like the rest of the unwind interfaces. llvm-svn: 287283
* [CMake] Get libunwind building under LLVM/runtimesPetr Hosek2016-11-082-4/+11
| | | | | | | | | | | | | | | The new LLVM runtimes directory requires the same conventions to be followed across the runtime projects. These changes make libunwind build under the runtimes subdirectory. This patch contains the following changes: * Rename LLVM_CONFIG to LLVM_CONFIG_PATH * Check if compiler supports C++11 (required by libunwind) Differential Revision: https://reviews.llvm.org/D26360 llvm-svn: 286308
* Add support for old versions of MacOS to libunwind. Fixes PR22203. Thanks to ↵Marshall Clow2016-11-021-4/+18
| | | | | | Jeremy for the bug report and the patch. llvm-svn: 285845
* Add conditions for PPC to libunwind. Fixes PR22200. Thanks to Jeremy for the ↵Marshall Clow2016-11-021-1/+2
| | | | | | bug report and the patch. llvm-svn: 285831
* fix _dyld_find_unwind_sections() for pre-10.7. Patch by Jeremy SequoiaNick Kledzik2016-10-311-16/+22
| | | | llvm-svn: 285636
* [libunwind] Add support for FuchsiaPetr Hosek2016-10-232-3/+4
| | | | | | | | Fuchsia is a new operating system which uses libunwind as unwinder. Differential Revision: https://reviews.llvm.org/D25899 llvm-svn: 284951
* [libunwind] Add missing <stdint.h> include. NFC.Asiri Rathnayake2016-10-131-0/+1
| | | | | | | | | | This missing include seems to cause compilation failures on older MacOS versions (< 10.9). This is because r270692 has introduced uint64_t into config.h without including this header. Patch from: Jeremy Huddleston Sequoia (jeremyhu@apple.com) llvm-svn: 284125
* libunwind: Add OpenBSD case for _Unwind_Ptr typedefEd Maste2016-09-281-1/+1
| | | | | | Patch by Mark Kettenis llvm-svn: 282599
* Also use the proper register numbers on CloudABI.Ed Schouten2016-09-281-1/+1
| | | | | | | Without this change applied, unw_step() fails to obtain the next frame properly. llvm-svn: 282589
* [libunwind] Add support for a single-threaded libunwind buildAsiri Rathnayake2016-09-285-14/+45
| | | | | | | | | | | | | | The EHABI unwinder is thread-agnostic, SJLJ unwinder and the DWARF unwinder have a couple of pthread dependencies. This patch makes it possible to build the whole of libunwind for a single-threaded environment. Reviewers: compnerd Differential revision: https://reviews.llvm.org/D24984 llvm-svn: 282575
* Add missing _US_ACTION_MASK constant to unwind.hDimitry Andric2016-09-051-0/+1
| | | | | | | | | | | | | | | | | | | | | | Summary: During building of recent compiler-rt sources on FreeBSD for arm, I noticed that our unwind.h (which originates in libunwind) was missing the `_US_ACTION_MASK` constant: compiler-rt/lib/builtins/gcc_personality_v0.c:187:18: error: use of undeclared identifier '_US_ACTION_MASK' if ((state & _US_ACTION_MASK) != _US_UNWIND_FRAME_STARTING) ^ It appears that both clang's internal unwind.h, and libgcc's unwind.h define this constant as 3, so let's add this to libunwind's version too. Reviewers: logan, kledzik, davide, emaste Subscribers: joerg, davide, aemerson, emaste, llvm-commits Differential Revision: https://reviews.llvm.org/D24222 llvm-svn: 280669
* consistently add \n to log and trace messagesEd Maste2016-08-3010-140/+140
| | | | | | | | | | Previously most messages included a newline in the string, but a few of them were missing. Fix these and simplify by just adding the newline in the _LIBUNWIND_LOG macro itself. Differential Revision: https://reviews.llvm.org/D24026 llvm-svn: 280103
* libunwind: fix X86 register numbers for FreeBSD/i386Ed Maste2016-08-301-0/+5
| | | | | | | | | | | | | | | | | | For historical reasons i386 has ebp and esp swapped in the eh_frame register numbering on at least Darwin. That is: Darwin FreeBSD Reg # eh_frame eh_frame DWARF ===== ======== ======== ===== 4 ebp esp esp 5 esp ebp ebp Although the UNW_X86_* constants are not intended to be coupled with DWARF / eh_frame numbering they are currently conflated in libunwind. Differential Revision: https://reviews.llvm.org/D22508 llvm-svn: 280099
* libunwind: correct 'libuwind' typoEd Maste2016-08-307-10/+10
| | | | | | | There were several instances of libuwind (missing an "n"), dating to the initial import of libunwind. llvm-svn: 280086
* EHABI: fail on WMMX vops without WMMX supportSaleem Abdulrasool2016-08-281-4/+10
| | | | | | | | | When the unwinder is built without WMMX support, if we encounter a WMMX register virtual operation, early rather than attempting to continue as we would not have saved the register set anyways. This should never come down this path, but, just in case, help it abort more explicitly. llvm-svn: 279941
* [ARM] Adding .arch directives around WMMX unwind codeRenato Golin2016-08-262-0/+4
| | | | | | | | | | | Some unwind code is purposedly old enough to work on previous architecutres and they're guaranteed to never trigger in newer architectures, so we need to add .arch directives to tell the compiler/assembler that it's fine and we know what we're doing. Fixes PR29149. llvm-svn: 279871
* EHABI: cover switch once moreSaleem Abdulrasool2016-08-181-0/+8
| | | | | | | | When making WMMX support optional, we uncovered the switch. Add the missing entries. Since the entry is a break leading to a dead path, it should get optimized out yet retain the switch overage. llvm-svn: 279180
* Allow building both shared and static libraryPetr Hosek2016-08-082-16/+42
| | | | | | | | | This change allows building both shared and static version of libunwind in a single build, sharing object files between both versions. Differential Revision: https://reviews.llvm.org/D23233 llvm-svn: 278067
* CMakeLists.txt cleanups: synchronize version and CMake minimum required ↵Eugene Zelenko2016-08-081-22/+21
| | | | | | | | version with rest of LLVM, consistent spacing. Differential revision: https://reviews.llvm.org/D23094 llvm-svn: 278029
* unwind: disable executable stacksSaleem Abdulrasool2016-08-053-0/+21
| | | | | | | Similar to compiler-rt, ensure that we disable executable stacks for the custom assembly. llvm-svn: 277868
* libunwind: correct return code in unwinding trace log messageEd Maste2016-07-291-1/+1
| | | | llvm-svn: 277215
* [libunwind][ARM] Add support for Thumb1 targetsOliver Stannard2016-07-252-15/+28
| | | | | | | | | | | | | | | | | | | The Thumb1 version of the code for saving and restoring the unwind context has a few bugs which prevent it from working: * It uses the STM instruction without writeback, which is not valid for Thumb1 (It was introduced in Thumb2). * It only saves/restores the low 8 registers, the sp and the lr, so if a program uses r8-r12 they will not be correctly restored when throwing an exception. There aren't currently any Thumb1 build-bots to test this, but we have been successfully running the libc++abi and libc++ test suites on Cortex-M0 models, as well as some other test suites that use C++ exceptions on a downstream version of libunwind with this patch applied. Differential Revision: https://reviews.llvm.org/D22292 llvm-svn: 276625
* [libunwind] Properly align _Unwind_Exception.Eric Fiselier2016-07-202-3/+27
| | | | | | | | | | | | Summary: _Unwind_Exception is required to be double word aligned. Currently the struct is under aligned. Reviewers: mclow.lists, compnerd, kledzik, emaste Subscribers: emaste, cfe-commits Differential Revision: https://reviews.llvm.org/D22543 llvm-svn: 276215
* Update .arcconfigEric Fiselier2016-07-201-1/+1
| | | | llvm-svn: 276214
* libunwind: limit stack usage in unwind cursorEd Maste2016-07-202-1/+8
| | | | | | | | Obtained from FreeBSD SVN r302475 Differential Revision: https://reviews.llvm.org/D22570 llvm-svn: 276128
* libunwind: sync some coments with NetBSD's versionEd Maste2016-07-191-13/+13
| | | | | | | | NetBSD's system unwinder is a modified version of LLVM's libunwind. Slightly reduce diffs by updating comments to match theirs where appropriate. llvm-svn: 275997
* libunwind: Use conventional DWARF capitalization in comments and errorsEd Maste2016-07-198-46/+46
| | | | llvm-svn: 275996
* [PATCH] [libunwind][ehabi] Use early returns where possible.Asiri Rathnayake2016-07-081-15/+46
| | | | | | Just a minor code cleanup. NFC. llvm-svn: 274840
* [libunwind][ARM] Improve unwinder stack usage - Make WMMX support optionalAsiri Rathnayake2016-07-076-44/+91
| | | | | | | | | | | | | These registers are only available on a limited set of ARM targets (those based on XScale). Other targets should not have to pay the cost of these. This patch shaves off about ~300 bytes of stack usage and ~1KB of code-size. Differential revision: http://reviews.llvm.org/D21991 Reviewers: bcraig, compnerd Change-Id: I2d7a1911a193bd70b123e78747e1a7d1482463c7 llvm-svn: 274744
* [libunwind] Improve unwinder stack usage - IIIAsiri Rathnayake2016-06-141-35/+35
| | | | | | | | Implement the same optimization committed under r271004 on non-EHABI, non-SJLJ unwinder as well. Change-Id: I7f80ed91a75d1e778b50ba87cf8fb68658a083c7 llvm-svn: 272680
* [libunwind] Remove unused code.Asiri Rathnayake2016-06-031-32/+0
| | | | | | | | | | The whole file is guarded with #if _LIBUNWIND_ARM_EHABI, and then in the middle we have these two blocks, which render them pretty unused. An artefact of a refactoring it seems. NFC. llvm-svn: 271737
* Attempt to fix libunwind buildEric Fiselier2016-06-021-2/+2
| | | | llvm-svn: 271466
* Add status/warning message for 32 bit buildsEric Fiselier2016-06-021-0/+10
| | | | llvm-svn: 271462
* [libunwind] Allow target flags to affect CMake configuration testsEric Fiselier2016-06-022-22/+37
| | | | | | | | | | | | | | | | | | | | | Summary: This patch changes the libunwind CMake so that it adds certain target flags like '-m32' or '--gcc-toolchain' before including config-ix.cmake. Since these flags can affect things like check_library_exists([...]) they needed to be added before the tests are performed. Additionally this patch adds LIBUNWIND_BUILD_32_BITS which defaults to LLVM_BUILD_32_BITS. This patch fixes: https://llvm.org/bugs/show_bug.cgi?id=27950 https://llvm.org/bugs/show_bug.cgi?id=27959 Reviewers: jroelofs, danalbert, bcraig, rmaprath, compnerd Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D20889 llvm-svn: 271458
* [libunwind] Improve unwinder stack usage - IIAsiri Rathnayake2016-05-271-24/+24
| | | | | | | | | | | | | | | | | | | | | | unwind_phase1 and unwind_phase2 allocate their own copies of unw_cursor_t buffers on the stack. This can blow-up stack usage of the unwinder depending on how these two functions get inlined into _Unwind_RaiseException. Clang seems to inline unwind_phase1 into _Unwind_RaiseException but not unwind_phase2, thus creating two unw_cursor_t buffers on the stack. One way to work-around this problem is to mark both unwind_phase1 and unwind_phase2 as noinline. This patch takes the less compiler-dependent approach and explicitly allocate a unw_cursor_t buffer and pass that into unwind_phase1 and unwind_phase2 functions. A follow-up patch will replicate this behavior for the non-EHABI and non-SJLJ implementations. Reviewers: jroelofs, bcraig. Differential revision: http://reviews.llvm.org/D20320 llvm-svn: 271004
* [libunwind] Disable cross-unwinding by default.Asiri Rathnayake2016-05-271-1/+1
| | | | | | | | | | | | | | Cross unwinding requires larger sizes for unw_context_t and unw_cursor_t buffers (large enough to hold the VRS of any architecture). This is not desirable for the most common situation where libunwind is used for native unwinding only. This patch makes native unwinding the default build configuration. This will start testing the tigher (compile-time) bounds of unw_context_t and unw_cursor_t buffers for each architecture. Change-Id: Ic61c476a75603ca4812959c233cfe56f83dc0b00 llvm-svn: 270972
* Use size_t to store the results of sizeof calculations.Asiri Rathnayake2016-05-261-1/+1
| | | | | | NFC. llvm-svn: 270927
* Fix gcc libunwind build.Asiri Rathnayake2016-05-263-8/+8
| | | | | | | | | | | | | | | | | | r270692 seems to have broken gcc builds of libunwind. This is because statements like: static_assert(check_fit<Registers_or1k, unw_context_t>::does_fit, "or1k registers do not fit into unw_context_t"); Do not work when static_assert is a macro taking two parameters, the extra comma separating the template parameters confuses the pre-processor. The fix is to change those statements to: static_assert((check_fit<Registers_or1k, unw_context_t>::does_fit), "or1k registers do not fit into unw_context_t"); Also fixed a gcc warning about a trivial un-intended narrowing. Differential revision: http://reviews.llvm.org/D20119 llvm-svn: 270925
* Introduce a native-only unwinder build.Asiri Rathnayake2016-05-258-31/+139
| | | | | | | | | | | | | | | | Currently libunwind is built to support cross-unwinding [1] by default, which requires the buffers unw_context_t and unw_cursor_t to be large enough to hold the vritual register set (VRS) of any supported architecture. This is not desirable for some platforms where the stack usage of the unwinder needs to be kept to a minimum (e.g. bare-metal targets). The current patch introduces a native-only (-DLIBUNWIND_ENABLE_CROSS_UNWINDING=OFF) unwinder variant that adopts strict sizes for the buffers unw_context_t and unw_cursor_t depending on the target architecture. [1] http://www.nongnu.org/libunwind/man/libunwind(3).html#section_4 Change-Id: I380fff9a56c16a0fc520e3b1d8454a34b4a48373 llvm-svn: 270692
* unwind: remove last instance of -Wexpansion-to-definedSaleem Abdulrasool2016-04-261-4/+6
| | | | | | | | | This unifies the definition of _LIBUNWIND_BUILD_SJLJ_APIS. It also further generalises the definition to allow building these APIs on non-Apple targets when `-fsjlj-excceptions` is used. The header is now clean of macros which expand to defined checks. llvm-svn: 267509
* unwind: remove unnecessary headerSaleem Abdulrasool2016-04-241-3/+0
| | | | | | | Availablity.h is not used within config.h. The locations which use the availability infrastructure already include the necessary header(s). NFC. llvm-svn: 267365
* unwind: unify _LIBUNWIND_ABORTSaleem Abdulrasool2016-04-241-18/+8
| | | | | | | | | | | Rather than use the `__assert_rtn` on libSystem based targets and a local `assert_rtn` function on others, expand the function definition into a macro which will perform the writing to stderr and then abort. This unifies the definition and behaviour across targets. Ensure that we flush stderr prior to aborting. llvm-svn: 267364
* unwind: unify some more macrosSaleem Abdulrasool2016-04-221-7/+6
| | | | | | | | The macros were defined identically across both cases. Unify the definitions to have a single definition for _LIBUWNIND_{HIDDEN,EXPORT} and _LIBUNWIND_LOG. NFC. llvm-svn: 267169
* unwind: remove another instance of -Wexpansion-to-definedSaleem Abdulrasool2016-04-201-1/+5
| | | | | | | Remove the use of undefined behaviour in the c preprocessor by always defining the value according to the state that was being checked. NFC. llvm-svn: 266927
* unwind: unify the definition of _LIBUNWIND_SUPPORT_FRAME_APISSaleem Abdulrasool2016-04-201-4/+2
| | | | | | | Unify the definition of the _LIBUNWIND_SUPPORT_FRAME_APIS macro. This is in preparation to remove another instance of -Wexpansion-to-defined. NFC. llvm-svn: 266926
* unwind: remove a second instance of -Wexpansion-to-definedSaleem Abdulrasool2016-04-201-5/+8
| | | | | | | Remove the use of undefined behaviour in the c preprocessor by always defining the value according to the state that was being checked. NFC. llvm-svn: 266916
* unwind: remove an instance of -Wexpansion-to-definedSaleem Abdulrasool2016-04-201-4/+9
| | | | | | | | | | | | This follows the pattern in the Apple clause duplicating a tuple of definitions. However, it will define them to a value rather than a defined check to remove the `-Wexpansion-to-defined` warning (which may be treated as an error). This also opens the door to unifying the two code paths into one. NFC. llvm-svn: 266915
* unwind: unify _LIBUNWIND_SUPPORT_DWARF_UNWINDSaleem Abdulrasool2016-04-201-8/+5
| | | | | | | | Join the two paths for this macro. At the end of the day, the difference was that MIPS and ARM on Apple have different behaviour. This is a setup change to remove an instance of -Wexpansion-to-defined. NFC. llvm-svn: 266913
* [AArch64] Fix libunwind build when using GNU assemblerRenato Golin2016-02-112-6/+6
| | | | | | | | | | | | | | | | | Use x29 and x30 for fp and lr respectively. This does not change the code generation with integrated asm but using x30 and x29 helps compile the code with gnu as. Currently gas fails to assemble this code with errors as below. Error: operand X should be an integer register. Newer versions of binutils should be fixed, but enough exists in the wild to make this change harmless and worthy. Patch by Khem Raj. llvm-svn: 260595
OpenPOWER on IntegriCloud