From 9de0904cce9f2bd32549eade2917c1d2b7256e14 Mon Sep 17 00:00:00 2001 From: Jim Kingdon Date: Sat, 15 Oct 1994 18:28:35 +0000 Subject: [PATCH] * symfile.c (reread_symbols): Include bfd_errmsg string in error message if bfd_close fails. * exec.c (exec_close), solib.c (clear_solib), corelow.c (core_close), objfiles.c (free_objfile), irix5-nat.c (clear_solib), osfsolib.c (clear_solib), remote-utils.c (gr_load_image): Check for errors from bfd_close. * solib.c (look_for_base), remote-utils.c (gr_load_image), remote-udi.c (download), corelow.c (core_open), symfile.c (symfile_bfd_open), symfile.c (generic_load): Add comment regarding error from bfd_close. * remote-udi.c (download), remote-utils.c (gr_load_image): Add comment about bogus handling of errors from bfd_openr. * exec.c (exec_close): Add comment regarding memory leak and dangling reference to vp->name. --- gdb/ChangeLog | 4 ++-- gdb/corelow.c | 11 +++++++++-- gdb/irix5-nat.c | 4 +++- gdb/objfiles.c | 4 +++- gdb/osfsolib.c | 4 +++- gdb/remote-utils.c | 9 ++++++++- 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e6309872f8..9ec1604e7e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -7,8 +7,8 @@ Fri Oct 14 10:29:08 1994 Jim Kingdon (kingdon@lioth.cygnus.com) message if bfd_close fails. * exec.c (exec_close), solib.c (clear_solib), corelow.c (core_close), objfiles.c (free_objfile), irix5-nat.c - (clear_solib), remote-utils.c (gr_load_image): - Check for errors from bfd_close. + (clear_solib), osfsolib.c (clear_solib), remote-utils.c + (gr_load_image): Check for errors from bfd_close. * solib.c (look_for_base), remote-utils.c (gr_load_image), remote-udi.c (download), corelow.c (core_open), symfile.c (symfile_bfd_open), symfile.c (generic_load): Add comment diff --git a/gdb/corelow.c b/gdb/corelow.c index 7059358e40..842e2fe2e1 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -54,11 +54,15 @@ static void core_close (quitting) int quitting; { + char *name; inferior_pid = 0; /* Avoid confusion from thread stuff */ if (core_bfd) { - free (bfd_get_filename (core_bfd)); - bfd_close (core_bfd); + name = bfd_get_filename (core_bfd); + if (!bfd_close (core_bfd)) + warning ("cannot close \"%s\": %s", + bfd_filename, bfd_errmsg (bfd_get_error ())); + free (name); core_bfd = NULL; #ifdef CLEAR_SOLIB CLEAR_SOLIB (); @@ -154,6 +158,9 @@ core_open (filename, from_tty) if (!bfd_check_format (temp_bfd, bfd_core)) { /* Do it after the err msg */ + /* FIXME: should be checking for errors from bfd_close (for one thing, + on error it does not free all the storage associated with the + bfd). */ make_cleanup (bfd_close, temp_bfd); error ("\"%s\" is not a core dump: %s", filename, bfd_errmsg(bfd_get_error ())); } diff --git a/gdb/irix5-nat.c b/gdb/irix5-nat.c index f4137383b9..110af26c84 100644 --- a/gdb/irix5-nat.c +++ b/gdb/irix5-nat.c @@ -792,7 +792,9 @@ clear_solib() if (so_list_head -> abfd) { bfd_filename = bfd_get_filename (so_list_head -> abfd); - bfd_close (so_list_head -> abfd); + if (!bfd_close (so_list_head -> abfd)) + warning ("cannot close \"%s\": %s", + bfd_filename, bfd_errmsg (bfd_get_error ())); } else /* This happens for the executable on SVR4. */ diff --git a/gdb/objfiles.c b/gdb/objfiles.c index 22c96ed27d..5cd01e5210 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -341,7 +341,9 @@ free_objfile (objfile) if (objfile -> obfd != NULL) { char *name = bfd_get_filename (objfile->obfd); - bfd_close (objfile -> obfd); + if (!bfd_close (objfile -> obfd)) + warning ("cannot close \"%s\": %s", + name, bfd_errmsg (bfd_get_error ())); free (name); } diff --git a/gdb/osfsolib.c b/gdb/osfsolib.c index e42dec32a0..b7bb7aae74 100644 --- a/gdb/osfsolib.c +++ b/gdb/osfsolib.c @@ -679,7 +679,9 @@ clear_solib() if (so_list_head -> abfd) { bfd_filename = bfd_get_filename (so_list_head -> abfd); - bfd_close (so_list_head -> abfd); + if (!bfd_close (so_list_head -> abfd)) + warning ("cannot close \"%s\": %s", + bfd_filename, bfd_errmsg (bfd_get_error ())); } else /* This happens for the executable on SVR4. */ diff --git a/gdb/remote-utils.c b/gdb/remote-utils.c index ba7d29712d..f1e949a8b2 100644 --- a/gdb/remote-utils.c +++ b/gdb/remote-utils.c @@ -648,8 +648,13 @@ gr_load_image (args, fromtty) abfd = bfd_openr (args, (char *) 0); if (!abfd) + /* FIXME: should be using bfd_errmsg, not assuming it was + bfd_error_system_call. */ perror_with_name (args); + /* FIXME: should be checking for errors from bfd_close (for one thing, + on error it does not free all the storage associated with the + bfd). */ old_cleanups = make_cleanup (bfd_close, abfd); QUIT; @@ -682,7 +687,9 @@ gr_load_image (args, fromtty) free (buffer); write_pc (bfd_get_start_address (abfd)); - bfd_close (abfd); + if (!bfd_close (abfd)) + warning ("cannot close \"%s\": %s", + args, bfd_errmsg (bfd_get_error ())); discard_cleanups (old_cleanups); } -- 2.34.1