Skip to content

Commit c9cffdd

Browse files
committed
[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 llvm#57733 Differential Revision: https://reviews.llvm.org/D133846
1 parent c0ac3c1 commit c9cffdd

File tree

1 file changed

+0
-5
lines changed

1 file changed

+0
-5
lines changed

libunwind/src/AddressSpace.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -584,11 +584,6 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr,
584584
// support for _dl_find_object on other unwind formats is not implemented,
585585
// yet.
586586
#if defined(DLFO_STRUCT_HAS_EH_DBASE) & defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
587-
// We expect to run on a platform which does not use a base address for
588-
// exception information.
589-
#if DLFO_STRUCT_HAS_EH_DBASE
590-
#error dlfo_eh_dbase is not supported for DWARF-based unwinding
591-
#endif
592587
// We expect `_dl_find_object` to return PT_GNU_EH_FRAME.
593588
#if DLFO_EH_SEGMENT_TYPE != PT_GNU_EH_FRAME
594589
#error _dl_find_object retrieves an unexpected section type

0 commit comments

Comments
 (0)