[llvm-branch-commits] [lld] [lld][LoongArch] Handle DTPREL relocations in debug sections (PR #199327)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun May 24 23:16:09 PDT 2026
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 <r at hev.cc>
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", at progbits
+.skip 8
+.globl var
+var:
+ .word 0
+
+.section .debug_info,"", at progbits
+ .dtprelword var
+ .dtprelword var+1
+ .dtprelword .tdata
+ .dtprelword .tdata+1
+ .dtpreldword var
+ .dtpreldword var+1
+ .dtpreldword .tdata
+ .dtpreldword .tdata+1
More information about the llvm-branch-commits
mailing list