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 From patchwork Mon Jul 27 09:19:40 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 139990 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 94CC24BA2E0E for ; Mon, 27 Jul 2026 09:20:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 94CC24BA2E0E 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=FaDZxWYo X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id BC6924BA2E0D for ; Mon, 27 Jul 2026 09:19:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BC6924BA2E0D 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 BC6924BA2E0D Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::329 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785143983; cv=none; b=po6KfK6SoqzM9JMNcJx9GdAnc/vpELmCJL7ycteWapqMMocq9cYp5dRZKaHjmrGrgePDlXwfUK+JZ6tdA6OM8Df4nXtHXDlO5Mt1+9gS0tVZ8XyRn45zXZXEShkKA8eRH1ewAxXWOyGcDJZ3kIJVXjTvAwEAc7UlZWuVF/eWx3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785143983; c=relaxed/simple; bh=UdvXoZzsUIvA0gys62C9azHgZdkuKVm5WLLfBqQUjsk=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=KhTwetM3bE3T91Q7NUQXrfVJJnX5U3MiggxeuiayVuRoXMZ42sbszxzC+o1+KN1zZbiGE1Y74zV7EJlJvRIUhybn8NJdgjHMvNRyFJtkVQu1/o52yxYr4WQJ3DDparBbbLE7a4Vpt0hke3EtcC31hcPS2a5JzqaRt7xA1gecSrM= 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=FaDZxWYo DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BC6924BA2E0D Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-490cf322ed0so16304965e9.1 for ; Mon, 27 Jul 2026 02:19:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785143982; x=1785748782; 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=IBEyCfBtpnMfp1BKfCDbjDy2qmCSrql8R9NO2WADjqg=; b=FaDZxWYof97qKYrde49vWXtBiE/ZOBgZ18q+qG7Ec+ggpaqiwWxUGKywUKzqX4lzI3 XauulMGvEc4cQ7wNfvWAF0W0N1WYUzajvQOfyUAlNE5EG5nX3awbZX36iTF/1O8zMve/ le9D+cWxsr+19PwQYx8N9+rlPv+jNVCz19nfvl2IwGNC2bAzFHubLiDXSXJmFqqLmbBr 9E+7zGTyLQnw1H8ZQNXJsoybLSys0Fg4mbKmCNSibTgUsip/UYyDMZVooZ911+P/vC7V MVeq1fCjHRyjyahqXiaM6mXGhhi3VMbEMDDHdSQPtO7C45iWTBBZbbwPYcYUNP5h3llP AmeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785143982; x=1785748782; 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=IBEyCfBtpnMfp1BKfCDbjDy2qmCSrql8R9NO2WADjqg=; b=IUWhGXClMpeQDkZWnXlgQg7aERggFjKyENYAv+eInqo0Cr1yMQEvmuJOp6lOqBLKQh /tK1h4+RE4lHblTHMYmUB4ScMoFUE4Sp19mrzzaiaatnx7HHouWoyikHqSFbmCsBfVhf VA4csZN7kjzs8j6o8adOioVK532C5rbvjcdXTwhrDobekryeRVKmXXbjYGWKLQ6MinFY Las43+Z29Ld8p8bNRMnaoiiyqDi51jENbM2Cr848cf0p1BnXks7NxaiEepBzmGhDRXlq v39r7jcfvaVdT8ymDtzbs57Q4gTbmowh0xhrY2yI7XPm84GkyxlqXSA+dCC2avafImMo gBfw== X-Gm-Message-State: AOJu0YwJQN7z26/QjhaVjmdRo8xWgIib+0ED7MLtNYxyjvCHbo3Jtzdk CopZHv75+SU7NiBk8KOplnUiFW+MvgyNpEre8QK+E9lODg6TzR8MjVDLWP4YX7Mb62/FkIxdKwQ SUC7ZwQ== X-Gm-Gg: AR+sD11YKE49RsHEyvz6okTZsTMMPaA5TRc2ri+k4W1x1oigthY6wA8U7nRtUr8P3yE 1UvwbloGBc4Yxn95C2YVHKZp3A4wc6MiF6VID0Kf1nPb1sUkTq8yGgnOlg4zEiHf8nFquV7MTsM pBIdpfQRr9k6nK2BILRpWIMm7D1R44cAabJTOHb+N0P2ABnANXoH3EJGNSLOQvE6Qn0K+XQ5i8L fUS12KYwmhmn6tYg7XjjnEtxNVJR8KL0/0+b2M8nlsTrdolcxsX92dDZkSc87RvEtjiH5WyL3Vf lDME+ivdIBTKR+X0XEiTV/ne6lLRaj65IDTnY17W4BH9X2lnDAuCQGkLRyxftjRj0acqfnyW2ZT 7hF3LmVqsg3/oWjHzzwafxRCyqaheiBTreMLh6lK81pC2y09nYk6LjMtHpZKz/JJV2y5Fl9pwnj L0Y/lk1uSQ9izRLOsSQzGLIRUcbkGAQ023Kx5gy7TGGU/CJ891cXoSJpW6/uKpXt6hyg== X-Received: by 2002:a05:600c:19c8:b0:495:5205:86c with SMTP id 5b1f17b1804b1-496b5747d8dmr105105835e9.22.1785143981580; Mon, 27 Jul 2026 02:19:41 -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-496b4ee0e91sm209112115e9.4.2026.07.27.02.19.41 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jul 2026 02:19:41 -0700 (PDT) Message-ID: <8fb7aeed-95d0-4d94-b60f-8e59e24d5c14@suse.com> Date: Mon, 27 Jul 2026 11:19:40 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 2/5] readelf: fold get_{32,64}bit_section_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. Sadly the placement of the recently added validate_section_info() now requires a forward declaration. --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -7368,6 +7368,10 @@ process_file_header (Filedata * filedata return true; } +static void +validate_section_info (Elf_Internal_Shdr *, Elf_Internal_Shdr **, + unsigned int, Filedata *); + #define ElfXX(n) Elf32 ## n #include "readelf.c" #define ElfXX(n) Elf64 ## n @@ -7909,14 +7913,16 @@ validate_section_info (Elf_Internal_Shdr } } +#else /* ElfXX */ + /* Allocate memory and load the sections headers into FILEDATA->filedata->section_headers. If PROBE is true, this is just a probe and we do not generate any error messages if the load fails. */ static bool -get_32bit_section_headers (Filedata * filedata, bool probe) +ElfXX(_get_section_headers) (Filedata * filedata, bool probe) { - Elf32_External_Shdr * shdrs; + ElfXX(_External_Shdr) * shdrs; Elf_Internal_Shdr * internal; Elf_Internal_Shdr ** orig_internal; unsigned int i; @@ -7942,9 +7948,8 @@ get_32bit_section_headers (Filedata * fi if (!probe && size > sizeof * shdrs) warn (_("The e_shentsize field in the ELF header is larger than the size of an ELF section header\n")); - shdrs = (Elf32_External_Shdr *) get_data (NULL, filedata, filedata->file_header.e_shoff, - size, num, - probe ? NULL : _("section headers")); + shdrs = get_data (NULL, filedata, filedata->file_header.e_shoff, size, num, + probe ? NULL : _("section headers")); if (shdrs == NULL) return false; @@ -7985,81 +7990,9 @@ get_32bit_section_headers (Filedata * fi return true; } -/* Like get_32bit_section_headers, except that it fetches 64-bit headers. */ - -static bool -get_64bit_section_headers (Filedata * filedata, bool probe) -{ - Elf64_External_Shdr * shdrs; - Elf_Internal_Shdr * internal; - Elf_Internal_Shdr ** orig_internal; - unsigned int i; - unsigned int size = filedata->file_header.e_shentsize; - unsigned int num = probe ? 1 : filedata->file_header.e_shnum; - - /* PR binutils/17531: Cope with unexpected section header sizes. */ - if (size == 0 || num == 0) - return false; - - /* The section header cannot be at the start of the file - that is - where the ELF file header is located. A file with absolutely no - sections in it will use a shoff of 0. */ - if (filedata->file_header.e_shoff == 0) - return false; - - if (size < sizeof * shdrs) - { - if (! probe) - error (_("The e_shentsize field in the ELF header is less than the size of an ELF section header\n")); - return false; - } - - if (! probe && size > sizeof * shdrs) - warn (_("The e_shentsize field in the ELF header is larger than the size of an ELF section header\n")); - - shdrs = (Elf64_External_Shdr *) get_data (NULL, filedata, - filedata->file_header.e_shoff, - size, num, - probe ? NULL : _("section headers")); - if (shdrs == NULL) - return false; - - filedata->section_headers = (Elf_Internal_Shdr *) - cmalloc (num, sizeof (Elf_Internal_Shdr)); - if (filedata->section_headers == NULL) - { - if (! probe) - error (_("Out of memory reading %u section headers\n"), num); - free (shdrs); - return false; - } - - if (!probe) - filedata->orig_section_headers = xcalloc2 (num, - sizeof (Elf_Internal_Shdr *)); - - orig_internal = filedata->orig_section_headers; - for (i = 0, internal = filedata->section_headers; - i < num; - i++, internal++, orig_internal++) - { - internal->sh_name = BYTE_GET (shdrs[i].sh_name); - internal->sh_type = BYTE_GET (shdrs[i].sh_type); - internal->sh_flags = BYTE_GET (shdrs[i].sh_flags); - internal->sh_addr = BYTE_GET (shdrs[i].sh_addr); - internal->sh_size = BYTE_GET (shdrs[i].sh_size); - internal->sh_entsize = BYTE_GET (shdrs[i].sh_entsize); - internal->sh_link = BYTE_GET (shdrs[i].sh_link); - internal->sh_info = BYTE_GET (shdrs[i].sh_info); - internal->sh_offset = BYTE_GET (shdrs[i].sh_offset); - internal->sh_addralign = BYTE_GET (shdrs[i].sh_addralign); - if (!probe) - validate_section_info (internal, orig_internal, i, filedata); - } +#endif /* ElfXX */ - free (shdrs); - return true; -} +#ifndef ElfXX static bool get_section_headers (Filedata *filedata, bool probe) @@ -8068,9 +8001,9 @@ get_section_headers (Filedata *filedata, return true; if (is_32bit_elf) - return get_32bit_section_headers (filedata, probe); + return Elf32_get_section_headers (filedata, probe); else - return get_64bit_section_headers (filedata, probe); + return Elf64_get_section_headers (filedata, probe); } static Elf_Internal_Sym * From patchwork Mon Jul 27 09:20:05 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 139991 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 A24224BA2E15 for ; Mon, 27 Jul 2026 09:20:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A24224BA2E15 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=X8W2KkJh X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by sourceware.org (Postfix) with ESMTPS id D6B184BA5433 for ; Mon, 27 Jul 2026 09:20:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D6B184BA5433 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 D6B184BA5433 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::42d ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785144008; cv=none; b=w7iLxTA+jWS8z+fVn6llZvByl4aqZ9+CMnhudwvG6Z9gkeNJww5iXXG2VugZ3c72AJKkrDPBLYiT0ImpxHB7HSrb+M7fz1vMY0YnOQm898qvL+eNHoGYXFcQsl2W2LYUzXFHcnTpQUQBlU8WXIpTAyxkcpQuqkJPOSo3ZNlafzs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785144008; c=relaxed/simple; bh=Lsjjix8YW8R1IL7U1hvb/l177Jp/RjKWs03mSkUnagM=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=FY8LCNky2IYrWGmHaUjliuBgo7Ilh+N+1iK0yrQ+4qk55H6lR/dMHsdWUbxo8WCJvjU2mmURpF/6SS+Vmbk0aHVnMTwVQ2d5cKdyi0994V27aZPqpAwPuo4vYhBTseA38CCHDvxxeUmTCsg3D7ZxPfM5ssYUowdQ3LQ4oDFm3rU= 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=X8W2KkJh DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D6B184BA5433 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-47f7027ca11so1260432f8f.3 for ; Mon, 27 Jul 2026 02:20:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785144006; x=1785748806; 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=cGXghtDdb1EheT91fh49eozejVsyI7Q5CF+fF/cYuxI=; b=X8W2KkJhAuziB9e+/daHKMtERVVeDwcP6H8tbUneLZ0orcZ4Qo5oyHzQRgALawMKB7 BBGK8k1Fd0yvHdfNsM+Mj5aMdG8szMAjunzIwP2rfffW2HptKluuVXgTIlF17iqSVhFt O3ZvDDUWKLN0od0hxd7gLTa8iwHeNIE9ZxorOe8uVmdiXEAkkvg3WjzN6eBQDwf5nF+r W2XsZ096CLBxnY9Sl/gQWFxShilJqPzExmH94noTbIx5GWG+naKWvMHzI9vQWlNLrexH NVYSQeGWxgotSjNLfqLbB/EEFV7rSLbMXfRZIdofaMiPUOGHLME7+07JzIN6FIi1O7fV iHng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785144006; x=1785748806; 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=cGXghtDdb1EheT91fh49eozejVsyI7Q5CF+fF/cYuxI=; b=YqEOeIuW+13G2JdytjOxvgmbbi1n8ug1DcMzFzwxdmwKqncy1iQGiLIKB9EOkZJ94a ugIfQAiumnUZ1nBytK1vOL7XZeV0yu8iVX0WxzenqcyOuk4ymeoNTQVgNoatDD1AyyCj oXi3naXfVhzJS03u2s1wyhRDiQ5JuBkmfbowSWOBftOzLUPxS+Gyr9eEa+4yVZ92jQqh X1HhayK5R/TBEVut53anS8fjyCwZtQcFccAHbEDmTP0rlUMfrtKsi3Mp35deSfgDWYHz M6mCPsKHLAEmAyI26F63ISv6r0d1o73ZzG86YTvDQ4f36XnWD5CN6FRe1DaUpiwwQkHB rXoA== X-Gm-Message-State: AOJu0YyjfoMgWH9TLP+TOb5lMaEMRDS4GDK09iC3nECBIkRRjbK0/OSM coILb4CaQRUzTg78kMmFxP+urSBSrutfOkUSvwbcdfjUiME7eUJPO5OmM/ZwcwAEUSeqnUH6MNg sCTbXgw== X-Gm-Gg: AR+sD11JyeG6HCjjj8PljNI5I2pdVFW6bY9+JWl+7ZLA0hKRpilpdCDleZV8VvvBh50 q4AF/0RA6MsHKZHA3GnSZ4DLGfJY7+mleZEV8mzCuAnZpcOx82egHAW7efp1JoYCjz5CRGPwWRX e85ROyElctKftzguM2BXiuLaROsBFxW9b+CZvmBAuwB9Z4irO84bQhQWYVfNwJd7OKLHd2OxfmP 8RiA2WCE2mZKPjEgj1IHvHvB0GEuuB4ai71h87YO68I6OjUSvfeT/EqabBrp1cC1HwDQs5a8uqx Gsnej374drMqO2hELLFVMV1t+rH6vBa3kIHa5RAJi8iblehmGRIbNDJrlkuASdcttdWnq27i50r Jj2VqSyKP0pQrGw6TfbovrEaePXErbnp8bxUpGWjJqFG6eTn7KOugpa5RB2ZIzJLKciNaIf19um DHHwQ6hY/ii9e1fkVmnv5dDQDTHLY3TocmR7gXWh7Cm4vxefjqKARO1Sm5yjvzau/W/A== X-Received: by 2002:a05:600c:c87:b0:495:3e81:76fa with SMTP id 5b1f17b1804b1-496b56ff0fdmr101596835e9.15.1785144006521; Mon, 27 Jul 2026 02:20:06 -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-4957bffc501sm187516125e9.4.2026.07.27.02.20.06 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jul 2026 02:20:06 -0700 (PDT) Message-ID: Date: Mon, 27 Jul 2026 11:20:05 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 3/5] readelf: fold get_{32,64}bit_elf_symbols() 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 @@ -8006,13 +8006,14 @@ get_section_headers (Filedata *filedata, return Elf64_get_section_headers (filedata, probe); } +#else /* ElfXX */ + static Elf_Internal_Sym * -get_32bit_elf_symbols (Filedata *filedata, - Elf_Internal_Shdr *section, - uint64_t *num_syms_return) +ElfXX(_get_symbols) (Filedata *filedata, const Elf_Internal_Shdr *section, + uint64_t *num_syms_return) { uint64_t number = 0; - Elf32_External_Sym * esyms = NULL; + ElfXX(_External_Sym) * esyms = NULL; Elf_External_Sym_Shndx * shndx = NULL; Elf_Internal_Sym * isyms = NULL; Elf_Internal_Sym * psym; @@ -8045,7 +8046,7 @@ get_32bit_elf_symbols (Filedata *filedat number = section->sh_size / section->sh_entsize; - if (number * sizeof (Elf32_External_Sym) > section->sh_size + 1) + if (number * sizeof (*esyms) > section->sh_size + 1) { error (_("Size (%#" PRIx64 ") of section %s " "is not a multiple of its sh_entsize (%#" PRIx64 ")\n"), @@ -8055,8 +8056,8 @@ get_32bit_elf_symbols (Filedata *filedat goto exit_point; } - esyms = (Elf32_External_Sym *) get_data (NULL, filedata, section->sh_offset, 1, - section->sh_size, _("symbols")); + esyms = get_data (NULL, filedata, section->sh_offset, 1, section->sh_size, + _("symbols")); if (esyms == NULL) goto exit_point; @@ -8104,11 +8105,13 @@ get_32bit_elf_symbols (Filedata *filedat psym->st_value = BYTE_GET (esyms[j].st_value); psym->st_size = BYTE_GET (esyms[j].st_size); psym->st_shndx = BYTE_GET (esyms[j].st_shndx); + if (psym->st_shndx == (SHN_XINDEX & 0xffff) && shndx != NULL) psym->st_shndx = byte_get ((unsigned char *) &shndx[j], sizeof (shndx[j])); else if (psym->st_shndx >= (SHN_LORESERVE & 0xffff)) psym->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff); + psym->st_info = BYTE_GET (esyms[j].st_info); psym->st_other = BYTE_GET (esyms[j].st_other); } @@ -8123,124 +8126,9 @@ get_32bit_elf_symbols (Filedata *filedat return isyms; } -static Elf_Internal_Sym * -get_64bit_elf_symbols (Filedata *filedata, - Elf_Internal_Shdr *section, - uint64_t *num_syms_return) -{ - uint64_t number = 0; - Elf64_External_Sym * esyms = NULL; - Elf_External_Sym_Shndx * shndx = NULL; - Elf_Internal_Sym * isyms = NULL; - Elf_Internal_Sym * psym; - unsigned int j; - elf_section_list * entry; - - if (section->sh_size == 0) - { - if (num_syms_return != NULL) - * num_syms_return = 0; - return NULL; - } - - /* Run some sanity checks first. */ - if (section->sh_entsize == 0 || section->sh_entsize > section->sh_size) - { - error (_("Section %s has an invalid sh_entsize of %#" PRIx64 "\n"), - printable_section_name (filedata, section), - section->sh_entsize); - goto exit_point; - } - - if (section->sh_size > filedata->file_size) - { - error (_("Section %s has an invalid sh_size of %#" PRIx64 "\n"), - printable_section_name (filedata, section), - section->sh_size); - goto exit_point; - } - - number = section->sh_size / section->sh_entsize; - - if (number * sizeof (Elf64_External_Sym) > section->sh_size + 1) - { - error (_("Size (%#" PRIx64 ") of section %s " - "is not a multiple of its sh_entsize (%#" PRIx64 ")\n"), - section->sh_size, - printable_section_name (filedata, section), - section->sh_entsize); - goto exit_point; - } - - esyms = (Elf64_External_Sym *) get_data (NULL, filedata, section->sh_offset, 1, - section->sh_size, _("symbols")); - if (!esyms) - goto exit_point; - - shndx = NULL; - for (entry = filedata->symtab_shndx_list; entry != NULL; entry = entry->next) - { - if (entry->hdr->sh_link != (size_t) (section - filedata->section_headers)) - continue; - - if (shndx != NULL) - { - error (_("Multiple symbol table index sections associated with the same symbol section\n")); - free (shndx); - } - - shndx = (Elf_External_Sym_Shndx *) get_data (NULL, filedata, - entry->hdr->sh_offset, - 1, entry->hdr->sh_size, - _("symbol table section indices")); - if (shndx == NULL) - goto exit_point; - - /* PR17531: file: heap-buffer-overflow */ - if (entry->hdr->sh_size / sizeof (Elf_External_Sym_Shndx) < number) - { - error (_("Index section %s has an sh_size of %#" PRIx64 " - expected %#" PRIx64 "\n"), - printable_section_name (filedata, entry->hdr), - entry->hdr->sh_size, - section->sh_size); - goto exit_point; - } - } - - isyms = (Elf_Internal_Sym *) cmalloc (number, sizeof (Elf_Internal_Sym)); - - if (isyms == NULL) - { - error (_("Out of memory reading %" PRIu64 " symbols\n"), number); - goto exit_point; - } - - for (j = 0, psym = isyms; j < number; j++, psym++) - { - psym->st_name = BYTE_GET (esyms[j].st_name); - psym->st_info = BYTE_GET (esyms[j].st_info); - psym->st_other = BYTE_GET (esyms[j].st_other); - psym->st_shndx = BYTE_GET (esyms[j].st_shndx); - - if (psym->st_shndx == (SHN_XINDEX & 0xffff) && shndx != NULL) - psym->st_shndx - = byte_get ((unsigned char *) &shndx[j], sizeof (shndx[j])); - else if (psym->st_shndx >= (SHN_LORESERVE & 0xffff)) - psym->st_shndx += SHN_LORESERVE - (SHN_LORESERVE & 0xffff); - - psym->st_value = BYTE_GET (esyms[j].st_value); - psym->st_size = BYTE_GET (esyms[j].st_size); - } - - exit_point: - free (shndx); - free (esyms); - - if (num_syms_return != NULL) - * num_syms_return = isyms == NULL ? 0 : number; +#endif /* ElfXX */ - return isyms; -} +#ifndef ElfXX static Elf_Internal_Sym * get_elf_symbols (Filedata *filedata, @@ -8248,9 +8136,9 @@ get_elf_symbols (Filedata *filedata, uint64_t *num_syms_return) { if (is_32bit_elf) - return get_32bit_elf_symbols (filedata, section, num_syms_return); + return Elf32_get_symbols (filedata, section, num_syms_return); else - return get_64bit_elf_symbols (filedata, section, num_syms_return); + return Elf64_get_symbols (filedata, section, num_syms_return); } static const char * From patchwork Mon Jul 27 09:20:32 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 139994 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 2727D4BA2E35 for ; Mon, 27 Jul 2026 09:22:06 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 2727D4BA2E35 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=GaJcOgM5 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [IPv6:2a00:1450:4864:20::335]) by sourceware.org (Postfix) with ESMTPS id 979D04BA5433 for ; Mon, 27 Jul 2026 09:20:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 979D04BA5433 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 979D04BA5433 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::335 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785144034; cv=none; b=sOcCXANVTPmGkySFHUvEMXZw2uWA1ZeL0sAUY55i5hUMQNCZxmVVTOzoEJCPd3IWkMgpd7MguXkfz2X2JJ2e7opx+KN/qQ6DwstS1wAykEW1vx7KYTrNXfkJOZu1W6G/MDl8athP7CMvjEw2nUH1EjToeHpuhcag2PvFifZ/x3w= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785144034; c=relaxed/simple; bh=mSdOC/VnxpCp/ZgYoe5Qr784D+oPKvYlKxOmhwo1noE=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=vbCmR4S5/nYiSsCJqeRYNcjohUHj0QPZSpyPyRaA6WpkIM8mYgu1hYZcrsOoMoGDwbgPaRNF01tFUoH2WPgILUJxfi8qxAY2cnpCenFx7oEa8H1pWVdB+S85j6N3LnFwy0D70J+YCYaskElEBSAveX0SqzvdDB687aHXc4oTvn4= 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=GaJcOgM5 DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 979D04BA5433 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-49557167508so24498925e9.1 for ; Mon, 27 Jul 2026 02:20:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785144033; x=1785748833; 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=CHF/GDVxVzcrkIwhObxanZA9x1jSKyx9ZqTQbV+vR9g=; b=GaJcOgM5zFhW0UgguGHeWWQAOoOJMLYF/60qA8UOsC1xoPOGpYt+YN0EdqZ9wUtTEF 7dNpd4FYDyedphVMw2K/UEb0stOdZbmFbjHjaX57TSvJh8saLZWdgY9QaK4NF+u073Jf ZeMcCKV+02/Cs4e4r9OFk+bJlZhKinvleZ61+1HbaUXTgUDGEIJ1/wjavWBeKWYraBBM eW3J3rME7CvJ8oY/r/SbrVtQukACFVKrVQ423Hz7N6Mm09Mx3e0W1+4TnQMy90pSqnMl Z2Z1zGWIh9xjSbqRZuPQR/XY3cFe/vF5No/79wP/7+52t/P2Rnw4cISxYF5+WortTntV kGwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785144033; x=1785748833; 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=CHF/GDVxVzcrkIwhObxanZA9x1jSKyx9ZqTQbV+vR9g=; b=PpFWazN6avSwr+90Ep/wbYXbX0vQIX/bH0yPivVeA+dZBXPD84jxkGhacfi1hw5vhB 7oKFTcGn28rgOa6kJpBqeQpPDvd029md8vvjnFv4H78GcSF+2l56f255ZemqBV8aqeWb NsqXGuNV6F8DkriYHoBYO7lg7FFwTDLqnUNWrX17f8q94SyCBuxpxKX6u4XV//y1yauD sDZ1YmlZd+EfzNhHu7cEf+1CxUdNmNge+nNUh5HZAxL/QxjUcNGdNkBV9UT5JsAQDRCh gBFPxXl4VNII7T1/q5bhfHUpZckHKMI4QbxGUJQnnp9EzE5cZEHQ8l1Ce8FSJwTvwTkh lomw== X-Gm-Message-State: AOJu0Yx++DIM7bN89OQeH1Kuzb5xlHDnpADjiCJUpeB1ChezLsJxM6aK qHwlMbYlkDdNLOCHGRJxFV7fBzOz7SqpmAbeo+HAbm1rXWuC4n6P7W4IO5TKfshAEx1PdufqExW aNf3D2g== X-Gm-Gg: AR+sD10Lu9R7ePoVXaWVp3lOZi29BzvekHFyesOsRGmk0N3qqE9MXK6z012+ziBcRCF irlFepinB66jhqJl9fuZHIymF+pu3KztzUpAMcAHqs/qZg00RiSnGH8a4w8aSdTb/x/D7V0IpgM hQf42T75OIrzIZ9GdRGjVaMphnbRwA1AHLcn858VfBzKnR0NpPXyzhzTiCbirprf6Q1Iql6OC4I mN3x1ICM8hJOIMl7Gk9kI7WiE6kGnQ4efZTzpKFVjSwenfGVfTmvvcGSt0N6ypsFbg+yvkYD4GC y3wsBtK43Sy4zON3Yrcr+nnlXYloo8TKs//YHEw+O5+JaeuIze10H0fm/JIu0kQ9xgTklsybxQs q5QPapnRS0TG9wu6rOlX10dHdaZqe1lla/ieBIqwDnchxzKoLGL/amhjUoecCvLIlx8qVcVdSRI J2/ng2AHnk4cUQfcD6Lx7832/EPzEzJg02hXiymfDl93qUA4yRmJtgNfws3xypawISv84nnEp4O 0XK X-Received: by 2002:a05:600c:8b4c:b0:495:67b8:d97e with SMTP id 5b1f17b1804b1-496b57081c7mr99997605e9.30.1785144033574; Mon, 27 Jul 2026 02:20:33 -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-496b485ff2csm260110595e9.6.2026.07.27.02.20.33 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jul 2026 02:20:33 -0700 (PDT) Message-ID: Date: Mon, 27 Jul 2026 11:20:32 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH 4/5] readelf: fold get_{32,64}bit_dynamic_section() 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, which can be addressed by compiling the same code twice. --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -12391,67 +12391,16 @@ dynamic_section_ia64_val (Elf_Internal_D putchar ('\n'); } -static bool -get_32bit_dynamic_section (Filedata * filedata) -{ - Elf32_External_Dyn * edyn; - Elf32_External_Dyn * ext; - Elf_Internal_Dyn * entry; - - edyn = (Elf32_External_Dyn *) get_data (NULL, filedata, - filedata->dynamic_addr, 1, - filedata->dynamic_size, - _("dynamic section")); - if (!edyn) - return false; - - /* SGI's ELF has more than one section in the DYNAMIC segment, and we - might not have the luxury of section headers. Look for the DT_NULL - terminator to determine the number of entries. */ - for (ext = edyn, filedata->dynamic_nent = 0; - (char *) (ext + 1) <= (char *) edyn + filedata->dynamic_size; - ext++) - { - filedata->dynamic_nent++; - if (BYTE_GET (ext->d_tag) == DT_NULL) - break; - } - - filedata->dynamic_section - = (Elf_Internal_Dyn *) cmalloc (filedata->dynamic_nent, sizeof (* entry)); - if (filedata->dynamic_section == NULL) - { - error (_("Out of memory allocating space for %" PRIu64 " dynamic entries\n"), - filedata->dynamic_nent); - free (edyn); - return false; - } - - for (ext = edyn, entry = filedata->dynamic_section; - entry < filedata->dynamic_section + filedata->dynamic_nent; - ext++, entry++) - { - entry->d_tag = BYTE_GET (ext->d_tag); - entry->d_un.d_val = BYTE_GET (ext->d_un.d_val); - } - - free (edyn); - - return true; -} +#else /* ElfXX */ static bool -get_64bit_dynamic_section (Filedata * filedata) +ElfXX(_get_dynamic_section) (Filedata * filedata) { - Elf64_External_Dyn * edyn; - Elf64_External_Dyn * ext; + ElfXX(_External_Dyn) * edyn, * ext; Elf_Internal_Dyn * entry; - /* Read in the data. */ - edyn = (Elf64_External_Dyn *) get_data (NULL, filedata, - filedata->dynamic_addr, 1, - filedata->dynamic_size, - _("dynamic section")); + edyn = get_data (NULL, filedata, filedata->dynamic_addr, 1, + filedata->dynamic_size, _("dynamic section")); if (!edyn) return false; @@ -12492,6 +12441,10 @@ get_64bit_dynamic_section (Filedata * fi return true; } +#endif /* ElfXX */ + +#ifndef ElfXX + static bool get_dynamic_section (Filedata *filedata) { @@ -12499,9 +12452,9 @@ get_dynamic_section (Filedata *filedata) return true; if (is_32bit_elf) - return get_32bit_dynamic_section (filedata); + return Elf32_get_dynamic_section (filedata); else - return get_64bit_dynamic_section (filedata); + return Elf64_get_dynamic_section (filedata); } static void From patchwork Mon Jul 27 09:20:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 139995 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 075074BA2E0E for ; Mon, 27 Jul 2026 09:22:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 075074BA2E0E 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=EXrR2IKs X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id 3B80C4BA5433 for ; Mon, 27 Jul 2026 09:20:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3B80C4BA5433 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 3B80C4BA5433 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a00:1450:4864:20::329 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785144058; cv=none; b=SYMf8S5AH2HjKST2rDnQfIC4nVjejC/w0B+8+hK0/28fer79b0OCI3qu5lpTKPp8o2FNXcbogOq0SCX6l4mM5XmUch5x3gqKb7g5lTUFmb35S6GBK4KDt5cRQ9+/FCbe2jfUOgCyK/gRjJ5xWMqxqUydb622KAu0I42EVJC/YIQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785144058; c=relaxed/simple; bh=95NAqHLqtzxMvSaFTrN/U5ohWpSICYSf0qtiy6x67r8=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=vN7CJbPn0QoStk0owB4xr3E99tVRvFzdBuGJWE6/wnxSW7c+z63Sxnyi9srnezQ6HThfWEV/4h6FzhzZpCxBDPgiEB6P9E1HXprHu15YronQ0c82QXDWlv4KUe/TWEiajB5PtCxNwH1kerHsPmRUnE477rrQPRWhNPAwTE+dr8s= 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=EXrR2IKs DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3B80C4BA5433 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-496bb7cdf51so9646005e9.2 for ; Mon, 27 Jul 2026 02:20:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785144057; x=1785748857; 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=Lk6rxpsZkLyqhKw0qazT2PqmTXaMi9hjpj442EpM1bQ=; b=EXrR2IKshd/zjd7WOyHY+p26y9zrKT0KZkz3AoXW0FLXo8APo4Zz/M/TapxYBBYTv3 iIMgqHML20FI/qy/zkSx2wifDe3IEb+mZ3J6yGvSifB+Wy+VJlMRrzqNsAfDiBF/BHDc i9aGy+9REtz/TBzB+s0Krbh1DPOz0HPenXRBhgrQdZfkjC0wYvh7xe5CGHIWOt4wSZdV NZsNUCBpvkK1Xhr+SnGTxnwWzm3Xp0A9eEw7P+Nb426xFKmt8Zxuwgv1H2AL/6KrzlTB dKTDCCwIuSkVwqESQEL3qhQUey5m70GTxjJql3C0QYsr1u0fcDB+Rl5ZGHCpqkSn63ro K7CQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785144057; x=1785748857; 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=Lk6rxpsZkLyqhKw0qazT2PqmTXaMi9hjpj442EpM1bQ=; b=oL+ZBui+d3S3JXR2Bk8F5RZiuzG9IyPbtRZo6dbjH4Tb9rUcjWwt8839KwkcfsF3zZ kD97h3YJcKuXWkqQXneN8b+FBZmwWcEmNqM4AsKHNylu7fXusR2hl5IXuVRfF5eRe9qY LAOQuH9M7lSXeBFF4ciMh6+ro4cfgM3QqOuqDdNp6A7LZI9t7Jkfu4uCgKLQy6Pjjlit w7DPM35+YvwcQFhpIyn2d9xuUxa4IfdBBHar4K4ow/pBz2MRaCSSVCsQGKkfxQL2b0S3 Cssa3NU/fA62djL8ibwHYlTLIhmgw38BKIVtF7qHJK8EXVBkg7/pvBGCLZ+SWjI0G67E eblA== X-Gm-Message-State: AOJu0YzBzp59CO5yLIO/H00/1gSHzW0HA2vuuEtU1gOBMEzwq2qivFHA Q+ccBLCrduqpDhDMqnXopXlEZuRUcN+KjfUp2hFJEBF2QY0ObVN7GWZewA8WGSdkPElRYcdaYdZ 16oKPgA== X-Gm-Gg: AR+sD132h2TUgDB4/8vrP2/lFJophvaTIMPrrJUMNLWdX5pjUZU6XYGP7crvZSp+1Kw 6zpT+VgkByEDAAIPx0S45dBtbvDGvlqFhRxhnPkCTH+KXe95wHt3Of40i+Y0f53e7DhxBVLCfJe pxjqM5afw0LYsWH0g+kh2G/7Vdb5DDPTHw0vgIycPNKJj7OgIgpBwIpoEzRku358ZXGAzPlG/5i iO/yiI0DV9CRWo4I6P0eDktI8uldsfD7+AW/77WjS1jYJOl0eM9lXzf9AZqzNIaxfXo7Hwy/W9C JTLtklBWdDjnh5PM2gNOrxzN4ZeHbhq3++ej6I/JDREAGL02SJJ+VaYSZXT2xTp7+rxOlsfteII lo9h3hD9eS9lK1nOXI4ZCw/kDE7XWjQ4CYMBvMMi7mkcQFwP3BRxFl65bylC2+ajLXPc4YbxVNn GKujeynbIoenxhibEQsIVBlt3nMbbBMROJV1aesmUaEQ16OjbvbK7VM/Rho7gpkMDfMQ== X-Received: by 2002:a05:600c:4683:b0:495:6274:56c2 with SMTP id 5b1f17b1804b1-496b56bbc9dmr98360635e9.2.1785144057058; Mon, 27 Jul 2026 02:20:57 -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-496b49a8547sm203829675e9.14.2026.07.27.02.20.56 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 27 Jul 2026 02:20:56 -0700 (PDT) Message-ID: Date: Mon, 27 Jul 2026 11:20:56 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH RFC 5/5] readelf: move code around 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 Try to limit recently introduced #ifdef-ary at least a little. --- I was hoping for the overall effect to be better, yet I also didn't want to go too far with the re-arrangement. One aspect I noticed: Instead of the trivial get_elf_symbols() wrapper we could use a function pointer instead. That, however, already wouldn't quite extend to get_section_headers() and get_dynamic_section(), let alone get_program_headers(), so would - overalll - be of little help. --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -3471,8 +3471,92 @@ get_dynamic_type (Filedata * filedata, u } } -static bool get_program_headers (Filedata *); -static bool get_dynamic_section (Filedata *); +static void +validate_section_info (Elf_Internal_Shdr *, Elf_Internal_Shdr **, + unsigned int, Filedata *); + +#define ElfXX(n) Elf32 ## n +#include "readelf.c" +#define ElfXX(n) Elf64 ## n +#include "readelf.c" + +/* Returns TRUE if the program headers were read into `program_headers'. */ + +static bool +get_program_headers (Filedata * filedata) +{ + Elf_Internal_Phdr * phdrs; + + /* Check cache of prior read. */ + if (filedata->program_headers != NULL) + return true; + + /* Be kind to memory checkers by looking for + e_phnum values which we know must be invalid. */ + if (filedata->file_header.e_phnum + * (is_32bit_elf ? sizeof (Elf32_External_Phdr) : sizeof (Elf64_External_Phdr)) + >= filedata->file_size) + { + error (_("Too many program headers - %#x - the file is not that big\n"), + filedata->file_header.e_phnum); + return false; + } + + phdrs = (Elf_Internal_Phdr *) cmalloc (filedata->file_header.e_phnum, + sizeof (Elf_Internal_Phdr)); + if (phdrs == NULL) + { + error (_("Out of memory reading %u program headers\n"), + filedata->file_header.e_phnum); + return false; + } + + if (is_32bit_elf + ? Elf32_get_program_headers (filedata, phdrs) + : Elf64_get_program_headers (filedata, phdrs)) + { + filedata->program_headers = phdrs; + return true; + } + + free (phdrs); + return false; +} + +static bool +get_section_headers (Filedata *filedata, bool probe) +{ + if (filedata->section_headers != NULL) + return true; + + if (is_32bit_elf) + return Elf32_get_section_headers (filedata, probe); + else + return Elf64_get_section_headers (filedata, probe); +} + +static Elf_Internal_Sym * +get_elf_symbols (Filedata *filedata, + Elf_Internal_Shdr *section, + uint64_t *num_syms_return) +{ + if (is_32bit_elf) + return Elf32_get_symbols (filedata, section, num_syms_return); + else + return Elf64_get_symbols (filedata, section, num_syms_return); +} + +static bool +get_dynamic_section (Filedata *filedata) +{ + if (filedata->dynamic_section) + return true; + + if (is_32bit_elf) + return Elf32_get_dynamic_section (filedata); + else + return Elf64_get_dynamic_section (filedata); +} static void locate_dynamic_section (Filedata *filedata) @@ -7368,15 +7452,6 @@ process_file_header (Filedata * filedata return true; } -static void -validate_section_info (Elf_Internal_Shdr *, Elf_Internal_Shdr **, - unsigned int, Filedata *); - -#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. @@ -7430,49 +7505,6 @@ ElfXX(_get_program_headers) (Filedata * #ifndef ElfXX -/* Returns TRUE if the program headers were read into `program_headers'. */ - -static bool -get_program_headers (Filedata * filedata) -{ - Elf_Internal_Phdr * phdrs; - - /* Check cache of prior read. */ - if (filedata->program_headers != NULL) - return true; - - /* Be kind to memory checkers by looking for - e_phnum values which we know must be invalid. */ - if (filedata->file_header.e_phnum - * (is_32bit_elf ? sizeof (Elf32_External_Phdr) : sizeof (Elf64_External_Phdr)) - >= filedata->file_size) - { - error (_("Too many program headers - %#x - the file is not that big\n"), - filedata->file_header.e_phnum); - return false; - } - - phdrs = (Elf_Internal_Phdr *) cmalloc (filedata->file_header.e_phnum, - sizeof (Elf_Internal_Phdr)); - if (phdrs == NULL) - { - error (_("Out of memory reading %u program headers\n"), - filedata->file_header.e_phnum); - return false; - } - - if (is_32bit_elf - ? Elf32_get_program_headers (filedata, phdrs) - : Elf64_get_program_headers (filedata, phdrs)) - { - filedata->program_headers = phdrs; - return true; - } - - free (phdrs); - return false; -} - /* Print program header info and locate dynamic section. */ static void @@ -7990,24 +8022,6 @@ ElfXX(_get_section_headers) (Filedata * return true; } -#endif /* ElfXX */ - -#ifndef ElfXX - -static bool -get_section_headers (Filedata *filedata, bool probe) -{ - if (filedata->section_headers != NULL) - return true; - - if (is_32bit_elf) - return Elf32_get_section_headers (filedata, probe); - else - return Elf64_get_section_headers (filedata, probe); -} - -#else /* ElfXX */ - static Elf_Internal_Sym * ElfXX(_get_symbols) (Filedata *filedata, const Elf_Internal_Shdr *section, uint64_t *num_syms_return) @@ -8130,17 +8144,6 @@ ElfXX(_get_symbols) (Filedata *filedata, #ifndef ElfXX -static Elf_Internal_Sym * -get_elf_symbols (Filedata *filedata, - Elf_Internal_Shdr *section, - uint64_t *num_syms_return) -{ - if (is_32bit_elf) - return Elf32_get_symbols (filedata, section, num_syms_return); - else - return Elf64_get_symbols (filedata, section, num_syms_return); -} - static const char * get_elf_section_flags (Filedata * filedata, uint64_t sh_flags) { @@ -12445,18 +12448,6 @@ ElfXX(_get_dynamic_section) (Filedata * #ifndef ElfXX -static bool -get_dynamic_section (Filedata *filedata) -{ - if (filedata->dynamic_section) - return true; - - if (is_32bit_elf) - return Elf32_get_dynamic_section (filedata); - else - return Elf64_get_dynamic_section (filedata); -} - static void print_dynamic_flags (uint64_t flags) {