diff options
author | Tom Tromey <tromey@redhat.com> | 2012-07-18 19:34:57 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-07-18 19:34:57 +0000 |
commit | a4453b7e0b9b84dd18c844ef43fbb9f6e2e75433 (patch) | |
tree | 86d872256f3fb47092c6660448c7f7655748e2b7 /gdb/machoread.c | |
parent | cbb099e88685f8aa80b9a958ba35988d8dbb8721 (diff) | |
download | gdb-a4453b7e0b9b84dd18c844ef43fbb9f6e2e75433.zip gdb-a4453b7e0b9b84dd18c844ef43fbb9f6e2e75433.tar.gz gdb-a4453b7e0b9b84dd18c844ef43fbb9f6e2e75433.tar.bz2 |
* symfile.c (symfile_bfd_open): Don't copy name. Call
gdb_bfd_stash_filename.
(load_command): Open the new BFD before freeing the old.
(bfd_open_maybe_remote): Call gdb_bfd_stash_filename.
* symfile-mem.c (symbol_file_add_from_memory): Don't copy name.
Call gdb_bfd_stash_filename.
* spu-linux-nat.c (spu_bfd_open): Don't copy name.
* solib-spu.c (spu_bfd_fopen): Don't copy name. Call
gdb_bfd_stash_filename.
* solib-darwin.c (darwin_solib_get_all_image_info_addr_at_init):
Free found_pathname.
* rs6000-nat.c (add_vmap): Don't copy filename. Call
gdb_bfd_stash_filename.
* remote.c (remote_bfd_open): Call gdb_bfd_stash_filename.
* machoread.c (macho_add_oso_symfile): Call
gdb_bfd_stash_filename.
(macho_symfile_read_all_oso): Arrange to free archive_name. Call
gdb_bfd_stash_filename.
(macho_check_dsym): Don't copy filename. Call
gdb_bfd_stash_filename.
* jit.c (bfd_open_from_target_memory): Don't copy the filename.
* gdb_bfd.c (gdb_bfd_stash_filename): New function.
* gdb_bfd.h (gdb_bfd_stash_filename): Declare.
* gcore.c (create_gcore_bfd): Call gdb_bfd_stash_filename.
* exec.c (exec_close): Don't free the BFD's filename.
(exec_file_attach): Don't copy the filename. Call
gdb_bfd_stash_filename.
* corelow.c (core_close): Don't free the BFD's filename.
(core_open): Call gdb_bfd_stash_filename.
* corefile.c (reopen_exec_file): Remove #if 0 code.
* solib.c (solib_bfd_fopen): Call gdb_bfd_stash_filename. Free
pathname.
* dwarf2read.c (try_open_dwo_file): Call gdb_bfd_stash_filename.
Diffstat (limited to 'gdb/machoread.c')
-rw-r--r-- | gdb/machoread.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/gdb/machoread.c b/gdb/machoread.c index eb56f14..6d309bb 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -629,10 +629,10 @@ macho_add_oso_symfile (oso_el *oso, bfd *abfd, bfd_hash_table_free (&table); - /* Make sure that the filename was malloc'ed. The current filename comes - either from an OSO symbol name or from an archive name. Memory for both - is not managed by gdb. */ - abfd->filename = xstrdup (abfd->filename); + /* Make sure that the filename has the correct lifetime. The + current filename comes either from an OSO symbol name or from an + archive name. Memory for both is not managed by gdb. */ + gdb_bfd_stash_filename (abfd); /* We need to clear SYMFILE_MAINLINE to avoid interractive question from symfile.c:symbol_file_add_with_addrs_or_offsets. */ @@ -651,6 +651,7 @@ macho_symfile_read_all_oso (struct objfile *main_objfile, int symfile_flags) int ix; VEC (oso_el) *vec; oso_el *oso; + struct cleanup *cleanup = make_cleanup (null_cleanup, NULL); vec = oso_vector; oso_vector = NULL; @@ -677,6 +678,8 @@ macho_symfile_read_all_oso (struct objfile *main_objfile, int symfile_flags) memcpy (archive_name, oso->name, pfx_len); archive_name[pfx_len] = '\0'; + make_cleanup (xfree, archive_name); + /* Compute number of oso for this archive. */ for (last_ix = ix; VEC_iterate (oso_el, vec, last_ix, oso2); last_ix++) @@ -702,6 +705,9 @@ macho_symfile_read_all_oso (struct objfile *main_objfile, int symfile_flags) ix = last_ix; continue; } + + gdb_bfd_stash_filename (archive_bfd); + member_bfd = gdb_bfd_ref (bfd_openr_next_archived_file (archive_bfd, NULL)); @@ -773,6 +779,7 @@ macho_symfile_read_all_oso (struct objfile *main_objfile, int symfile_flags) } VEC_free (oso_el, vec); + do_cleanups (cleanup); } /* DSYM (debug symbols) files contain the debug info of an executable. @@ -810,20 +817,18 @@ macho_check_dsym (struct objfile *objfile) warning (_("can't find UUID in %s"), objfile->name); return NULL; } - dsym_filename = xstrdup (dsym_filename); dsym_bfd = gdb_bfd_ref (bfd_openr (dsym_filename, gnutarget)); if (dsym_bfd == NULL) { warning (_("can't open dsym file %s"), dsym_filename); - xfree (dsym_filename); return NULL; } + gdb_bfd_stash_filename (dsym_filename); if (!bfd_check_format (dsym_bfd, bfd_object)) { gdb_bfd_unref (dsym_bfd); warning (_("bad dsym file format: %s"), bfd_errmsg (bfd_get_error ())); - xfree (dsym_filename); return NULL; } @@ -832,7 +837,6 @@ macho_check_dsym (struct objfile *objfile) { warning (_("can't find UUID in %s"), dsym_filename); gdb_bfd_unref (dsym_bfd); - xfree (dsym_filename); return NULL; } if (memcmp (dsym_uuid->command.uuid.uuid, main_uuid->command.uuid.uuid, @@ -840,7 +844,6 @@ macho_check_dsym (struct objfile *objfile) { warning (_("dsym file UUID doesn't match the one in %s"), objfile->name); gdb_bfd_unref (dsym_bfd); - xfree (dsym_filename); return NULL; } return dsym_bfd; |