[binutils-gdb] objdump: Delete close optimisation

Alan Modra amodra@sourceware.org
Fri Dec 13 04:55:29 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d2cca35960319a7a0087ffda4beb679a23181df4

commit d2cca35960319a7a0087ffda4beb679a23181df4
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Dec 13 08:52:57 2024 +1030

    objdump: Delete close optimisation
    
    In commit cd6581da62c3, Nick made an optimisation that was reasonable
    at the time, but then pr22032 came along and commit 7c0ed39626e3 made
    bfd_close_all_done free memory.  So Nick's optimisation is now
    ineffective, and the comment wrong.
    
            * objdump.c (display_file): Delete last_file param.  Update
            caller.  Call bfd_close always.

Diff:
---
 binutils/objdump.c | 19 ++++---------------
 1 file changed, 4 insertions(+), 15 deletions(-)

diff --git a/binutils/objdump.c b/binutils/objdump.c
index f409d679831..5e68324f9c5 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -5932,7 +5932,7 @@ display_any_bfd (bfd *file, int level)
 }
 
 static void
-display_file (char *filename, char *target, bool last_file)
+display_file (char *filename, char *target)
 {
   bfd *file;
 
@@ -5951,18 +5951,7 @@ display_file (char *filename, char *target, bool last_file)
 
   display_any_bfd (file, 0);
 
-  /* This is an optimization to improve the speed of objdump, especially when
-     dumping a file with lots of associated debug informatiom.  Calling
-     bfd_close on such a file can take a non-trivial amount of time as there
-     are lots of lists to walk and buffers to free.  This is only really
-     necessary however if we are about to load another file and we need the
-     memory back.  Otherwise, if we are about to exit, then we can save (a lot
-     of) time by only doing a quick close, and allowing the OS to reclaim the
-     memory for us.  */
-  if (! last_file)
-    bfd_close (file);
-  else
-    bfd_close_all_done (file);
+  bfd_close (file);
 }
 

 int
@@ -6362,11 +6351,11 @@ main (int argc, char **argv)
   else
     {
       if (optind == argc)
-	display_file ("a.out", target, true);
+	display_file ("a.out", target);
       else
 	for (; optind < argc;)
 	  {
-	    display_file (argv[optind], target, optind == argc - 1);
+	    display_file (argv[optind], target);
 	    optind++;
 	  }
     }


More information about the Binutils-cvs mailing list