From patchwork Thu Dec 12 05:32:25 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alan Modra X-Patchwork-Id: 102833 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 671393858C62 for ; Thu, 12 Dec 2024 05:37:25 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 671393858C62 Authentication-Results: sourceware.org; dkim=pass (2048-bit key, unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20230601 header.b=NAMhjzZ8 X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id B76033858C35 for ; Thu, 12 Dec 2024 05:32:29 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B76033858C35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B76033858C35 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::42c ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733981549; cv=none; b=t5Zbb8rYZudgJ/ZMJMrdIwfEzgJpzuEkWJnYO+dSabXBbrfPbaCDBLhfMp0O9fv9t1s/5Q6jJgSwwwf9jzg5awKvhi8gSNozLDICl9lUWXSZrOtHBC2Pu2D4RjkEGINC7WDSQCsN2g+a/UxaBT6O5H1Ci+PTSA9mVC2lDUp5AWA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1733981549; c=relaxed/simple; bh=v0xjZ/rqu7nLVQgqN55VhgLBcNVZYvS0jhl4eW6keKY=; h=DKIM-Signature:Date:From:To:Subject:Message-ID:MIME-Version; b=A8lWgKV9iBZ9PJZeTHLh0lvV2HnEJy/mf+CEYzjZbSREhJEWPESQ1u3aKek896ism8rXnzO3cotZnfOCKvLTGDB9yFe+4Y+IDPiV8Y15o/piSJo/EQpiKCgghIMBfg8uMVvKs0VUzMPfLuEIANjvkaBTPdcf9/2h3XMb1L+9cKY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org B76033858C35 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-725ee6f56b4so184125b3a.3 for ; Wed, 11 Dec 2024 21:32:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1733981548; x=1734586348; darn=sourceware.org; h=content-disposition:mime-version:message-id:subject:to:from:date :from:to:cc:subject:date:message-id:reply-to; bh=QelEstQcV+bLiPfdqzMvhgIsJf4oPH/8ip+CNqUoR/c=; b=NAMhjzZ8TzNi2vDNzLWVLlLlXBW+rd74OykDVGXm4BxOy/t6F1aSF8OF4CdFxgL10M YWncS8IFPISWuIUAShUIG4Kn4q5hPfAmvwmEZ0+2mGHX8AW/oBEuhgbgO2B4uo9Czr5d JJbOzsm6HWJXZ/+H1tILvkvDDdOLC/Ha0ArLvrvK5my+4X5q+EuB+1lCENp2h+GhGexz 7r333oDWN4NfahOiqwy+Qkjdm3kz7cuIe4tRylfxDocbA7KCY0FbaGsTpQdG7pRsa3B2 e9rpczGb1jTXuPWtQMD30EOPOizAUc10kAm2azqcE6oIY9bgwjFubCPHWC3GkWCs3gve fe7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1733981548; x=1734586348; h=content-disposition:mime-version:message-id:subject:to:from:date :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QelEstQcV+bLiPfdqzMvhgIsJf4oPH/8ip+CNqUoR/c=; b=xPTeKI0P4YCrO6OWAojHp+lrbe+8n5ezFiEqCZU32UFu3gxsBkKeUIKEwcryKXNMjy iSDS5oj9Vj0h4jd3oyzL4JkbOH7SiA+GWc25kX2frXk0Hnm1UapyXdF38CWNqi62OgUZ jhahY8Sziyj6DuebonoNUvZsaq0FyhhNgdWp5GfsH+KY9kQrg7HSJKRn8i8Ub/mXVTyl OVKYjE+rDWkotW/YrA3Y4gPNBjjjt1KYkWuz+l0QtAk/Kk0e83MtSokJno4QTIfWKjNc lQtfz7K8/g5xoea5HuIVP47Bbs6eDtiQZDZv3fEPeTeS6lEo8WRxaZ1LcAtNW5auwlAw 7ffQ== X-Gm-Message-State: AOJu0YxUGcAlyT452X7yf0JcfELTmaHP5WsRhd1HZNCaGMLPgLoELGPW 7RIAkHNvnzNldohnlruCkAtwazW8sni8duGyKOSPX01OCHBaQzTj1M7IYQ== X-Gm-Gg: ASbGncu5ZUKS6KoXjemhPO+uP9vPiNuADMUE2IJcdKa7fT2tsIcIkp2Z7roOXTNPlK9 BlGpXgsUFQmAAOUJiuUGppsD3yyjItp+krvj7WH79+lVeXZrRc5iOwhL5ZfJolkzn+JWivgRlRv Ot/c8JQARkTXPypzSFflr9CaV6n0HmG0jyMHqgs7yHDuMi7UZq8ACd+QsneEp1HRd3LcoOrw5GS BCgPgXbH36kZwaiC3mHxentbfvmVeiF6W1S2CddJHqqA95FsQADdjIUwUGUTylHN+JZDUgQiWY2 Ozsi/ZuPfgiFJIHaTKOmItOWghA= X-Google-Smtp-Source: AGHT+IEFm44Dw8d0n3tgYevBMIS8QiR5xuxxr5Xu+oyhMsv0j96HispAshFsnkgPEg1kgt7+UC7ayg== X-Received: by 2002:a05:6a00:b54:b0:727:3c37:d5f9 with SMTP id d2e1a72fcca58-728faadaacbmr3468976b3a.26.1733981548379; Wed, 11 Dec 2024 21:32:28 -0800 (PST) Received: from squeak.grove.modra.org (158.106.96.58.static.exetel.com.au. [58.96.106.158]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-725f19a6197sm5908105b3a.198.2024.12.11.21.32.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 11 Dec 2024 21:32:28 -0800 (PST) Received: by squeak.grove.modra.org (Postfix, from userid 1000) id EA70711424B1; Thu, 12 Dec 2024 16:02:25 +1030 (ACDT) Date: Thu, 12 Dec 2024 16:02:25 +1030 From: Alan Modra To: binutils@sourceware.org Subject: close last arfile before processing current arfile Message-ID: MIME-Version: 1.0 Content-Disposition: inline X-Spam-Status: No, score=-3032.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, 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 This also reduces peak memory a little. * dlltool.c (identify_search_archive): Close last_arfile earlier. Report an error if bfd_openr_next_archived_file returns the same bfd. Localise variables. * nm.c (display_archive): Likewise. * objdump.c (display_any_bfd): Likewise. * size.c (display_archive): Likewise. diff --git a/binutils/dlltool.c b/binutils/dlltool.c index 17e9416a7f1..990082d3b44 100644 --- a/binutils/dlltool.c +++ b/binutils/dlltool.c @@ -3322,21 +3322,25 @@ identify_search_archive (bfd * abfd, void (* operation) (bfd *, bfd *, void *), void * user_storage) { - bfd * arfile = NULL; - bfd * last_arfile = NULL; - char ** matching; + bfd *last_arfile = NULL; while (1) { - arfile = bfd_openr_next_archived_file (abfd, arfile); - - if (arfile == NULL) + bfd *arfile = bfd_openr_next_archived_file (abfd, last_arfile); + if (arfile == NULL + || arfile == last_arfile) { + if (arfile != NULL) + bfd_set_error (bfd_error_malformed_archive); if (bfd_get_error () != bfd_error_no_more_archived_files) bfd_fatal (bfd_get_filename (abfd)); break; } + if (last_arfile != NULL) + bfd_close (last_arfile); + + char **matching; if (bfd_check_format_matches (arfile, bfd_object, &matching)) (*operation) (arfile, abfd, user_storage); else @@ -3345,24 +3349,11 @@ identify_search_archive (bfd * abfd, free (matching); } - if (last_arfile != NULL) - { - bfd_close (last_arfile); - /* PR 17512: file: 8b2168d4. */ - if (last_arfile == arfile) - { - last_arfile = NULL; - break; - } - } - last_arfile = arfile; } if (last_arfile != NULL) - { - bfd_close (last_arfile); - } + bfd_close (last_arfile); } /* Call the identify_search_section() function for each section of this diff --git a/binutils/nm.c b/binutils/nm.c index 87e8305b3f8..aabaea46f2a 100644 --- a/binutils/nm.c +++ b/binutils/nm.c @@ -1566,26 +1566,29 @@ set_print_format (bfd *file) static void display_archive (bfd *file) { - bfd *arfile = NULL; - bfd *last_arfile = NULL; - char **matching; - format->print_archive_filename (bfd_get_filename (file)); if (print_armap) print_symdef_entry (file); + bfd *last_arfile = NULL; for (;;) { - arfile = bfd_openr_next_archived_file (file, arfile); - - if (arfile == NULL) + bfd *arfile = bfd_openr_next_archived_file (file, last_arfile); + if (arfile == NULL + || arfile == last_arfile) { + if (arfile != NULL) + bfd_set_error (bfd_error_malformed_archive); if (bfd_get_error () != bfd_error_no_more_archived_files) bfd_nonfatal (bfd_get_filename (file)); break; } + if (last_arfile != NULL) + bfd_close (last_arfile); + + char **matching; if (bfd_check_format_matches (arfile, bfd_object, &matching)) { set_print_format (arfile); @@ -1600,12 +1603,6 @@ display_archive (bfd *file) list_matching_formats (matching); } - if (last_arfile != NULL) - { - bfd_close (last_arfile); - if (arfile == last_arfile) - return; - } last_arfile = arfile; } diff --git a/binutils/objdump.c b/binutils/objdump.c index 4980929d6ab..f409d679831 100644 --- a/binutils/objdump.c +++ b/binutils/objdump.c @@ -5888,9 +5888,6 @@ display_any_bfd (bfd *file, int level) /* If the file is an archive, process all of its elements. */ if (bfd_check_format (file, bfd_archive)) { - bfd *arfile = NULL; - bfd *last_arfile = NULL; - if (level == 0) printf (_("In archive %s:\n"), sanitize_string (bfd_get_filename (file))); else if (level > 100) @@ -5905,30 +5902,25 @@ display_any_bfd (bfd *file, int level) printf (_("In nested archive %s:\n"), sanitize_string (bfd_get_filename (file))); + bfd *last_arfile = NULL; for (;;) { - bfd_set_error (bfd_error_no_error); - - arfile = bfd_openr_next_archived_file (file, arfile); - if (arfile == NULL) + bfd *arfile = bfd_openr_next_archived_file (file, last_arfile); + if (arfile == NULL + || arfile == last_arfile) { + if (arfile != NULL) + bfd_set_error (bfd_error_malformed_archive); if (bfd_get_error () != bfd_error_no_more_archived_files) my_bfd_nonfatal (bfd_get_filename (file)); break; } + if (last_arfile != NULL) + bfd_close (last_arfile); + display_any_bfd (arfile, level + 1); - if (last_arfile != NULL) - { - bfd_close (last_arfile); - /* PR 17512: file: ac585d01. */ - if (arfile == last_arfile) - { - last_arfile = NULL; - break; - } - } last_arfile = arfile; } diff --git a/binutils/size.c b/binutils/size.c index df0ede0c728..ff3db5b57c2 100644 --- a/binutils/size.c +++ b/binutils/size.c @@ -368,16 +368,15 @@ display_bfd (bfd *abfd) static void display_archive (bfd *file) { - bfd *arfile = (bfd *) NULL; - bfd *last_arfile = (bfd *) NULL; - + bfd *last_arfile = NULL; for (;;) { - bfd_set_error (bfd_error_no_error); - - arfile = bfd_openr_next_archived_file (file, arfile); - if (arfile == NULL) + bfd *arfile = bfd_openr_next_archived_file (file, last_arfile); + if (arfile == NULL + || arfile == last_arfile) { + if (arfile != NULL) + bfd_set_error (bfd_error_malformed_archive); if (bfd_get_error () != bfd_error_no_more_archived_files) { bfd_nonfatal (bfd_get_filename (file)); @@ -386,17 +385,10 @@ display_archive (bfd *file) break; } - display_bfd (arfile); - if (last_arfile != NULL) - { - bfd_close (last_arfile); - - /* PR 17512: file: a244edbc. */ - if (last_arfile == arfile) - return; - } + bfd_close (last_arfile); + display_bfd (arfile); last_arfile = arfile; }