From patchwork Fri Nov 28 11:30:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 125503 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id BDABC3858D20 for ; Fri, 28 Nov 2025 11:33:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BDABC3858D20 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=suse.com header.i=@suse.com header.a=rsa-sha256 header.s=google header.b=JMfcLNxX X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) by sourceware.org (Postfix) with ESMTPS id B1365385B512 for ; Fri, 28 Nov 2025 11:31:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B1365385B512 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B1365385B512 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::331 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1764329468; cv=none; b=PdIKlxrB4tswxtZ3722i++B0boB7DtzuPgMAan1+cepefOHymcrrV7TD31aKeUAbtSaedvU/A335LTFTCmzOItl0Ca1q6Cp+YLhX2txFi/rIsTqJWUN3aHwBr0QsL2y3SLm0uUb++TTLi2+PxACS3azSJftvBCGng+GKONx38gQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1764329468; c=relaxed/simple; bh=rNU1ftFEBNgPzyUhTReuaVKYfUG5bZzkrW/pwgcBAi0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=v+0bDUWsWWEQdKOWsgcjQsMF0jQKNhLab0a5O0zv9dqrCOz5HZL7gfcla0rAq/E1oxDyDpKEG0YKP/2fqdjE+JMEBirSAZYUyBm3f+9FzS7Ahmpj3h+5+wZKTDXYZ9DRBIwLdGiZ7dXWorwaDDyMffXh+2aM8h0lMzzMNvWTN1I= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-477a1c28778so19469705e9.3 for ; Fri, 28 Nov 2025 03:31:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1764329437; x=1764934237; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:cc:content-language :references:to:from:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=vYEjjbXE5c9mMCBFzI7Vl2byJV/xCV6Qut2KQcv7juY=; b=JMfcLNxXdmhg4hy8/8VIyOg5z/Xg/q/7FOusAIs1at8b0HDF6XUZYwreGsmfVgC5WO aEexqLywyL1+hkGA7KaNrlozYm7fT/6xLpW6f/bdpAhMTuwDWvigA47pcT3snPewAIH0 R86VtJctQ6rrx12v8k/1dznZzipqetClYBK0+O430ryCpUzbN+55pFhbOJ5u83tFVmJA 7zP4hBu2lbt/RXLV8APKeCG69FzH5IOrByRxpFWHTpWz+HIT+zReTCSNnCjyigTHB67c 5lc5NbV6wHqWHSnnbdYC5XIwJ0hfw5Y9GthJUqCSMK8+oNuq8NBDAKpf3b2iCkCFPZCh 2O/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764329437; x=1764934237; h=content-transfer-encoding:in-reply-to:autocrypt:cc:content-language :references:to:from:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=vYEjjbXE5c9mMCBFzI7Vl2byJV/xCV6Qut2KQcv7juY=; b=PlghT52fXUkETKa4SAa0ka7syR148v5a7UT9FaiIvnSlbZJ5qkgdmMFVHUA4v+l6k9 3uvK/zdqXaP2gVKB8ayenHd/4GU/v/EiEJAV/DoMZJUJSG969GtdESZMmci5Jf9DNlPt JZN6FVUEqh4dEQ1WEAjZYd9jTcfbLRYy38LzWl83Z/3kXha77jbTt3YPQEsLyE4vO3O9 SuOkfHIRaJvKK1qN0OtGD3j2ijfvusTejYU8AQ9+qjATTpaopBZVOb7C//RoA6aYwcIk P4R9uElaxNC0jA5Q27wNk/m9ZZDf40EPwLT03VV5xcG77Sdq9qeN4n5cyizSTGqgrBqD V0Rg== X-Gm-Message-State: AOJu0Ywkfip3fK6I1F6jFaNuDJWJwWQxABLg/tqDq/PcvyoW7rzsWokA k1lYOV4KtyH7MSO4q0NxQYpqeeKf92Glw4guFFwbmYjXOh7E1GgZdBuYWgVzDVIgYZpyFQsNsGT HVzk= X-Gm-Gg: ASbGncvI5hbNAN/d/caRMJblpcpncs058tz1LUt/CHif2Q5yHaOZMumijjUIxR6YXVV fIUTDg3ad6cE//zucCr4iKT8cD+I2luVxWFs5DfeW94GEYiSIEswE2dHcczvj2N3rdpQs+vRSEQ XzBaQugDiV6I63m5voVF4r81Esc1p9lr0QKe5Lxld9bN/oMMzeI09GCSCF8gzCqFaGsYsztKFri ldgmxhe7kvML8Q3dSp6naRsgq/zPS7GW+lBLj3J/rhQyU3C7gr3ZExkXSIHUqLeO7xPTeBZaiX1 WCHwc9s9lFpAMEtATClMiqu6rob1vSzwl6ckipsDDl0cvubw6SqXGZEAmETmKzWwdEBd9fUmmvx wdIVVBsFXKGz33NzcrE949M7yhqt/MlIh1C5qFcwTDk3qLSHntHsW49DaKVTeuH/Oj/ub9tBaRi +/GlNi4+SJkIvefNg2ZoVv5n8D2+Crjfztj/5lparJLumkvla6SfPVllQv1aQ65GI99UXa8w3Tm ZcmJLMjRDw2xA== X-Google-Smtp-Source: AGHT+IFgB3PhTPWblidz6Cm5pqHfj4zkamIso2W2SZUJXG1aWAO1asj0iEPZNvFBkNw0D9vb0rG4AQ== X-Received: by 2002:a05:600c:1c8a:b0:477:6d96:b3e5 with SMTP id 5b1f17b1804b1-47904acadd7mr163372335e9.7.1764329437310; Fri, 28 Nov 2025 03:30:37 -0800 (PST) Received: from [10.156.60.236] (ip-037-024-206-209.um08.pools.vodafone-ip.de. [37.24.206.209]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-42e1c5c30c4sm9748441f8f.9.2025.11.28.03.30.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 28 Nov 2025 03:30:37 -0800 (PST) Message-ID: <611266b3-9805-4326-bb1e-407055f94af2@suse.com> Date: Fri, 28 Nov 2025 12:30:35 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 04/14] x86-64: use BFD_RELOC_32_PLT_PCREL in favor of custom type From: Jan Beulich To: Binutils References: Content-Language: en-US Cc: "H.J. Lu" Autocrypt: addr=jbeulich@suse.com; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL In-Reply-To: X-Spam-Status: No, score=-3018.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NONE, 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.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 No reason to have a separate type when the generic one has no (other) meaning for this target. --- Why is it that BFD_RELOC_386_PLT32 (but not BFD_RELOC_X86_64_PLT32) is among the types checked in TC_FORCE_RELOCATION_LOCAL()? Without that, the type could also be replaced by BFD_RELOC_32_PLT_PCREL, then even simplifying a couple of expressions. Code and comment in tc_i386_fix_adjustable() as well as the conditional in i386_validate_fix() suggest that PLT32 relocs can also be absolute. The relocation types (32- and 64-bit) are clearly specified as PC- relative, though. What's the deal? (Questionable commit is 1b714c14e40f ["x86: Turn PLT32 to PC32 only for PC-relative relocations"].) PR gas/32196 really pointed at a bigger problem: If the programmer says @plt, a PLT32 relocation ought to be generated, no matter what. Just like for any of the other @... relocation modifiers. Dropping the relocation is an optimization, which ought to not be active by default. --- a/bfd/bfd-in2.h +++ b/bfd/bfd-in2.h @@ -3881,7 +3881,6 @@ enum bfd_reloc_code_real /* x86-64/elf relocations. */ BFD_RELOC_X86_64_GOT32, - BFD_RELOC_X86_64_PLT32, BFD_RELOC_X86_64_COPY, BFD_RELOC_X86_64_GLOB_DAT, BFD_RELOC_X86_64_JUMP_SLOT, --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -233,7 +233,7 @@ static const struct elf_reloc_map x86_64 { BFD_RELOC_64, R_X86_64_64, }, { BFD_RELOC_32_PCREL, R_X86_64_PC32, }, { BFD_RELOC_X86_64_GOT32, R_X86_64_GOT32,}, - { BFD_RELOC_X86_64_PLT32, R_X86_64_PLT32,}, + { BFD_RELOC_32_PLT_PCREL, R_X86_64_PLT32,}, { BFD_RELOC_X86_64_COPY, R_X86_64_COPY, }, { BFD_RELOC_X86_64_GLOB_DAT, R_X86_64_GLOB_DAT, }, { BFD_RELOC_X86_64_JUMP_SLOT, R_X86_64_JUMP_SLOT, }, --- a/bfd/libbfd.h +++ b/bfd/libbfd.h @@ -1445,7 +1445,6 @@ static const char *const bfd_reloc_code_ "BFD_RELOC_386_IRELATIVE", "BFD_RELOC_386_GOT32X", "BFD_RELOC_X86_64_GOT32", - "BFD_RELOC_X86_64_PLT32", "BFD_RELOC_X86_64_COPY", "BFD_RELOC_X86_64_GLOB_DAT", "BFD_RELOC_X86_64_JUMP_SLOT", --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -2416,8 +2416,6 @@ ENUMDOC ENUM BFD_RELOC_X86_64_GOT32 ENUMX - BFD_RELOC_X86_64_PLT32 -ENUMX BFD_RELOC_X86_64_COPY ENUMX BFD_RELOC_X86_64_GLOB_DAT --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1396,7 +1396,7 @@ gotrel[] = BFD_RELOC_64_PLTOFF }, { .bitfield = { .imm64 = 1 } }, true }, { STRING_COMMA_LEN ("PLT"), { BFD_RELOC_386_PLT32, - BFD_RELOC_X86_64_PLT32 }, + BFD_RELOC_32_PLT_PCREL }, OPERAND_TYPE_IMM32_32S_DISP32, false }, { STRING_COMMA_LEN ("GOTPLT"), { _dummy_first_bfd_reloc_code_real, BFD_RELOC_X86_64_GOTPLT64 }, @@ -4138,7 +4138,7 @@ tc_i386_fix_adjustable (fixS *fixP) /* Resolve PLT32 relocation against local symbol to section only for PC-relative relocations. */ if (fixP->fx_r_type == BFD_RELOC_386_PLT32 - || fixP->fx_r_type == BFD_RELOC_X86_64_PLT32) + || fixP->fx_r_type == BFD_RELOC_32_PLT_PCREL) return fixP->fx_pcrel; return 1; } @@ -11778,7 +11778,7 @@ output_jump (void) if (flag_code == CODE_64BIT && size == 4 && jump_reloc == NO_RELOC && i.op[0].disps->X_add_number == 0 && need_plt32_p (i.op[0].disps->X_add_symbol)) - jump_reloc = BFD_RELOC_X86_64_PLT32; + jump_reloc = BFD_RELOC_32_PLT_PCREL; #endif jump_reloc = reloc (size, 1, 1, jump_reloc); @@ -13424,7 +13424,7 @@ x86_cons (expressionS *exp, int size) *input_line_pointer = c; } else if ((got_reloc == BFD_RELOC_386_PLT32 - || got_reloc == BFD_RELOC_X86_64_PLT32) + || got_reloc == BFD_RELOC_32_PLT_PCREL) && exp->X_op != O_symbol) { char c = *input_line_pointer; @@ -15768,7 +15768,7 @@ elf_symbol_resolved_in_segment_p (symbol switch ((enum bfd_reloc_code_real) fr_var) { case BFD_RELOC_386_PLT32: - case BFD_RELOC_X86_64_PLT32: + case BFD_RELOC_32_PLT_PCREL: /* Symbol with PLT relocation may be preempted. */ return 0; default: @@ -16229,7 +16229,7 @@ md_estimate_size_before_relax (fragS *fr && fragP->tc_frag_data.code == CODE_64BIT && fragP->fr_offset == 0 && need_plt32_p (fragP->fr_symbol)) - reloc_type = BFD_RELOC_X86_64_PLT32; + reloc_type = BFD_RELOC_32_PLT_PCREL; #endif old_fr_fix = fragP->fr_fix; @@ -16633,7 +16633,7 @@ md_apply_fix (fixS *fixP, valueT *valP, switch (fixP->fx_r_type) { case BFD_RELOC_386_PLT32: - case BFD_RELOC_X86_64_PLT32: + case BFD_RELOC_32_PLT_PCREL: /* Make the jump instruction point to the address of the operand. At runtime we merely add the offset to the actual PLT entry. NB: Subtract the offset size only for jump instructions. */ @@ -18350,7 +18350,7 @@ i386_validate_fix (fixS *fixp) if (fixp->fx_addsy && fixp->fx_pcrel && (fixp->fx_r_type == BFD_RELOC_386_PLT32 - || fixp->fx_r_type == BFD_RELOC_X86_64_PLT32) + || fixp->fx_r_type == BFD_RELOC_32_PLT_PCREL) && symbol_section_p (fixp->fx_addsy)) fixp->fx_r_type = BFD_RELOC_32_PCREL; if (!object_64bit) @@ -18426,7 +18426,7 @@ tc_gen_reloc (asection *section ATTRIBUT #endif /* Fall through. */ - case BFD_RELOC_X86_64_PLT32: + case BFD_RELOC_32_PLT_PCREL: case BFD_RELOC_X86_64_GOT32: case BFD_RELOC_X86_64_GOTPCREL: case BFD_RELOC_X86_64_GOTPCRELX: @@ -18593,7 +18593,7 @@ tc_gen_reloc (asection *section ATTRIBUT else switch (code) { - case BFD_RELOC_X86_64_PLT32: + case BFD_RELOC_32_PLT_PCREL: case BFD_RELOC_X86_64_GOT32: case BFD_RELOC_X86_64_GOTPCREL: case BFD_RELOC_X86_64_GOTPCRELX: