[llvm] 3448695 - [llvm][LoongArch] Add reloc types for LA32R/LA32S (#175352)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jan 11 07:04:19 PST 2026
Author: hev
Date: 2026-01-11T23:04:14+08:00
New Revision: 3448695896a1acec8f0b8d09fe8a8b3890be077a
URL: https://github.com/llvm/llvm-project/commit/3448695896a1acec8f0b8d09fe8a8b3890be077a
DIFF: https://github.com/llvm/llvm-project/commit/3448695896a1acec8f0b8d09fe8a8b3890be077a.diff
LOG: [llvm][LoongArch] Add reloc types for LA32R/LA32S (#175352)
This patch introduces the relocation types added in la-abi-sepcs v2.50.
Link: https://github.com/loongson/la-abi-specs/pull/16
Added:
Modified:
llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
llvm/unittests/Object/ELFTest.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
index 4859057abcbb9..96e2c1645b57a 100644
--- a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
+++ b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
@@ -149,3 +149,21 @@ ELF_RELOC(R_LARCH_TLS_LE_LO12_R, 123)
ELF_RELOC(R_LARCH_TLS_LD_PCREL20_S2, 124)
ELF_RELOC(R_LARCH_TLS_GD_PCREL20_S2, 125)
ELF_RELOC(R_LARCH_TLS_DESC_PCREL20_S2, 126)
+
+// Relocs added in ELF for the LoongArchâ„¢ Architecture v20251210, part of the
+// v2.50 LoongArch ABI specs.
+//
+// Spec addition: https://github.com/loongson/la-abi-specs/pull/16
+ELF_RELOC(R_LARCH_CALL30, 127)
+ELF_RELOC(R_LARCH_PCADD_HI20, 128)
+ELF_RELOC(R_LARCH_PCADD_LO12, 129)
+ELF_RELOC(R_LARCH_GOT_PCADD_HI20, 130)
+ELF_RELOC(R_LARCH_GOT_PCADD_LO12, 131)
+ELF_RELOC(R_LARCH_TLS_IE_PCADD_HI20, 132)
+ELF_RELOC(R_LARCH_TLS_IE_PCADD_LO12, 133)
+ELF_RELOC(R_LARCH_TLS_LD_PCADD_HI20, 134)
+ELF_RELOC(R_LARCH_TLS_LD_PCADD_LO12, 135)
+ELF_RELOC(R_LARCH_TLS_GD_PCADD_HI20, 136)
+ELF_RELOC(R_LARCH_TLS_GD_PCADD_LO12, 137)
+ELF_RELOC(R_LARCH_TLS_DESC_PCADD_HI20, 138)
+ELF_RELOC(R_LARCH_TLS_DESC_PCADD_LO12, 139)
diff --git a/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test b/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
index 26c4e8f5ca846..6d0569b9f6437 100644
--- a/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
+++ b/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
@@ -119,6 +119,19 @@
# CHECK: Type: R_LARCH_TLS_LD_PCREL20_S2 (124)
# CHECK: Type: R_LARCH_TLS_GD_PCREL20_S2 (125)
# CHECK: Type: R_LARCH_TLS_DESC_PCREL20_S2 (126)
+# CHECK: Type: R_LARCH_CALL30 (127)
+# CHECK: Type: R_LARCH_PCADD_HI20 (128)
+# CHECK: Type: R_LARCH_PCADD_LO12 (129)
+# CHECK: Type: R_LARCH_GOT_PCADD_HI20 (130)
+# CHECK: Type: R_LARCH_GOT_PCADD_LO12 (131)
+# CHECK: Type: R_LARCH_TLS_IE_PCADD_HI20 (132)
+# CHECK: Type: R_LARCH_TLS_IE_PCADD_LO12 (133)
+# CHECK: Type: R_LARCH_TLS_LD_PCADD_HI20 (134)
+# CHECK: Type: R_LARCH_TLS_LD_PCADD_LO12 (135)
+# CHECK: Type: R_LARCH_TLS_GD_PCADD_HI20 (136)
+# CHECK: Type: R_LARCH_TLS_GD_PCADD_LO12 (137)
+# CHECK: Type: R_LARCH_TLS_DESC_PCADD_HI20 (138)
+# CHECK: Type: R_LARCH_TLS_DESC_PCADD_LO12 (139)
--- !ELF
FileHeader:
@@ -245,3 +258,16 @@ Sections:
- Type: R_LARCH_TLS_LD_PCREL20_S2
- Type: R_LARCH_TLS_GD_PCREL20_S2
- Type: R_LARCH_TLS_DESC_PCREL20_S2
+ - Type: R_LARCH_CALL30
+ - Type: R_LARCH_PCADD_HI20
+ - Type: R_LARCH_PCADD_LO12
+ - Type: R_LARCH_GOT_PCADD_HI20
+ - Type: R_LARCH_GOT_PCADD_LO12
+ - Type: R_LARCH_TLS_IE_PCADD_HI20
+ - Type: R_LARCH_TLS_IE_PCADD_LO12
+ - Type: R_LARCH_TLS_LD_PCADD_HI20
+ - Type: R_LARCH_TLS_LD_PCADD_LO12
+ - Type: R_LARCH_TLS_GD_PCADD_HI20
+ - Type: R_LARCH_TLS_GD_PCADD_LO12
+ - Type: R_LARCH_TLS_DESC_PCADD_HI20
+ - Type: R_LARCH_TLS_DESC_PCADD_LO12
diff --git a/llvm/unittests/Object/ELFTest.cpp b/llvm/unittests/Object/ELFTest.cpp
index b0faf073e4ab5..6d659774848ee 100644
--- a/llvm/unittests/Object/ELFTest.cpp
+++ b/llvm/unittests/Object/ELFTest.cpp
@@ -253,6 +253,34 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_64_PCREL));
EXPECT_EQ("R_LARCH_CALL36",
getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_CALL36));
+ EXPECT_EQ("R_LARCH_CALL30",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_CALL30));
+ EXPECT_EQ("R_LARCH_PCADD_HI20",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCADD_HI20));
+ EXPECT_EQ("R_LARCH_PCADD_LO12",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCADD_LO12));
+ EXPECT_EQ("R_LARCH_GOT_PCADD_HI20",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT_PCADD_HI20));
+ EXPECT_EQ("R_LARCH_GOT_PCADD_LO12",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT_PCADD_LO12));
+ EXPECT_EQ("R_LARCH_TLS_IE_PCADD_HI20",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE_PCADD_HI20));
+ EXPECT_EQ("R_LARCH_TLS_IE_PCADD_LO12",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE_PCADD_LO12));
+ EXPECT_EQ("R_LARCH_TLS_LD_PCADD_HI20",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LD_PCADD_HI20));
+ EXPECT_EQ("R_LARCH_TLS_LD_PCADD_LO12",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LD_PCADD_LO12));
+ EXPECT_EQ("R_LARCH_TLS_GD_PCADD_HI20",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_GD_PCADD_HI20));
+ EXPECT_EQ("R_LARCH_TLS_GD_PCADD_LO12",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_GD_PCADD_LO12));
+ EXPECT_EQ(
+ "R_LARCH_TLS_DESC_PCADD_HI20",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_PCADD_HI20));
+ EXPECT_EQ(
+ "R_LARCH_TLS_DESC_PCADD_LO12",
+ getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_PCADD_LO12));
}
TEST(ELFTest, getRISCVVendorRelocationTypeName) {
More information about the llvm-commits
mailing list