/* Darwin support for GDB, the GNU debugger.
- Copyright (C) 2008-2013 Free Software Foundation, Inc.
+ Copyright (C) 2008-2014 Free Software Foundation, Inc.
Contributed by AdaCore.
/* Debugging symbols are not expected here. */
complaint (&symfile_complaints,
_("%s: Unexpected debug stab outside SO markers"),
- objfile->name);
+ objfile_name (objfile));
}
else
{
/* 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;
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);
member_len))
{
macho_add_oso_symfile (oso2, member_bfd,
+ bfd_get_filename (member_bfd),
main_objfile, symfile_flags);
oso2->name = NULL;
break;
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++;
}
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);
+ size_t name_len = strlen (objfile_name (objfile));
size_t dsym_len = strlen (DSYM_SUFFIX);
- const char *base_name = lbasename (objfile->name);
+ const char *base_name = lbasename (objfile_name (objfile));
size_t base_len = strlen (base_name);
char *dsym_filename = alloca (name_len + dsym_len + base_len + 1);
bfd *dsym_bfd;
bfd_mach_o_load_command *main_uuid;
bfd_mach_o_load_command *dsym_uuid;
- strcpy (dsym_filename, objfile->name);
+ strcpy (dsym_filename, objfile_name (objfile));
strcpy (dsym_filename + name_len, DSYM_SUFFIX);
strcpy (dsym_filename + name_len + dsym_len, base_name);
if (bfd_mach_o_lookup_command (objfile->obfd,
BFD_MACH_O_LC_UUID, &main_uuid) == 0)
{
- warning (_("can't find UUID in %s"), objfile->name);
+ warning (_("can't find UUID in %s"), objfile_name (objfile));
return NULL;
}
dsym_bfd = gdb_bfd_openr (dsym_filename, gnutarget);
if (memcmp (dsym_uuid->command.uuid.uuid, main_uuid->command.uuid.uuid,
sizeof (main_uuid->command.uuid.uuid)))
{
- warning (_("dsym file UUID doesn't match the one in %s"), objfile->name);
+ warning (_("dsym file UUID doesn't match the one in %s"),
+ objfile_name (objfile));
gdb_bfd_unref (dsym_bfd);
return NULL;
}
+ *filenamep = xstrdup (dsym_filename);
return dsym_bfd;
}
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)
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"));
/* 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);
if (mach_o_debug_level > 0)
printf_unfiltered (_("Relocate section '%s' of %s\n"),
- sectp->name, objfile->name);
+ sectp->name, objfile_name (objfile));
return bfd_simple_get_relocated_section_contents (abfd, sectp, buf, NULL);
}
}
static const struct sym_fns macho_sym_fns = {
- bfd_target_mach_o_flavour,
-
macho_new_init, /* init anything gbl to entire symtab */
macho_symfile_init, /* read initial info, setup for sym_read() */
macho_symfile_read, /* read a symbol file into symtab */
extern initialize_file_ftype _initialize_machoread;
void
-_initialize_machoread ()
+_initialize_machoread (void)
{
- add_symtab_fns (&macho_sym_fns);
+ add_symtab_fns (bfd_target_mach_o_flavour, &macho_sym_fns);
add_setshow_zuinteger_cmd ("mach-o", class_obscure,
&mach_o_debug_level,