diff options
-rw-r--r-- | lld/ELF/InputFiles.cpp | 2 | ||||
-rw-r--r-- | lld/test/ELF/Inputs/version-use.script | 6 | ||||
-rwxr-xr-x | lld/test/ELF/Inputs/version-use.so | bin | 0 -> 2720 bytes | |||
-rw-r--r-- | lld/test/ELF/version-use.s | 9 |
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 Binary files differnew file mode 100755 index 00000000000..153544e99a9 --- /dev/null +++ b/lld/test/ELF/Inputs/version-use.so 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 |