From patchwork Fri Aug 4 08:28:03 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 131007 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:44a:b0:3f2:4152:657d with SMTP id ez10csp110946vqb; Fri, 4 Aug 2023 01:28:24 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF9jpekUg14arPnpnQbpkZ32HutmK3uBRUy3QLilPYkc80F0s7jzcrsWMojQeVeaoeV1f8S X-Received: by 2002:a19:6702:0:b0:4fb:7cea:882a with SMTP id b2-20020a196702000000b004fb7cea882amr676088lfc.3.1691137703788; Fri, 04 Aug 2023 01:28:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691137703; cv=none; d=google.com; s=arc-20160816; b=xvaUJG2e+99BXz/EeXbPMK0dpS2bxqGt4h4cYLO5gYk3u+ffBXes0xvh2Q29KuhFBA xraKS+xhDXVz05ePJfgu4uO9WyDRuSd1ON42bGvw1Dz/aUEeO7suXMOlAYuRNykX3+PF gOAvppfyUvmWDkQV+nxQ5tIz35M6aD2JoIBoBX9YcxMlQNCRB8PACyuG8hWOjYwbizZi lnyHo5D766wsbO5bZEn3t3MdnuIBfNn1FVKqJtsqlkcP7WEvthOmSLg8DxTZGFpUtPs4 2gEIXD1dG6TP9G2PEVenQu7ddnEspIaRZW5Zkq8RuQhWrNvd5Bp1ROIh5bTiAcVApAuv Qstw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-disposition:mime-version:message-id:subject:to:date :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=19Ke7lOvWIPRNdCDn9jZiXwFO6YGv3V3c4OLOQXuaJs=; fh=HNIqzTA9Dp00ovCAyCdXfuEvWDT00OlFxFRPLybXRis=; b=MxPC18EMT3VUD6GO89kDF+KMgOqLd+2W71fpYs0tPZ7hG5bYD9+xvJca6vX0x2fxsY 0RRPH33bJHYt68/pA3DQ1N0gqJ3S+ybzjQeHOKDrIHmH8rw1tMn/mogbK6jNzmP7K6/v 2COXQ4oCUgQQWRkV/V8fCqUxjonGSR4zNEIXBVZo+ukYOPDWPqeD6NsWbkjxkB8RCnCE JsRhBsaoTvadlmu5V2+lcgjqGiZ//Xurseu0/jLrstHy4KqWCpti17LbdZV/a+e5GOPH 05YFyc7O5Hu6ysoQn+o057Uky2/7QwD6alQugo8Z0Vh32xBgtzCCWddZ+1t+8q2zOmRA S1Yg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=QDYCew4P; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id a7-20020aa7d907000000b0051e28ec9d30si1274294edr.665.2023.08.04.01.28.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Aug 2023 01:28:23 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=QDYCew4P; spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 75F753857707 for ; Fri, 4 Aug 2023 08:28:22 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 75F753857707 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1691137702; bh=19Ke7lOvWIPRNdCDn9jZiXwFO6YGv3V3c4OLOQXuaJs=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=QDYCew4PxEKtk92E6tL/tbmmu9EJNL6PCgZtL8fOtpUX+qLtwGGGNT0fV6mgirmj1 2v7TkkGq3TWWAD0Z8Oq88wucQ3xFacxyVTlo3ps9GFd5FC9EP3OMykPf/LmMuRRoUS Af5UK4R8CjGCvVz9R8RFyXJ5pXJdchjSQQUMzpvw= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pl1-x633.google.com (mail-pl1-x633.google.com [IPv6:2607:f8b0:4864:20::633]) by sourceware.org (Postfix) with ESMTPS id 207ED3858436 for ; Fri, 4 Aug 2023 08:28:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 207ED3858436 Received: by mail-pl1-x633.google.com with SMTP id d9443c01a7336-1bbd2761f1bso15593475ad.2 for ; Fri, 04 Aug 2023 01:28:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691137686; x=1691742486; h=content-disposition:mime-version:message-id:subject:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=19Ke7lOvWIPRNdCDn9jZiXwFO6YGv3V3c4OLOQXuaJs=; b=UTd7Ih/vXasPw1mWGEwzdEC8l0g7XwvACjhn8id5uoiD5oiMrHftau7ZzIBVs/1mpb p4rPxoju6oIZFWy/bhgPGsneY86trHPTgsMxl9QF+hvB5bXgURKzPAOZLxFOredYgCLq 1G1jR8vFdVIMIpm8E/EmmH70hKFkKbEWiwpQ2Tjzewuomzub0OsN5KPFAfq2CKg1TgwU PUuVpCIFscbFVtvzNtRtdnOnAp2J0vnnn1oEAcOjQ0L61NgL6IH8f+dj9P0kwBBDpNfz hIOsBNBcYtsY3y8bmDUTm1eeJSjh9U4wJGsXN3VBVvGl5M8gaoeQ7HgZp9PBG4u0PSeY rZCQ== X-Gm-Message-State: AOJu0Yxc0OQntGbW5ixCjX++467QeoDhKWr/YCBKSByDoWYTF83sTmRQ 6fqpnyKcSDVRI6l9JcNqWz1vaqJnVw0= X-Received: by 2002:a17:903:2351:b0:1bc:283:75a8 with SMTP id c17-20020a170903235100b001bc028375a8mr1287176plh.26.1691137686575; Fri, 04 Aug 2023 01:28:06 -0700 (PDT) Received: from squeak.grove.modra.org (158.106.96.58.static.exetel.com.au. [58.96.106.158]) by smtp.gmail.com with ESMTPSA id ju2-20020a170903428200b001bbcf43e120sm1165023plb.95.2023.08.04.01.28.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Aug 2023 01:28:05 -0700 (PDT) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id 507A111404FB; Fri, 4 Aug 2023 17:58:03 +0930 (ACST) Date: Fri, 4 Aug 2023 17:58:03 +0930 To: binutils@sourceware.org Subject: PR30697, ppc32 mix of local-dynamic and global-dynamic TLS Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-3033.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Alan Modra via Binutils From: Alan Modra Reply-To: Alan Modra Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773286408610915358 X-GMAIL-MSGID: 1773286408610915358 This fixes miscounting of dynamic relocations on GOT entries when a) there are both local-dynamic and global-dynamic tls accesss for a given symbol, and b) the symbol is global with non-default visibility, and c) the __tls_get_addr calls aren't optimised away. PR 30697 bfd/ * elf32-ppc.c (allocate_dynrelocs): Correct local-dynamic reloc count. ld/ * testsuite/ld-powerpc/tls32ldgd.d, * testsuite/ld-powerpc/tls32ldgd.s: New test. * testsuite/ld-powerpc/powerpc.exp: Run it. diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index 2c544b11de5..37bfbcfc3ba 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -5126,13 +5126,12 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) && eh->has_addr16_lo && htab->params->pic_fixup > 0)) { - unsigned int need; - /* Make sure this symbol is output as a dynamic symbol. */ if (!ensure_undef_dynamic (info, &eh->elf)) return false; - need = 0; + unsigned int need = got_entries_needed (eh->tls_mask); + unsigned int rel_need = need * sizeof (Elf32_External_Rela) / 4; if ((eh->tls_mask & (TLS_TLS | TLS_LD)) == (TLS_TLS | TLS_LD)) { if (SYMBOL_REFERENCES_LOCAL (info, &eh->elf)) @@ -5141,9 +5140,11 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) a local dynamic reloc against a non-local symbol. */ htab->tlsld_got.refcount += 1; else - need += 8; + { + need += 8; + rel_need += sizeof (Elf32_External_Rela); + } } - need += got_entries_needed (eh->tls_mask); if (need == 0) eh->elf.got.offset = (bfd_vma) -1; else @@ -5161,13 +5162,10 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) { asection *rsec; - need *= sizeof (Elf32_External_Rela) / 4; - if ((eh->tls_mask & (TLS_TLS | TLS_LD)) == (TLS_TLS | TLS_LD)) - need -= sizeof (Elf32_External_Rela); rsec = htab->elf.srelgot; if (eh->elf.type == STT_GNU_IFUNC) rsec = htab->elf.irelplt; - rsec->size += need; + rsec->size += rel_need; } } } diff --git a/ld/testsuite/ld-powerpc/powerpc.exp b/ld/testsuite/ld-powerpc/powerpc.exp index 16e25b09a14..6cb7bd2577e 100644 --- a/ld/testsuite/ld-powerpc/powerpc.exp +++ b/ld/testsuite/ld-powerpc/powerpc.exp @@ -522,5 +522,6 @@ run_dump_test "non-contiguous-powerpc" run_dump_test "tprel32" run_dump_test "tprelbad" +run_dump_test tls32ldgd run_dump_test "undefweak" diff --git a/ld/testsuite/ld-powerpc/tls32ldgd.d b/ld/testsuite/ld-powerpc/tls32ldgd.d new file mode 100644 index 00000000000..88e26b9b2c0 --- /dev/null +++ b/ld/testsuite/ld-powerpc/tls32ldgd.d @@ -0,0 +1,13 @@ +#as: -a32 +#ld: -shared -melf32ppc +#readelf: -rW + +Relocation section '\.rela\.dyn' at offset .* contains 3 entries: + Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend +.* +00000044 R_PPC_DTPMOD32 +0 +.* +0000004e R_PPC_DTPREL32 +0 +.* +00000044 R_PPC_DTPMOD32 +0 + +Relocation section '\.rela\.plt' at offset .* contains 1 entry: + Offset +Info +Type +Sym\. Value +Symbol's Name \+ Addend +.* +00000215 R_PPC_JMP_SLOT +00000000 +__tls_get_addr \+ 0 diff --git a/ld/testsuite/ld-powerpc/tls32ldgd.s b/ld/testsuite/ld-powerpc/tls32ldgd.s new file mode 100644 index 00000000000..889eb444c6a --- /dev/null +++ b/ld/testsuite/ld-powerpc/tls32ldgd.s @@ -0,0 +1,16 @@ +#PR 30697 + .section ".tbss","awT",@nobits + .global _start,x + .hidden x + .align 2 +x: .space 4 + + .text +_start: + addi 3,30,x@got@tlsgd + bl __tls_get_addr(x@tlsgd)@plt + + addi 3,30,x@got@tlsld + bl __tls_get_addr(x@tlsld)@plt + addis 3,3,x@dtprel@ha + addi 3,3,x@dtprel@l