[binutils-gdb] gdb: small cleanup in symbol_file_add_with_addrs

Andrew Burgess aburgess@sourceware.org
Fri Sep 15 09:25:08 GMT 2023


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

commit 5a6dafd5f1110e8b642fdf65c13d8543e469a09e
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Fri Sep 8 11:20:25 2023 +0100

    gdb: small cleanup in symbol_file_add_with_addrs
    
    While looking at how gdb::observers::new_objfile was used, I found
    some code in symbol_file_add_with_addrs that I thought could be
    improved.
    
    Instead of:
    
      if (condition)
       {
         ...
         return;
       }
    
      ...
      return;
    
    Where some parts of '...' identical between the two branches.  I think
    it would be nicer if the duplication is removed, and we just use:
    
      if (!condition)
        ...
    
    to guard the one statement that should only happen when the condition
    is not true.
    
    There is one change in this commit though that is (possibly)
    significant, there is a call to bfd_cache_close_all() that was only
    present in the second block.  After this commit we now call that
    function for both paths.
    
    The call to bfd_cache_close_all was added in commit:
    
      commit ce7d45220e4ed342d4a77fcd2f312e85e1100971
      Date:   Fri Jul 30 12:05:45 2004 +0000
    
    with the purpose of ensuring that GDB doesn't hold the BFDs open
    unnecessarily, thus preventing the files from being updated on some
    hosts (e.g. Win32).
    
    In the early exit case we previously didn't call bfd_cache_close_all,
    with the result that GDB would continue to hold open some BFD objects
    longer than needed.
    
    After this commit, but calling bfd_cache_close_all for both paths this
    problem is solved.
    
    I'm not sure how this change could be tested, I don't believe there's
    any GDB (maintenance) command that displays the BFD cache contents, so
    we can't check the cache contents easily.  Ideas are welcome though.
    
    Approved-By: Tom Tromey <tom@tromey.com>

Diff:
---
 gdb/symfile.c | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/gdb/symfile.c b/gdb/symfile.c
index 70ade9e119e..85a9c4e1da0 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1119,18 +1119,13 @@ symbol_file_add_with_addrs (const gdb_bfd_ref_ptr &abfd, const char *name,
      time.  */
   gdb_flush (gdb_stdout);
 
-  if (objfile->sf == NULL)
-    {
-      gdb::observers::new_objfile.notify (objfile);
-      return objfile;	/* No symbols.  */
-    }
-
-  finish_new_objfile (objfile, add_flags);
+  if (objfile->sf != nullptr)
+    finish_new_objfile (objfile, add_flags);
 
   gdb::observers::new_objfile.notify (objfile);
 
   bfd_cache_close_all ();
-  return (objfile);
+  return objfile;
 }
 
 /* Add BFD as a separate debug file for OBJFILE.  For NAME description


More information about the Gdb-cvs mailing list