forked from OSchip/llvm-project
[RuntimeDyld] Ignore ST_FILE symbols when constructing GlobalSymbolTable
Summary: ELF's STT_File symbols may overlap with regular globals in other files, so we should ignore them here in order to avoid having bogus entries in the symbol table that confuse us when resolving relocations. Reviewers: lhames Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D13888 llvm-svn: 250942
This commit is contained in:
parent
dccad5b9c3
commit
ddad187ce7
|
@ -179,7 +179,8 @@ RuntimeDyldImpl::loadObjectImpl(const object::ObjectFile &Obj) {
|
|||
if (Flags & SymbolRef::SF_Exported)
|
||||
RTDyldSymFlags |= JITSymbolFlags::Exported;
|
||||
|
||||
if (Flags & SymbolRef::SF_Absolute) {
|
||||
if (Flags & SymbolRef::SF_Absolute &&
|
||||
SymType != object::SymbolRef::ST_File) {
|
||||
auto Addr = I->getAddress();
|
||||
Check(Addr.getError());
|
||||
uint64_t SectOffset = *Addr;
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
# RUN: llvm-mc -triple=x86_64-pc-linux -relocation-model=pic -filetype=obj -o %T/test_ELF_STT_FILE_FILE_x86-64.o %p/Inputs/ELF_STT_FILE_FILE.s
|
||||
# RUN: llvm-mc -triple=x86_64-pc-linux -relocation-model=pic -filetype=obj -o %T/test_ELF_STT_FILE_GLOBAL_x86-64.o %p/Inputs/ELF_STT_FILE_GLOBAL.s
|
||||
# RUN: llvm-mc -triple=x86_64-pc-linux -relocation-model=pic -filetype=obj -o %T/test_ELF_STT_FILE_x86-64.o %s
|
||||
# RUN: llvm-rtdyld -triple=x86_64-pc-linux -verify %T/test_ELF_STT_FILE_GLOBAL_x86-64.o %T/test_ELF_STT_FILE_FILE_x86-64.o %T/test_ELF_STT_FILE_x86-64.o
|
||||
|
||||
# Test that RTDyldELF ignores STT_FILE symbols, and in particular does
|
||||
# crash if we are relocating against a symbol that happens to have the
|
||||
# same name as an STT_FILE symbol.
|
||||
|
||||
_main:
|
||||
movq foo.c@GOTPCREL(%rip), %rax
|
||||
movq bar.c@GOTPCREL(%rip), %rax
|
||||
movq $0, %rax
|
||||
retq
|
|
@ -0,0 +1,3 @@
|
|||
.file "foo.c"
|
||||
.global bar.c
|
||||
bar.c:
|
|
@ -0,0 +1,2 @@
|
|||
.global foo.c
|
||||
foo.c:
|
Loading…
Reference in New Issue