[llvm] [BinaryFormat][LoongArch] Define psABI v2.20 relocs (PR #73345)

via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 24 08:10:27 PST 2023


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-binary-utilities

Author: Lu Weining (SixWeining)

<details>
<summary>Changes</summary>

psABI v2.20 added R_LARCH_CALL36 and removed R_LARCH_DELETE / R_LARCH_CFA.

R_LARCH_CALL36 was designed for function call on medium code model where the 2 instructions (pcaddu18i + jirl) must be adjacent.

---
Full diff: https://github.com/llvm/llvm-project/pull/73345.diff


3 Files Affected:

- (modified) llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def (+10-2) 
- (modified) llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test (+2-4) 
- (modified) llvm/unittests/Object/ELFTest.cpp (+2-4) 


``````````diff
diff --git a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
index 02bce3c71712743..df3a342151fb361 100644
--- a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
+++ b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
@@ -109,12 +109,20 @@ ELF_RELOC(R_LARCH_RELAX,            100)
 //
 // Spec addition: https://github.com/loongson/la-abi-specs/pull/1
 // Binutils commit 57a930e3bfe4b2c7fd6463ed39311e1938513138
-ELF_RELOC(R_LARCH_DELETE,      101)
+// Note that the 101 and 104 relocation numbers are defined as R_LARCH_DELETE
+// and R_LARCH_CFA respectively in psABI 2.10. But they are marked as reserved
+// in psABI v2.20 because they were proved not necessary to be exposed outside
+// of the linker.
 ELF_RELOC(R_LARCH_ALIGN,       102)
 ELF_RELOC(R_LARCH_PCREL20_S2,  103)
-ELF_RELOC(R_LARCH_CFA,         104)
 ELF_RELOC(R_LARCH_ADD6,        105)
 ELF_RELOC(R_LARCH_SUB6,        106)
 ELF_RELOC(R_LARCH_ADD_ULEB128, 107)
 ELF_RELOC(R_LARCH_SUB_ULEB128, 108)
 ELF_RELOC(R_LARCH_64_PCREL,    109)
+
+// Relocs added in ELF for the LoongArchâ„¢ Architecture v20231102, part of the
+// v2.20 LoongArch ABI specs.
+//
+// Spec addition: https://github.com/loongson/la-abi-specs/pull/4
+ELF_RELOC(R_LARCH_CALL36, 110)
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 e32dc893fa7985d..55a3e645b883cb5 100644
--- a/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
+++ b/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
@@ -93,15 +93,14 @@
 # CHECK: Type: R_LARCH_TLS_GD_HI20 (98)
 # CHECK: Type: R_LARCH_32_PCREL (99)
 # CHECK: Type: R_LARCH_RELAX (100)
-# CHECK: Type: R_LARCH_DELETE (101)
 # CHECK: Type: R_LARCH_ALIGN (102)
 # CHECK: Type: R_LARCH_PCREL20_S2 (103)
-# CHECK: Type: R_LARCH_CFA (104)
 # CHECK: Type: R_LARCH_ADD6 (105)
 # CHECK: Type: R_LARCH_SUB6 (106)
 # CHECK: Type: R_LARCH_ADD_ULEB128 (107)
 # CHECK: Type: R_LARCH_SUB_ULEB128 (108)
 # CHECK: Type: R_LARCH_64_PCREL (109)
+# CHECK: Type: R_LARCH_CALL36 (110)
 
 --- !ELF
 FileHeader:
@@ -202,12 +201,11 @@ Sections:
       - Type: R_LARCH_TLS_GD_HI20
       - Type: R_LARCH_32_PCREL
       - Type: R_LARCH_RELAX
-      - Type: R_LARCH_DELETE
       - Type: R_LARCH_ALIGN
       - Type: R_LARCH_PCREL20_S2
-      - Type: R_LARCH_CFA
       - Type: R_LARCH_ADD6
       - Type: R_LARCH_SUB6
       - Type: R_LARCH_ADD_ULEB128
       - Type: R_LARCH_SUB_ULEB128
       - Type: R_LARCH_64_PCREL
+      - Type: R_LARCH_CALL36
diff --git a/llvm/unittests/Object/ELFTest.cpp b/llvm/unittests/Object/ELFTest.cpp
index 50b1df124a4a58c..faf855c09cfe86e 100644
--- a/llvm/unittests/Object/ELFTest.cpp
+++ b/llvm/unittests/Object/ELFTest.cpp
@@ -233,14 +233,10 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_32_PCREL));
   EXPECT_EQ("R_LARCH_RELAX",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_RELAX));
-  EXPECT_EQ("R_LARCH_DELETE",
-            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_DELETE));
   EXPECT_EQ("R_LARCH_ALIGN",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ALIGN));
   EXPECT_EQ("R_LARCH_PCREL20_S2",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCREL20_S2));
-  EXPECT_EQ("R_LARCH_CFA",
-            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_CFA));
   EXPECT_EQ("R_LARCH_ADD6",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ADD6));
   EXPECT_EQ("R_LARCH_SUB6",
@@ -251,6 +247,8 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_SUB_ULEB128));
   EXPECT_EQ("R_LARCH_64_PCREL",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_64_PCREL));
+  EXPECT_EQ("R_LARCH_CALL36",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_CALL36));
 }
 
 TEST(ELFTest, getELFRelativeRelocationType) {

``````````

</details>


https://github.com/llvm/llvm-project/pull/73345


More information about the llvm-commits mailing list