From b18cdeac79d0e084ac735fb1b9bbfd464d3d030c Mon Sep 17 00:00:00 2001 From: Youling Tang Date: Wed, 16 Nov 2022 15:52:27 +0800 Subject: [PATCH] [MC][LoongArch] Fix needsRelocateWithSymbol() implementation LoongArch should be `section plus offset`, so use the generic implementation of `llvm/lib/MC/MCELFObjectTargetWriter.cpp` to return `false` directly, like x86 and aarch64. ``` $ cat test.c static int __attribute__((section(".text.another"))) test(int a, int b) { return a + b; } static int a = 1, b = 2; int foo() { test(a, b); return 0; } $ gcc -c test.c $ readelf -Wr test.o Relocation section '.rela.text' at offset 0x2a0 contains 5 entries: Offset Info Type Symbol's Value Symbol's Name + Addend 0000000000000010 0000000300000047 R_LARCH_PCALA_HI20 0000000000000000 .data + 0 0000000000000014 0000000300000048 R_LARCH_PCALA_LO12 0000000000000000 .data + 0 0000000000000018 0000000300000047 R_LARCH_PCALA_HI20 0000000000000000 .data + 4 000000000000001c 0000000300000048 R_LARCH_PCALA_LO12 0000000000000000 .data + 4 0000000000000028 0000000500000042 R_LARCH_B26 0000000000000000 .text.another + 0 Relocation section '.rela.eh_frame' at offset 0x318 contains 2 entries: Offset Info Type Symbol's Value Symbol's Name + Addend 000000000000001c 0000000500000063 R_LARCH_32_PCREL 0000000000000000 .text.another + 0 000000000000003c 0000000200000063 R_LARCH_32_PCREL 0000000000000000 .text + 0 ``` Reviewed By: SixWeining, MaskRay Differential Revision: https://reviews.llvm.org/D137384 --- .../LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp | 7 ------- llvm/test/MC/LoongArch/Relocations/fde-reloc.s | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp index ee8774ed792f5..57330dd31f710 100644 --- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp +++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchELFObjectWriter.cpp @@ -24,13 +24,6 @@ class LoongArchELFObjectWriter : public MCELFObjectTargetWriter { ~LoongArchELFObjectWriter() override; - // Return true if the given relocation must be with a symbol rather than - // section plus offset. - bool needsRelocateWithSymbol(const MCSymbol &Sym, - unsigned Type) const override { - return true; - } - protected: unsigned getRelocType(MCContext &Ctx, const MCValue &Target, const MCFixup &Fixup, bool IsPCRel) const override; diff --git a/llvm/test/MC/LoongArch/Relocations/fde-reloc.s b/llvm/test/MC/LoongArch/Relocations/fde-reloc.s index 6fff459230eac..990e07c7f00bd 100644 --- a/llvm/test/MC/LoongArch/Relocations/fde-reloc.s +++ b/llvm/test/MC/LoongArch/Relocations/fde-reloc.s @@ -10,5 +10,5 @@ func: .cfi_endproc # CHECK: Section (4) .rela.eh_frame { -# CHECK-NEXT: 0x1C R_LARCH_32_PCREL - 0x0 +# CHECK-NEXT: 0x1C R_LARCH_32_PCREL .text 0x0 # CHECK-NEXT: }