Revert "[LoongArch] Use R_LARCH_ALIGN with section symbol (#84741)"
This reverts commit 01f79899ba.
This unusual special case has been discussed on the binutils mailing
list. The approach will be revisited:
https://sourceware.org/pipermail/binutils/2024-May/134092.html
Pull Request: https://github.com/llvm/llvm-project/pull/92584
This commit is contained in:
@@ -471,11 +471,7 @@ void InputSection::copyRelocations(uint8_t *buf,
|
||||
addend += sec->getFile<ELFT>()->mipsGp0;
|
||||
}
|
||||
|
||||
if (config->emachine == EM_LOONGARCH && type == R_LARCH_ALIGN)
|
||||
// LoongArch psABI v2.30, the R_LARCH_ALIGN requires symbol index.
|
||||
// If it use the section symbol, the addend should not be changed.
|
||||
p->r_addend = addend;
|
||||
else if (RelTy::IsRela)
|
||||
if (RelTy::IsRela)
|
||||
p->r_addend = sym.getVA(addend) - section->getOutputSection()->addr;
|
||||
// For SHF_ALLOC sections relocated by REL, append a relocation to
|
||||
// sec->relocations so that relocateAlloc transitively called by
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
# REQUIRES: loongarch
|
||||
## Test `ld -r` not changes the addend of R_LARCH_ALIGN.
|
||||
|
||||
# RUN: llvm-mc --filetype=obj --triple=loongarch64 --mattr=+relax %s -o %t.64.o
|
||||
# RUN: ld.lld -r %t.64.o %t.64.o -o %t.64.r
|
||||
# RUN: llvm-objdump -dr --no-show-raw-insn %t.64.r | FileCheck %s
|
||||
|
||||
# CHECK: <.text>:
|
||||
# CHECK-NEXT: break 1
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: {{0*}}04: R_LARCH_ALIGN .text+0x804
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: break 2
|
||||
# CHECK-NEXT: break 0
|
||||
# CHECK-NEXT: break 0
|
||||
# CHECK-NEXT: break 0
|
||||
# CHECK-NEXT: break 1
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: {{0*}}24: R_LARCH_ALIGN .text+0x804
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: break 2
|
||||
|
||||
.text
|
||||
break 1
|
||||
.p2align 4, , 8
|
||||
break 2
|
||||
@@ -25,7 +25,7 @@
|
||||
# CHECK-NEXT: R_LARCH_PCALA_LO12 _start
|
||||
# CHECK-NEXT: R_LARCH_RELAX *ABS*
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: R_LARCH_ALIGN .text+0x4
|
||||
# CHECK-NEXT: R_LARCH_ALIGN .Lla-relax-align0+0x4
|
||||
# CHECK-NEXT: nop
|
||||
# CHECK-NEXT: ret
|
||||
|
||||
@@ -37,12 +37,11 @@
|
||||
# CHECKR-NEXT: R_LARCH_PCALA_LO12 _start
|
||||
# CHECKR-NEXT: R_LARCH_RELAX *ABS*
|
||||
# CHECKR-NEXT: nop
|
||||
# CHECKR-NEXT: R_LARCH_ALIGN .text+0x4
|
||||
# CHECKR-NEXT: R_LARCH_ALIGN .Lla-relax-align0+0x4
|
||||
# CHECKR-NEXT: nop
|
||||
# CHECKR-NEXT: nop
|
||||
# CHECKR-NEXT: ret
|
||||
|
||||
.text
|
||||
.global _start
|
||||
_start:
|
||||
la.pcrel $a0, _start
|
||||
|
||||
@@ -226,8 +226,11 @@ bool LoongArchAsmBackend::shouldInsertFixupForCodeAlign(
|
||||
MCFixup::create(0, Dummy, MCFixupKind(LoongArch::fixup_loongarch_align));
|
||||
const MCSymbolRefExpr *MCSym = getSecToAlignSym()[Sec];
|
||||
if (MCSym == nullptr) {
|
||||
// Use section symbol directly.
|
||||
MCSym = MCSymbolRefExpr::create(Sec->getBeginSymbol(), Ctx);
|
||||
// Create a symbol and make the value of symbol is zero.
|
||||
MCSymbol *Sym = Ctx.createNamedTempSymbol("la-relax-align");
|
||||
Sym->setFragment(&*Sec->getBeginSymbol()->getFragment());
|
||||
Asm.registerSymbol(*Sym);
|
||||
MCSym = MCSymbolRefExpr::create(Sym, Ctx);
|
||||
getSecToAlignSym()[Sec] = MCSym;
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
# RELAX: Relocations [
|
||||
# RELAX-NEXT: Section ({{.*}}) .rela.text {
|
||||
# RELAX-NEXT: 0x4 R_LARCH_ALIGN .text 0x4
|
||||
# RELAX-NEXT: 0x4 R_LARCH_ALIGN {{.*}} 0x4
|
||||
# RELAX-NEXT: 0x10 R_LARCH_PCALA_HI20 .L1 0x0
|
||||
# RELAX-NEXT: 0x10 R_LARCH_RELAX - 0x0
|
||||
# RELAX-NEXT: 0x14 R_LARCH_PCALA_LO12 .L1 0x0
|
||||
|
||||
@@ -63,19 +63,17 @@ ret
|
||||
## Test the symbol index is different from .text.
|
||||
.section .text2, "ax"
|
||||
.p2align 4
|
||||
.p2align 4, , 4
|
||||
break 7
|
||||
|
||||
# RELOC: Relocations [
|
||||
# RELAX-RELOC-NEXT: Section ({{.*}}) .rela.text {
|
||||
# RELAX-RELOC-NEXT: 0x24 R_LARCH_ALIGN .text 0x4
|
||||
# RELAX-RELOC-NEXT: 0x34 R_LARCH_ALIGN .text 0x5
|
||||
# RELAX-RELOC-NEXT: 0x50 R_LARCH_ALIGN .text 0x4
|
||||
# RELAX-RELOC-NEXT: 0x60 R_LARCH_ALIGN .text 0xB04
|
||||
# RELAX-RELOC-NEXT: 0x70 R_LARCH_ALIGN .text 0x4
|
||||
# RELAX-RELOC-NEXT: 0x24 R_LARCH_ALIGN .Lla-relax-align0 0x4
|
||||
# RELAX-RELOC-NEXT: 0x34 R_LARCH_ALIGN .Lla-relax-align0 0x5
|
||||
# RELAX-RELOC-NEXT: 0x50 R_LARCH_ALIGN .Lla-relax-align0 0x4
|
||||
# RELAX-RELOC-NEXT: 0x60 R_LARCH_ALIGN .Lla-relax-align0 0xB04
|
||||
# RELAX-RELOC-NEXT: 0x70 R_LARCH_ALIGN .Lla-relax-align0 0x4
|
||||
# RELAX-RELOC-NEXT: }
|
||||
# RELAX-RELOC-NEXT: Section ({{.*}}) .rela.text2 {
|
||||
# RELAX-RELOC-NEXT: 0x0 R_LARCH_ALIGN .text2 0x4
|
||||
# RELAX-RELOC-NEXT: 0xC R_LARCH_ALIGN .text2 0x404
|
||||
# RELAX-RELOC-NEXT: 0x0 R_LARCH_ALIGN .Lla-relax-align1 0x4
|
||||
# RELAX-RELOC-NEXT: }
|
||||
# RELOC-NEXT: ]
|
||||
|
||||
Reference in New Issue
Block a user