From patchwork Sat May 23 23:24:46 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 135507 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 9CA3B4BAE7E5 for ; Sat, 23 May 2026 23:26:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 9CA3B4BAE7E5 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=ojvy7xW/ X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pg1-x530.google.com (mail-pg1-x530.google.com [IPv6:2607:f8b0:4864:20::530]) by sourceware.org (Postfix) with ESMTPS id 72DD64BAD17C for ; Sat, 23 May 2026 23:25:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 72DD64BAD17C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 72DD64BAD17C Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2607:f8b0:4864:20::530 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1779578724; cv=pass; b=K3Xb+fT4ocODsEhOuwnZs+H0T/B79OG0CghIgbrf9D/lL82Qg+gdw0WBpU1g8CEjIiRQjFDdHU+FcjIRs9IxEOuEg7x0cwFkOK6w6gKp6PE7syx0c60/RfoB2hQf8g5irf6Q7JwQx183z/YTrGbbdd9RGI1jnEUU1naC31Yd0OY= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1779578724; c=relaxed/simple; bh=J4NaIS1949jRDpv4W7GI1DYBByKxWhehSXdA7iFkmcA=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=ovbadAuTwUNc9ZsE+PHUSLt1fpNpxHc0cO44VgOIOSAn1kCQwtjNroaHlqX3Z9x+HslSgN2CUUggLB1wu0vTmpjef2ErfQ8nLBxxFYRu8hIou3u1AeoVUDUwaigEK6v0ptktrJxrrDmvCXGP/2KFMSjgte3iwnOQGsxl1Nev/sA= ARC-Authentication-Results: i=2; sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20251104 header.b=ojvy7xW/ DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 72DD64BAD17C Received: by mail-pg1-x530.google.com with SMTP id 41be03b00d2f7-c822652f82aso7149492a12.3 for ; Sat, 23 May 2026 16:25:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779578723; cv=none; d=google.com; s=arc-20240605; b=Ve+r4koKVJzsa3yLsIrhem5dip6ai2F/Ff/aMzQNQavZHpAs564g3vSxCr1Cl8G7Lq 9cdwDsBUMlRHW1YPGI9mex8UYWURPeyVeMifBmPR7FJPqsHPxdeVSvdfULWyYZb/mwhp DTnU0H0XuvMqX2N8PD6E2lSPbHIGbmAcBXKQuu995LzdX0y/Ibtj1qRLlXZyON2Rqbcb uRGbaN3+6VDcyFSrMyi1PJQ4S143VM/+LGPripUmb8Jl7xj5E2wBKok5qjOgZvzQF1X2 LAiACxpMvzxwbQph4BeY4Fc1GucFZCgpXoevYaK6aHzKnn/0eNzYFF4CvOD4mg1mHA38 5mkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=2uLR4w71Fnd0q7R4BXkh8OcfEWJjq5gZIOTHLOW9ftA=; fh=v3P1f5KY/yeZqdpLgeHpN3RThvK+nhcbtOJYcrvbkLs=; b=lf0dsAhS0SFtjMQ0SkRJ5Bz+Y0WYVe0wcbwdmVfxXD53bQ9HUqCBX7jbVyN4+XUect UGzTcUGGezDzm2iZUmyodOPS2Cu3/l3IYenUx7MI+6O5rvus3n1S3jLcV1QySAs6MYV4 C/vSNaqbkqnOAzNNuGnvI6sQNu4SIFjooajlKXlweMoi8Zsq9ZiOOswycf+tbpYY1tnf +4NRf8dJKZnddxTtcy7fxGAJwN7fK2W0HV2472omIklfdeEeaAZ13PXnEGsxAwjWX3kJ xSQdRB5PPD+o2VdmYeRFWse/xiUDLnIpV59JGHWyocaReN9sREZP+0UObeIsDZ/RePXF 3ebQ==; darn=sourceware.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779578723; x=1780183523; darn=sourceware.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=2uLR4w71Fnd0q7R4BXkh8OcfEWJjq5gZIOTHLOW9ftA=; b=ojvy7xW/D1rMozLDJyuxqNt6ZbqSXweQr2qD285oyeXFtaStVeWAP4n/hKanXqRN1o Kx9ffBv6wEJM6xcEIQ9RG01QogO+tSoZY2mtzSvvS4KsS2c/9mR7pLK0fjMX/yVPcz6M j7Bpb5UN46Gr0jjxLAn7heMXZa50DNPJIvHAzau6yIqKmyMJRUR3VwXr25NSN7EZmusL vSUKCh9u3tMM2aaczHNP/gGLZLyAmUfwf5dKzoULZ1RTOy6Bh7hyctgCZrbEo4PkDs15 CUHwPm/5yVJIA7YdEPg5otZWhemjPL/1wXKO7smjQ1/HBE+H1ZhfUd6Lr/bhKdUeBF3u hpxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779578723; x=1780183523; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=2uLR4w71Fnd0q7R4BXkh8OcfEWJjq5gZIOTHLOW9ftA=; b=szJQj+lSFnEMmeCk5bBRJslfzdpqPbmyzxOlXgGLDGhXn+WJt1q2hmC63Ax145n4m+ 6H91nQXz/tjvVjfP+GN5uDAoUjZLdD+3OSc1B7a702Z68PuQmtPFjtwFMsT/Uu+jIUr0 AkaNsIOs019l1LKBHr4H2XfNS1aAJGA/KBLnPHxPRNy1/h1mz8vhANHBz5W7FX5w8uRE USkiAiyUv17cdITImVLw0h9oOep23eafTMhRXv8H9cLqQWgbHDactuZdWANTD3raLANk yXK6OjhHgOmI14ALgjZDcr1FuJ2Sy7CZZOOIJ6LD/FENjzEtzUGKFJuYT7yvCIqbu+EW UFMg== X-Gm-Message-State: AOJu0YzJZpo3nsjZc2VPGlgDOZd83HGfuCV3jy/+Jr7y57Zq+X1Ap5bA TnKcwVlRm1aRLNY+6F7jt6eyCm10+tLRV7q9gByRWVmrjlucMohsLjuk339GedZV6oOr4bRLskE fMLzvMKed1XdnNQwKKKDU3rvcHHARtfx+Sp5J3reBpQ== X-Gm-Gg: Acq92OEky7NVr/w9Zj0jI2IryqGDx3MjF1Vs6bTnazZY/y1KhaQ1b4yQZi7WKdPWx3v EtyWJzw5QXWj+mcTCAwmmp12i9TiBy6e/pH0N1LsGeunDpr8qvgbCmRrtLPmwZP3QmGNcL4vJxt 4vDjN6a93D/FJjHGXU8STzVnGCZbzAF0D3KzajrvVtA82mOYCt5z5ieBnMqj3nhsQcnK9BW5z5/ AVrEst5GG4GTd1g4i/CaYe9As60aHq9mcTAuhgAS1/cl8aVLFLJw/1hJ6e+sjmWrv+NPFu1Xonr H7iNMg== X-Received: by 2002:a05:6a20:430f:b0:3a2:d838:bfc6 with SMTP id adf61e73a8af0-3b328ed09femr9939521637.29.1779578723132; Sat, 23 May 2026 16:25:23 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: "H.J. Lu" Date: Sun, 24 May 2026 07:24:46 +0800 X-Gm-Features: AVHnY4Ic15gfz5l5Jo_UyN7bpXTHkaE2rFp_Y6IreDONR1hTbhHe5SH32vRzFnA Message-ID: Subject: [PATCH v3] alpha: Don't assert elf_hash_table (info)->tls_sec != NULL To: Binutils , Alan Modra , Nick Clifton , Jan Beulich X-Spam-Status: No, score=-3010.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP shortcircuit=no autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces~patchwork=sourceware.org@sourceware.org On Sat, May 23, 2026 at 11:45 AM H.J. Lu wrote: > > On Sat, May 23, 2026 at 7:52 AM H.J. Lu wrote: > > > > Since local weak undefined symbol value is always 0, handle TLS > > relocations against local weak undefined symbols separately. > > > > bfd/ > > > > PR ld/34165 > > * elf64-alpha.c (elf64_alpha_local_undefweak_p): New function. > > (elf64_alpha_relocate_section): Handle TLS relocations against > > local weak undefined symbol value separately. > > > > ld/testsuite/ > > > > PR ld/34165 > > * ld-alpha/alpha.exp: Run $srcdir/$subdir/*.d. > > * ld-alpha/tlsbin-undef.d: New file. > > * ld-alpha/tlsbin-undef.s: Likewise. > > * ld-alpha/tlsbin-weak-undef1.d: Likewise. > > * ld-alpha/tlsbin-weak-undef1.s: Likewise. > > * ld-alpha/tlsbin-weak-undef2.d: Likewise. > > * ld-alpha/tlsbin-weak-undef2.s: Likewise. > > * ld-alpha/tlspic-undef.d: Likewise. > > * ld-alpha/tlspic-undef.s: Likewise. > > * ld-alpha/tlspic-weak-undef1.d: Likewise. > > * ld-alpha/tlspic-weak-undef1.s: Likewise. > > > > Move elf64_alpha_local_undefweak_p to elf-bfd.h (elf_link_local_undefweak_p) > > > -- > H.J. > --- > Since local weak undefined symbol value is always 0, handle TLS > relocations against local weak undefined symbols separately. > > bfd/ > > PR ld/34165 > * elf-bfd.h (elf_link_local_undefweak_p): New function. > * elf64-alpha.c (elf64_alpha_relocate_section): Handle TLS > relocations against local weak undefined symbol value separately. > > ld/testsuite/ > > PR ld/34165 > * ld-alpha/alpha.exp: Run $srcdir/$subdir/*.d. > * ld-alpha/tlsbin-undef.d: New file. > * ld-alpha/tlsbin-undef.s: Likewise. > * ld-alpha/tlsbin-weak-undef1.d: Likewise. > * ld-alpha/tlsbin-weak-undef1.s: Likewise. > * ld-alpha/tlsbin-weak-undef2.d: Likewise. > * ld-alpha/tlsbin-weak-undef2.s: Likewise. > * ld-alpha/tlspic-undef.d: Likewise. > * ld-alpha/tlspic-undef.s: Likewise. > * ld-alpha/tlspic-weak-undef1.d: Likewise. > * ld-alpha/tlspic-weak-undef1.s: Likewise. Don't assert elf_hash_table (info)->tls_sec != NULL since the undefined TLS symbol address isn't usable. From 474f78f8a553fc86008117b4fc685126fa2642c6 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Sat, 23 May 2026 05:12:10 +0800 Subject: [PATCH v3] alpha: Don't assert elf_hash_table (info)->tls_sec != NULL When processing TLS relocations, elf_hash_table (info)->tls_sec can be NULL if all TLS symbols are weak, hidden and undefined. Don't assert elf_hash_table (info)->tls_sec != NULL. Since the undefined TLS symbol address doesn't map to any TLS storage, it isn't usable. Also set dtp_base and tp_base to 0 if elf_hash_table (info)->tls_sec == NULL. bfd/ PR ld/34165 * elf64-alpha.c (elf64_alpha_relax_got_load): Set dtp_base and tp_base to 0 if elf_hash_table (info)->tls_sec == NULL. (elf64_alpha_relocate_section): Don't assert elf_hash_table (info)->tls_sec != NULL. ld/ PR ld/34165 * testsuite/ld-alpha/alpha.exp: Run $srcdir/$subdir/*.d. * testsuite/ld-alpha/tlsbin-undef.d: New file. * testsuite/ld-alpha/tlsbin-undef.s: Likewise. * testsuite/ld-alpha/tlsbin-weak-undef1.d: Likewise. * testsuite/ld-alpha/tlsbin-weak-undef1.s: Likewise. * testsuite/ld-alpha/tlsbin-weak-undef2.d: Likewise. * testsuite/ld-alpha/tlsbin-weak-undef2.s: Likewise. * testsuite/ld-alpha/tlspic-undef.d: Likewise. * testsuite/ld-alpha/tlspic-undef.s: Likewise. * testsuite/ld-alpha/tlspic-weak-undef1.d: Likewise. * testsuite/ld-alpha/tlspic-weak-undef1.s: Likewise. * testsuite/ld-elf/pr34165.c: Likewise. * testsuite/ld-elf/tls.exp: Run PR ld/34165 test. Signed-off-by: H.J. Lu --- bfd/elf64-alpha.c | 12 +++++++----- ld/testsuite/ld-alpha/alpha.exp | 7 +++++++ ld/testsuite/ld-alpha/tlsbin-undef.d | 2 ++ ld/testsuite/ld-alpha/tlsbin-undef.s | 16 ++++++++++++++++ ld/testsuite/ld-alpha/tlsbin-weak-undef1.d | 14 ++++++++++++++ ld/testsuite/ld-alpha/tlsbin-weak-undef1.s | 22 ++++++++++++++++++++++ ld/testsuite/ld-alpha/tlsbin-weak-undef2.d | 14 ++++++++++++++ ld/testsuite/ld-alpha/tlsbin-weak-undef2.s | 17 +++++++++++++++++ ld/testsuite/ld-alpha/tlspic-undef.d | 2 ++ ld/testsuite/ld-alpha/tlspic-undef.s | 16 ++++++++++++++++ ld/testsuite/ld-alpha/tlspic-weak-undef1.d | 14 ++++++++++++++ ld/testsuite/ld-alpha/tlspic-weak-undef1.s | 22 ++++++++++++++++++++++ ld/testsuite/ld-elf/pr34165.c | 14 ++++++++++++++ ld/testsuite/ld-elf/tls.exp | 11 +++++++++++ 14 files changed, 178 insertions(+), 5 deletions(-) create mode 100644 ld/testsuite/ld-alpha/tlsbin-undef.d create mode 100644 ld/testsuite/ld-alpha/tlsbin-undef.s create mode 100644 ld/testsuite/ld-alpha/tlsbin-weak-undef1.d create mode 100644 ld/testsuite/ld-alpha/tlsbin-weak-undef1.s create mode 100644 ld/testsuite/ld-alpha/tlsbin-weak-undef2.d create mode 100644 ld/testsuite/ld-alpha/tlsbin-weak-undef2.s create mode 100644 ld/testsuite/ld-alpha/tlspic-undef.d create mode 100644 ld/testsuite/ld-alpha/tlspic-undef.s create mode 100644 ld/testsuite/ld-alpha/tlspic-weak-undef1.d create mode 100644 ld/testsuite/ld-alpha/tlspic-weak-undef1.s create mode 100644 ld/testsuite/ld-elf/pr34165.c diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 91cc7bcaec8..d4dc86d0ef5 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -3018,9 +3018,13 @@ elf64_alpha_relax_got_load (struct alpha_relax_info *info, bfd_vma symval, { bfd_vma dtp_base, tp_base; - BFD_ASSERT (elf_hash_table (info->link_info)->tls_sec != NULL); - dtp_base = alpha_get_dtprel_base (info->link_info); - tp_base = alpha_get_tprel_base (info->link_info); + if (elf_hash_table (info->link_info)->tls_sec != NULL) + { + dtp_base = alpha_get_dtprel_base (info->link_info); + tp_base = alpha_get_tprel_base (info->link_info); + } + else + dtp_base = tp_base = 0; disp = symval - (r_type == R_ALPHA_GOTDTPREL ? dtp_base : tp_base); insn = (OP_LDA << 26) | (insn & (31 << 21)) | (31 << 16); @@ -4644,7 +4648,6 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, input_bfd, h->root.root.root.string); ret_val = false; } - BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL); value -= tp_base; if (r_type == R_ALPHA_TPRELHI) value = ((bfd_signed_vma) value >> 16) + ((value >> 15) & 1); @@ -4665,7 +4668,6 @@ elf64_alpha_relocate_section (bfd *output_bfd, struct bfd_link_info *info, value = 0; else { - BFD_ASSERT (elf_hash_table (info)->tls_sec != NULL); if (r_type == R_ALPHA_GOTDTPREL) value -= dtp_base; else if (bfd_link_executable (info)) diff --git a/ld/testsuite/ld-alpha/alpha.exp b/ld/testsuite/ld-alpha/alpha.exp index 540580f3e19..f6b16918927 100644 --- a/ld/testsuite/ld-alpha/alpha.exp +++ b/ld/testsuite/ld-alpha/alpha.exp @@ -69,3 +69,10 @@ set alphatests { # {{objdump -sj.debug_foobar tlsg.sd}} "tlsg"} run_ld_link_tests $alphatests + +set test_list [lsort [glob -nocomplain $srcdir/$subdir/*.d]] +foreach t $test_list { + # We need to strip the ".d", but can leave the dirname. + verbose [file rootname $t] + run_dump_test [file rootname $t] +} diff --git a/ld/testsuite/ld-alpha/tlsbin-undef.d b/ld/testsuite/ld-alpha/tlsbin-undef.d new file mode 100644 index 00000000000..203d0c424e8 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlsbin-undef.d @@ -0,0 +1,2 @@ +#ld: +#error: .*: undefined reference to `x' diff --git a/ld/testsuite/ld-alpha/tlsbin-undef.s b/ld/testsuite/ld-alpha/tlsbin-undef.s new file mode 100644 index 00000000000..b95f48afd69 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlsbin-undef.s @@ -0,0 +1,16 @@ + .set noreorder + .set volatile + .set noat + .set nomacro + .arch ev4 + .text + .align 4 + .globl _start + .ent _start +_start: + ldq $1,x($29) !gottprel + addq $0,$1,$0 + ret + .end _start + .hidden x + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-alpha/tlsbin-weak-undef1.d b/ld/testsuite/ld-alpha/tlsbin-weak-undef1.d new file mode 100644 index 00000000000..a234b5e4ad1 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlsbin-weak-undef1.d @@ -0,0 +1,14 @@ +#ld: -z norelro -z nomemory-seal +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: + +[a-f0-9]+: 00 80 3d a4 ldq t0,-32768\(gp\) + +[a-f0-9]+: 00 04 01 40 addq v0,t0,v0 + +[a-f0-9]+: 01 80 fa 6b ret + +[a-f0-9]+: 00 00 fe 2f unop +#pass diff --git a/ld/testsuite/ld-alpha/tlsbin-weak-undef1.s b/ld/testsuite/ld-alpha/tlsbin-weak-undef1.s new file mode 100644 index 00000000000..c0a5c0a5808 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlsbin-weak-undef1.s @@ -0,0 +1,22 @@ + .set noreorder + .set volatile + .set noat + .set nomacro + .arch ev4 + .text + .align 4 + .globl _start + .ent _start +_start: + ldq $1,x($29) !gottprel + addq $0,$1,$0 + ret + .end _start + .section .tbss,"awT",@nobits + .type y, @object + .size y, 4 +y: + .zero 4 + .weak x + .hidden x + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-alpha/tlsbin-weak-undef2.d b/ld/testsuite/ld-alpha/tlsbin-weak-undef2.d new file mode 100644 index 00000000000..47fb7336674 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlsbin-weak-undef2.d @@ -0,0 +1,14 @@ +#ld: -z norelro -z nomemory-seal +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: + +[a-f0-9]+: 00 00 00 24 ldah v0,0\(v0\) + +[a-f0-9]+: 00 00 20 a0 ldl t0,0\(v0\) + +[a-f0-9]+: 01 80 fa 6b ret + +[a-f0-9]+: 00 00 fe 2f unop +#pass diff --git a/ld/testsuite/ld-alpha/tlsbin-weak-undef2.s b/ld/testsuite/ld-alpha/tlsbin-weak-undef2.s new file mode 100644 index 00000000000..bf05205bb59 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlsbin-weak-undef2.s @@ -0,0 +1,17 @@ + .set noreorder + .set volatile + .set noat + .set nomacro + .arch ev4 + .text + .align 4 + .globl _start + .ent _start +_start: + ldah $0,x($0) !tprelhi + ldl $1,x($0) !tprello + ret + .end _start + .weak x + .hidden x + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-alpha/tlspic-undef.d b/ld/testsuite/ld-alpha/tlspic-undef.d new file mode 100644 index 00000000000..e6907997ada --- /dev/null +++ b/ld/testsuite/ld-alpha/tlspic-undef.d @@ -0,0 +1,2 @@ +#ld: -shared +#error: .*: undefined reference to `x' diff --git a/ld/testsuite/ld-alpha/tlspic-undef.s b/ld/testsuite/ld-alpha/tlspic-undef.s new file mode 100644 index 00000000000..c4b091fc834 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlspic-undef.s @@ -0,0 +1,16 @@ + .set noreorder + .set volatile + .set noat + .set nomacro + .arch ev4 + .text + .align 4 + .globl _start + .ent _start +_start: + ldq $1,x($29) !gotdtprel + addq $0,$1,$1 + ret + .end _start + .hidden x + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-alpha/tlspic-weak-undef1.d b/ld/testsuite/ld-alpha/tlspic-weak-undef1.d new file mode 100644 index 00000000000..626da576d66 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlspic-weak-undef1.d @@ -0,0 +1,14 @@ +#ld: -shared -z norelro -z nomemory-seal +#objdump: -dw + +.*: +file format .* + + +Disassembly of section .text: + +[a-f0-9]+ <_start>: + +[a-f0-9]+: 00 80 3d a4 ldq t0,-32768\(gp\) + +[a-f0-9]+: 01 04 01 40 addq v0,t0,t0 + +[a-f0-9]+: 01 80 fa 6b ret + +[a-f0-9]+: 00 00 fe 2f unop +#pass diff --git a/ld/testsuite/ld-alpha/tlspic-weak-undef1.s b/ld/testsuite/ld-alpha/tlspic-weak-undef1.s new file mode 100644 index 00000000000..bcbe5a173b3 --- /dev/null +++ b/ld/testsuite/ld-alpha/tlspic-weak-undef1.s @@ -0,0 +1,22 @@ + .set noreorder + .set volatile + .set noat + .set nomacro + .arch ev4 + .text + .align 4 + .globl _start + .ent _start +_start: + ldq $1,x($29) !gotdtprel + addq $0,$1,$1 + ret + .end _start + .section .tbss,"awT",@nobits + .type y, @object + .size y, 4 +y: + .zero 4 + .weak x + .hidden x + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-elf/pr34165.c b/ld/testsuite/ld-elf/pr34165.c new file mode 100644 index 00000000000..3793dda4403 --- /dev/null +++ b/ld/testsuite/ld-elf/pr34165.c @@ -0,0 +1,14 @@ +extern __thread int x +__attribute__((visibility("hidden"))) +__attribute__((weak)); +extern __thread int x_used +__attribute__((visibility("hidden"))) +__attribute__((weak)); + +int +main (void) +{ + if (!x_used) + x++; + return 0; +} diff --git a/ld/testsuite/ld-elf/tls.exp b/ld/testsuite/ld-elf/tls.exp index 515824b7f12..d149c3a41df 100644 --- a/ld/testsuite/ld-elf/tls.exp +++ b/ld/testsuite/ld-elf/tls.exp @@ -62,6 +62,17 @@ run_ld_link_tests [list \ ] \ ] +run_cc_link_tests [list \ + [list \ + "pr34165" \ + "" \ + "-O2 $NOSANITIZE_CFLAGS" \ + { pr34165.c } \ + {} \ + "pr34165" \ + ] \ +] + if [file exists tmpdir/pr22263-1] { run_ld_link_tests [list \ [list \ -- 2.54.0