mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-01 13:20:25 +00:00
Be sure to always increment the Versym pointer.
It was getting out of sync if we had undefined symbols at the start of the symbol table. llvm-svn: 268077
This commit is contained in:
parent
74ca1cc7d0
commit
fb4f2fedd1
@ -490,16 +490,19 @@ template <class ELFT> void SharedFile<ELFT>::parseRest() {
|
||||
uint32_t NumSymbols = std::distance(Syms.begin(), Syms.end());
|
||||
SymbolBodies.reserve(NumSymbols);
|
||||
for (const Elf_Sym &Sym : Syms) {
|
||||
unsigned VersymIndex = 0;
|
||||
if (Versym) {
|
||||
VersymIndex = Versym->vs_index;
|
||||
++Versym;
|
||||
}
|
||||
|
||||
StringRef Name = check(Sym.getName(this->StringTable));
|
||||
if (Sym.isUndefined()) {
|
||||
Undefs.push_back(Name);
|
||||
continue;
|
||||
}
|
||||
|
||||
unsigned VersymIndex = 0;
|
||||
if (Versym) {
|
||||
VersymIndex = Versym->vs_index;
|
||||
++Versym;
|
||||
// Ignore local symbols and non-default versions.
|
||||
if (VersymIndex == 0 || (VersymIndex & VERSYM_HIDDEN))
|
||||
continue;
|
||||
|
BIN
lld/test/ELF/Inputs/version-undef-sym.so
Executable file
BIN
lld/test/ELF/Inputs/version-undef-sym.so
Executable file
Binary file not shown.
21
lld/test/ELF/version-undef-sym.s
Normal file
21
lld/test/ELF/version-undef-sym.s
Normal file
@ -0,0 +1,21 @@
|
||||
// REQUIRES: x86
|
||||
// RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o
|
||||
// RUN: llvm-readobj --dyn-symbols %p/Inputs/version-undef-sym.so | FileCheck %s
|
||||
|
||||
|
||||
// Show that the input .so has undefined symbols before bar. That is what would
|
||||
// get our version parsing out of sync.
|
||||
|
||||
// CHECK: Section: Undefined
|
||||
// CHECK: Section: Undefined
|
||||
// CHECK: Section: Undefined
|
||||
// CHECK: Section: Undefined
|
||||
// CHECK: Section: Undefined
|
||||
// CHECK: Name: bar
|
||||
|
||||
// But now we can successfully find bar.
|
||||
// RUN: ld.lld %t %p/Inputs/version-undef-sym.so -o %t.exe
|
||||
|
||||
.global _start
|
||||
_start:
|
||||
call bar@plt
|
Loading…
Reference in New Issue
Block a user