From patchwork Tue Nov 19 07:50:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 101489 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 E16423858C62 for ; Tue, 19 Nov 2024 07:52:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E16423858C62 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=Lc1bcwlD X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by sourceware.org (Postfix) with ESMTPS id 7389B385840C for ; Tue, 19 Nov 2024 07:50:22 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7389B385840C 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 7389B385840C Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::62e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732002622; cv=none; b=FFako/7AkSkjiNApz7Km83oG+AziZ4dnO3Df0Nk/IGpjgjuxGz0nZdXMLuwF8RqcBBmb1B11Up/OUHeDyZxx+LvA6pL1JklhXcMsUJKUn9RyRBX6+eB88PWAyqi07KCD7Wl0ejo1SBTHmFQXK6nDGsh88VTR1MzWPYMd6KjS6xA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732002622; c=relaxed/simple; bh=nqZOjeBWKPGeNFbVi8wRkGHEdoBdAnHizIQ3rBg7GUA=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=WsDR89Ap4lGxuE8jH5AV7/8MsRCsjmndE4t/eplY0Dv4PPTo8c3fBw4Dh/udLsVRLNokU1bVjxhTtGS1ooHt2LMdAW2tZLYUblGRVOdPJaq8HimA25NtwtJe3nqQ+L5A1uEYpA6W9gTYQqpq42Ec7AjgTnfVDrXXezqtn41hpUk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7389B385840C Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-aa3a79d4d59so101572066b.3 for ; Mon, 18 Nov 2024 23:50:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1732002621; x=1732607421; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=Qi3NHj4IzEikjM0t9M8Z6I7heTxJojnEuHU6HistQGE=; b=Lc1bcwlDbKOAKHYqICjgD0H3dC5+HNL+7c7rSycCfYhhJps3gr0igvo+CQL5ajuCql aEEH9vARJIhBMVV36k88hNrjGbo+XqTm52yGwrsZ4Dgd+aUXHeoAPHVTNADquw2cLLnf Ms0ne7Jw1yd2NCMzeMAybhPxQxH8HixSyUvrqCHC0buT9mPhjMOXteugg22Z5L7dDyvV Ym/JdVZIcar2VVNIq6TDsimEpSODtKyTW24bleDFqx4H04XuNJK0eOdbGWNdN2TnBEAo u7RfYUjI8mzJvOX3BBNBAr7CF+HLm2mexUmVom3XbKCxVFU61d7Oha7JRfohLrT9zm6A gAuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732002621; x=1732607421; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Qi3NHj4IzEikjM0t9M8Z6I7heTxJojnEuHU6HistQGE=; b=woCXBj33xLzZLQXh5bxamekhzRsS10Mw0McX9E5OtQS58rX/ISvK7suUxHE1juTHSg 6EvV9xo4qc23iGB2Jx7g2cngBFaVvzw2UVRFATAjFUT8z3Y1Rj24JUOMyJz3zyk1lhKr Nk+uGi1cF46iE/MW8MD+nkGXE4Sg+OMpxSk2eBJnW3/WT18Zs1THe2SZ21stmQbZqW/c srCwTNNz7c2923E9mb+pu0k7MkmE85rp35cve4QNxtQzx70XR5TcqN1l23ivW7NFmQOb TnsbT7jTsRugbbgypFyoHQqOHng9bYhdEiALIRmRftwWgPLQB43ZeCt5UtvzmM65UwP6 t9UQ== X-Gm-Message-State: AOJu0Yxw6jHmBv/9z2nrvg+TqxgUew9UcDgUVvNB+Ss3GtMMVg/UebqA bK/t9Sdfv7JcidjjVpUc6HO9vFrhv6dzUIl18PyBolJMxmgwa5I1i7E/I5oSDV2bNUa1AV3eNEY = X-Google-Smtp-Source: AGHT+IHioRFFCoeVzLE+w/M1yettihrs01e5373kyIpVUf4+folFrOSclyv5whCvWBYkMhUY2Pjwig== X-Received: by 2002:a17:907:3f03:b0:a99:60c8:f2c4 with SMTP id a640c23a62f3a-aa483424504mr1533897266b.15.1732002621141; Mon, 18 Nov 2024 23:50:21 -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 a640c23a62f3a-aa20df1b5eesm630963966b.26.2024.11.18.23.50.20 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Nov 2024 23:50:20 -0800 (PST) Message-ID: Date: Tue, 19 Nov 2024 08:50:19 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 1/2] x86/COFF: support RVA (image-relative) relocations in insn operands From: Jan Beulich To: Binutils Cc: "H.J. Lu" , Julian Waters References: <20cdd24b-e955-4b00-af03-4344b1ea3b30@suse.com> Content-Language: en-US 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: <20cdd24b-e955-4b00-af03-4344b1ea3b30@suse.com> X-Spam-Status: No, score=-3022.9 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 As was pointed out in [1] compilers produce code using such constructs, and hence we'd better support this. In analogy to the .rva directive permit @rva to be used for this, and in analogy with other architectures (plus to not diverge from e.g. Clang's integrated assembler, albeit I haven't been able myself to confirm it knows this form) also permit @imgrel. While there also adjust the operand type specifier for the adjacent @secrel32 - 64-bit fields cannot be used with a 32-bit relocation. Further while there also deal with *-*-pe* in x86-64.exp, even if (right now) perhaps only for completeness. [1] https://sourceware.org/pipermail/binutils/2024-November/137548.html --- I question the usefulness (to users) of the relocation names chosen for 64-bit: IMAGE_REL_AMD64_* is quite a bit too verbose (and yet uglier to write when one already needs to resort to using .reloc) than the names used for 32-bit. Question though is whether this can reasonably be changed. --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1409,7 +1409,13 @@ gotrel[] = #else /* TE_PE */ { STRING_COMMA_LEN ("SECREL32"), { BFD_RELOC_32_SECREL, BFD_RELOC_32_SECREL }, - OPERAND_TYPE_IMM32_32S_64_DISP32_64, false }, + OPERAND_TYPE_IMM32_32S_DISP32, false }, + { STRING_COMMA_LEN ("RVA"), { BFD_RELOC_RVA, + BFD_RELOC_RVA }, + OPERAND_TYPE_IMM32_32S_DISP32, false }, + { STRING_COMMA_LEN ("IMGREL"), { BFD_RELOC_RVA, + BFD_RELOC_RVA }, + OPERAND_TYPE_IMM32_32S_DISP32, false }, #endif #undef OPERAND_TYPE_IMM32_32S_DISP32 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -805,6 +805,7 @@ if [gas_32_check] then { } then { run_dump_test "secrel" run_dump_test "secidx" + run_dump_test "imgrel" } # Miscellaneous tests. --- /dev/null +++ b/gas/testsuite/gas/i386/imgrel.d @@ -0,0 +1,40 @@ +#objdump: -rs +#name: i386 imgrel (RVA) reloc + +.*: +file format pe-i386 + +RELOCATION RECORDS FOR \[\.text\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+01 rva32 \.text +0+06 rva32 \.text +0+0c rva32 \.data +0+12 rva32 \.data +0+17 rva32 \.text +0+1d rva32 \.text +0+23 rva32 Xtrn +0+29 rva32 Xtrn + +RELOCATION RECORDS FOR \[\.data\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+00 rva32 \.text +0+04 rva32 \.text +0+08 rva32 \.text +0+0c rva32 \.data +0+10 rva32 \.data +0+14 rva32 \.data +0+18 rva32 \.data +0+1c rva32 \.data +0+20 rva32 \.data +0+24 rva32 Xtrn +0+28 rva32 Xtrn +0+2c rva32 Xtrn + +Contents of section \.text: + 0000 b8000000 00b90000 00000305 00000000 .* + 0010 030d0000 00002d16 00000081 e91b0000 .* + 0020 00338300 00000033 8b000000 00.* + +Contents of section \.data: + 0000 00000000 00000000 00000000 00000000 .* + 0010 00000000 00000000 18000000 1c000000 .* + 0020 20000000 00000000 00000000 00000000 .* --- /dev/null +++ b/gas/testsuite/gas/i386/imgrel.s @@ -0,0 +1,31 @@ + .text +Text: + mov $Text@rva, %eax + mov $Text@imgrel, %ecx + + add Data@rva, %eax + add Data@imgrel, %ecx + + sub $.@rva, %eax + sub $.@imgrel, %ecx + + xor Xtrn@rva(%ebx), %eax + xor Xtrn@imgrel(%ebx), %ecx + + .data +Data: + .rva Text + .long Text@rva + .long Text@imgrel + + .rva Data + .long Data@rva + .long Data@imgrel + + .rva . + .long .@rva + .long .@imgrel + + .rva Xtrn + .long Xtrn@rva + .long Xtrn@imgrel --- a/gas/testsuite/gas/i386/x86-64.exp +++ b/gas/testsuite/gas/i386/x86-64.exp @@ -52,11 +52,14 @@ run_dump_test "x86-64-addr32-intel" run_list_test "x86-64-addr32-bad" "-al" run_dump_test "x86-64-opcode" run_dump_test "x86-64-intel64" -if { ! [istarget "*-*-*cygwin*"] && ![istarget "*-*-mingw*"] } then { +if { ![istarget "*-*-*cygwin*"] + && ![istarget "*-*-mingw*"] + && ![istarget "*-*-pe*"] } then { run_dump_test "x86-64-pcrel" run_dump_test "x86-64-disassem" } else { run_dump_test "x86-64-w64-pcrel" + run_dump_test "x86-64-imgrel" } run_list_test "pcrel64" "-al" run_dump_test "x86-64-rip" --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-imgrel.d @@ -0,0 +1,40 @@ +#objdump: -rs +#name: x86-64 imgrel (RVA) reloc + +.*: +file format pe-x86-64 + +RELOCATION RECORDS FOR \[\.text\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+01 IMAGE_REL_AMD64_ADDR32NB \.text +0+06 IMAGE_REL_AMD64_ADDR32NB \.text +0+0d IMAGE_REL_AMD64_ADDR32NB \.data +0+14 IMAGE_REL_AMD64_ADDR32NB \.data +0+19 IMAGE_REL_AMD64_ADDR32NB \.text +0+1f IMAGE_REL_AMD64_ADDR32NB \.text +0+25 IMAGE_REL_AMD64_ADDR32NB Xtrn +0+2b IMAGE_REL_AMD64_ADDR32NB Xtrn + +RELOCATION RECORDS FOR \[\.data\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+00 IMAGE_REL_AMD64_ADDR32NB \.text +0+04 IMAGE_REL_AMD64_ADDR32NB \.text +0+08 IMAGE_REL_AMD64_ADDR32NB \.text +0+0c IMAGE_REL_AMD64_ADDR32NB \.data +0+10 IMAGE_REL_AMD64_ADDR32NB \.data +0+14 IMAGE_REL_AMD64_ADDR32NB \.data +0+18 IMAGE_REL_AMD64_ADDR32NB \.data +0+1c IMAGE_REL_AMD64_ADDR32NB \.data +0+20 IMAGE_REL_AMD64_ADDR32NB \.data +0+24 IMAGE_REL_AMD64_ADDR32NB Xtrn +0+28 IMAGE_REL_AMD64_ADDR32NB Xtrn +0+2c IMAGE_REL_AMD64_ADDR32NB Xtrn + +Contents of section \.text: + 0000 b8000000 00b90000 00000304 25000000 .* + 0010 00030c25 00000000 2d180000 0081e91d .* + 0020 00000033 83000000 00338b00 000000.* + +Contents of section \.data: + 0000 00000000 00000000 00000000 00000000 .* + 0010 00000000 00000000 18000000 1c000000 .* + 0020 20000000 00000000 00000000 00000000 .* --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-imgrel.s @@ -0,0 +1,31 @@ + .text +Text: + mov $Text@rva, %eax + mov $Text@imgrel, %ecx + + add Data@rva, %eax + add Data@imgrel, %ecx + + sub $.@rva, %eax + sub $.@imgrel, %ecx + + xor Xtrn@rva(%rbx), %eax + xor Xtrn@imgrel(%rbx), %ecx + + .data +Data: + .rva Text + .long Text@rva + .long Text@imgrel + + .rva Data + .long Data@rva + .long Data@imgrel + + .rva . + .long .@rva + .long .@imgrel + + .rva Xtrn + .long Xtrn@rva + .long Xtrn@imgrel From patchwork Tue Nov 19 07:50:51 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 101490 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 345BE3858416 for ; Tue, 19 Nov 2024 07:53:37 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 345BE3858416 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=cKFX1d2a X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by sourceware.org (Postfix) with ESMTPS id 8E7A73858423 for ; Tue, 19 Nov 2024 07:50:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8E7A73858423 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 8E7A73858423 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::62e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732002654; cv=none; b=Fb2DSm5AyhUfiIfM7R0u1sUcrhBXT2EHeYJPfK7oEVJHBkH9jChvvLWAhqUBH5NT+24clFiyN3ucK9cUMvWqQ0VzD8vRMyX7BHRdDF6E9M9giZvC1Dru2AWfVXMIjvy0AzB3VXFQLCuKolpNvySM1XQXQGkckl8qQ/8cgaie05M= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1732002654; c=relaxed/simple; bh=jsI92moHPvdPm8FflAiYNCRFDjKiKvgPDtQX3+mamFA=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=LwMq4a4m9tZQ5XDov38X/HGXcaKMNFLmX6KKXIQCYCsa6t9sIo6oi9lzXZ9otJF5CgaJzoZjM41sTt1KWP5MqfyhhqF4ODPAsxBAC3d3aT8osvXCw+gDgC6l//7ZoISu5tz706acMXStv5M/vDiqpGt+BLMIudoX1KIZE1N5SVw= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8E7A73858423 Received: by mail-ej1-x62e.google.com with SMTP id a640c23a62f3a-aa20c733e92so565054266b.0 for ; Mon, 18 Nov 2024 23:50:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1732002653; x=1732607453; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=WlaOuvAeyOHHJx/VenvOPa1pExZCsC/hjSS4F1we7B8=; b=cKFX1d2aqxZiu7ZLi3WhFkM4x/myPfHTlt8e2P6Y4IEykkrtY0iwv20629kjYayXkw 5ciFVP2mhSAEEEZyMfnEDkFC+VTbqIxKK22IUtDnJkQPVE6jMw/c2wstJMg9/LTYnbfW NhKXu0RSI7PVJUKBjq7Cgd+8zNOd72AohRWbYEE0KTFramTeoMDDlApFT/AoByyDipst 4DQb8o0PenjV+85qw5mxVXj/UZ/nJcir4wDP/vk9ZkYJ49qmHcL64e/RUW2m9qh4zMNa zLA6X0S+DNp0seXxjIoZeNsFMOxET7Ya0EPXQ6N2nNpYQj2WsE3OglAJdDMY7E6vev2W 5yxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1732002653; x=1732607453; h=content-transfer-encoding:in-reply-to:autocrypt:content-language :references:cc:to:from:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WlaOuvAeyOHHJx/VenvOPa1pExZCsC/hjSS4F1we7B8=; b=HV0aC1BkB19PUsfL5uUmL8W11S9zlYIzkQt1j5rETjjLej6z7FmJIClzWWtML2gULQ TnQcQkIFNYLOG+pKbE/uUXjIA5pJLoEzMu46yR5uqPDnNh3T3gIqnHYJoX5j/OgkFx9M ihWwNlqz+49w50fpm5ItMm6VTxYb05HH0XPYK/aUxPSrXgi8RQyuerjyexxUPJ//1CGp 97ChFccxOIoIR88OhzE3TfkzkSN5yRGgNI2LHX+IlfLf+GnhXnxIGyko8p0/5rcOC43y ++dQg4aB55RsFH7biYt5AiyC2gYajSxhfJZF0EFG6SPA/fLzfhpVhfKxGGXSXebt+xFd mqYA== X-Gm-Message-State: AOJu0Yx5Cz988E0PKbTjQCNT0LRvrSHRI1wiE2n7jkNIUA4hMwHGaeoK xe8BuQFzy4cP3yQn/JjjWwl5dUwzHoJV4MMxfyLa4mw9SA3DzzhJ756Fp0CLYPbe0ztLBgR0Tes = X-Google-Smtp-Source: AGHT+IF3o5WIZY0kPGUMxaUSudYS6geAo8bed15WUKAUzcPnRH5GObvcGjr0JIZ2121zzhDgh/oxhQ== X-Received: by 2002:a17:907:3e03:b0:a9a:1253:4d81 with SMTP id a640c23a62f3a-aa48350a58emr1352915466b.47.1732002653253; Mon, 18 Nov 2024 23:50:53 -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 a640c23a62f3a-aa20e046d76sm616629166b.165.2024.11.18.23.50.52 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 18 Nov 2024 23:50:53 -0800 (PST) Message-ID: Date: Tue, 19 Nov 2024 08:50:51 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 2/2] x86/COFF: support section-index relocations in insn operands From: Jan Beulich To: Binutils Cc: "H.J. Lu" References: <20cdd24b-e955-4b00-af03-4344b1ea3b30@suse.com> Content-Language: en-US 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: <20cdd24b-e955-4b00-af03-4344b1ea3b30@suse.com> X-Spam-Status: No, score=-3022.9 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 On the grounds of the principle put down near the bottom of [1], along with image and section relative operations, let's also support as insn operands what .secidx is for on the data side (of course like elsewhere the reloc operator can then also be used for data generation, albeit a small tweak to x86_cons() is needed for this to work). [1] https://sourceware.org/pipermail/binutils/2024-November/137617.html --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -1410,6 +1410,9 @@ gotrel[] = { STRING_COMMA_LEN ("SECREL32"), { BFD_RELOC_32_SECREL, BFD_RELOC_32_SECREL }, OPERAND_TYPE_IMM32_32S_DISP32, false }, + { STRING_COMMA_LEN ("SECIDX16"), { BFD_RELOC_16_SECIDX, + BFD_RELOC_16_SECIDX }, + { .bitfield = { .imm16 = 1, .disp16 = 1 } }, false }, { STRING_COMMA_LEN ("RVA"), { BFD_RELOC_RVA, BFD_RELOC_RVA }, OPERAND_TYPE_IMM32_32S_DISP32, false }, @@ -13129,7 +13132,11 @@ x86_cons (expressionS *exp, int size) expr_mode = expr_operator_none; #if defined (OBJ_ELF) || defined (TE_PE) - if (size == 4 || (object_64bit && size == 8)) + if (size == 4 +# ifdef TE_PE + || (size == 2) +# endif + || (object_64bit && size == 8)) { /* Handle @GOTOFF and the like in an expression. */ char *save; --- a/gas/testsuite/gas/i386/secidx.d +++ b/gas/testsuite/gas/i386/secidx.d @@ -3,6 +3,10 @@ .*: +file format pe-i386 +RELOCATION RECORDS FOR \[\.text\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+22 secidx \.text + RELOCATION RECORDS FOR \[\.data\]: OFFSET[ ]+TYPE[ ]+VALUE 0+24 secidx \.text @@ -22,9 +26,14 @@ OFFSET[ ]+TYPE[ ]+VALUE 0+72 secidx ext36 0+75 secidx ext3f +RELOCATION RECORDS FOR \[\.rdata\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+24 secidx \.rdata + Contents of section \.text: 0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<< 0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>>< + 0020 66b80000 .* Contents of section \.data: 0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<< 0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>>< @@ -37,4 +46,4 @@ Contents of section \.data: Contents of section \.rdata: 0000 3e3e3e3e 3c3c3c3c 3e3e3e3e 3e3c3c3c >>>><<<<>>>>><<< 0010 3e3e3e3e 3e3e3c3c 3e3e3e3e 3e3e3e3c >>>>>><<>>>>>>>< - 0020 3e3e3e3e 00000000 00000000 00000000 >>>>............ + 0020 3e3e3e3e 24003c3c 3c3c0000 00000000 >>>>..<<<<...... --- a/gas/testsuite/gas/i386/secidx.s +++ b/gas/testsuite/gas/i386/secidx.s @@ -9,6 +9,8 @@ pre16: .ascii "<<" .ascii ">>>>>>>" pre1f: .ascii "<" + mov $.text@secidx16, %ax + .data .ascii ">>>>" @@ -76,4 +78,8 @@ nex16: .ascii "<<" nex1f: .ascii "<" .ascii ">>>>" + .word .@secidx16 + + .ascii "<<<<" + .p2align 4,0 --- a/gas/testsuite/gas/i386/x86-64.exp +++ b/gas/testsuite/gas/i386/x86-64.exp @@ -60,6 +60,7 @@ if { ![istarget "*-*-*cygwin*"] } else { run_dump_test "x86-64-w64-pcrel" run_dump_test "x86-64-imgrel" + run_dump_test "x86-64-secidx" } run_list_test "pcrel64" "-al" run_dump_test "x86-64-rip" --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-secidx.d @@ -0,0 +1,25 @@ +#objdump: -rs +#name: x86-64 imgrel (RVA) reloc + +.*: +file format pe-x86-64 + +RELOCATION RECORDS FOR \[\.text\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+02 IMAGE_REL_AMD64_SECTION \.text +0+07 IMAGE_REL_AMD64_SECTION \.data +0+0c IMAGE_REL_AMD64_SECTION \.text +0+11 IMAGE_REL_AMD64_SECTION Xtrn + +RELOCATION RECORDS FOR \[\.data\]: +OFFSET[ ]+TYPE[ ]+VALUE +0+00 IMAGE_REL_AMD64_SECTION \.text +0+02 IMAGE_REL_AMD64_SECTION \.data +0+04 IMAGE_REL_AMD64_SECTION \.data +0+06 IMAGE_REL_AMD64_SECTION Xtrn + +Contents of section \.text: + 0000 66b90000 6681c100 006681e9 09006681 .* + 0010 f10000.* + +Contents of section \.data: + 0000 00000000 04000000 00000000 00000000 .* --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-secidx.s @@ -0,0 +1,13 @@ + .text +Text: + mov $Text@secidx16, %cx + add $Data@secidx16, %cx + sub $.@secidx16, %cx + xor $Xtrn@secidx16, %cx + + .data +Data: + .word Text@secidx16 + .word Data@secidx16 + .word .@secidx16 + .word Xtrn@secidx16