forked from OSchip/llvm-project
[ELF] Use the Repl point to avoid the segfault when using ICF
This addresses PR38918. Differential Revision: https://reviews.llvm.org/D52202 llvm-svn: 342704
This commit is contained in:
parent
45b3ddc5a4
commit
e717ae2117
|
@ -402,7 +402,7 @@ void InputSection::copyRelocations(uint8_t *Buf, ArrayRef<RelTy> Rels) {
|
|||
}
|
||||
|
||||
if (RelTy::IsRela)
|
||||
P->r_addend = Sym.getVA(Addend) - Section->getOutputSection()->Addr;
|
||||
P->r_addend = Sym.getVA(Addend) - Section->Repl->getOutputSection()->Addr;
|
||||
else if (Config->Relocatable)
|
||||
Sec->Relocations.push_back({R_ABS, Type, Rel.r_offset, Addend, &Sym});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
# REQUIRES: x86
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
|
||||
# RUN: ld.lld --emit-relocs --icf=all %t.o -o %t
|
||||
# RUN: llvm-readobj -r %t | FileCheck %s
|
||||
|
||||
# CHECK: Relocations [
|
||||
# CHECK-NEXT: Section (3) .rela.text {
|
||||
# CHECK-NEXT: 0x201000 R_X86_64_64 .text 0x11
|
||||
# CHECK-NEXT: 0x201008 R_X86_64_64 .text 0x11
|
||||
# CHECK-NEXT: 0x201011 R_X86_64_64 .rodata 0x0
|
||||
# CHECK-NEXT: }
|
||||
# CHECK-NEXT: ]
|
||||
|
||||
.rodata
|
||||
quux:
|
||||
.quad 0xfe
|
||||
|
||||
.section .text.foo,"ax"
|
||||
foo:
|
||||
.quad quux
|
||||
|
||||
.section .text.bar,"ax"
|
||||
bar:
|
||||
.quad quux
|
||||
|
||||
.text
|
||||
.quad foo
|
||||
.quad bar
|
||||
|
||||
.global _start
|
||||
_start:
|
||||
nop
|
|
@ -0,0 +1,36 @@
|
|||
# REQUIRES: x86
|
||||
# RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
|
||||
# RUN: ld.lld --gc-sections --emit-relocs --icf=all %t.o -o %t
|
||||
# RUN: llvm-readobj -r %t | FileCheck %s
|
||||
|
||||
# CHECK: Relocations [
|
||||
# CHECK-NEXT: Section (3) .rela.text {
|
||||
# CHECK-NEXT: 0x201000 R_X86_64_64 .text 0x11
|
||||
# CHECK-NEXT: 0x201008 R_X86_64_64 .text 0x11
|
||||
# CHECK-NEXT: 0x201011 R_X86_64_64 .rodata 0x0
|
||||
# CHECK-NEXT: }
|
||||
# CHECK-NEXT: ]
|
||||
|
||||
.rodata
|
||||
quux:
|
||||
.quad 0xfe
|
||||
|
||||
.section .text.foo,"ax"
|
||||
foo:
|
||||
.quad quux
|
||||
|
||||
.section .text.bar,"ax"
|
||||
bar:
|
||||
.quad quux
|
||||
|
||||
.section .text.baz,"ax"
|
||||
baz:
|
||||
.quad quux
|
||||
|
||||
.text
|
||||
.quad foo
|
||||
.quad bar
|
||||
|
||||
.global _start
|
||||
_start:
|
||||
nop
|
Loading…
Reference in New Issue