This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]