This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[RFC] Darwin: add OSO as separate debug files
- From: Tristan Gingold <gingold at ACT-Europe dot FR>
- To: gdb-patches at sourceware dot org
- Date: Tue, 5 Jan 2010 12:32:32 +0100
- Subject: [RFC] Darwin: add OSO as separate debug files
Hi,
in order to correctly handle Darwin OSO files, they are now added as
separate debug objfile.
This is the Darwin specific use of the previous patch.
Tristan.
2009-12-23 Tristan Gingold <gingold@adacore.com>
* machoread.c (macho_add_oso_symfile): Add symfile_flags parameter.
Call xstrdup for abfd->filename. Pass symfile_flags and objfile flags
to symbol_file_add_from_bfd. Add OSO as separate objfile.
(macho_oso_symfile): Add symfile_flags parameter. Pass it to
macho_add_oso_symfile.
(macho_symfile_read): Pass symfile_flags to macho_oso_symfile.
---
gdb/machoread.c | 24 ++++++++++++++++++------
1 files changed, 18 insertions(+), 6 deletions(-)
diff --git a/gdb/machoread.c b/gdb/machoread.c
index 81f60ec..534fc94 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -292,8 +292,10 @@ oso_el_compare_name (const void *vl, const void *vr)
/* Add an oso file as a symbol file. */
static void
-macho_add_oso_symfile (oso_el *oso, bfd *abfd, struct objfile *main_objfile)
+macho_add_oso_symfile (oso_el *oso, bfd *abfd,
+ struct objfile *main_objfile, int symfile_flags)
{
+ struct objfile *objfile;
struct section_addr_info *addrs;
int len;
int i;
@@ -363,13 +365,22 @@ macho_add_oso_symfile (oso_el *oso, bfd *abfd, struct objfile *main_objfile)
addrs->other[j].name);
}
- symbol_file_add_from_bfd (abfd, 0, addrs, 0);
+ /* 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);
+
+ objfile = symbol_file_add_from_bfd
+ (abfd, symfile_flags, addrs,
+ main_objfile->flags & (OBJF_REORDERED | OBJF_SHARED
+ | OBJF_READNOW | OBJF_USERLOADED));
+ add_separate_debug_objfile (objfile, main_objfile);
}
/* Read symbols from the vector of oso files. */
static void
-macho_oso_symfile (struct objfile *main_objfile)
+macho_oso_symfile (struct objfile *main_objfile, int symfile_flags)
{
int ix;
VEC (oso_el) *vec;
@@ -453,7 +464,8 @@ macho_oso_symfile (struct objfile *main_objfile)
&& !memcmp (member_name, oso2->name + pfx_len + 1,
member_len))
{
- macho_add_oso_symfile (oso2, member_bfd, main_objfile);
+ macho_add_oso_symfile (oso2, member_bfd,
+ main_objfile, symfile_flags);
oso2->name = NULL;
break;
}
@@ -486,7 +498,7 @@ macho_oso_symfile (struct objfile *main_objfile)
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);
+ macho_add_oso_symfile (oso, abfd, main_objfile, symfile_flags);
ix++;
}
@@ -670,7 +682,7 @@ macho_symfile_read (struct objfile *objfile, int symfile_flags)
/* Then the oso. */
if (oso_vector != NULL)
- macho_oso_symfile (objfile);
+ macho_oso_symfile (objfile, symfile_flags);
}
static void
--
1.6.5.rc2