Index: llvm/test/tools/dsymutil/ARM/private-extern-alias.test =================================================================== --- /dev/null +++ llvm/test/tools/dsymutil/ARM/private-extern-alias.test @@ -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 } Index: llvm/tools/dsymutil/MachODebugMapParser.cpp =================================================================== --- llvm/tools/dsymutil/MachODebugMapParser.cpp +++ llvm/tools/dsymutil/MachODebugMapParser.cpp @@ -562,7 +562,9 @@ 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 NameOrErr = Sym.getName();