name.
* objfiles.c (allocate_objfile): Don't malloc the objfile
name.
(free_objfile): Don't free the objfile name.
* objfiles.h (struct objfile) <name>: Update comment.
* symfile.c (reread_symbols): Fix reference counting. Don't
malloc objfile name.
+2012-08-22 Tom Tromey <tromey@redhat.com>
+
+ * jit.c (jit_object_close_impl): Don't malloc the objfile
+ name.
+ * objfiles.c (allocate_objfile): Don't malloc the objfile
+ name.
+ (free_objfile): Don't free the objfile name.
+ * objfiles.h (struct objfile) <name>: Update comment.
+ * symfile.c (reread_symbols): Fix reference counting. Don't
+ malloc objfile name.
+
2012-08-22 Tom Tromey <tromey@redhat.com>
* windows-nat.c (windows_make_so): Use gdb_bfd_open.
terminate_minimal_symbol_table (objfile);
- xfree (objfile->name);
- objfile->name = xstrdup ("<< JIT compiled code >>");
+ objfile->name = "<< JIT compiled code >>";
j = NULL;
for (i = obj->symtabs; i; i = j)
/* Look up the gdbarch associated with the BFD. */
objfile->gdbarch = gdbarch_from_bfd (abfd);
- objfile->name = xstrdup (bfd_get_filename (abfd));
+ objfile->name = bfd_get_filename (abfd);
objfile->mtime = bfd_get_mtime (abfd);
/* Build section table. */
}
else
{
- objfile->name = xstrdup ("<<anonymous objfile>>");
+ objfile->name = "<<anonymous objfile>>";
}
objfile->per_bfd = get_objfile_bfd_data (objfile, abfd);
/* The last thing we do is free the objfile struct itself. */
- xfree (objfile->name);
if (objfile->global_psymbols.list)
xfree (objfile->global_psymbols.list);
if (objfile->static_psymbols.list)
struct objfile *next;
- /* The object file's name, tilde-expanded and absolute. Malloc'd; free it
- if you free this struct. This pointer is never NULL. */
+ /* The object file's name, tilde-expanded and absolute. This
+ pointer is never NULL. This does not have to be freed; it is
+ guaranteed to have a lifetime at least as long as the objfile. */
char *name;
clear_objfile_data (objfile);
- /* Clean up any state BFD has sitting around. We don't need
- to close the descriptor but BFD lacks a way of closing the
- BFD without closing the descriptor. */
+ /* Clean up any state BFD has sitting around. */
{
struct bfd *obfd = objfile->obfd;
/* Open the new BFD before freeing the old one, so that
the filename remains live. */
objfile->obfd = gdb_bfd_open_maybe_remote (obfd_filename);
+ if (objfile->obfd == NULL)
+ {
+ /* We have to make a cleanup and error here, rather
+ than erroring later, because once we unref OBFD,
+ OBFD_FILENAME will be freed. */
+ make_cleanup_bfd_unref (obfd);
+ error (_("Can't open %s to read symbols."), obfd_filename);
+ }
gdb_bfd_unref (obfd);
}
- if (objfile->obfd == NULL)
- error (_("Can't open %s to read symbols."), objfile->name);
+ objfile->name = bfd_get_filename (objfile->obfd);
/* bfd_openr sets cacheable to true, which is what we want. */
if (!bfd_check_format (objfile->obfd, bfd_object))
error (_("Can't read symbols from %s: %s."), objfile->name,