[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