forked from OSchip/llvm-project
Don't set dso_local flag in LTO resolutions for absolute symbols defined in ELF
objects, it confuses codegen into generating pc-rel relocations for those symbols, which leads to linker errors. Differential Revision: https://reviews.llvm.org/D42977 llvm-svn: 324435
This commit is contained in:
parent
532fa0e1ca
commit
c84e0ee0e2
|
@ -154,8 +154,14 @@ void BitcodeCompiler::add(BitcodeFile &F) {
|
||||||
R.VisibleToRegularObj = Config->Relocatable || Sym->IsUsedInRegularObj ||
|
R.VisibleToRegularObj = Config->Relocatable || Sym->IsUsedInRegularObj ||
|
||||||
(R.Prevailing && Sym->includeInDynsym()) ||
|
(R.Prevailing && Sym->includeInDynsym()) ||
|
||||||
UsedStartStop.count(ObjSym.getSectionName());
|
UsedStartStop.count(ObjSym.getSectionName());
|
||||||
|
const auto *DR = dyn_cast<Defined>(Sym);
|
||||||
R.FinalDefinitionInLinkageUnit =
|
R.FinalDefinitionInLinkageUnit =
|
||||||
Sym->isDefined() && (IsExecutable || Sym->Visibility != STV_DEFAULT);
|
(IsExecutable || Sym->Visibility != STV_DEFAULT) && DR &&
|
||||||
|
// Skip absolute symbols from ELF objects, otherwise PC-rel relocations
|
||||||
|
// will be generated by for them, triggering linker errors.
|
||||||
|
// Symbol section is always null for bitcode symbols, hence the check
|
||||||
|
// for isElf().
|
||||||
|
!(Sym->File && Sym->File->isElf() && DR->Section == nullptr);
|
||||||
|
|
||||||
if (R.Prevailing)
|
if (R.Prevailing)
|
||||||
undefine(Sym);
|
undefine(Sym);
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
.globl blah
|
||||||
|
blah = 0xdeadbeef
|
|
@ -0,0 +1,14 @@
|
||||||
|
; REQUIRES: x86
|
||||||
|
|
||||||
|
; RUN: llvm-as %s -o %t.o
|
||||||
|
; RUN: llvm-mc -triple=x86_64-pc-linux %p/Inputs/absolute.s -o %t2.o -filetype=obj
|
||||||
|
; RUN: ld.lld %t.o %t2.o -o %t.out -pie
|
||||||
|
|
||||||
|
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
|
||||||
|
target triple = "x86_64-unknown-linux-gnu"
|
||||||
|
|
||||||
|
@blah = external global i8, align 1
|
||||||
|
|
||||||
|
define i8* @_start() {
|
||||||
|
ret i8* @blah
|
||||||
|
}
|
Loading…
Reference in New Issue