https://github.com/heiher updated 
https://github.com/llvm/llvm-project/pull/199327

>From b5b862fb797dbb6d9b8f928390fbf112faf3c5f1 Mon Sep 17 00:00:00 2001
From: WANG Rui <[email protected]>
Date: Sat, 23 May 2026 11:13:40 +0800
Subject: [PATCH] [lld][LoongArch] Handle DTPREL relocations in debug sections

Teach the LoongArch lld backend to classify R_LARCH_TLS_DTPREL32
and R_LARCH_TLS_DTPREL64 as R_DTPREL.

This allows linker processing of TLS debug info references emitted
into .debug_info via .dtprelword/.dtpreldword. Add 32-bit and 64-bit
tests that assemble objects with DTPREL relocations in debug sections.
---
 lld/ELF/Arch/LoongArch.cpp          |  3 +++
 lld/test/ELF/loongarch-tls-dtprel.s | 34 +++++++++++++++++++++++++++++
 2 files changed, 37 insertions(+)
 create mode 100644 lld/test/ELF/loongarch-tls-dtprel.s

diff --git a/lld/ELF/Arch/LoongArch.cpp b/lld/ELF/Arch/LoongArch.cpp
index 7de21a56cf297..39cb50cf5dad2 100644
--- a/lld/ELF/Arch/LoongArch.cpp
+++ b/lld/ELF/Arch/LoongArch.cpp
@@ -454,6 +454,9 @@ RelExpr LoongArch::getRelExpr(const RelType type, const 
Symbol &s,
   case R_LARCH_PCREL20_S2:
   case R_LARCH_PCADD_HI20:
     return R_PC;
+  case R_LARCH_TLS_DTPREL32:
+  case R_LARCH_TLS_DTPREL64:
+    return R_DTPREL;
   default:
     Err(ctx) << getErrorLoc(ctx, loc) << "unknown relocation (" << type.v
              << ") against symbol " << &s;
diff --git a/lld/test/ELF/loongarch-tls-dtprel.s 
b/lld/test/ELF/loongarch-tls-dtprel.s
new file mode 100644
index 0000000000000..2a8e2d5d1bd2d
--- /dev/null
+++ b/lld/test/ELF/loongarch-tls-dtprel.s
@@ -0,0 +1,34 @@
+# REQUIRES: loongarch
+# RUN: llvm-mc -filetype=obj -triple=loongarch32 %s -o %32.o
+# RUN: llvm-mc -filetype=obj -triple=loongarch64 %s -o %64.o
+# RUN: llvm-readobj -r %32.o | FileCheck %s
+# RUN: llvm-readobj -r %64.o | FileCheck %s
+# RUN: ld.lld %32.o -o %32
+# RUN: ld.lld %64.o -o %64
+
+# CHECK:      .rela.debug_info {
+# CHECK-NEXT:   0x0 R_LARCH_TLS_DTPREL32 var 0x0
+# CHECK-NEXT:   0x4 R_LARCH_TLS_DTPREL32 var 0x1
+# CHECK-NEXT:   0x8 R_LARCH_TLS_DTPREL32 .tdata 0x0
+# CHECK-NEXT:   0xC R_LARCH_TLS_DTPREL32 .tdata 0x1
+# CHECK-NEXT:   0x10 R_LARCH_TLS_DTPREL64 var 0x0
+# CHECK-NEXT:   0x18 R_LARCH_TLS_DTPREL64 var 0x1
+# CHECK-NEXT:   0x20 R_LARCH_TLS_DTPREL64 .tdata 0x0
+# CHECK-NEXT:   0x28 R_LARCH_TLS_DTPREL64 .tdata 0x1
+# CHECK-NEXT: }
+
+.section .tdata,"awT",@progbits
+.skip 8
+.globl var
+var:
+  .word 0
+
+.section        .debug_info,"",@progbits
+  .dtprelword var
+  .dtprelword var+1
+  .dtprelword .tdata
+  .dtprelword .tdata+1
+  .dtpreldword var
+  .dtpreldword var+1
+  .dtpreldword .tdata
+  .dtpreldword .tdata+1

_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to