Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BinaryFormat][LoongArch] Define psABI v2.30 relocs #77039

Merged
merged 2 commits into from
Jan 9, 2024

Conversation

SixWeining
Copy link
Contributor

No description provided.

@llvmbot
Copy link
Collaborator

llvmbot commented Jan 5, 2024

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

Author: Lu Weining (SixWeining)

Changes

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

3 Files Affected:

  • (modified) llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def (+23)
  • (modified) llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test (+36)
  • (modified) llvm/unittests/Object/ELFTest.cpp (+37)
diff --git a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
index df3a342151fb36..4859057abcbb92 100644
--- a/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
+++ b/llvm/include/llvm/BinaryFormat/ELFRelocs/LoongArch.def
@@ -126,3 +126,26 @@ ELF_RELOC(R_LARCH_64_PCREL,    109)
 //
 // Spec addition: https://github.com/loongson/la-abi-specs/pull/4
 ELF_RELOC(R_LARCH_CALL36, 110)
+
+// Relocs added in ELF for the LoongArch™ Architecture v20231219, part of the
+// v2.30 LoongArch ABI specs.
+//
+// Spec addition: https://github.com/loongson/la-abi-specs/pull/5
+ELF_RELOC(R_LARCH_TLS_DESC32,           13)
+ELF_RELOC(R_LARCH_TLS_DESC64,           14)
+ELF_RELOC(R_LARCH_TLS_DESC_PC_HI20,    111)
+ELF_RELOC(R_LARCH_TLS_DESC_PC_LO12,    112)
+ELF_RELOC(R_LARCH_TLS_DESC64_PC_LO20,  113)
+ELF_RELOC(R_LARCH_TLS_DESC64_PC_HI12,  114)
+ELF_RELOC(R_LARCH_TLS_DESC_HI20,       115)
+ELF_RELOC(R_LARCH_TLS_DESC_LO12,       116)
+ELF_RELOC(R_LARCH_TLS_DESC64_LO20,     117)
+ELF_RELOC(R_LARCH_TLS_DESC64_HI12,     118)
+ELF_RELOC(R_LARCH_TLS_DESC_LD,         119)
+ELF_RELOC(R_LARCH_TLS_DESC_CALL,       120)
+ELF_RELOC(R_LARCH_TLS_LE_HI20_R,       121)
+ELF_RELOC(R_LARCH_TLS_LE_ADD_R,        122)
+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)
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 55a3e645b883cb..26c4e8f5ca8463 100644
--- a/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
+++ b/llvm/test/tools/llvm-readobj/ELF/reloc-types-loongarch64.test
@@ -17,6 +17,8 @@
 # CHECK: Type: R_LARCH_TLS_TPREL32 (10)
 # CHECK: Type: R_LARCH_TLS_TPREL64 (11)
 # CHECK: Type: R_LARCH_IRELATIVE (12)
+# CHECK: Type: R_LARCH_TLS_DESC32 (13)
+# CHECK: Type: R_LARCH_TLS_DESC64 (14)
 # CHECK: Type: R_LARCH_MARK_LA (20)
 # CHECK: Type: R_LARCH_MARK_PCREL (21)
 # CHECK: Type: R_LARCH_SOP_PUSH_PCREL (22)
@@ -101,6 +103,22 @@
 # CHECK: Type: R_LARCH_SUB_ULEB128 (108)
 # CHECK: Type: R_LARCH_64_PCREL (109)
 # CHECK: Type: R_LARCH_CALL36 (110)
+# CHECK: Type: R_LARCH_TLS_DESC_PC_HI20 (111)
+# CHECK: Type: R_LARCH_TLS_DESC_PC_LO12 (112)
+# CHECK: Type: R_LARCH_TLS_DESC64_PC_LO20 (113)
+# CHECK: Type: R_LARCH_TLS_DESC64_PC_HI12 (114)
+# CHECK: Type: R_LARCH_TLS_DESC_HI20 (115)
+# CHECK: Type: R_LARCH_TLS_DESC_LO12 (116)
+# CHECK: Type: R_LARCH_TLS_DESC64_LO20 (117)
+# CHECK: Type: R_LARCH_TLS_DESC64_HI12 (118)
+# CHECK: Type: R_LARCH_TLS_DESC_LD (119)
+# CHECK: Type: R_LARCH_TLS_DESC_CALL (120)
+# CHECK: Type: R_LARCH_TLS_LE_HI20_R (121)
+# CHECK: Type: R_LARCH_TLS_LE_ADD_R (122)
+# CHECK: Type: R_LARCH_TLS_LE_LO12_R (123)
+# 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)
 
 --- !ELF
 FileHeader:
@@ -125,6 +143,8 @@ Sections:
       - Type: R_LARCH_TLS_TPREL32
       - Type: R_LARCH_TLS_TPREL64
       - Type: R_LARCH_IRELATIVE
+      - Type: R_LARCH_TLS_DESC32
+      - Type: R_LARCH_TLS_DESC64
       - Type: R_LARCH_MARK_LA
       - Type: R_LARCH_MARK_PCREL
       - Type: R_LARCH_SOP_PUSH_PCREL
@@ -209,3 +229,19 @@ Sections:
       - Type: R_LARCH_SUB_ULEB128
       - Type: R_LARCH_64_PCREL
       - Type: R_LARCH_CALL36
+      - Type: R_LARCH_TLS_DESC_PC_HI20
+      - Type: R_LARCH_TLS_DESC_PC_LO12
+      - Type: R_LARCH_TLS_DESC64_PC_LO20
+      - Type: R_LARCH_TLS_DESC64_PC_HI12
+      - Type: R_LARCH_TLS_DESC_HI20
+      - Type: R_LARCH_TLS_DESC_LO12
+      - Type: R_LARCH_TLS_DESC64_LO20
+      - Type: R_LARCH_TLS_DESC64_HI12
+      - Type: R_LARCH_TLS_DESC_LD
+      - Type: R_LARCH_TLS_DESC_CALL
+      - Type: R_LARCH_TLS_LE_HI20_R
+      - Type: R_LARCH_TLS_LE_ADD_R
+      - Type: R_LARCH_TLS_LE_LO12_R
+      - Type: R_LARCH_TLS_LD_PCREL20_S2
+      - Type: R_LARCH_TLS_GD_PCREL20_S2
+      - Type: R_LARCH_TLS_DESC_PCREL20_S2
diff --git a/llvm/unittests/Object/ELFTest.cpp b/llvm/unittests/Object/ELFTest.cpp
index faf855c09cfe86..040860bf905eaf 100644
--- a/llvm/unittests/Object/ELFTest.cpp
+++ b/llvm/unittests/Object/ELFTest.cpp
@@ -77,6 +77,10 @@ TEST(ELFTest, getELFRelocationTypeNameForLoongArch) {
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_TPREL64));
   EXPECT_EQ("R_LARCH_IRELATIVE",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_IRELATIVE));
+  EXPECT_EQ("R_LARCH_TLS_DESC32",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC32));
+  EXPECT_EQ("R_LARCH_TLS_DESC64",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC64));
 
   EXPECT_EQ("R_LARCH_MARK_LA",
             getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_MARK_LA));
@@ -249,6 +253,39 @@ 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_TLS_DESC_PC_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_PC_HI20));
+  EXPECT_EQ("R_LARCH_TLS_DESC_PC_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_PC_LO12));
+  EXPECT_EQ("R_LARCH_TLS_DESC64_PC_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC64_PC_LO20));
+  EXPECT_EQ("R_LARCH_TLS_DESC64_PC_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC64_PC_HI12));
+  EXPECT_EQ("R_LARCH_TLS_DESC_HI20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_HI20));
+  EXPECT_EQ("R_LARCH_TLS_DESC_LO12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_LO12));
+  EXPECT_EQ("R_LARCH_TLS_DESC64_LO20",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC64_LO20));
+  EXPECT_EQ("R_LARCH_TLS_DESC64_HI12",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC64_HI12));
+  EXPECT_EQ("R_LARCH_TLS_DESC_LD",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_LD));
+  EXPECT_EQ("R_LARCH_TLS_DESC_CALL",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_CALL));
+  EXPECT_EQ("R_LARCH_TLS_LE_HI20_R",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE_HI20_R));
+  EXPECT_EQ("R_LARCH_TLS_LE_ADD_R",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE_ADD_R));
+  EXPECT_EQ("R_LARCH_TLS_LE_LO12_R",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LE_LO12_R));
+  EXPECT_EQ("R_LARCH_TLS_LD_PCREL20_S2",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_LD_PCREL20_S2));
+  EXPECT_EQ("R_LARCH_TLS_GD_PCREL20_S2",
+            getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_GD_PCREL20_S2));
+  EXPECT_EQ(
+      "R_LARCH_TLS_DESC_PCREL20_S2",
+      getELFRelocationTypeName(EM_LOONGARCH, R_LARCH_TLS_DESC_PCREL20_S2));
 }
 
 TEST(ELFTest, getELFRelativeRelocationType) {

@SixWeining
Copy link
Contributor Author

Add @xen0n @xry111 @MQ-mengqing

Copy link
Contributor

@wangleiat wangleiat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@SixWeining SixWeining merged commit 4a5ebc7 into llvm:main Jan 9, 2024
4 checks passed
justinfargnoli pushed a commit to justinfargnoli/llvm-project that referenced this pull request Jan 28, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants