forked from OSchip/llvm-project
[dsymutil] Fix handling of aliases to private external symbols
dsymutil was incorrectly ignoring aliases to private extern symbols in the MachODebugMapParser. This resulted in spurious warnings about not being able to find symbols. rdar://49652389 Differential revision: https://reviews.llvm.org/D89444
This commit is contained in:
parent
54c1bcab90
commit
f9fb9da36c
|
@ -0,0 +1,29 @@
|
|||
$ cat private_extern.c
|
||||
__attribute__((visibility("hidden")))
|
||||
int* foo() {
|
||||
int i = 10;
|
||||
volatile int* j = &i;
|
||||
return j;
|
||||
}
|
||||
|
||||
int* bar() {
|
||||
return foo();
|
||||
}
|
||||
|
||||
$ cat main.c
|
||||
int* bar();
|
||||
int main() {
|
||||
return *bar();
|
||||
}
|
||||
|
||||
$ cat alias_list
|
||||
_foo _baz
|
||||
|
||||
$ xcrun --sdk iphoneos clang -g private_extern.c -c -o private_extern.o -target arm64-apple-ios14.0
|
||||
$ xcrun --sdk iphoneos clang -g main.c -c -o main.o -target arm64-apple-ios14.0
|
||||
$ xcrun --sdk iphoneos clang private_extern.o main.o -target arm64-apple-ios14.0 -o private_extern.out -Xlinker -alias_list -Xlinker alias_list
|
||||
|
||||
RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/private_extern/private_extern.out -o %t.dSYM --verbose 2>&1 | FileCheck %s
|
||||
CHECK-NOT: could not find object file symbol for symbol _baz
|
||||
CHECK: { sym: _foo, objAddr: 0x0000000000000000, binAddr: 0x0000000100007F58, size: 0x00000020 }
|
||||
CHECK: { sym: _baz, objAddr: 0x0000000000000000, binAddr: 0x0000000100007F58, size: 0x00000000 }
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -562,7 +562,9 @@ void MachODebugMapParser::loadMainBinarySymbols(
|
|||
continue;
|
||||
}
|
||||
Section = *SectionOrErr;
|
||||
if (Section == MainBinary.section_end() || Section->isText())
|
||||
if ((Section == MainBinary.section_end() || Section->isText()) &&
|
||||
!(SymType &
|
||||
MachO::N_PEXT)) // Alias to non-external (was a private external)
|
||||
continue;
|
||||
uint64_t Addr = cantFail(Sym.getValue());
|
||||
Expected<StringRef> NameOrErr = Sym.getName();
|
||||
|
|
Loading…
Reference in New Issue