summaryrefslogtreecommitdiff
path: root/gdb/machoread.c
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2013-09-24 14:00:06 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2013-09-24 14:00:06 +0000
commit24ba069af8a2078bc634bbf2599381fc0ea471ad (patch)
treeb9b51a9595e0e4ea0723ed9f5541664e04bf05a3 /gdb/machoread.c
parent4262abfb982e7afb257203a2dbdb921b57f5e39b (diff)
downloadbinutils-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.c26
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);