Skip to content

Commit

Permalink
[lldb/ObjectFileMachO] Correctly account for resolver symbols
Browse files Browse the repository at this point in the history
Summary:
The resolver addresses stored in the dyld trie are relative to the base
of the __TEXT segment. This is usually 0 in a dylib, so this was never
noticed, but it is not 0 for most dylibs integrated in the shared cache.
As we started using the shared cache images recently as symbol source,
this causes LLDB to fail to resolve symbols which go through a runtime
resolver.

Reviewers: jasonmolenda, jingham

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D84083
  • Loading branch information
fredriss committed Jul 24, 2020
1 parent 5934df0 commit 22c1636
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 1 deletion.
2 changes: 2 additions & 0 deletions lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
Expand Up @@ -1990,6 +1990,8 @@ static bool ParseTrieEntries(DataExtractor &data, lldb::offset_t offset,
if (e.entry.flags & EXPORT_SYMBOL_FLAGS_STUB_AND_RESOLVER) {
e.entry.other = data.GetULEB128(&offset);
uint64_t resolver_addr = e.entry.other;
if (text_seg_base_addr != LLDB_INVALID_ADDRESS)
resolver_addr += text_seg_base_addr;
if (is_arm)
resolver_addr &= THUMB_ADDRESS_BIT_MASK;
resolver_addresses.insert(resolver_addr);
Expand Down
3 changes: 2 additions & 1 deletion lldb/test/API/macosx/indirect_symbol/Makefile
Expand Up @@ -8,7 +8,8 @@ include Makefile.rules

build-libindirect: indirect.c
$(MAKE) -f $(MAKEFILE_RULES) \
DYLIB_C_SOURCES=indirect.c DYLIB_NAME=indirect DYLIB_ONLY=YES
DYLIB_C_SOURCES=indirect.c DYLIB_NAME=indirect DYLIB_ONLY=YES \
LD_EXTRAS="-Wl,-image_base,0x200000000"

build-libreepxoprt: reexport.c
$(MAKE) -f $(MAKEFILE_RULES) \
Expand Down

0 comments on commit 22c1636

Please sign in to comment.