aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Devlieghere <jonas@devlieghere.com>2020-11-16 11:02:40 -0800
committerJonas Devlieghere <jonas@devlieghere.com>2020-11-16 11:04:31 -0800
commitee91e2311cf5209c39c46cd99de0fe686b7b5716 (patch)
treeae31b8d7cbf99022bf4564b91e680e6e09f32f0d
parent0b6090699ab542cde24be1565b4d97dbad153cba (diff)
downloadllvm-ee91e2311cf5209c39c46cd99de0fe686b7b5716.zip
llvm-ee91e2311cf5209c39c46cd99de0fe686b7b5716.tar.gz
llvm-ee91e2311cf5209c39c46cd99de0fe686b7b5716.tar.bz2
[dsymutil] Generalize handling of aliases external symbols
In f9fb9da36c34d2745b74dc30e6c26f7d3f48466c we fixed spurious warnings caused by aliases to private extern symbols. This patch generalizes that to regular external symbols as well.
-rw-r--r--llvm/test/tools/dsymutil/ARM/extern-alias.test (renamed from llvm/test/tools/dsymutil/ARM/private-extern-alias.test)13
-rw-r--r--llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.obin0 -> 2088 bytes
-rwxr-xr-xllvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.outbin0 -> 33504 bytes
-rw-r--r--llvm/test/tools/dsymutil/Inputs/private/tmp/extern/main.obin0 -> 1848 bytes
-rw-r--r--llvm/tools/dsymutil/MachODebugMapParser.cpp4
5 files changed, 14 insertions, 3 deletions
diff --git a/llvm/test/tools/dsymutil/ARM/private-extern-alias.test b/llvm/test/tools/dsymutil/ARM/extern-alias.test
index 99301fe..42b31c4 100644
--- a/llvm/test/tools/dsymutil/ARM/private-extern-alias.test
+++ b/llvm/test/tools/dsymutil/ARM/extern-alias.test
@@ -10,6 +10,18 @@ int* bar() {
return foo();
}
+$ cat 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() {
@@ -24,6 +36,7 @@ $ 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
+RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/extern/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 }
diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.o b/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.o
new file mode 100644
index 0000000..d48040b
--- /dev/null
+++ b/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.o
Binary files differ
diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.out b/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.out
new file mode 100755
index 0000000..f06553b
--- /dev/null
+++ b/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/extern.out
Binary files differ
diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/main.o b/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/main.o
new file mode 100644
index 0000000..6444837
--- /dev/null
+++ b/llvm/test/tools/dsymutil/Inputs/private/tmp/extern/main.o
Binary files differ
diff --git a/llvm/tools/dsymutil/MachODebugMapParser.cpp b/llvm/tools/dsymutil/MachODebugMapParser.cpp
index 3323a05..fccf2f5 100644
--- a/llvm/tools/dsymutil/MachODebugMapParser.cpp
+++ b/llvm/tools/dsymutil/MachODebugMapParser.cpp
@@ -562,9 +562,7 @@ void MachODebugMapParser::loadMainBinarySymbols(
continue;
}
Section = *SectionOrErr;
- if ((Section == MainBinary.section_end() || Section->isText()) &&
- !(SymType &
- MachO::N_PEXT)) // Alias to non-external (was a private external)
+ if ((Section == MainBinary.section_end() || Section->isText()) && !Extern)
continue;
uint64_t Addr = cantFail(Sym.getValue());
Expected<StringRef> NameOrErr = Sym.getName();