From patchwork Thu Jul 30 23:09:25 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "H.J. Lu" X-Patchwork-Id: 140305 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 6BB3A4BB58ED for ; Thu, 30 Jul 2026 23:10:39 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6BB3A4BB58ED 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=dzyVPBbl X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id 65EB04BB3BDD for ; Thu, 30 Jul 2026 23:10:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 65EB04BB3BDD 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 65EB04BB3BDD Authentication-Results: sourceware.org; arc=pass smtp.remote-ip=2607:f8b0:4864:20::42c ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1785453004; cv=pass; b=T6Xb0ZN52CoguzpHmRk0ikev0QHih5IaMmFvCFvv3zFyBljnM1WyXxKU47qcfHpc1fnQXei+j2/6LMTfpRFTlRoq9WrdVhK0GYYnbPtkVKfx8ItJNwKK+XKVA8yN9CahYHLyYvS5+mOhvlc/Ps3mghDUQHdJ4w//8uLoiMtLghg= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1785453004; c=relaxed/simple; bh=d7yu1U1GLmxh21HqO+EVlg6EUZ38cS5sPDcXDSMqSzY=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=oI0075Uw5WX5vN0FjIaI2YuN1ZZ0blFR1lmhKLoGAn8HXPMc2bI2zOjNDjD8ntvEfmj5bXRlP/yljgA6qmiFta7B5rGoKR8B9g6ZNg1e5mPkz7Kcx82Y4T+7NoLhf76vhH7SxtltoksNS2ckcnaDr98GT0ex5loP9wHGG5srLhU= 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=dzyVPBbl DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 65EB04BB3BDD Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-848593533cbso289297b3a.3 for ; Thu, 30 Jul 2026 16:10:04 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1785453003; cv=none; d=google.com; s=arc-20260327; b=rNkKQwzitbACuh8uAk4EStjSdrPWhPIi99QwLzxK8i3oPZR2xdj2B7ZfLnhvYunHQy j4j72OgEXBvDwWFB+S0aCKdUH6BwtS8+PG63BHUOoYPbvPwY2MdK79KtaIYe90YXGqY6 uEde28Ol5PGjEhxEkbZP41iQCXa094DWzxfZdjbg1PIECTD9IlOlMlCazm1rwpRtXftY 2E8pzU8qDKlsHYiKE8yQnXEmBI0fUiroaHgQmVunesa++r9g5xvT1b8HACpxp9ByekOw Ny3dVUyasMF/ul+kcrq2yrY4rqqTeIEzFAjRsDLmw0Lo2oT2TbUjxDLjKPIjOZTgIZLK gv0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=pg4PZMpLC+yD9mFXgCCtHIEmB43n/u7jn6fOSuHNVhc=; fh=ZO7vTXyKkA0NlqRzd3nCt3VzmffSbtesrTdqprLQS5g=; b=UmQPTbsKDs7v5VFA7oTCPAuAo0V1H+k0kzAkHkVtf87NxU59/9qtUZHJpWodK05M93 5I7+uZV1UAdlnLpV9NonW5D1p96JEEUJp3HR8IKrmdS5xzm1vdSvg27L50d6Uqr3JvsE 09QlBPvJuAgh9AyraLh8dZAB2ipW+fK/r9tF1ALxqLFnxFsR5ceHUzPdOX5EPG+d0FbT yyUqQvZW9MwE2gJicRslXljjrk2KRUmpftL7asd/LHne/larl77Ssk+dQsvw5opb16Xh 78LtshSpa3wu0s7uYhkluNEEcGzy9gfCV5fQhUxAx8TnV7KJg98vSlIKKMIDiZTXR01V KmJQ==; 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=1785453003; x=1786057803; darn=sourceware.org; h=content-type:to:subject:message-id:date:from:mime-version:from:to :cc:subject:date:message-id:reply-to:content-type; bh=pg4PZMpLC+yD9mFXgCCtHIEmB43n/u7jn6fOSuHNVhc=; b=dzyVPBblYkAEniYHYdE+2m4LIo09+Y1h99TGmYXNiTSEVMDqd3P1Tc1uWv7nAjgPAD GU3L+k8tPdjYLUw1GY+COejeH33EGlTfWs+DuptX74NAFWxxG/7MdvVIDc8EMMS8yv48 TQLvdwtCwYEop3JpLTjzS6uswgOFuMzQPC0EfiYeC1sLzANhd0C6ZBQt2UANXl9kJ8qI sigderiz/BninISRlwU8S+/WbGzYtUIgQRbimd0lzTwcoQoFXZO2iboAovzenFjysZmR sNNkwL0dFcx37xkYx/0DoiNJyHYCiuCyxqK6FgFTOtA5UoJWo11OzfJ/y9ppl6RH2yZy r+eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785453003; x=1786057803; h=content-type:to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pg4PZMpLC+yD9mFXgCCtHIEmB43n/u7jn6fOSuHNVhc=; b=XdkWmSaHJP6Foypp53FOa3IHqS2HltlfP1o2yN6/HYslhAZ8pdD5DVQ/IDrDmnNSAE +qEqhzM88b37NFeBJ9zPUmVdvLZ6l1HNAsisImBL5Gim+3w3UiiXGM5HoZ9YH4D+7Vzz MFxs0/S4z/dnwkWYFmSFdteWsT1W8EKRRrb5RqM1iBUjP/BLHx43PoI1bLt568YE2oFL Ued9WhThMLj2wrGT6h4o6l7Vqf4bCuaORTVCj0DeG8SkMYih9CnyzE4yO662YV3/UhSL QTsEW4OzobC883LQd9QuqmcSGGG6mf3jkADaBzH9xJHq+jO3D/79UeNcgdwu9PSQ4iLj CIBA== X-Gm-Message-State: AOJu0Yy9V4iHLLsB6NcnDvWXqO7hIu1TfUlCyVOd7gbCYdfj1OI+lFt4 dNmYswURnibeW2yXs/NugiKc4klh7kHWBbVDFJ/ug75JmfRCTc5mQA5Rp/1xmN44CQwLAokIjht o8fzj1FEv2HGTXF2fcK2YR2vScvDJ5/LN6j6maME= X-Gm-Gg: AR+sD11uty7p/69vlmaO/VdGBCoBJ81ljgZsgQaq7QOoE46scIVqvsYAHuFlsBYXgdy gM+0JVV8x2RS6wljpV0VwknRSGYoIgWNCD05/jukabW7VFen/rCiUT4sYfFedTA+rONQtEWG+x0 EyOIuHKfIECbTRuAf1nC2Ivw6Clcb4Ic+ysJxhHMD/V6jtBcRn4ikd2xvV1TBAQ0QxoLntO2yII erCucC+M/HaJMsxhtxPlD/M6rnH+SLrjj2Oiy+eVI1CHrHLeCRB+r8QRT6mnQUWFZt4t9VA9moK sQnfPwGcgAdEln2RtQ4G5p9s3rOOjwvPAmPKMYHZeUQwHlBdR2ufOk8H X-Received: by 2002:a05:6a00:4f86:b0:847:83bd:6671 with SMTP id d2e1a72fcca58-84ebc211811mr4241389b3a.19.1785453002738; Thu, 30 Jul 2026 16:10:02 -0700 (PDT) MIME-Version: 1.0 From: "H.J. Lu" Date: Fri, 31 Jul 2026 07:09:25 +0800 X-Gm-Features: AUfX_mw3NNaxwVJWP9U1EqEZn-GKDpuhu0bo5aWdVah_PhNcwXXXlaicUCQOePA Message-ID: Subject: [PATCH] x86: Disallow ".long foo@PLT - .L4" for PLT32 relocation To: Binutils , Jan Beulich X-Spam-Status: No, score=-3008.8 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 Disallow ".long foo@PLT - .L4" and only allow ".slong foo@PLT - .L4" for PLT32 relocation. gas/ PR gas/34423 * config/tc-i386.c (cons_slong): New. (x86_cons): Return BFD_RELOC_X86_64_PC32_TO_PLT32 or BFD_RELOC_386_PC32_TO_PLT32 only if cons_slong is true. (signed_cons): Set cons_slong to true before calling cons and set it to false afterwards. (tc_gen_reloc): Update BFD_RELOC_X86_64_PC32_TO_PLT32 comments. * testsuite/gas/i386/ilp32/reloc64.l: Revert commit 53902b30c66. * testsuite/gas/i386/ilp32/reloc64.s: Likewise. * testsuite/gas/i386/reloc32.l: Likewise. * testsuite/gas/i386/reloc32.s: Likewise. * testsuite/gas/i386/reloc64.l: Likewise. * testsuite/gas/i386/plt.s: Replace .long with .slong. * testsuite/gas/i386/x86-64-jump-table.s: Likewise. ld/ PR gas/34423 * testsuite/ld-x86-64/x86-64-jump-table.s: Replace .long with .slong. From ee1a066d1b41d82c2e6a67fc749fef7c2e8868bf Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 31 Jul 2026 07:00:52 +0800 Subject: [PATCH] x86: Disallow ".long foo@PLT - .L4" for PLT32 relocation Disallow ".long foo@PLT - .L4" and only allow ".slong foo@PLT - .L4" for PLT32 relocation. gas/ PR gas/34423 * config/tc-i386.c (cons_slong): New. (x86_cons): Return BFD_RELOC_X86_64_PC32_TO_PLT32 or BFD_RELOC_386_PC32_TO_PLT32 only if cons_slong is true. (signed_cons): Set cons_slong to true before calling cons and set it to false afterwards. (tc_gen_reloc): Update BFD_RELOC_X86_64_PC32_TO_PLT32 comments. * testsuite/gas/i386/ilp32/reloc64.l: Revert commit 53902b30c66. * testsuite/gas/i386/ilp32/reloc64.s: Likewise. * testsuite/gas/i386/reloc32.l: Likewise. * testsuite/gas/i386/reloc32.s: Likewise. * testsuite/gas/i386/reloc64.l: Likewise. * testsuite/gas/i386/plt.s: Replace .long with .slong. * testsuite/gas/i386/x86-64-jump-table.s: Likewise. ld/ PR gas/34423 * testsuite/ld-x86-64/x86-64-jump-table.s: Replace .long with .slong. Signed-off-by: H.J. Lu --- gas/config/tc-i386.c | 12 +++++++++--- gas/testsuite/gas/i386/ilp32/reloc64.l | 3 ++- gas/testsuite/gas/i386/ilp32/reloc64.s | 2 +- gas/testsuite/gas/i386/plt.s | 8 ++++---- gas/testsuite/gas/i386/reloc32.l | 4 ++-- gas/testsuite/gas/i386/reloc32.s | 2 +- gas/testsuite/gas/i386/reloc64.l | 3 ++- gas/testsuite/gas/i386/reloc64.s | 2 +- gas/testsuite/gas/i386/x86-64-jump-table.s | 10 +++++----- ld/testsuite/ld-x86-64/x86-64-jump-table.s | 10 +++++----- 10 files changed, 32 insertions(+), 24 deletions(-) diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 67badd29298..b61e1eb49e6 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -13374,6 +13374,10 @@ output_imm (fragS *insn_start_frag, offsetT insn_start_off) reloc is needed. We use this hook to get the correct .got reloc. */ static int cons_sign = -1; +/* This hook is used by x86_cons to allow ".slong foo@PLT - .L4", but + not ".long foo@PLT - .L4". */ +static bool cons_slong = false; + void x86_cons_fix_new (fragS *frag, unsigned int off, unsigned int len, expressionS *exp, bfd_reloc_code_real_type r) @@ -13553,10 +13557,10 @@ x86_cons (expressionS *exp, int size) || got_reloc == BFD_RELOC_32_PLT_PCREL) && exp->X_op != O_symbol) { - /* Allow directives like ".long foo@PLT - .L4". + /* Allow directives like ".slong foo@PLT - .L4". BFD_RELOC_X86_64_PC32_TO_PLT32 has an explicit addend and BFD_RELOC_386_PC32_TO_PLT32 has an implicit addend. */ - if (size == 4 && exp->X_op == O_subtract) + if (cons_slong && size == 4 && exp->X_op == O_subtract) got_reloc = (object_64bit ? BFD_RELOC_X86_64_PC32_TO_PLT32 : BFD_RELOC_386_PC32_TO_PLT32); @@ -13592,7 +13596,9 @@ signed_cons (int size) { if (object_64bit) cons_sign = 1; + cons_slong = true; cons (size); + cons_slong = false; cons_sign = -1; } @@ -18770,7 +18776,7 @@ tc_gen_reloc (asection *section ATTRIBUTE_UNUSED, fixS *fixp) rel->addend = fixp->fx_offset - fixp->fx_size; break; case BFD_RELOC_X86_64_PC32_TO_PLT32: - /* This came from a directive like ".long foo@PLT - .L4". + /* This came from a directive like ".slong foo@PLT - .L4". Generate R_X86_64_PLT32 with addend computed like R_X86_64_PC32 so that PLT entry is used to resolve this PC32 relocation. */ diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.l b/gas/testsuite/gas/i386/ilp32/reloc64.l index 08c2702cdb7..14a111d763f 100644 --- a/gas/testsuite/gas/i386/ilp32/reloc64.l +++ b/gas/testsuite/gas/i386/ilp32/reloc64.l @@ -103,6 +103,8 @@ .*:176: Info: .* .*:3: Error: .* .*:177: Info: .* +.*:3: Error: .* +.*:190: Info: .* .*:193: Error: .* too large for field of 4 bytes at .* .*:194: Error: .* too large for field of 4 bytes at .* .*:195: Error: .* too large for field of 4 bytes at .* @@ -111,7 +113,6 @@ .*:197: Error: .* too large for field of 1 byte at .* .*:198: Error: .* too large for field of 2 bytes at .* .*:198: Error: .* too large for field of 1 byte at .* -.*:190: Error: can't resolve xtrn - _start .*:201: Error: .* too large for field of 4 bytes at .* .*:202: Error: .* too large for field of 2 bytes at .* .*:203: Error: .* too large for field of 2 bytes at .* diff --git a/gas/testsuite/gas/i386/ilp32/reloc64.s b/gas/testsuite/gas/i386/ilp32/reloc64.s index a4ccdb29916..db2d2acdf5d 100644 --- a/gas/testsuite/gas/i386/ilp32/reloc64.s +++ b/gas/testsuite/gas/i386/ilp32/reloc64.s @@ -187,7 +187,7 @@ bad .byte xtrn@tpoff .quad xtrn - 0x80000000 .long xtrn@got - 4 .long xtrn@got + 4 -bad .long xtrn@plt - _start +bad .long xtrn@plt - . .text bad add $x+0x123456789, %rax diff --git a/gas/testsuite/gas/i386/plt.s b/gas/testsuite/gas/i386/plt.s index c854c3fe739..5274b6c5a5f 100644 --- a/gas/testsuite/gas/i386/plt.s +++ b/gas/testsuite/gas/i386/plt.s @@ -1,7 +1,7 @@ .section .rodata .L4: - .long foo1@PLT - .L4 - .long foo2@PLT - .L4 - .long foo3@PLT - .L4 - .long foo4@PLT - .L4 + .slong foo1@PLT - .L4 + .slong foo2@PLT - .L4 + .slong foo3@PLT - .L4 + .slong foo4@PLT - .L4 diff --git a/gas/testsuite/gas/i386/reloc32.l b/gas/testsuite/gas/i386/reloc32.l index 31c71a0be28..71c65212dc9 100644 --- a/gas/testsuite/gas/i386/reloc32.l +++ b/gas/testsuite/gas/i386/reloc32.l @@ -131,6 +131,6 @@ .*:160: Info: .* .*:3: Error: .* .*:161: Info: .* -.*:56: Error: .* -.*:164: Error: .* +.*:3: Error: .* +.*:164: Info: .* #pass diff --git a/gas/testsuite/gas/i386/reloc32.s b/gas/testsuite/gas/i386/reloc32.s index 0ba69eae4d0..5616cd57e3f 100644 --- a/gas/testsuite/gas/i386/reloc32.s +++ b/gas/testsuite/gas/i386/reloc32.s @@ -161,7 +161,7 @@ bad .byte xtrn@ntpoff bad .byte xtrn@tpoff .long xtrn@got + 4 .long xtrn@got - 4 -bad .long xtrn@plt - _start +bad .long xtrn@plt - . .text movl $ptr@PLT, %eax diff --git a/gas/testsuite/gas/i386/reloc64.l b/gas/testsuite/gas/i386/reloc64.l index d84d9042958..c60c45d139a 100644 --- a/gas/testsuite/gas/i386/reloc64.l +++ b/gas/testsuite/gas/i386/reloc64.l @@ -163,4 +163,5 @@ .*:219: Info: .* .*:3: Error: .* .*:220: Info: .* -.*:227: Error: can't resolve xtrn - ptr +.*:3: Error: .* +.*:227: Info: .* diff --git a/gas/testsuite/gas/i386/reloc64.s b/gas/testsuite/gas/i386/reloc64.s index f248964813f..5c0f4136a09 100644 --- a/gas/testsuite/gas/i386/reloc64.s +++ b/gas/testsuite/gas/i386/reloc64.s @@ -224,7 +224,7 @@ bad .byte xtrn@gotplt mov xtrn(,%ebx), %eax vgatherdps %xmm2, xtrn(,%xmm1), %xmm0 addr32 vgatherdps %xmm2, xtrn(,%xmm1), %xmm0 -bad .long xtrn@plt - ptr +bad .long xtrn@plt - . .text movabs $ptr@GOT, %rax diff --git a/gas/testsuite/gas/i386/x86-64-jump-table.s b/gas/testsuite/gas/i386/x86-64-jump-table.s index aefffad8f65..f9957630b38 100644 --- a/gas/testsuite/gas/i386/x86-64-jump-table.s +++ b/gas/testsuite/gas/i386/x86-64-jump-table.s @@ -23,9 +23,9 @@ foo: .section .rodata .p2align 2 .L4: - .long bar0@plt-.L4 - .long bar1@PLT-.L4 - .long .Lbar2-.L4 - .long bar3@PLT-.L4 - .long bar4@plt-.L4 + .slong bar0@plt-.L4 + .slong bar1@PLT-.L4 + .slong .Lbar2-.L4 + .slong bar3@PLT-.L4 + .slong bar4@plt-.L4 .section .note.GNU-stack,"",@progbits diff --git a/ld/testsuite/ld-x86-64/x86-64-jump-table.s b/ld/testsuite/ld-x86-64/x86-64-jump-table.s index bd06f714469..84049d879bf 100644 --- a/ld/testsuite/ld-x86-64/x86-64-jump-table.s +++ b/ld/testsuite/ld-x86-64/x86-64-jump-table.s @@ -22,9 +22,9 @@ foo: .section .rodata .p2align 2 .L4: - .long bar0@plt-.L4 - .long bar1@PLT-.L4 - .long .Lbar2-.L4 - .long bar3@PLT-.L4 - .long bar4@plt-.L4 + .slong bar0@plt-.L4 + .slong bar1@PLT-.L4 + .slong .Lbar2-.L4 + .slong bar3@PLT-.L4 + .slong bar4@plt-.L4 .section .note.GNU-stack,"",@progbits -- 2.55.0