https://github.com/heiher created https://github.com/llvm/llvm-project/pull/199327
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 and verify the linked .debug_info contents. >From 971da154361c839c850e41165e11b55774b4b067 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 and verify the linked .debug_info contents. --- lld/ELF/Arch/LoongArch.cpp | 3 +++ lld/test/ELF/loongarch-debug-info-tls-32.s | 31 ++++++++++++++++++++++ lld/test/ELF/loongarch-debug-info-tls-64.s | 31 ++++++++++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 lld/test/ELF/loongarch-debug-info-tls-32.s create mode 100644 lld/test/ELF/loongarch-debug-info-tls-64.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-debug-info-tls-32.s b/lld/test/ELF/loongarch-debug-info-tls-32.s new file mode 100644 index 0000000000000..0d6a0aa32a929 --- /dev/null +++ b/lld/test/ELF/loongarch-debug-info-tls-32.s @@ -0,0 +1,31 @@ +# REQUIRES: loongarch +# Check handling of TLS related relocations in a reduced .debug_info section. + +# RUN: llvm-mc -filetype=obj -triple=loongarch32-unknown-elf %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-objdump -s -t %t | FileCheck %s + +# CHECK: Contents of section .debug_info: +# CHECK-NEXT: {{.*}} 08000000 05000104 00000000 + + .text + .globl _Z8get_tvarv + .p2align 2 + .type _Z8get_tvarv,@function +_Z8get_tvarv: + ret + + .type _ZZ8get_tvarvE4tvar,@object + .section .tbss,"awT",@nobits + .p2align 2, 0x0 +_ZZ8get_tvarvE4tvar: + .word 0 + + .section .debug_info,"",@progbits + .word .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit +.Ldebug_info_start0: + .half 5 # DWARF version number + .byte 1 # DWARF Unit Type + .byte 4 # Address Size (in bytes) + .dtprelword _ZZ8get_tvarvE4tvar +.Ldebug_info_end0: diff --git a/lld/test/ELF/loongarch-debug-info-tls-64.s b/lld/test/ELF/loongarch-debug-info-tls-64.s new file mode 100644 index 0000000000000..6d00aca8aaf2e --- /dev/null +++ b/lld/test/ELF/loongarch-debug-info-tls-64.s @@ -0,0 +1,31 @@ +# REQUIRES: loongarch +# Check handling of TLS related relocations in a reduced .debug_info section. + +# RUN: llvm-mc -filetype=obj -triple=loongarch64-unknown-elf %s -o %t.o +# RUN: ld.lld %t.o -o %t +# RUN: llvm-objdump -s -t %t | FileCheck %s + +# CHECK: Contents of section .debug_info: +# CHECK-NEXT: {{.*}} 0c000000 05000108 00000000 00000000 + + .text + .globl _Z8get_tvarv + .p2align 2 + .type _Z8get_tvarv,@function +_Z8get_tvarv: + ret + + .type _ZZ8get_tvarvE4tvar,@object + .section .tbss,"awT",@nobits + .p2align 2, 0x0 +_ZZ8get_tvarvE4tvar: + .word 0 + + .section .debug_info,"",@progbits + .word .Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit +.Ldebug_info_start0: + .half 5 # DWARF version number + .byte 1 # DWARF Unit Type + .byte 8 # Address Size (in bytes) + .dtpreldword _ZZ8get_tvarvE4tvar +.Ldebug_info_end0: _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
