diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-09-24 14:00:06 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-09-24 14:00:06 +0000 |
commit | 24ba069af8a2078bc634bbf2599381fc0ea471ad (patch) | |
tree | b9b51a9595e0e4ea0723ed9f5541664e04bf05a3 /gdb/machoread.c | |
parent | 4262abfb982e7afb257203a2dbdb921b57f5e39b (diff) | |
download | binutils-gdb-24ba069af8a2078bc634bbf2599381fc0ea471ad.tar.gz |
Keep objfile original filename
gdb/
2013-09-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Pass down original filename for objfile.
* coffread.c (coff_symfile_read): Update symbol_file_add_separate call.
* elfread.c (elf_symfile_read): Likewise.
* jit.c (jit_object_close_impl): Update allocate_objfile call, no
longer set ORIGINAL_NAME.
(jit_bfd_try_read_symtab): Update symbol_file_add_from_bfd call.
* jv-lang.c (get_dynamics_objfile): Update allocate_objfile call.
* machoread.c (macho_add_oso_symfile): Add parameter name. Update
symbol_file_add_from_bfd call.
(macho_symfile_read_all_oso): Update two macho_add_oso_symfile calls.
(macho_check_dsym): Add parameter filenamep. Change function comment.
Set *filenamep.
(macho_symfile_read): New variable dsym_filename. Update
macho_check_dsym call. Use it for symbol_file_add_separate.
* objfiles.c (allocate_objfile): Add parameter name. New comment for
it. Use it for objfile->original_name.
(objfile_name): Return OBFD's filename, if available.
* objfiles.h (allocate_objfile): Add new parameter name.
* solib.c (solib_read_symbols): Update symbol_file_add_from_bfd call.
* symfile-mem.c (symbol_file_add_from_memory): Update
symbol_file_add_from_bfd call.
* symfile.c (read_symbols): Update symbol_file_add_separate call, new
comment for it.
(symbol_file_add_with_addrs): New parameter name, add function comment
for it. Remove variable name. Update allocate_objfile call.
(symbol_file_add_separate): New parameter name, add function comment
for it. Update symbol_file_add_with_addrs call.
(symbol_file_add_from_bfd): New parameter name. Update
symbol_file_add_with_addrs call.
(symbol_file_add): Update symbol_file_add_from_bfd call.
(reread_symbols): New variable original_name. Save
objfile->original_name by it.
* symfile.h (symbol_file_add_from_bfd, symbol_file_add_separate): Add
second parameter.
Diffstat (limited to 'gdb/machoread.c')
-rw-r--r-- | gdb/machoread.c | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/gdb/machoread.c b/gdb/machoread.c index 91cc69334d4..78af2f6e583 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -447,7 +447,7 @@ macho_resolve_oso_sym_with_minsym (struct objfile *main_objfile, asymbol *sym) /* Add oso file OSO/ABFD as a symbol file. */ static void -macho_add_oso_symfile (oso_el *oso, bfd *abfd, +macho_add_oso_symfile (oso_el *oso, bfd *abfd, const char *name, struct objfile *main_objfile, int symfile_flags) { int storage; @@ -636,7 +636,7 @@ macho_add_oso_symfile (oso_el *oso, bfd *abfd, from symfile.c:symbol_file_add_with_addrs_or_offsets. */ cleanup = make_cleanup_bfd_unref (abfd); symbol_file_add_from_bfd - (abfd, symfile_flags & ~(SYMFILE_MAINLINE | SYMFILE_VERBOSE), NULL, + (abfd, name, symfile_flags & ~(SYMFILE_MAINLINE | SYMFILE_VERBOSE), NULL, main_objfile->flags & (OBJF_REORDERED | OBJF_SHARED | OBJF_READNOW | OBJF_USERLOADED), main_objfile); @@ -736,6 +736,7 @@ macho_symfile_read_all_oso (VEC (oso_el) **oso_vector_ptr, member_len)) { macho_add_oso_symfile (oso2, member_bfd, + bfd_get_filename (member_bfd), main_objfile, symfile_flags); oso2->name = NULL; break; @@ -769,7 +770,8 @@ macho_symfile_read_all_oso (VEC (oso_el) **oso_vector_ptr, warning (_("`%s': can't open to read symbols: %s."), oso->name, bfd_errmsg (bfd_get_error ())); else - macho_add_oso_symfile (oso, abfd, main_objfile, symfile_flags); + macho_add_oso_symfile (oso, abfd, oso->name, main_objfile, + symfile_flags); ix++; } @@ -785,11 +787,13 @@ macho_symfile_read_all_oso (VEC (oso_el) **oso_vector_ptr, executable name and the executable base name to get the DSYM file name. */ #define DSYM_SUFFIX ".dSYM/Contents/Resources/DWARF/" -/* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it. - Return NULL if no valid dsym file is found. */ +/* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it + and return *FILENAMEP with its original xmalloc-ated filename. + Return NULL if no valid dsym file is found (FILENAMEP is not used in + such case). */ static bfd * -macho_check_dsym (struct objfile *objfile) +macho_check_dsym (struct objfile *objfile, char **filenamep) { size_t name_len = strlen (objfile_name (objfile)); size_t dsym_len = strlen (DSYM_SUFFIX); @@ -842,6 +846,7 @@ macho_check_dsym (struct objfile *objfile) gdb_bfd_unref (dsym_bfd); return NULL; } + *filenamep = xstrdup (dsym_filename); return dsym_bfd; } @@ -860,6 +865,8 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags) be in the executable. */ if (bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC)) { + char *dsym_filename; + /* Process the normal symbol table first. */ storage_needed = bfd_get_symtab_upper_bound (objfile->obfd); if (storage_needed < 0) @@ -897,13 +904,15 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags) dwarf2_build_frame_info (objfile); /* Check for DSYM file. */ - dsym_bfd = macho_check_dsym (objfile); + dsym_bfd = macho_check_dsym (objfile, &dsym_filename); if (dsym_bfd != NULL) { int ix; oso_el *oso; struct bfd_section *asect, *dsect; + make_cleanup (xfree, dsym_filename); + if (mach_o_debug_level > 0) printf_unfiltered (_("dsym file found\n")); @@ -920,7 +929,8 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags) /* Add the dsym file as a separate file. */ make_cleanup_bfd_unref (dsym_bfd); - symbol_file_add_separate (dsym_bfd, symfile_flags, objfile); + symbol_file_add_separate (dsym_bfd, dsym_filename, symfile_flags, + objfile); /* Don't try to read dwarf2 from main file or shared libraries. */ do_cleanups (old_chain); |