From patchwork Mon Jul 27 09:19:24 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 139989 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 34BA74BA2E29 for ; Mon, 27 Jul 2026 09:20:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 34BA74BA2E29 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=Sd4JwzFs X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by sourceware.org (Postfix) with ESMTPS id B6D2A4BA2E21 for ; Mon, 27 Jul 2026 09:19:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B6D2A4BA2E21 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 B6D2A4BA2E21 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::334 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785143966; cv=none; b=g98QHZlpLRK8/k5V7xwMeaaLFElTqvLoQqZb8GpB3bDVLm6sQkCLwt7MmTfnhhfGAPhDnoNRJ2+0uCluGScOICAtK8Kfgohxc54hJGgU3Qp13CVRQwiV5FxNnGraEmKmYh0/38wLhIXTEXIs82Rnhw8IEQUyD4Kfj6u3uURFBa8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785143966; c=relaxed/simple; bh=OYBJIvhIpPO1Ih/id3QW4NQocgsj/cBShwQz5RQDRFM=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=xF4yRLWNPiJaM/jIEWOQDxwhCd7niNCUDw9wb212fkrsHWnP0w73rFgLReIohGYJibAMGy2+Kli9CxRen5KY5JQoMXu6D8JYGjsHeI35cTrex1RHEm/QELfTnTy0jYM5gTFA3FKAckC3sYNqipNeZZLeNBwhK2DGRK88nNKPEXg= ARC-Authentication-Results: i=1; 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=Sd4JwzFs DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B6D2A4BA2E21 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4954aff6088so20835835e9.3 for ; Mon, 27 Jul 2026 02:19:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785143965; x=1785748765; darn=sourceware.org; h=content-transfer-encoding:content-type:in-reply-to:autocrypt :content-language:references:to:from:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ONaHA7StoRET/5F8pGZ750IHQMpOncXl6W7WVKRkU8Y=; b=Sd4JwzFsNKCLRKPoXBqcuyhvXu/n31jQ4cLuISzro9bXxCaqpdSiSKfQ9Ten2epD4E zDpjGk911wAykKjJN6L2bQMK2oKB0cBXTCYRXDzBA3etcUaVbyzkRbcjHdiw8gdw+j7r yvo7HwsgvI0upuwPaA/d8ln/FZaDjR4cDO8gHgcC4anFc6VAy8+SiwvwIzVwxkOdFe64 423Gi4vstjgD0zLVLaxDYFMls8cUP/ytpOOGx7+jFqhxkD3xiT3RtWx3Q01J+AfOju4z u2pwgPlSPqAUwTUcIFMyCrwv84YFaaGUNFQ5WkTNGnuxR0bD7ToGYxWW8wG+qFpE1vek rM1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785143965; x=1785748765; h=content-transfer-encoding:content-type:in-reply-to:autocrypt :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:content-type; bh=ONaHA7StoRET/5F8pGZ750IHQMpOncXl6W7WVKRkU8Y=; b=lNX8MvlKE4FvmWbeoOUQ8IwSPSIvAvkem4LsVX3xAICD1eJarmfC8bSceyzqUJmHNy aG9U7UVOQz+rO3kKnoPN86v0jijN3zdygBgkJnAbKE8CwVYupZz5NIj+w2KYwbHeD6Ab 8/4cwuaasdgDy7iNu+1VJ6IcVCduKW8wAb4AqhCzSJqzHg2JQFgcnLeln+sJI0fi6V+j WU9N4nF5iCXMwEb8pJFLU6nnsB3JMI4gncHJMPLdgCLbm3lnUKBU/CWQNTjzvujL4GXs uQIS35+IVl8x13CA+sKkPDR74e6asCgnDuJvg+Cf4xKHvwg9W+jsHVzA8tor6n2bb82s xDBg== X-Gm-Message-State: AOJu0Yw2p/DmBscn5Ot7CjIOGjHeZEpT6+SN99HRq+8wNfObv9XtN8FD uWQz3iKEQAQv7+wS+BMe6wh8PAtRQN8+RVFk8zs8SoN5bbI2nqmusfxX1yZ8wdx6j+jvoVlaHWh eILA+4g== X-Gm-Gg: AR+sD11KyodJkg8+q1rQTglA4+t7UlvKtzrL+z0eSFNvE8H2FAP+F9QNzeypKEivPb2 M+Yq8QQG6iMRPQ8rE1bMJtQgcfDeAi10zVJRSaVbTgOQxLT13BheR6DoX4/4mFjfPjK8n32TY6D 0iPkBGJFnyndgu1eo6qrXWIR7/Nn5xpb1I8EvWspFdfK2M0spizL6PuqG53sLkkWSxv/fgCQ7xP xb0jztf+vYAEjC3dlI+cHPNQOSW1SMqPG/hPDWaKMJCvp4Bs0JChmd7ZryYxXHdXmBluuvJBHbI J/H8zJlF5Ke3Xb0xcSu30kfeV5Dv/d5vHZ7tLuxLYYu7GwyZWc0/R/xsuYtzpLtDHCTwOF6khVj pKx6jcAqq+DY/lYBjv3oUR/zrlSCmrz+4Y6QaiIOSC+JoR/W1uE9TifCJQgHjTBlti51THdxKx0 yXpCWIa1vu4vZ8CnQhzIB0K5V2J51kuCygVwe8XEpp80s2NoHS/lAcjvi+OVOWc9YGINnzf/94k Fbo X-Received: by 2002:a05:600c:4f94:b0:493:e451:a9e1 with SMTP id 5b1f17b1804b1-496b56da55bmr92474465e9.2.1785143965492; Mon, 27 Jul 2026 02:19:25 -0700 (PDT) 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 5b1f17b1804b1-496b49a6e17sm200535905e9.13.2026.07.27.02.19.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jul 2026 02:19:25 -0700 (PDT) Message-ID: Date: Mon, 27 Jul 2026 11:19:24 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 1/5] readelf: fold get_{32,64}bit_program_headers() From: Jan Beulich To: Binutils References: 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: X-Spam-Status: No, score=-3015.6 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 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 PR binutils/34356 They're identical except for the types used and the order of fields processed. The latter doesn't matter for correctness, and the former can be addressed by compiling the same code twice. --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -40,6 +40,8 @@ ELF file than is provided by objdump. In particular it can display DWARF debugging information which (at the moment) objdump cannot. */ +#ifndef ElfXX + #include "sysdep.h" #include #include @@ -7366,14 +7368,21 @@ process_file_header (Filedata * filedata return true; } +#define ElfXX(n) Elf32 ## n +#include "readelf.c" +#define ElfXX(n) Elf64 ## n +#include "readelf.c" + +#else /* ElfXX */ + /* Read in the program headers from FILEDATA and store them in PHEADERS. - Returns TRUE upon success, FALSE otherwise. Loads 32-bit headers. */ + Returns TRUE upon success, FALSE otherwise. */ static bool -get_32bit_program_headers (Filedata * filedata, Elf_Internal_Phdr * pheaders) +ElfXX(_get_program_headers) (Filedata * filedata, Elf_Internal_Phdr * pheaders) { - Elf32_External_Phdr * phdrs; - Elf32_External_Phdr * external; + ElfXX(_External_Phdr) * phdrs; + const ElfXX(_External_Phdr) * external; Elf_Internal_Phdr * internal; unsigned int i; unsigned int size = filedata->file_header.e_phentsize; @@ -7390,8 +7399,8 @@ get_32bit_program_headers (Filedata * fi if (size > sizeof * phdrs) warn (_("The e_phentsize field in the ELF header is larger than the size of an ELF program header\n")); - phdrs = (Elf32_External_Phdr *) get_data (NULL, filedata, filedata->file_header.e_phoff, - size, num, _("program headers")); + phdrs = get_data (NULL, filedata, filedata->file_header.e_phoff, size, num, + _("program headers")); if (phdrs == NULL) return false; @@ -7413,52 +7422,9 @@ get_32bit_program_headers (Filedata * fi return true; } -/* Read in the program headers from FILEDATA and store them in PHEADERS. - Returns TRUE upon success, FALSE otherwise. Loads 64-bit headers. */ - -static bool -get_64bit_program_headers (Filedata * filedata, Elf_Internal_Phdr * pheaders) -{ - Elf64_External_Phdr * phdrs; - Elf64_External_Phdr * external; - Elf_Internal_Phdr * internal; - unsigned int i; - unsigned int size = filedata->file_header.e_phentsize; - unsigned int num = filedata->file_header.e_phnum; - - /* PR binutils/17531: Cope with unexpected section header sizes. */ - if (size == 0 || num == 0) - return false; - if (size < sizeof * phdrs) - { - error (_("The e_phentsize field in the ELF header is less than the size of an ELF program header\n")); - return false; - } - if (size > sizeof * phdrs) - warn (_("The e_phentsize field in the ELF header is larger than the size of an ELF program header\n")); - - phdrs = (Elf64_External_Phdr *) get_data (NULL, filedata, filedata->file_header.e_phoff, - size, num, _("program headers")); - if (!phdrs) - return false; - - for (i = 0, internal = pheaders, external = phdrs; - i < filedata->file_header.e_phnum; - i++, internal++, external++) - { - internal->p_type = BYTE_GET (external->p_type); - internal->p_flags = BYTE_GET (external->p_flags); - internal->p_offset = BYTE_GET (external->p_offset); - internal->p_vaddr = BYTE_GET (external->p_vaddr); - internal->p_paddr = BYTE_GET (external->p_paddr); - internal->p_filesz = BYTE_GET (external->p_filesz); - internal->p_memsz = BYTE_GET (external->p_memsz); - internal->p_align = BYTE_GET (external->p_align); - } +#endif /* ElfXX */ - free (phdrs); - return true; -} +#ifndef ElfXX /* Returns TRUE if the program headers were read into `program_headers'. */ @@ -7492,8 +7458,8 @@ get_program_headers (Filedata * filedata } if (is_32bit_elf - ? get_32bit_program_headers (filedata, phdrs) - : get_64bit_program_headers (filedata, phdrs)) + ? Elf32_get_program_headers (filedata, phdrs) + : Elf64_get_program_headers (filedata, phdrs)) { filedata->program_headers = phdrs; return true; @@ -25618,3 +25584,7 @@ main (int argc, char ** argv) return err ? EXIT_FAILURE : EXIT_SUCCESS; } + +#endif /* ElfXX */ + +#undef ElfXX