Skip to content

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

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

Merged
merged 2 commits into from
Jan 9, 2024

Conversation

SixWeining
Copy link
Contributor

No description provided.

@llvmbot
Copy link
Member

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
justinfargnoli pushed a commit to justinfargnoli/llvm-project that referenced this pull request Jan 28, 2024
freebsd-git pushed a commit to freebsd/freebsd-src that referenced this pull request Dec 2, 2024
Including e_machine, e_flags and relocation types.

References:

  Loongson documentation:
    https://github.com/loongson/la-abi-specs/blob/release/laelf.adoc

  LLVM reviews / commits:
    https://reviews.llvm.org/D134601
    https://reviews.llvm.org/D115859
    https://reviews.llvm.org/D131467
    https://reviews.llvm.org/D152184
    llvm/llvm-project#73345
    llvm/llvm-project#77039

  Binutils commits:
    6d13722a97cee3fd397e116bde3bcedbb1e220be
    9801120721c3a702ce3bd50433ef920f92a83502
    57a930e3bfe4b2c7fd6463ed39311e1938513138

Reviewed by:	markj, emaste
Pull Request:	#1532
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.

6 participants