[committed/darwin]: Add comments to machoread.c

Tristan Gingold gingold@adacore.com
Tue Dec 15 09:36:00 GMT 2009


Hi,

while I was working on this file, I added comments.  Also, first_offset is now always set.

Tristan.

gdb/
2009-12-14  Tristan Gingold  <gingold@adacore.com>

	* machoread.c (macho_symtab_read): Add comments.  Always set
	first_offset.
---
 gdb/machoread.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/gdb/machoread.c b/gdb/machoread.c
index d7d53bb..e19e4e5 100644
--- a/gdb/machoread.c
+++ b/gdb/machoread.c
@@ -69,7 +69,9 @@ typedef struct oso_el
   int num_sections;
 
   /* Each seaction of the object file is represented by a symbol and its
-     offset.  */
+     offset.  If the offset is 0, we assume that the symbol is at offset 0
+     in the OSO object file and a symbol lookup in the main file is
+     required to get the offset.  */
   asymbol **symbols;
   bfd_vma *offsets;
 }
@@ -124,14 +126,17 @@ macho_symtab_read (struct objfile *objfile,
 	{
 	  bfd_vma addr;
 
+          /* Debugging symbols are used to collect OSO file names as well
+             as section offsets.  */
+
 	  switch (mach_o_sym->n_type)
 	    {
 	    case N_SO:
-	      if ((sym->name == NULL || sym->name[0] == 0)
-		  && oso_file != NULL)
+              /* An empty SO entry terminates a chunk for an OSO file.  */
+	      if ((sym->name == NULL || sym->name[0] == 0) && oso_file != NULL)
 		{
 		  macho_add_oso (oso_file, nbr_sections,
-				 first_symbol, first_offset);
+                                 first_symbol, first_offset);
 		  first_symbol = NULL;
 		  first_offset = NULL;
 		  oso_file = NULL;
@@ -149,6 +154,7 @@ macho_symtab_read (struct objfile *objfile,
 	      if (addr != 0
 		  && first_symbol[sym->section->index] == NULL)
 		{
+                  /* These STAB entries can directly relocate a section.  */
 		  first_symbol[sym->section->index] = sym;
 		  first_offset[sym->section->index] = addr + offset;
 		}
@@ -156,9 +162,15 @@ macho_symtab_read (struct objfile *objfile,
 	    case N_GSYM:
 	      gdb_assert (oso_file != NULL);
 	      if (first_symbol[sym->section->index] == NULL)
-		first_symbol[sym->section->index] = sym;
+                {
+                  /* This STAB entry needs a symbol look-up to relocate
+                     the section.  */
+                  first_symbol[sym->section->index] = sym;
+                  first_offset[sym->section->index] = 0;
+                }
 	      break;
 	    case N_OSO:
+              /* New OSO file.  */
 	      gdb_assert (oso_file == NULL);
 	      first_symbol = (asymbol **)xmalloc (nbr_sections
 						  * sizeof (asymbol *));
@@ -233,6 +245,7 @@ macho_symtab_read (struct objfile *objfile,
 	  if (oso_file != NULL
 	      && first_symbol[sym->section->index] == NULL)
 	    {
+              /* Standard symbols can directly relocate sections.  */
 	      first_symbol[sym->section->index] = sym;
 	      first_offset[sym->section->index] = symaddr;
 	    }
@@ -243,6 +256,7 @@ macho_symtab_read (struct objfile *objfile,
 	}
     }
 
+  /* Just in case there is no trailing SO entry.  */
   if (oso_file != NULL)
     macho_add_oso (oso_file, nbr_sections, first_symbol, first_offset);
 }
-- 
1.6.2



More information about the Gdb-patches mailing list