From patchwork Wed Aug 23 15:47:33 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 136693 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a7d1:0:b0:3f2:4152:657d with SMTP id p17csp548917vqm; Wed, 23 Aug 2023 08:47:56 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHgSoOgIJtinR5SdbLi+0v3Dib370iGFtBenzYZcF2QUmvj7YBIlBnq0ZEVDtsowDiiWuft X-Received: by 2002:a17:906:24d:b0:99d:b540:d625 with SMTP id 13-20020a170906024d00b0099db540d625mr10333668ejl.64.1692805675859; Wed, 23 Aug 2023 08:47:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692805675; cv=none; d=google.com; s=arc-20160816; b=Gicqvfi928oaK6gJYl3g5RWFdn8MRbRwXljleM5w0MF5mMxZT17DR51KXfTpOsrrYa AdVWtMOO70HrVNPjj6/7QTA9vHa8DrNcf9RrN2qUG2hkRdcuRKIFVzmIAZkTw15UzO+n E2oPf8d43hGEYAt0AAlp8HPhcp+W054D73zu3mG+DYxpUfjIOf5YUVk4AJfrj+ulKBOn 01VZnMqkwL4AWU0cvEAst1dptM5K2z6Sn9tvbp9mGmvMpkX9G39vOB4SQbGpbRuI/8Lu J4XiB/vxFAdP9cn7sSVuBoPlankB9H8VvheDPLkHppFfrn5ZyHpQYo/C7QFYfvvd1zXT ZvnA== 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-transfer-encoding:mime-version:message-id:date:subject:cc :to:dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=rGFKYSPCEm28DazEpCljy4wiNO98gsJE2vCdvj11FM0=; fh=qcCmeTJZRjr4qLCJKjlDQIYjEstIQ/C5ky++tZ+IZec=; b=Aw+vj9b8lhPRzQc6oIA5dfYEeq3UZZySryeZskcSGV6N6rTf2AgpI5jMBmcHkjFFvb PnH56wDy0yEMbkUdaBozoTLK+J27ceOcVeYhVpPeWND0qWjhMsHjteJQJ+ohDKOsjznZ +HDel/5sD8MVQ9NABaMKtIVj17K2fRsgz9g63+tjsMAFUayodj3VCT49VMD5pFQ+HF2e kpIohixqUaLzkzjUr2htX6f4AZC5wVihA5bkgPIjZYy5IesbrFKxQJpWlVc2tvNic9tL JGgXA4aL3g5qG+VtxKaq3kfhYjCTLL5qq8beF5O6Y9F/ul+fPD+0sWSc/GCjfpibG27k 8jwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=Tulxv0Ic; 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 ja4-20020a170907988400b0099da03ea7d7si6489200ejc.94.2023.08.23.08.47.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Aug 2023 08:47:55 -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=Tulxv0Ic; 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 852C5385734B for ; Wed, 23 Aug 2023 15:47:54 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 852C5385734B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1692805674; bh=rGFKYSPCEm28DazEpCljy4wiNO98gsJE2vCdvj11FM0=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=Tulxv0IcpgYDWVWFQQAKFZb8fmO21D0gdV5bUH0ahLXuCKsoCmwl6NTdGmOSZmvGI IEiwUl4G04BY0ozGP/FcDkJXnOoMj9LEeyGU8VDMORbr6KnjTJ4D/HVfL9hweP9O6A mwKW7l0luytnsvY3QB1KcqEHujmoEKcLjObTy5e0= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-ot1-x32c.google.com (mail-ot1-x32c.google.com [IPv6:2607:f8b0:4864:20::32c]) by sourceware.org (Postfix) with ESMTPS id 500553858401 for ; Wed, 23 Aug 2023 15:47:45 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 500553858401 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-6bca3588edbso3800385a34.0 for ; Wed, 23 Aug 2023 08:47:45 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692805664; x=1693410464; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rGFKYSPCEm28DazEpCljy4wiNO98gsJE2vCdvj11FM0=; b=Mp17KnDDrMiBBHSgGx4ZAuuDs9YzWIzAaGT1yc/e/vll6J8A6VXuHCQMAozZLxlxVk cJxF9jGCqCtwp5ZH2ShoV1GB0PK1qQPftegryBxaVh6xqABcsuavwIv+OthKCAJ2HoX/ ig5P4g2ld5+dq4BNiGgADAuhgovZXHJ1eAcCXGEY4LaehmfrPDLddd32FGcHb+AqajpE oCzjtXlxaoOx9glvd+sN/2J5LRz6Hn78X3VtY+g2PXu98eXMszMi1FPf5y62RDfXe1K/ KwYsHJx6OV0L3wetZ0sEMRcELkyCf1oWbyjHUZI7uo8V8Xm9+6R3mzKiPRZpnaU3FOYq hHzw== X-Gm-Message-State: AOJu0Yw0KdpApwnWvU/gptHKOJyzHk0HEL0E5KyyZYPWxA7sAxfOpYJ0 oyysvQ6ZvbUZ8J28MRfYPhiFFLGVsZ0= X-Received: by 2002:a05:6358:78b:b0:139:5a46:ea7d with SMTP id n11-20020a056358078b00b001395a46ea7dmr5675484rwj.7.1692805664409; Wed, 23 Aug 2023 08:47:44 -0700 (PDT) Received: from gnu-cfl-3.localdomain ([172.59.161.42]) by smtp.gmail.com with ESMTPSA id b21-20020a637155000000b0054fa8539681sm10042056pgn.34.2023.08.23.08.47.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Aug 2023 08:47:44 -0700 (PDT) Received: from gnu-cfl-3.. (localhost [IPv6:::1]) by gnu-cfl-3.localdomain (Postfix) with ESMTP id F29F67402E3; Wed, 23 Aug 2023 08:47:42 -0700 (PDT) To: binutils@sourceware.org Cc: Peter Edwards Subject: [PATCH] x86: Fix DT_JMPREL/DT_PLTRELSZ when relocs share a section Date: Wed, 23 Aug 2023 08:47:33 -0700 Message-ID: <20230823154733.276739-1-hjl.tools@gmail.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-Spam-Status: No, score=-3025.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 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: "H.J. Lu via Binutils" From: "H.J. Lu" Reply-To: "H.J. Lu" Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1775035404229987247 X-GMAIL-MSGID: 1775035404229987247 From: Peter Edwards If a linker script does not place the PLT relocations and "normal" relocations in separate ELF sections, `ld` will currently output incorrect values for DT_JMPREL and DT_PLTRELSZ - they cover the entire ELF section, rather than just the PLT relocations Don't ignore the extent of the BFD section - use the size of the srelplt BFD section and its offset from the output_secttion bfd/ PR ld/30787 * elfxx-x86.c (_bfd_x86_elf_finish_dynamic_sections): Use input section for DT_JMPREL and DT_PLTRELSZ. ld/ PR ld/30787 * testsuite/ld-i386/i386.exp: Run pr30787. * testsuite/ld-x86-64/x86-64.exp: Likewise. * testsuite/ld-i386/pr30787.d: New file. * testsuite/ld-i386/pr30787.s: Likewise. * testsuite/ld-i386/pr30787.t: Likewise. * testsuite/ld-x86-64/pr30787.d: Likewise. * testsuite/ld-x86-64/pr30787.s: Likewise. * testsuite/ld-x86-64/pr30787.t: Likewise. --- bfd/elfxx-x86.c | 5 +++-- ld/testsuite/ld-i386/i386.exp | 1 + ld/testsuite/ld-i386/pr30787.d | 7 +++++++ ld/testsuite/ld-i386/pr30787.s | 6 ++++++ ld/testsuite/ld-i386/pr30787.t | 4 ++++ ld/testsuite/ld-x86-64/pr30787.d | 7 +++++++ ld/testsuite/ld-x86-64/pr30787.s | 6 ++++++ ld/testsuite/ld-x86-64/pr30787.t | 4 ++++ ld/testsuite/ld-x86-64/x86-64.exp | 1 + 9 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 ld/testsuite/ld-i386/pr30787.d create mode 100644 ld/testsuite/ld-i386/pr30787.s create mode 100644 ld/testsuite/ld-i386/pr30787.t create mode 100644 ld/testsuite/ld-x86-64/pr30787.d create mode 100644 ld/testsuite/ld-x86-64/pr30787.s create mode 100644 ld/testsuite/ld-x86-64/pr30787.t diff --git a/bfd/elfxx-x86.c b/bfd/elfxx-x86.c index f224e8f1354..103559d77ec 100644 --- a/bfd/elfxx-x86.c +++ b/bfd/elfxx-x86.c @@ -2771,11 +2771,12 @@ _bfd_x86_elf_finish_dynamic_sections (bfd *output_bfd, break; case DT_JMPREL: - dyn.d_un.d_ptr = htab->elf.srelplt->output_section->vma; + s = htab->elf.srelplt; + dyn.d_un.d_ptr = s->output_section->vma + s->output_offset; break; case DT_PLTRELSZ: - s = htab->elf.srelplt->output_section; + s = htab->elf.srelplt; dyn.d_un.d_val = s->size; break; diff --git a/ld/testsuite/ld-i386/i386.exp b/ld/testsuite/ld-i386/i386.exp index 5f53bcf29bc..e8ad973eb36 100644 --- a/ld/testsuite/ld-i386/i386.exp +++ b/ld/testsuite/ld-i386/i386.exp @@ -511,6 +511,7 @@ run_dump_test "dt-relr-1a" run_dump_test "dt-relr-1b" run_dump_test "pr28870" run_dump_test "pr28894" +run_dump_test "pr30787" if { !([istarget "i?86-*-linux*"] || [istarget "i?86-*-gnu*"] diff --git a/ld/testsuite/ld-i386/pr30787.d b/ld/testsuite/ld-i386/pr30787.d new file mode 100644 index 00000000000..f82411da8b7 --- /dev/null +++ b/ld/testsuite/ld-i386/pr30787.d @@ -0,0 +1,7 @@ +#as: --32 +#ld: -melf_i386 -shared --no-warn-rwx-segments -T pr30787.t +#readelf: -d --wide + +#... + 0x0+2 \(PLTRELSZ\) +8 \(bytes\) +#pass diff --git a/ld/testsuite/ld-i386/pr30787.s b/ld/testsuite/ld-i386/pr30787.s new file mode 100644 index 00000000000..71594d2327e --- /dev/null +++ b/ld/testsuite/ld-i386/pr30787.s @@ -0,0 +1,6 @@ + .text + .globl foo +foo: + jmp bar@PLT + leal func@GOT(%ebx), %eax + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-i386/pr30787.t b/ld/testsuite/ld-i386/pr30787.t new file mode 100644 index 00000000000..8c476209cba --- /dev/null +++ b/ld/testsuite/ld-i386/pr30787.t @@ -0,0 +1,4 @@ +SECTIONS +{ + .rel.dyn : { *(.rel.*) } +} diff --git a/ld/testsuite/ld-x86-64/pr30787.d b/ld/testsuite/ld-x86-64/pr30787.d new file mode 100644 index 00000000000..29102d4cc2c --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr30787.d @@ -0,0 +1,7 @@ +#as: --64 +#ld: -melf_x86_64 -shared --no-warn-rwx-segments -T pr30787.t +#readelf: -d --wide + +#... + 0x0+2 \(PLTRELSZ\) +24 \(bytes\) +#pass diff --git a/ld/testsuite/ld-x86-64/pr30787.s b/ld/testsuite/ld-x86-64/pr30787.s new file mode 100644 index 00000000000..8bc774f1312 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr30787.s @@ -0,0 +1,6 @@ + .text + .globl foo +foo: + jmp bar@PLT + movq func@GOTPCREL(%rip), %rax + .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-x86-64/pr30787.t b/ld/testsuite/ld-x86-64/pr30787.t new file mode 100644 index 00000000000..66759cbb6a6 --- /dev/null +++ b/ld/testsuite/ld-x86-64/pr30787.t @@ -0,0 +1,4 @@ +SECTIONS +{ + .rela.dyn : { *(.rela.*) } +} diff --git a/ld/testsuite/ld-x86-64/x86-64.exp b/ld/testsuite/ld-x86-64/x86-64.exp index 1a10c395b5c..f94284b079c 100644 --- a/ld/testsuite/ld-x86-64/x86-64.exp +++ b/ld/testsuite/ld-x86-64/x86-64.exp @@ -505,6 +505,7 @@ run_dump_test "dt-relr-1a" run_dump_test "dt-relr-1a-x32" run_dump_test "dt-relr-1b" run_dump_test "dt-relr-1b-x32" +run_dump_test "pr30787" if { ![skip_sframe_tests] } { run_dump_test "sframe-simple-1"