From 24ba069af8a2078bc634bbf2599381fc0ea471ad Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Tue, 24 Sep 2013 14:00:06 +0000 Subject: Keep objfile original filename gdb/ 2013-09-24 Jan Kratochvil 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. --- gdb/objfiles.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'gdb/objfiles.c') diff --git a/gdb/objfiles.c b/gdb/objfiles.c index aae992f..6585c3f 100644 --- a/gdb/objfiles.c +++ b/gdb/objfiles.c @@ -248,6 +248,11 @@ build_objfile_section_table (struct objfile *objfile) into the list of all known objfiles, and return a pointer to the new objfile struct. + NAME should contain original non-canonicalized filename or other + identifier as entered by user. If there is no better source use + bfd_get_filename (ABFD). NAME may be NULL only if ABFD is NULL. + NAME content is copied into returned objfile. + The FLAGS word contains various bits (OBJF_*) that can be taken as requests for specific operations. Other bits like OBJF_SHARED are simply copied through to the new objfile flags member. */ @@ -262,7 +267,7 @@ build_objfile_section_table (struct objfile *objfile) things in a consistent state even if abfd is NULL. */ struct objfile * -allocate_objfile (bfd *abfd, int flags) +allocate_objfile (bfd *abfd, const char *name, int flags) { struct objfile *objfile; @@ -279,20 +284,23 @@ allocate_objfile (bfd *abfd, int flags) that any data that is reference is saved in the per-objfile data region. */ + if (name == NULL) + { + gdb_assert (abfd == NULL); + name = "<>"; + } + objfile->original_name = obstack_copy0 (&objfile->objfile_obstack, name, + strlen (name)); + objfile->obfd = abfd; gdb_bfd_ref (abfd); if (abfd != NULL) { - objfile->original_name = bfd_get_filename (abfd); objfile->mtime = bfd_get_mtime (abfd); /* Build section table. */ build_objfile_section_table (objfile); } - else - { - objfile->original_name = "<>"; - } objfile->per_bfd = get_objfile_bfd_data (objfile, abfd); objfile->pspace = current_program_space; @@ -1486,6 +1494,9 @@ default_iterate_over_objfiles_in_search_order const char * objfile_name (const struct objfile *objfile) { + if (objfile->obfd != NULL) + return bfd_get_filename (objfile->obfd); + return objfile->original_name; } -- cgit v1.1