diff options
author | Tristan Gingold <gingold@adacore.com> | 2009-12-15 09:37:11 +0000 |
---|---|---|
committer | Tristan Gingold <gingold@adacore.com> | 2009-12-15 09:37:11 +0000 |
commit | 0c34c8e3b972672674c069c7739affdfc53faeb4 (patch) | |
tree | c28fdc71b7461a744a90c9687bc9dedcfe603f2d /gdb/machoread.c | |
parent | 67e61a2c93844e09da458377a5b5bc2d454060d3 (diff) | |
download | gdb-0c34c8e3b972672674c069c7739affdfc53faeb4.tar.gz |
2009-12-15 Tristan Gingold <gingold@adacore.com>
* machoread.c (macho_symtab_read): Add comments. Always set
first_offset.
Diffstat (limited to 'gdb/machoread.c')
-rw-r--r-- | gdb/machoread.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/gdb/machoread.c b/gdb/machoread.c index d7d53bb9243..e19e4e58a44 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); } |