[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