Commit Graph

120 Commits

Author SHA1 Message Date
Petr Hosek df82d93562 Revert "[CMake][libunwind] Use -nodefaultlibs for CMake checks"
This reverts commit r299796.

llvm-svn: 299798
2017-04-07 20:24:22 +00:00
Petr Hosek 3dc83e5e31 [CMake][libunwind] Use -nodefaultlibs for CMake checks
Since libunwind is built with -nodefaultlibs, we should be using this
option even for CMake checks to avoid any inconsistency and also to
avoid dependency on a working C++ standard library just for the setting
up the build itself. The implementation is largely similar to the one
used by libc++.

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

llvm-svn: 299796
2017-04-07 20:10:29 +00:00
Ivan Krasin d44b262337 Fix unused typedef. Follow up to r299575.
llvm-svn: 299666
2017-04-06 17:35:35 +00:00
Saleem Abdulrasool 5c18b4406e AddressSpace: fix DWARF based unwinding handling on Android
It is possible that there are no program headers in the module.  Do not
attempt to dereference nullptr as a program header.

llvm-svn: 299591
2017-04-05 21:29:38 +00:00
Saleem Abdulrasool 9ac2cc7812 Fix invalid memory access on android x86
On certain versions of android x86, the main module `app_process` is not
built as PIE.  When accessing the PT_GNU_EH_FRAME_HDR in such a
scenario, the `dlpi_addr` is 0, but the virtual address is not
relocated.  Manually rebase the address to avoid an invalid memory
access.

llvm-svn: 299575
2017-04-05 18:33:23 +00:00
Jonathan Roelofs 978da1f4f6 Try to trigger the new docs builder. NFC
llvm-svn: 299381
2017-04-03 19:23:11 +00:00
Ranjeet Singh 5808011bd9 [libunwind] Clean up macro usage.
Convention in libunwind is to use !defined(FOOT) not !FOO.

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

llvm-svn: 299225
2017-03-31 15:28:06 +00:00
Jonathan Roelofs af9d03aafa [libunwind] Add sphinx docs
https://reviews.llvm.org/D31375

llvm-svn: 298922
2017-03-28 15:21:43 +00:00
Saleem Abdulrasool 01cf8d3348 DarwinParser: include limits
In debug mode, we have assertions that the values do not exceed the
limits of the type holding them.  In order to account for the type being
derived from the AddressSpace and thus a typedef, we use
`std::numeric_limits`.  Include the appropriate header.

Thanks to Marshal Clow for pointing out the missing include!

llvm-svn: 297744
2017-03-14 15:17:55 +00:00
Ed Schouten e2de03fd7d Fix up the places where AddressSpace.hpp is included.
The AddressSpace.hpp header declares two classes: LocalAddressSpace and
RemoteAddressSpace. These classes are only used in a very small number
of source files, but passed in as template arguments to many other
classes.

Let's go ahead and only include AddressSpace.hpp in source files where
at least one of these two classes is mentioned. This gets rid of a
cyclic header dependency that was already present, but only caused
breakage on macOS until recently.

Reported by:	Marshall Clow

llvm-svn: 297364
2017-03-09 08:04:07 +00:00
Saleem Abdulrasool e3baf13f8e DARWF: silence some warnings about conversions
Add a check for an overflow and explicitly cast the value.  We would
have silently overflowed previously.

llvm-svn: 297291
2017-03-08 16:03:27 +00:00
Ed Schouten 124472ce6f Tidy up the way we include EHHeaderParser.hpp.
Other source files in the source tree tend to include this header file
unconditionally. It also parses perfectly fine on ARM EHABI systems.

llvm-svn: 297175
2017-03-07 18:21:51 +00:00
Ed Schouten 3e29e7415e Improve readability and correctness of the OS specific libunwind bits.
All of the access to __exidx_*, dl_iterate_phdr(), etc. is specific to
the findUnwindSections() function. Right now all of the includes and
declarations related to them are scattered throughout the source file.
For example, for <link.h>, we have a full list of operating systems
guarding the #include, even though the code that uses dl_iterate_phdr()
miraculously doesn't use the same list.

Change the code so that findUnwindSections() is preceded by a block of
#ifdefs that share the same structure as the function itself. First
comes all of the macOS specific bits, followed by bare-metal ARM,
followed by ELF EHABI + DWARF.

This actually allows us to build a copy of libunwind without any
specific ifdefs for NetBSD, CloudABI, etc. It likely also unbreaks the
build of libunwind on FreeBSD/armv6, though I can't confirm.

Reviewed by:	compnerd
Differential Revision:	https://reviews.llvm.org/D30696

llvm-svn: 297174
2017-03-07 18:15:52 +00:00
Ed Schouten 4dd1292c3e Let arm_section_length store the number of bytes.
Exception section data that we extract for DWARF gets stored as the
offset and the number of bytes. For ARM exception info, we seem to
deviate from this by storing the number of entries. Attempt to make this
more consistent.

By storing the number of bytes, we can get rid of the EHTEntry structure
declared in AddressSpace.hpp. In UnwindCursor.hpp we already have
another structure declared for the same purpose.

Reviewed by:	Keith Walker
Differential Revision:	https://reviews.llvm.org/D30681

llvm-svn: 297149
2017-03-07 15:21:57 +00:00
Ed Schouten fa1ef7d89c Drop the dependency on dl_unwind_find_exidx().
While porting libunwind over to CloudABI for ARMv6, I observed that this
source file doesn't build, as it depends on dl_unwind_find_exidx(),
which CloudABI's C library was lacking. After I added that function, I
still needed to patch up libunwind to define _Unwind_Ptr.

Taking a step back, I wonder why we need to make use of this function
anyway. The unwinder already has some nice code to use dl_iterate_phdr()
to scan for a PT_GNU_EH_FRAME header. The dl_unwind_find_exidx() does
the same thing, except matching PT_ARM_EXIDX instead. We could also do
that ourselves.

This change gets rid of the dl_unwind_find_exidx() call and extends the
dl_iterate_phdr() loop. This approach has the advantage of getting rid
of some of those OS-specific #ifdefs. This now means that if an
operating system only provides dl_iterate_phdr(), it gets support for
unwinding on all architectures. There is no need to add more stuff, just
to get ARMv6 support.

This change is identical to r295944, except that it now adds the
necessary code to do bounds checking on PT_LOAD. The previous version of
this change lacked this, which didn't cause any problems on CloudABI,
but did break the Linux build bots. This is why I reverted it in
r295948.

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

llvm-svn: 296991
2017-03-05 19:11:24 +00:00
Arnaud A. de Grandmaison 5309887746 Fix the project name in the license file.
llvm-svn: 296359
2017-02-27 17:47:58 +00:00
Arnaud A. de Grandmaison 5978330c3a Add libcxxabi's LICENSE.TXT to libunwind.
When libunwind was spinned off libcxxabi, most file were copied from
libcxxabi to libunwind.  However, libc++abi's toplevel LICENSE.TXT was
forgotten in the copying. It's considered a good practice to have the
license file at the root of the project, and making linunwind a separate
project was not supposed to change its licensing. Besides, several
header files refer to the LICENSE.TXT, so copy the one from libc++abi.

llvm-svn: 296358
2017-02-27 17:33:20 +00:00
Ranjeet Singh 744dabcdcd [libunwind] Disable calls to fprintf for baremetal targets.
We've been having issues with using libcxxabi and libunwind for baremetal
targets because fprintf is dependent on io functions, this patch disables calls
to fprintf when building for baremetal in release mode.

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

llvm-svn: 296135
2017-02-24 16:38:05 +00:00
Ed Schouten 39af790bb1 Revert r295944.
Even though the change works perfectly fine on CloudABI, it fails to
work on the libcxx-libcxxabi-libunwind-arm-linux-noexceptions build bot.
Looking at the code, this may be attributed to the fact that the code
doesn't take the PT_LOAD addresses into consideration.

I will rework this change to fix that and send out an updated version
for review in the nearby future.

llvm-svn: 295948
2017-02-23 09:13:22 +00:00
Ed Schouten fd939c0f6c Drop the dependency on dl_unwind_find_exidx().
While porting libunwind over to CloudABI for ARMv6, I observed that this
source file doesn't build, as it depends on dl_unwind_find_exidx(),
which CloudABI's C library was lacking. After I added that function,
I still needed to patch up libunwind to define _Unwind_Ptr.

Taking a step back, I wonder why we need to make use of this function
anyway. The unwinder already has some nice code to use dl_iterate_phdr()
to scan for a PT_GNU_EH_FRAME header. The dl_unwind_find_exidx() does
the same thing, except matching PT_ARM_EXIDX instead. We could also do
that ourselves.

This change gets rid of the dl_unwind_find_exidx() call and extends the
dl_iterate_phdr() loop. In addition to making the code a bit shorter, it
has the advantage of getting rid of some of those OS-specific #ifdefs.

This now means that if an operating system only provides
dl_iterate_phdr(), it gets support for unwinding on all architectures.
There is no need to add more stuff, just to get ARMv6 support.

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

llvm-svn: 295944
2017-02-23 08:05:58 +00:00
Petr Hosek 63524f56f1 [libunwind][CMake] Use libc++ headers when available
libunwind depends on C++ library headers. When building libunwind
as part of LLVM and libc++ is available, use its headers.

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

llvm-svn: 295285
2017-02-16 05:18:08 +00:00
Petr Hosek ce47cf3532 Revert "[libunwind][CMake] Use libc++ headers when available"
This causing build failure on sanitizer bots because of the unused
argument '-nostdinc++' during linking of libunwind.

This reverts commit 0e14fd1a1d37b9c6d55a2d3bc7649e5b39ce74d3.

llvm-svn: 295202
2017-02-15 17:15:41 +00:00
Petr Hosek 9eff8a336b [libunwind][CMake] Use libc++ headers when available
libunwind depends on C++ library headers. When building libunwind
as part of LLVM and libc++ is available, use its headers.

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

llvm-svn: 295153
2017-02-15 06:41:57 +00:00
Petr Hosek 50b1a33211 Revert "[libunwind][CMake] Use libc++ headers when available"
This is causing build failure when building libc++abi with libunwind.

This reverts commit 42bf29501dfa79f211841de060386d539933e811.

llvm-svn: 294556
2017-02-09 03:56:47 +00:00
Petr Hosek 34f63ccc40 [libunwind][CMake] Use libc++ headers when available
libunwind depends on C++ library headers. When building libunwind
as part of LLVM and libc++ is available, use its headers.

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

llvm-svn: 294554
2017-02-09 02:20:25 +00:00
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