From patchwork Fri Jul 31 12:11:38 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 140331 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 1E52E4B1970E for ; Fri, 31 Jul 2026 12:12:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1E52E4B1970E 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=DKykreXL 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 C001C4B1A2BE for ; Fri, 31 Jul 2026 12:11:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C001C4B1A2BE 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 C001C4B1A2BE 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=1785499901; cv=none; b=iIfQ66v2XYeBm2AmLl24bbSsD+a4hPxTN2CrmteammYINBr0kSfPuDqD4PvWvxsbzO5ZGN2hhVH/p2fie2+Xg53NdGggtD4eN5yDLqtwT1sjq3iYZMQTu5k41duwb0on8EDYYQIuzP6byIQWk5O/c4idFPXaB3YBOEuPaIA3CAE= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1785499901; c=relaxed/simple; bh=+MdAarQRZP7xfr3hzqZ4fc+GQwe0sfk858kq0YUZTx4=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:From:To; b=A3TgaWSdoswnb9W2HrRSnYYShzSQmXLpOyqPmnwCh+bVsBTNEYWXm+aKZxvwWVXXB8qgrcAQQ2AVRslswUHWbZ49/vo7dX+bgQIp3EtftxBs179hTNmZCDMc4uk0FUEhJOJg1q33Q29OIt/KinaSjwNLQCWbhqwDVH6w8bR1ggE= 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=DKykreXL DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C001C4B1A2BE Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-472326ca506so634172f8f.2 for ; Fri, 31 Jul 2026 05:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785499900; x=1786104700; 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=rLbFfG+cLqdPeqn9THm+uYx+jwyt7wpAiPm8ei0y//Q=; b=DKykreXLL9jhaXk5/SXNjI50zP8MVjZ883i//34fFf1YSR0ATikYihAuhq9vP7TFkk osG3VkB4FHlCbVAXDhcuPln2epUuDzrihfb847L062zVR3RC2HdeEEFqYWMByYvElxFB XXXL9ZHYJKEigJSaZCMlIifVJeKXFjLrclyZFUyb+s/DPdTfnPVxFnppLbhl2p7mybiu OkVHuQV1OeG+eWtbYKzYrPTLk+DxZNnLA6cDX8rgau7EmANcxb5tMyV2ndaMQCME6RmC VsKLVnleGQx62Y0ZCNxWzC3wDy6zLYKhHgarkY5hy+5EoVX8iMjt11mwdy1XZOPcQOGE d2yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785499900; x=1786104700; 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=rLbFfG+cLqdPeqn9THm+uYx+jwyt7wpAiPm8ei0y//Q=; b=T2VXLkHH9uFIqu2URoa4aFZt4LoqGraulis8W4zqA3gLxMh7TNxTRsM/8B/aB0A0gr 0feUHqwpXDKq9dJ0EwnaJ9LQoWmjm8CbnWnMJSx8uAmvUk65IOP5QJAcvp6K05mGdT5h o8BIVpJofUsei4NPAKAk31mLzmWd81a+BcRxf/K60f/ccM/sRkmGZqBL2auF/pbLdu7V CZvipsMlt19vIUBiioryD4IcvNJQxJ6NMN9OslVELF1Gw9ijMif31zV98O2WQQuGbol1 3383RFHkItzYJ0o5v0U6I0reN9MoKQOeEv2nKJMnwdSHGaHb3ilRVKpD3W+1w5yg7BEs HSpQ== X-Gm-Message-State: AOJu0YzLWlGRgsGmtRfWahOtuMRcUegFnP44a7R2V4uwtgddycEYwm29 bki8xJOB9YZ3OFFQ2crQeBECkjDSj7TQTiylemEcJj5dB+rdYH5gOMVM0CPv0ONd47pHIDM6SRt K7GSEAg== X-Gm-Gg: AR+sD12+dVhCa8BRx3yPBPPr4TxJRYepHRVS3/yEIczuu1qWYdLu5/C3FIB7zNhsSo5 vKKa6gbZSfSKN5rk70CZ/O78lM5Dr+OLDOisK/WKHlHEf0Ne9ZMcdZs/RFvRmyc3B4YADCk02Wo JLS9yZiJ/Zm6vDgJ9Jc3EiQ5GGknL8JJL1eGSrsJVEv0Ao7KCyP1SHx9BlVbZX6FKPWIMD9sWwv +le70813nT/LfD/qELXcd2fY57Qq3MEQhbXOgE0ellhQDeFtVi1UkF1W675AHPpbfCDhxiPaFs1 hQIa5ft+W9gYzVsn0bnNBoBJGOnFB8f6tbQ34Bkx0As0btfg/io5sTE1adGS3mBBFMJxnzIjFzZ bSx45aei/pymMc7FQWAy3WBP44cM0uMWfzNdhUvX1EBhgcRDKzYOU++Itpx6YegqBV4V+1ELCZ6 nUvKKu56LZkQBv7gCz//I51oosPvyq+KH7c/iSbnnaKmXIQz4s2sT0Pq4SMGNgMopIJ+FX9MNoC bzjg5nuLZ6kZVkJI1AL2V6I4uCs6q2KO7qE43qdWEffmQhITnCu X-Received: by 2002:a05:6000:25f6:b0:47f:9de0:c27f with SMTP id ffacd0b85a97d-47fd2ab78d5mr4317314f8f.1.1785499899637; Fri, 31 Jul 2026 05:11:39 -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 ffacd0b85a97d-47fd456262bsm3713509f8f.17.2026.07.31.05.11.39 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 31 Jul 2026 05:11:39 -0700 (PDT) Message-ID: <213ad5b3-9a3d-4cc1-976e-83f9c0074b82@suse.com> Date: Fri, 31 Jul 2026 14:11:38 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [PATCH v2 4/5] readelf: fold get_{32,64}bit_dynamic_section() From: Jan Beulich To: Binutils References: <12e85879-b829-4652-9c87-473c0d8f296a@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: <12e85879-b829-4652-9c87-473c0d8f296a@suse.com> X-Spam-Status: No, score=-3015.5 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. --- v2: Use new file readelf-nn.c. --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -12132,116 +12132,15 @@ dynamic_section_ia64_val (Elf_Internal_D } 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; -} - -static bool -get_64bit_dynamic_section (Filedata * filedata) -{ - Elf64_External_Dyn * edyn; - Elf64_External_Dyn * 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")); - 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; - /* PR 17533 file: 033-67080-0.004 - do not read past end of buffer. */ - (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; - } - - /* Convert from external to internal formats. */ - 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; -} - -static bool get_dynamic_section (Filedata *filedata) { if (filedata->dynamic_section) 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 --- a/binutils/readelf-nn.c +++ b/binutils/readelf-nn.c @@ -280,4 +280,52 @@ ElfXX(_get_symbols) (Filedata *filedata, return isyms; } +static bool +ElfXX(_get_dynamic_section) (Filedata * filedata) +{ + ElfXX(_External_Dyn) * edyn, * ext; + Elf_Internal_Dyn * entry; + + edyn = 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; + /* PR 17533 file: 033-67080-0.004 - do not read past end of buffer. */ + (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; + } + + /* Convert from external to internal formats. */ + 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; +} + #undef ElfXX