static void exec_close(quitting) { register struct vmap *vp, *nxt; struct objfile *obj; for (nxt = vmap; vp = nxt; ) { nxt = vp->nxt; /* if there is an objfile associated with this bfd, free_objfile() will do proper cleanup of objfile *and* bfd. */ if (obj = lookup_objfile_bfd (vp->bfd)) free_objfile (obj); else bfd_close(vp->bfd); free_named_symtabs(vp->name); free(vp); } vmap = 0; if (exec_bfd) { bfd_close (exec_bfd); exec_bfd = NULL; } if (exec_ops.to_sections) { free (exec_ops.to_sections); exec_ops.to_sections = NULL; exec_ops.to_sections_end = NULL; } }
static void exec_close (int quitting) { int need_symtab_cleanup = 0; struct vmap *vp, *nxt; for (nxt = vmap; nxt != NULL;) { vp = nxt; nxt = vp->nxt; /* if there is an objfile associated with this bfd, free_objfile() will do proper cleanup of objfile *and* bfd. */ if (vp->objfile) { free_objfile (vp->objfile); need_symtab_cleanup = 1; } else if (vp->bfd != exec_bfd) /* FIXME-leak: We should be freeing vp->name too, I think. */ if (!bfd_close (vp->bfd)) warning (_("cannot close \"%s\": %s"), vp->name, bfd_errmsg (bfd_get_error ())); /* FIXME: This routine is #if 0'd in symfile.c. What should we be doing here? Should we just free everything in vp->objfile->symtabs? Should free_objfile do that? FIXME-as-well: free_objfile already free'd vp->name, so it isn't valid here. */ free_named_symtabs (vp->name); xfree (vp); } vmap = NULL; if (exec_bfd) { char *name = bfd_get_filename (exec_bfd); if (!bfd_close (exec_bfd)) warning (_("cannot close \"%s\": %s"), name, bfd_errmsg (bfd_get_error ())); xfree (name); exec_bfd = NULL; exec_bfd_mtime = 0; } if (exec_ops.to_sections) { xfree (exec_ops.to_sections); exec_ops.to_sections = NULL; exec_ops.to_sections_end = NULL; } }