diff options
author | Adrian Vogelsgesang <avogelsgesang@salesforce.com> | 2022-09-14 03:21:34 -0700 |
---|---|---|
committer | Adrian Vogelsgesang <avogelsgesang@salesforce.com> | 2022-09-16 06:29:49 -0700 |
commit | c9cffdde393f646acf62d6160e7fa6613e038508 (patch) | |
tree | 84295b1b55a222f0f07fdabc23ef5d95e4c81708 /libunwind/src | |
parent | c0ac3c114207fdef2e9cee295c85da7e843ac8d3 (diff) | |
download | llvm-c9cffdde393f646acf62d6160e7fa6613e038508.tar.gz |
[libunwind] Fix usage of `_dl_find_object` on 32-bit x86
On 32-bit x86, `_dl_find_object` also returns a `dlfo_eh_dbase` address.
So far, compiling against a version of `_dl_find_object` which returns a
`dlfo_eh_dbase` was blocked using a `#if` + `#error`. This commit now
removes this compile time assertion and simply ignores the returned
`dlfo_eh_dbase`. All test cases are passing on a 32-bit build now.
According to https://www.gnu.org/software/libc/manual/html_node/Dynamic-Linker-Introspection.html,
`dlfo_eh_dbase` should be the base address for all DW_EH_PE_datarel
relocations. However, glibc/elf/dl-find_object.h says that eh_dbase
is the relocated DT_PLTGOT value. I don't understand how those two
statements fit together, but to fix 32-bit x86, ignoring `dlfo_eh_dbase`
seems to be good enough.
Fixes #57733
Differential Revision: https://reviews.llvm.org/D133846
Diffstat (limited to 'libunwind/src')
-rw-r--r-- | libunwind/src/AddressSpace.hpp | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/libunwind/src/AddressSpace.hpp b/libunwind/src/AddressSpace.hpp index 315289cd4211..b0135b0c0519 100644 --- a/libunwind/src/AddressSpace.hpp +++ b/libunwind/src/AddressSpace.hpp @@ -584,11 +584,6 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr, // support for _dl_find_object on other unwind formats is not implemented, // yet. #if defined(DLFO_STRUCT_HAS_EH_DBASE) & defined(_LIBUNWIND_SUPPORT_DWARF_INDEX) - // We expect to run on a platform which does not use a base address for - // exception information. -#if DLFO_STRUCT_HAS_EH_DBASE -#error dlfo_eh_dbase is not supported for DWARF-based unwinding -#endif // We expect `_dl_find_object` to return PT_GNU_EH_FRAME. #if DLFO_EH_SEGMENT_TYPE != PT_GNU_EH_FRAME #error _dl_find_object retrieves an unexpected section type |