Commit Graph

95 Commits

Author SHA1 Message Date
Saleem Abdulrasool 2b2f4dadc4 Revert "DWARF: convert error logs to _LIBUNWIND_LOG"
This reverts SVN r292721.  Avoid the use of the GNU extension as the
preprocessor in C++11 mode requires at least one argument, and this
warning cannot be disabled, resulting in failing -Werror builds.

llvm-svn: 293257
2017-01-27 02:26:52 +00:00
Saleem Abdulrasool 9a75332cab DWARF: fix -Asserts builds
no-op the DWARF tracing macros in non-debug builds.

llvm-svn: 293008
2017-01-25 02:27:45 +00:00
Saleem Abdulrasool e6de7d333a DWARF: correct cast (NFC)
Change the case of a PRIu64 value from `long` to `uint64_t`.  NFC.

llvm-svn: 292728
2017-01-21 21:27:29 +00:00
Saleem Abdulrasool b64d3273a3 X86: swap EBP, ESP on !APPLE
Restore the `libunwind.h` enumeration values back to the inverted
values.  This diverges from the DWARF definition of the register values.
However, this allows our header to be compatible with other unwind
implementations (e.g. HP, GNU Savannah, GCC).

The register IDs are only swapped in the header and need to be unswapped
when accessing the unwind register file.  The flipped EBP and ESP only
applies on non-Apple x86 targets.

When optimizations were enabled, EBP and ESP would no longer be
equivalent.  As a result, the incorrect access on Linux would manifest
as a failure to unwind the stack.  We can now unwind the stack with and
without FPO on Linux x86.

Resolves PR30879!

llvm-svn: 292723
2017-01-21 16:22:59 +00:00
Saleem Abdulrasool c06f0cf88c DWARF: allow enabling tracing at runtime
Introduce `logDWARF` and the associated environment variable
`LIBUNWIND_PRINT_DWARF` to trace the CFI instructions.

llvm-svn: 292722
2017-01-21 16:22:57 +00:00
Saleem Abdulrasool c3bf7da9cf DWARF: convert error logs to _LIBUNWIND_LOG
Use the `_LIBUNWIND_LOG` macro instead of the explicit `fprintf` call.
NFC.

llvm-svn: 292721
2017-01-21 16:22:55 +00:00
Saleem Abdulrasool 8ecd010547 config: clean up some of the macro definition
Unify the definition of `_LIBUNWIND_LOG_NON_ZERO` to make it clear what
it is defined to and make the definition unconditional.  Reorder the
debug and tracing macros to be defined in the same order.  NFC.

llvm-svn: 292720
2017-01-21 16:22:53 +00:00
Saleem Abdulrasool eae1b66c1b rename OtherAddressSpace to RemoteAddressSpace; NFC
llvm-svn: 292719
2017-01-21 16:22:46 +00:00
Eric Fiselier b703fd32d6 Don't dump llvm-config --cmakedir output if command fails.
This patch adjusts the out-of-tree CMake configuration so that
the stderr output is ignored when an old llvm-config is found
that doesn't support --cmakedir.

llvm-svn: 291992
2017-01-14 03:46:05 +00:00
Hans Wennborg f501d07dbf Bump version to 5.0.0svn
llvm-svn: 291830
2017-01-12 21:37:55 +00:00
Michal Gorny 33f27fd842 [cmake] Obtain LLVM_CMAKE_PATH from llvm-config if available
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
2017-01-09 23:27:04 +00:00
Saleem Abdulrasool f27bfd256b EHABI: mark some functions as exported
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
2016-11-17 23:53:35 +00:00
Petr Hosek 92e71965ad [CMake] Get libunwind building under LLVM/runtimes
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
2016-11-08 23:02:49 +00:00
Marshall Clow cee23446e1 Add support for old versions of MacOS to libunwind. Fixes PR22203. Thanks to Jeremy for the bug report and the patch.
llvm-svn: 285845
2016-11-02 17:56:05 +00:00
Marshall Clow b8292c3d65 Add conditions for PPC to libunwind. Fixes PR22200. Thanks to Jeremy for the bug report and the patch.
llvm-svn: 285831
2016-11-02 16:39:55 +00:00
Nick Kledzik 56e6135774 fix _dyld_find_unwind_sections() for pre-10.7. Patch by Jeremy Sequoia
llvm-svn: 285636
2016-10-31 21:04:17 +00:00
Petr Hosek 93d28f3507 [libunwind] Add support for Fuchsia
Fuchsia is a new operating system which uses libunwind as unwinder.

Differential Revision: https://reviews.llvm.org/D25899

llvm-svn: 284951
2016-10-23 21:48:47 +00:00
Asiri Rathnayake 8295d54868 [libunwind] Add missing <stdint.h> include. NFC.
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
2016-10-13 14:32:24 +00:00
Ed Maste a2ebee6f50 libunwind: Add OpenBSD case for _Unwind_Ptr typedef
Patch by Mark Kettenis

llvm-svn: 282599
2016-09-28 15:37:21 +00:00
Ed Schouten 47ca99b372 Also use the proper register numbers on CloudABI.
Without this change applied, unw_step() fails to obtain the next frame
properly.

llvm-svn: 282589
2016-09-28 13:51:23 +00:00
Asiri Rathnayake 6264758cc8 [libunwind] Add support for a single-threaded libunwind build
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
2016-09-28 10:57:15 +00:00
Dimitry Andric 84af6d10a2 Add missing _US_ACTION_MASK constant to unwind.h
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
2016-09-05 18:01:13 +00:00
Ed Maste 92c948901a consistently add \n to log and trace messages
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
2016-08-30 15:38:10 +00:00
Ed Maste b0abba5c32 libunwind: fix X86 register numbers for FreeBSD/i386
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
2016-08-30 15:10:08 +00:00
Ed Maste e8a15cef9d libunwind: correct 'libuwind' typo
There were several instances of libuwind (missing an "n"), dating to
the initial import of libunwind.

llvm-svn: 280086
2016-08-30 13:08:21 +00:00
Saleem Abdulrasool 9d5977b199 EHABI: fail on WMMX vops without WMMX support
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
2016-08-28 20:10:33 +00:00
Renato Golin 70984fed05 [ARM] Adding .arch directives around WMMX unwind code
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
2016-08-26 21:45:39 +00:00
Saleem Abdulrasool c2f1e32365 EHABI: cover switch once more
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
2016-08-18 23:59:12 +00:00
Petr Hosek f3f5f1209e Allow building both shared and static library
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
2016-08-08 22:55:48 +00:00
Eugene Zelenko 5608df9b6a CMakeLists.txt cleanups: synchronize version and CMake minimum required version with rest of LLVM, consistent spacing.
Differential revision: https://reviews.llvm.org/D23094

llvm-svn: 278029
2016-08-08 17:56:28 +00:00
Saleem Abdulrasool f7e4524910 unwind: disable executable stacks
Similar to compiler-rt, ensure that we disable executable stacks for the custom
assembly.

llvm-svn: 277868
2016-08-05 21:35:28 +00:00
Ed Maste 1ed39291a5 libunwind: correct return code in unwinding trace log message
llvm-svn: 277215
2016-07-29 21:24:19 +00:00
Oliver Stannard 1224c809f1 [libunwind][ARM] Add support for Thumb1 targets
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
2016-07-25 09:21:56 +00:00
Eric Fiselier 19f802ff68 [libunwind] Properly align _Unwind_Exception.
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
2016-07-20 23:56:42 +00:00
Eric Fiselier de337b876f Update .arcconfig
llvm-svn: 276214
2016-07-20 23:56:17 +00:00
Ed Maste 41020b94a3 libunwind: limit stack usage in unwind cursor
Obtained from FreeBSD SVN r302475

Differential Revision:	https://reviews.llvm.org/D22570

llvm-svn: 276128
2016-07-20 15:19:09 +00:00
Ed Maste 5c5e51459f libunwind: sync some coments with NetBSD's version
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
2016-07-19 17:28:38 +00:00
Ed Maste c073b1bac9 libunwind: Use conventional DWARF capitalization in comments and errors
llvm-svn: 275996
2016-07-19 17:15:50 +00:00
Asiri Rathnayake 0bdb5f971b [PATCH] [libunwind][ehabi] Use early returns where possible.
Just a minor code cleanup. NFC.

llvm-svn: 274840
2016-07-08 12:13:31 +00:00
Asiri Rathnayake f33c3423ec [libunwind][ARM] Improve unwinder stack usage - Make WMMX support optional
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
2016-07-07 10:55:39 +00:00
Asiri Rathnayake af914fa2db [libunwind] Improve unwinder stack usage - III
Implement the same optimization committed under r271004 on non-EHABI,
non-SJLJ unwinder as well.

Change-Id: I7f80ed91a75d1e778b50ba87cf8fb68658a083c7
llvm-svn: 272680
2016-06-14 15:51:01 +00:00
Asiri Rathnayake b3698ba361 [libunwind] Remove unused code.
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
2016-06-03 20:57:48 +00:00
Eric Fiselier b1403c9d99 Attempt to fix libunwind build
llvm-svn: 271466
2016-06-02 01:50:10 +00:00
Eric Fiselier b7a373971d Add status/warning message for 32 bit builds
llvm-svn: 271462
2016-06-02 01:19:52 +00:00
Eric Fiselier 0447bde044 [libunwind] Allow target flags to affect CMake configuration tests
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
2016-06-02 01:02:10 +00:00
Asiri Rathnayake 45e59f7198 [libunwind] Improve unwinder stack usage - II
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
2016-05-27 15:41:45 +00:00
Asiri Rathnayake 85624c5de3 [libunwind] Disable cross-unwinding by default.
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
2016-05-27 08:29:27 +00:00
Asiri Rathnayake 88fe85071d Use size_t to store the results of sizeof calculations.
NFC.

llvm-svn: 270927
2016-05-26 21:56:04 +00:00
Asiri Rathnayake c6a4ab0ce3 Fix gcc libunwind build.
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
2016-05-26 21:45:54 +00:00
Asiri Rathnayake 54387eef07 Introduce a native-only unwinder build.
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
2016-05-25 12:36:34 +00:00