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