Age | Commit message (Collapse) | Author |
|
am: 5a384dca27
Change-Id: I107750ca880474f1a84f2ca6d54cf8d981a0865f
|
|
am: ef1c6322b5
Change-Id: Ic64f31b9fdeb224ef10cb89db10d26bc671ae186
|
|
am: 2dd29ac655
Change-Id: Ia2b95f735849b33a1bcf03b5afcb7c3538c3e95a
|
|
This makes it possible to unwind hardware exception stack frames,
which necessarily save every register and so need an extra column
for storing the return address. CFI for the exception handler could
then look as follows:
.globl exception_vector
exception_vector:
.cfi_startproc
.cfi_signal_frame
.cfi_return_column 32
l.addi r1, r1, -0x100
.cfi_def_cfa_offset 0x100
l.sw 0x00(r1), r2
.cfi_offset 2, 0x00-0x100
l.sw 0x04(r1), r3
.cfi_offset 3, 0x04-0x100
l.sw 0x08(r1), r4
.cfi_offset 4, 0x08-0x100
l.mfspr r3, r0, SPR_EPCR_BASE
l.sw 0x78(r1), r3
.cfi_offset 32, 0x78-0x100
l.jal exception_handler
l.nop
l.lwz r2, 0x00(r1)
l.lwz r3, 0x04(r1)
l.lwz r4, 0x08(r1)
l.jr r9
l.nop
.cfi_endproc
This register could, of course, also be accessed by the trace
callback or personality function, if so desired.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@332513 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Before this commit, R9, the link register, was used as PC register.
However, a stack frame may have R9 not set to PC on entry, either
because it uses a custom calling convention, or, more likely,
because this is a signal or exception stack frame. Using R9 as
PC register made it impossible to unwind such frames.
All other architectures similarly use a dedicated PC register.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@332512 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Summary:
For MIPS ABIs with 64-bit floating point registers including newabi
and O32 with 64-bit floating point registers, just save and restore the
32 floating-point registers as doubles.
For O32 MIPS with 32-bit floating-point registers, save and restore the
individual floating-point registers as "plain" registers. These registers
are encoded as floats rather than doubles, but the DWARF unwinder
assumes that floating-point registers are stored as doubles when reading
them from memory (via AddressSpace::getDouble()). Treating the
registers as "normal" registers instead causes the DWARF unwinder to
fetch them from memory as a 32-bit register. This does mean that for
O32 with 32-bit floating-point registers unw_get_fpreg() and
unw_set_fpreg() do not work. One would have to use unw_get_reg()
and unw_set_reg() instead. However, DWARF unwinding works
correctly as the DWARF CFI emits records for individual 32-bit
floating-point registers even when they are treated as doubles stored
in paired registers. If the lack of unw_get/set_fpreg() becomes a pressing
need in the future for O32 MIPS we could add in special handling to
make it work.
Reviewers: sdardis, compnerd
Reviewed By: sdardis
Differential Revision: https://reviews.llvm.org/D41968
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@332414 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Change-Id: I8238c8ce5cfb5dfcb8ca870c3228b9eaa266d648
|
|
Libraries that are direct or indirect dependencies of modules installed
to recovery partition (e.g. toybox) are marked as recovery_available:
true. This allows a recovery variant of the lib is created when it is
depended by other recovery or recovery_available modules.
Bug: 67916654
Bug: 64960723
Test: m -j
Change-Id: I3baf6e927415dd8b7e0682ab2382d75ff1ff2c4d
|
|
am: 710b550421
Change-Id: Ie0bd0ca7426a1d7145c9d1dfde7cafcc4bccaf81
|
|
am: 686292e416
Change-Id: Id7846683f0576cb1020d3660a534788aaddb48b6
|
|
am: 34ed2ea33c
Change-Id: Ie5b396574adfee6bb0aaa62ceee226477e234933
|
|
Bug: http://b/78476183
Symbols from libunwind_llvm are supposed to have hidden visibility and
enforced with '-Wl,--exclude-libs'. With LTO, the archive with these
symbols may not match the file to --exclude-libs, thereby causing them
to be exported.
Test: Verify that libhwbinder.so with LTO has hidden visiblity for
_Unwind_VRS_Set
Change-Id: I84292e97d6af42448165f515f2e11c6bc2ee9f63
(cherry picked from commit 715c14fe7507ebd11b061cd3f0ac991c4710594e)
|
|
am: 95e46bcf83
Change-Id: I9ffc74001115ef0b210cfc797cf430db941296a9
|
|
am: 715c14fe75
Change-Id: Ic0bc626f70ab9eb290f06336ebeec01d1183a0ac
|
|
Bug: http://b/78476183
Symbols from libunwind_llvm are supposed to have hidden visibility and
enforced with '-Wl,--exclude-libs'. With LTO, the archive with these
symbols may not match the file to --exclude-libs, thereby causing them
to be exported.
Test: Verify that libhwbinder.so with LTO has hidden visiblity for
_Unwind_VRS_Set
Change-Id: I84292e97d6af42448165f515f2e11c6bc2ee9f63
|
|
CMAKE_CXX_FLAGS and CMAKE_C_FLAGS are added twice to the command line.
This causes the command line options to be doubled which works until
it doesn't as not all options can be specified twice.
For example,
clang-cl foo.c /GS- /GS- -mllvm -small-loop-cost=1 -mllvm -small-loop-cost=1
clang (LLVM option parsing): for the -small-loop-cost option: may only occur zero or one times!
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@329340 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Support finding libcxx sources in monorepo style layout.
Differential Revision: https://reviews.llvm.org/D45270
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@329212 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Summary:
N32 uses the same register context as N64. However, N32 requires one
change to properly fetch addresses from registers stored in memory.
Since N32 is an ILP32 platform, getP() only fetches the first 32-bits
of a stored register. For a big-endian platform this fetches the
upper 32-bits which will be zero. To fix this, add a new
getRegister() method to AddressSpace which is responsible for
extracting the address stored in a register in memory. This matches
getP() for all current ABIs except for N32 where it reads the 64-bit
register and returns the low 32-bits as an address. The
DwarfInstructions::getSavedRegister() method uses
AddressSpace::getRegister() instead of AddressSpace::getP().
Reviewers: sdardis, compnerd
Reviewed By: sdardis
Differential Revision: https://reviews.llvm.org/D39074
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@326250 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Summary:
This is done via new LIBUNWIND_TEST_COMPILER_FLAGS and
LIBUNWIND_TEST_LINKER_FLAGS variables.
Reviewed By: sdardis
Differential Revision: https://reviews.llvm.org/D43585
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@326223 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
llvm_setup_rpath() is available instead.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@323601 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Otherwise, a shared library build with SJLJ APIs enabled would
end up with duplicate symbols.
This didn't occur for the apple && arm case due to specifically
checking for that in the surrounding ifdef.
Differential Revision: https://reviews.llvm.org/D42555
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@323499 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Clang and llvm already use llvm_setup_rpath(), so this change will
help standarize rpath usage across all projects.
Differential Revision: https://reviews.llvm.org/D42461
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@323496 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
When CMAKE_SYSROOT or CMAKE_FIND_ROOT_PATH is set, cmake
recommends setting CMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY
globally which means find_path() always prepends CMAKE_SYSROOT or
CMAKE_FIND_ROOT_PATH to all paths used in the search.
However, this find_path() invocation is looking for a path in the
libcxx project on the host system, not the target system,
which can be done by passing NO_CMAKE_FIND_ROOT_PATH.
Differential Revision: https://reviews.llvm.org/D41621
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@323141 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
The Registers_ppc64 class needed a couple of changes, both to accommodate the
new registers as well as to handle the overlaps of VS register set
without wasting space.
The save/restore code of V and VS registers was added.
As VS registers depend on the VMX extension, they are processed only if
VMX support is detected (_ARCH_PWR8 for now).
Patch by Leandro Lupori!
Differential Revision: https://reviews.llvm.org/D41906
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@322596 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
See http://lists.llvm.org/pipermail/cfe-dev/2017-November/056032.html
for related discussion and context.
Differential Revision: https://reviews.llvm.org/D41918
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@322228 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
This is in preparation for adding support for N32 unwinding which reuses
the newabi register class.
Reviewed By: compnerd
Differential Revision: https://reviews.llvm.org/D41842
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@322093 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321743 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321732 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Initial working version of libunwind for PowerPC 64. Tested on
little-endian ppc64 host only.
Based on the existing PowerPC 32 code.
It supports:
- context save/restore (unw_getcontext, unw_init_local, unw_resume)
- read/write from/to saved registers
- backtrace (unw_step)
Patch by Leandro Lupori!
Differential Revision: https://reviews.llvm.org/D41386
Now builds with LIBUNWIND_ENABLE_CROSS_UNWINDING=ON should
work.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321680 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
assert
For builds that only target one architecture, this was required to
be an exact match, while it previously required the allocation to be
strictly larger than the largest concrete one. Requiring it to be
larger than on equal should be enough.
This makes it more straightforward to update _LIBUNWIND_CONTEXT_SIZE
and _LIBUNWIND_CURSOR_SIZE.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321679 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Differential Revision: https://reviews.llvm.org/D41386
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321678 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Initial working version of libunwind for PowerPC 64. Tested on
little-endian ppc64 host only.
Based on the existing PowerPC 32 code.
It supports:
- context save/restore (unw_getcontext, unw_init_local, unw_resume)
- read/write from/to saved registers
- backtrace (unw_step)
Patch by Leandro Lupori!
Differential Revision: https://reviews.llvm.org/D41386
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321667 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Instead, cast them to `void *` which has a portable format string syntax
of `%p`.
This fixes a -Wformat error when building libunwind.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321469 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Per review by Don Hinton.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321448 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321446 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Right now, ARM EHABI unwind on bare metal expects to find the symbols
__exidx_start and __exidx_end defined, and uses those to locate
the EH tables. However, DWARF unwind on bare metal expects to find
dl_iterate_phdr, which, although possible to provide, is inconvenient
and mildly absurd.
This commit provides feature parity with ARM EHABI unwind by looking
for symbols __eh_frame_start, __eh_frame_end, __eh_frame_hdr_start
and __eh_frame_hdr_end, denoting the start and end of the sections
with corresponding names. As far as I know, there is no de jure or
de facto ABI providing any such names, so I chose the obvious ones.
The .eh_frame_hdr support is optional for maximum flexibility and
possible space savings (e.g. if libunwind is only used to provide
backtraces when a device crashes, providing the .eh_frame_hdr, which
is an index for rapid access to EH tables, would be a waste.)
The support for .eh_frame_hdr/DWARF index in the first place is
conditional on defined(_LIBUNWIND_SUPPORT_DWARF_INDEX), although
right now config.h will always define this macro.
The support for DWARF unwind on bare metal has been validated within
the ARTIQ environment[1].
[1]: https://m-labs.hk/artiq/
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321445 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321442 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Use the `_LIBUNWIND_LOG` and `_LIBUNWIND_LOG0` macros instead of
the explicit `fprintf` call.
This was previously done in r292721 as a cleanup and then reverted
in r293257 because the implementation in r292721 relied on a GNU
extension. This implementation avoids the use of an extension
by using a second macro instead, and allows to avoid the dependency
on fprintf if _LIBUNWIND_BARE_METAL is defined.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321441 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
This is useful for building libunwind on libcxx-free systems.
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@321440 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Change-Id: Idafa76179a3924364aa8c1b9c1dc7dba7532bed4
|
|
am: 07a8c48f58
Change-Id: I8820bbd2f1f4d06929648b29caf5d5e407ce805e
|
|
am: b92b9a89cb
Change-Id: I3ffbbaf9541d6ab18f7711e42fe275028282b304
|
|
am: 9ca0ad7a15
Change-Id: I95e6c15c01b8f081e1eb7675e1f97b109e723118
|
|
Gets us https://reviews.llvm.org/D39468 which lets us update the
NDK's version of the unwinder.
Test: make native
Test: external/libcxx/run_tests.py # no regressions
Bug: https://github.com/rust-lang/rust/issues/17520
Change-Id: I1284fb151c00f1ae4350c73ad9033246720d5190
|
|
This supports the soft-float ABI only and has been tested with both clang
and gcc on FreeBSD.
Reviewed By: sdardis, compnerd
Differential Revision: https://reviews.llvm.org/D38110
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@320528 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
This supports using a newer libunwind with an older installation of LLVM
(whose cmake modules wouldn't have add_llvm_install_targets).
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@320163 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
This follows the setup used by other runtimes and is expected by
the lit configuration.
Differential Revision: https://reviews.llvm.org/D40820
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@319830 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
These are expected to be set by the shared lit scripts used from
libc++.
Differential Revision: https://reviews.llvm.org/D40817
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@319823 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
This gains us the install-unwind-stripped target, to perform stripping
during installation.
Differential Revision: https://reviews.llvm.org/D40685
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@319498 91177308-0d34-0410-b5e6-96231b3b80d8
|
|
Differential Revision: https://reviews.llvm.org/D40483
git-svn-id: https://llvm.org/svn/llvm-project/libunwind/trunk@319300 91177308-0d34-0410-b5e6-96231b3b80d8
|