diff options
author | Fangrui Song <i@maskray.me> | 2024-05-17 19:58:10 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-17 19:58:10 -0700 |
commit | faf39f45e3107d6bcb5f9cef8b5681c116b261d7 (patch) | |
tree | ffd9b1d94eca327439eb1bbb18679d4559731848 | |
parent | 1e9324a8c734aaa933d2672522cc22d5022c6200 (diff) | |
download | llvm-faf39f45e3107d6bcb5f9cef8b5681c116b261d7.zip llvm-faf39f45e3107d6bcb5f9cef8b5681c116b261d7.tar.gz llvm-faf39f45e3107d6bcb5f9cef8b5681c116b261d7.tar.bz2 |
Revert "[LoongArch] Use R_LARCH_ALIGN with section symbol (#84741)"
This reverts commit 01f79899ba349a0200586c8d05f5e22cca2ced31.
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
-rw-r--r-- | lld/ELF/InputSection.cpp | 6 | ||||
-rw-r--r-- | lld/test/ELF/loongarch-relax-align-ldr.s | 28 | ||||
-rw-r--r-- | lld/test/ELF/loongarch-relax-emit-relocs.s | 5 | ||||
-rw-r--r-- | llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp | 7 | ||||
-rw-r--r-- | llvm/test/MC/LoongArch/Relocations/relax-addsub.s | 2 | ||||
-rw-r--r-- | llvm/test/MC/LoongArch/Relocations/relax-align.s | 14 |
6 files changed, 15 insertions, 47 deletions
diff --git a/lld/ELF/InputSection.cpp b/lld/ELF/InputSection.cpp index 2a1ccd9..e6c5996 100644 --- a/lld/ELF/InputSection.cpp +++ b/lld/ELF/InputSection.cpp @@ -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 diff --git a/lld/test/ELF/loongarch-relax-align-ldr.s b/lld/test/ELF/loongarch-relax-align-ldr.s deleted file mode 100644 index 6534dc9..0000000 --- a/lld/test/ELF/loongarch-relax-align-ldr.s +++ /dev/null @@ -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 diff --git a/lld/test/ELF/loongarch-relax-emit-relocs.s b/lld/test/ELF/loongarch-relax-emit-relocs.s index 9007f8f..581fce8 100644 --- a/lld/test/ELF/loongarch-relax-emit-relocs.s +++ b/lld/test/ELF/loongarch-relax-emit-relocs.s @@ -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 diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp index 98f5014..de492f2 100644 --- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp +++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchAsmBackend.cpp @@ -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; } diff --git a/llvm/test/MC/LoongArch/Relocations/relax-addsub.s b/llvm/test/MC/LoongArch/Relocations/relax-addsub.s index 0e27d63..18e0ede 100644 --- a/llvm/test/MC/LoongArch/Relocations/relax-addsub.s +++ b/llvm/test/MC/LoongArch/Relocations/relax-addsub.s @@ -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 diff --git a/llvm/test/MC/LoongArch/Relocations/relax-align.s b/llvm/test/MC/LoongArch/Relocations/relax-align.s index 0246d5b..294fd9f 100644 --- a/llvm/test/MC/LoongArch/Relocations/relax-align.s +++ b/llvm/test/MC/LoongArch/Relocations/relax-align.s @@ -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: ] |