[all-commits] [llvm/llvm-project] c9cffd: [libunwind] Fix usage of `_dl_find_object` on 32-b...

Adrian Vogelsgesang via All-commits all-commits at lists.llvm.org
Fri Sep 16 06:30:16 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: c9cffdde393f646acf62d6160e7fa6613e038508
      https://github.com/llvm/llvm-project/commit/c9cffdde393f646acf62d6160e7fa6613e038508
  Author: Adrian Vogelsgesang <avogelsgesang at salesforce.com>
  Date:   2022-09-16 (Fri, 16 Sep 2022)

  Changed paths:
    M libunwind/src/AddressSpace.hpp

  Log Message:
  -----------
  [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




More information about the All-commits mailing list