summaryrefslogtreecommitdiff
path: root/gdb/objfiles.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/objfiles.c')
-rw-r--r--gdb/objfiles.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 436dcb8bf3e..123c2308f74 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -74,6 +74,11 @@ int mapped_symbol_files; /* Try to use mapped symbol files */
#define TARGET_KEEP_SECTION(ASECT) 0
#endif
+/* Called via bfd_map_over_sections to build up the section table that
+ the objfile references. The objfile contains pointers to the start
+ of the table (objfile->sections) and to the first location after
+ the end of the table (objfile->sections_end). */
+
static void
add_to_objfile_sections (abfd, asect, objfile_p_char)
bfd *abfd;
@@ -103,7 +108,19 @@ add_to_objfile_sections (abfd, asect, objfile_p_char)
/* Builds a section table for OBJFILE.
Returns 0 if OK, 1 on error (in which case bfd_error contains the
- error). */
+ error).
+
+ Note that while we are building the table, which goes into the
+ psymbol obstack, we hijack the sections_end pointer to instead hold
+ a count of the number of sections. When bfd_map_over_sections
+ returns, this count is used to compute the pointer to the end of
+ the sections table, which then overwrites the count.
+
+ Also note that the OFFSET and OVLY_MAPPED in each table entry
+ are initialized to zero.
+
+ Also note that if anything else writes to the psymbol obstack while
+ we are building the table, we're pretty much hosed. */
int
build_objfile_section_table (objfile)
@@ -632,8 +649,7 @@ objfile_relocate (objfile, new_offsets)
abfd = objfile->obfd;
- for (s = objfile->sections;
- s < objfile->sections_end; ++s)
+ ALL_OBJFILE_OSECTIONS (objfile, s)
{
flagword flags;
@@ -944,8 +960,7 @@ find_pc_sect_section (pc, section)
struct obj_section *s;
struct objfile *objfile;
- ALL_OBJFILES (objfile)
- for (s = objfile->sections; s < objfile->sections_end; ++s)
+ ALL_OBJSECTIONS (objfile, s)
#if defined(HPUXHPPA)
if ((section == 0 || section == s->the_bfd_section) &&
s->addr <= pc && pc <= s->endaddr)