[llvm] 0c8bfbb - [LoongArch] Define the new-style reloc types

Weining Lu via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 10 19:46:22 PDT 2022


Author: WANG Xuerui
Date: 2022-08-11T10:37:30+08:00
New Revision: 0c8bfbb37484957557f2a16a7ae56ca987bafd4d

URL: https://github.com/llvm/llvm-project/commit/0c8bfbb37484957557f2a16a7ae56ca987bafd4d
DIFF: https://github.com/llvm/llvm-project/commit/0c8bfbb37484957557f2a16a7ae56ca987bafd4d.diff

LOG: [LoongArch] Define the new-style reloc types

Differential Revision: https://reviews.llvm.org/D131467

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 8cbfe2fe4235b..67dbd020140b6 100644
--- a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
+++ b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
@@ -60,3 +60,46 @@ ELF_RELOC(R_LARCH_SUB32,                      55)
 ELF_RELOC(R_LARCH_SUB64,                      56)
 ELF_RELOC(R_LARCH_GNU_VTINHERIT,              57)
 ELF_RELOC(R_LARCH_GNU_VTENTRY,                58)
+
+// Relocs whose processing do not require a stack machine.
+//
+// Spec addition: https://github.com/loongson/LoongArch-Documentation/pull/57
+// Binutils commit 6d13722a97cee3fd397e116bde3bcedbb1e220be
+//      and commit 9801120721c3a702ce3bd50433ef920f92a83502
+ELF_RELOC(R_LARCH_B16,              64)
+ELF_RELOC(R_LARCH_B21,              65)
+ELF_RELOC(R_LARCH_B26,              66)
+ELF_RELOC(R_LARCH_ABS_HI20,         67)
+ELF_RELOC(R_LARCH_ABS_LO12,         68)
+ELF_RELOC(R_LARCH_ABS64_LO20,       69)
+ELF_RELOC(R_LARCH_ABS64_HI12,       70)
+ELF_RELOC(R_LARCH_PCALA_HI20,       71)
+ELF_RELOC(R_LARCH_PCALA_LO12,       72)
+ELF_RELOC(R_LARCH_PCALA64_LO20,     73)
+ELF_RELOC(R_LARCH_PCALA64_HI12,     74)
+ELF_RELOC(R_LARCH_GOT_PC_HI20,      75)
+ELF_RELOC(R_LARCH_GOT_PC_LO12,      76)
+ELF_RELOC(R_LARCH_GOT64_PC_LO20,    77)
+ELF_RELOC(R_LARCH_GOT64_PC_HI12,    78)
+ELF_RELOC(R_LARCH_GOT_HI20,         79)
+ELF_RELOC(R_LARCH_GOT_LO12,         80)
+ELF_RELOC(R_LARCH_GOT64_LO20,       81)
+ELF_RELOC(R_LARCH_GOT64_HI12,       82)
+ELF_RELOC(R_LARCH_TLS_LE_HI20,      83)
+ELF_RELOC(R_LARCH_TLS_LE_LO12,      84)
+ELF_RELOC(R_LARCH_TLS_LE64_LO20,    85)
+ELF_RELOC(R_LARCH_TLS_LE64_HI12,    86)
+ELF_RELOC(R_LARCH_TLS_IE_PC_HI20,   87)
+ELF_RELOC(R_LARCH_TLS_IE_PC_LO12,   88)
+ELF_RELOC(R_LARCH_TLS_IE64_PC_LO20, 89)
+ELF_RELOC(R_LARCH_TLS_IE64_PC_HI12, 90)
+ELF_RELOC(R_LARCH_TLS_IE_HI20,      91)
+ELF_RELOC(R_LARCH_TLS_IE_LO12,      92)
+ELF_RELOC(R_LARCH_TLS_IE64_LO20,    93)
+ELF_RELOC(R_LARCH_TLS_IE64_HI12,    94)
+ELF_RELOC(R_LARCH_TLS_LD_PC_HI20,   95)
+ELF_RELOC(R_LARCH_TLS_LD_HI20,      96)
+ELF_RELOC(R_LARCH_TLS_GD_PC_HI20,   97)
+ELF_RELOC(R_LARCH_TLS_GD_HI20,      98)
+ELF_RELOC(R_LARCH_32_PCREL,         99)
+ELF_RELOC(R_LARCH_RELAX,            100)

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 0aed3fff4413c..c26fae7e83236 100644
--- a/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
+++ b/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
@@ -56,6 +56,43 @@
 # CHECK: Type: R_LARCH_SUB64 (56)
 # CHECK: Type: R_LARCH_GNU_VTINHERIT (57)
 # CHECK: Type: R_LARCH_GNU_VTENTRY (58)
+# CHECK: Type: R_LARCH_B16 (64)
+# CHECK: Type: R_LARCH_B21 (65)
+# CHECK: Type: R_LARCH_B26 (66)
+# CHECK: Type: R_LARCH_ABS_HI20 (67)
+# CHECK: Type: R_LARCH_ABS_LO12 (68)
+# CHECK: Type: R_LARCH_ABS64_LO20 (69)
+# CHECK: Type: R_LARCH_ABS64_HI12 (70)
+# CHECK: Type: R_LARCH_PCALA_HI20 (71)
+# CHECK: Type: R_LARCH_PCALA_LO12 (72)
+# CHECK: Type: R_LARCH_PCALA64_LO20 (73)
+# CHECK: Type: R_LARCH_PCALA64_HI12 (74)
+# CHECK: Type: R_LARCH_GOT_PC_HI20 (75)
+# CHECK: Type: R_LARCH_GOT_PC_LO12 (76)
+# CHECK: Type: R_LARCH_GOT64_PC_LO20 (77)
+# CHECK: Type: R_LARCH_GOT64_PC_HI12 (78)
+# CHECK: Type: R_LARCH_GOT_HI20 (79)
+# CHECK: Type: R_LARCH_GOT_LO12 (80)
+# CHECK: Type: R_LARCH_GOT64_LO20 (81)
+# CHECK: Type: R_LARCH_GOT64_HI12 (82)
+# CHECK: Type: R_LARCH_TLS_LE_HI20 (83)
+# CHECK: Type: R_LARCH_TLS_LE_LO12 (84)
+# CHECK: Type: R_LARCH_TLS_LE64_LO20 (85)
+# CHECK: Type: R_LARCH_TLS_LE64_HI12 (86)
+# CHECK: Type: R_LARCH_TLS_IE_PC_HI20 (87)
+# CHECK: Type: R_LARCH_TLS_IE_PC_LO12 (88)
+# CHECK: Type: R_LARCH_TLS_IE64_PC_LO20 (89)
+# CHECK: Type: R_LARCH_TLS_IE64_PC_HI12 (90)
+# CHECK: Type: R_LARCH_TLS_IE_HI20 (91)
+# CHECK: Type: R_LARCH_TLS_IE_LO12 (92)
+# CHECK: Type: R_LARCH_TLS_IE64_LO20 (93)
+# CHECK: Type: R_LARCH_TLS_IE64_HI12 (94)
+# CHECK: Type: R_LARCH_TLS_LD_PC_HI20 (95)
+# CHECK: Type: R_LARCH_TLS_LD_HI20 (96)
+# CHECK: Type: R_LARCH_TLS_GD_PC_HI20 (97)
+# CHECK: Type: R_LARCH_TLS_GD_HI20 (98)
+# CHECK: Type: R_LARCH_32_PCREL (99)
+# CHECK: Type: R_LARCH_RELAX (100)
 
 --- !ELF
 FileHeader:
@@ -119,3 +156,40 @@ Sections:
       - Type: R_LARCH_SUB64
       - Type: R_LARCH_GNU_VTINHERIT
       - Type: R_LARCH_GNU_VTENTRY
+      - Type: R_LARCH_B16
+      - Type: R_LARCH_B21
+      - Type: R_LARCH_B26
+      - Type: R_LARCH_ABS_HI20
+      - Type: R_LARCH_ABS_LO12
+      - Type: R_LARCH_ABS64_LO20
+      - Type: R_LARCH_ABS64_HI12
+      - Type: R_LARCH_PCALA_HI20
+      - Type: R_LARCH_PCALA_LO12
+      - Type: R_LARCH_PCALA64_LO20
+      - Type: R_LARCH_PCALA64_HI12
+      - Type: R_LARCH_GOT_PC_HI20
+      - Type: R_LARCH_GOT_PC_LO12
+      - Type: R_LARCH_GOT64_PC_LO20
+      - Type: R_LARCH_GOT64_PC_HI12
+      - Type: R_LARCH_GOT_HI20
+      - Type: R_LARCH_GOT_LO12
+      - Type: R_LARCH_GOT64_LO20
+      - Type: R_LARCH_GOT64_HI12
+      - Type: R_LARCH_TLS_LE_HI20
+      - Type: R_LARCH_TLS_LE_LO12
+      - Type: R_LARCH_TLS_LE64_LO20
+      - Type: R_LARCH_TLS_LE64_HI12
+      - Type: R_LARCH_TLS_IE_PC_HI20
+      - Type: R_LARCH_TLS_IE_PC_LO12
+      - Type: R_LARCH_TLS_IE64_PC_LO20
+      - Type: R_LARCH_TLS_IE64_PC_HI12
+      - Type: R_LARCH_TLS_IE_HI20
+      - Type: R_LARCH_TLS_IE_LO12
+      - Type: R_LARCH_TLS_IE64_LO20
+      - Type: R_LARCH_TLS_IE64_HI12
+      - Type: R_LARCH_TLS_LD_PC_HI20
+      - Type: R_LARCH_TLS_LD_HI20
+      - Type: R_LARCH_TLS_GD_PC_HI20
+      - Type: R_LARCH_TLS_GD_HI20
+      - Type: R_LARCH_32_PCREL
+      - Type: R_LARCH_RELAX

diff  --git a/llvm/unittests/Object/ELFTest.cpp b/llvm/unittests/Object/ELFTest.cpp
index 83e7363f3425d..61fcb4ec9c23e 100644
--- a/llvm/unittests/Object/ELFTest.cpp
+++ b/llvm/unittests/Object/ELFTest.cpp
@@ -159,6 +159,80 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GNU_VTINHERIT));
   EXPECT_EQ("R_LARCH_GNU_VTENTRY",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GNU_VTENTRY));
+  EXPECT_EQ("R_LARCH_B16",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_B16));
+  EXPECT_EQ("R_LARCH_B21",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_B21));
+  EXPECT_EQ("R_LARCH_B26",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_B26));
+  EXPECT_EQ("R_LARCH_ABS_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ABS_HI20));
+  EXPECT_EQ("R_LARCH_ABS_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ABS_LO12));
+  EXPECT_EQ("R_LARCH_ABS64_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ABS64_LO20));
+  EXPECT_EQ("R_LARCH_ABS64_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_ABS64_HI12));
+  EXPECT_EQ("R_LARCH_PCALA_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCALA_HI20));
+  EXPECT_EQ("R_LARCH_PCALA_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCALA_LO12));
+  EXPECT_EQ("R_LARCH_PCALA64_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCALA64_LO20));
+  EXPECT_EQ("R_LARCH_PCALA64_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_PCALA64_HI12));
+  EXPECT_EQ("R_LARCH_GOT_PC_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT_PC_HI20));
+  EXPECT_EQ("R_LARCH_GOT_PC_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT_PC_LO12));
+  EXPECT_EQ("R_LARCH_GOT64_PC_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT64_PC_LO20));
+  EXPECT_EQ("R_LARCH_GOT64_PC_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT64_PC_HI12));
+  EXPECT_EQ("R_LARCH_GOT_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT_HI20));
+  EXPECT_EQ("R_LARCH_GOT_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT_LO12));
+  EXPECT_EQ("R_LARCH_GOT64_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT64_LO20));
+  EXPECT_EQ("R_LARCH_GOT64_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_GOT64_HI12));
+  EXPECT_EQ("R_LARCH_TLS_LE_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE_HI20));
+  EXPECT_EQ("R_LARCH_TLS_LE_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE_LO12));
+  EXPECT_EQ("R_LARCH_TLS_LE64_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE64_LO20));
+  EXPECT_EQ("R_LARCH_TLS_LE64_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE64_HI12));
+  EXPECT_EQ("R_LARCH_TLS_IE_PC_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE_PC_HI20));
+  EXPECT_EQ("R_LARCH_TLS_IE_PC_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE_PC_LO12));
+  EXPECT_EQ("R_LARCH_TLS_IE64_PC_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE64_PC_LO20));
+  EXPECT_EQ("R_LARCH_TLS_IE64_PC_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE64_PC_HI12));
+  EXPECT_EQ("R_LARCH_TLS_IE_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE_HI20));
+  EXPECT_EQ("R_LARCH_TLS_IE_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE_LO12));
+  EXPECT_EQ("R_LARCH_TLS_IE64_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE64_LO20));
+  EXPECT_EQ("R_LARCH_TLS_IE64_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_IE64_HI12));
+  EXPECT_EQ("R_LARCH_TLS_LD_PC_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LD_PC_HI20));
+  EXPECT_EQ("R_LARCH_TLS_LD_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LD_HI20));
+  EXPECT_EQ("R_LARCH_TLS_GD_PC_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_GD_PC_HI20));
+  EXPECT_EQ("R_LARCH_TLS_GD_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_GD_HI20));
+  EXPECT_EQ("R_LARCH_32_PCREL",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_32_PCREL));
+  EXPECT_EQ("R_LARCH_RELAX",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_RELAX));
 }
 
 TEST(ELFTest, getELFRelativeRelocationType) {


        


More information about the llvm-commits mailing list