summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/InputFiles.cpp2
-rw-r--r--lld/test/ELF/Inputs/version-use.script6
-rwxr-xr-xlld/test/ELF/Inputs/version-use.sobin0 -> 2720 bytes
-rw-r--r--lld/test/ELF/version-use.s9
4 files changed, 16 insertions, 1 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index a5e6cd974a3..48d04f894a3 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -527,7 +527,7 @@ template <class ELFT> void SharedFile<ELFT>::parseRest() {
if (Versym) {
// Ignore local symbols and non-default versions.
- if (VersymIndex == 0 || (VersymIndex & VERSYM_HIDDEN))
+ if (VersymIndex == 0 || VersymIndex == 1 || (VersymIndex & VERSYM_HIDDEN))
continue;
}
elf::Symtab<ELFT>::X->addShared(this, Name, Sym, Verdefs[VersymIndex]);
diff --git a/lld/test/ELF/Inputs/version-use.script b/lld/test/ELF/Inputs/version-use.script
new file mode 100644
index 00000000000..5b2721b05b6
--- /dev/null
+++ b/lld/test/ELF/Inputs/version-use.script
@@ -0,0 +1,6 @@
+ABC {
+global:
+foo;
+local:
+*;
+};
diff --git a/lld/test/ELF/Inputs/version-use.so b/lld/test/ELF/Inputs/version-use.so
new file mode 100755
index 00000000000..153544e99a9
--- /dev/null
+++ b/lld/test/ELF/Inputs/version-use.so
Binary files differ
diff --git a/lld/test/ELF/version-use.s b/lld/test/ELF/version-use.s
new file mode 100644
index 00000000000..684679fdba7
--- /dev/null
+++ b/lld/test/ELF/version-use.s
@@ -0,0 +1,9 @@
+// REQUIRES: x86
+// RUN: llvm-mc %s -o %t.o -filetype=obj -triple=x86_64-pc-linux
+// RUN: ld.lld %t.o %p/Inputs/version-use.so -o %t.so -shared
+// RUN: llvm-readobj -s %t.so | FileCheck %s
+
+
+ call bar@PLT
+
+// CHECK-NOT: SHT_GNU_versym
OpenPOWER on IntegriCloud