From bdfed3bc1ee7b37c60b72ab28a0dd2f4f28abaf3 Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Thu, 14 Jan 2010 12:47:44 +0000 Subject: [PATCH] 2009-01-14 Tristan Gingold * 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/ChangeLog | 9 +++++++++ gdb/machoread.c | 26 ++++++++++++++++++++------ 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 1fd28bc0dfd..7dcc6418ccf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2009-01-14 Tristan Gingold + + * 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. + 2010-01-14 Joel Brobecker Tru64: Dead threads are never deleted. diff --git a/gdb/machoread.c b/gdb/machoread.c index 81f60ec097c..02b61d3adcf 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,24 @@ 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); + + /* We need to clear SYMFILE_MAINLINE to avoid interractive question + from symfile.c:symbol_file_add_with_addrs_or_offsets. */ + objfile = symbol_file_add_from_bfd + (abfd, symfile_flags & ~SYMFILE_MAINLINE, 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 +466,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 +500,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 +684,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 -- 2.30.2