Approved by ezannoni@redhat.com:
authorFred Fish <fnf@specifix.com>
Sun, 12 May 2002 18:13:33 +0000 (18:13 +0000)
committerFred Fish <fnf@specifix.com>
Sun, 12 May 2002 18:13:33 +0000 (18:13 +0000)
2002-05-12  Fred Fish  <fnf@redhat.com>
* symfile.c (default_symfile_offsets): Arrange for uninitialized
sect_index_xxx members to index the first slot in section_offsets
if all of the section_offsets are zero.

gdb/ChangeLog
gdb/symfile.c

index d7514e307dd77fa208928463302c215df98b3b68..6c27c1148c313b2bde08dd330f3c22b87a461bd0 100644 (file)
@@ -1,3 +1,9 @@
+2002-05-12  Fred Fish  <fnf@redhat.com>
+
+       * symfile.c (default_symfile_offsets): Arrange for uninitialized
+       sect_index_xxx members to index the first slot in section_offsets
+       if all of the section_offsets are zero.
+
 2002-05-12  Mark Kettenis  <kettenis@gnu.org>
 
        * configure.tgt (sparc-*openbsd): Remove entry accidentially
index 7c7141d7b86f10f5e7da6e350649a743ad1a032f..8303f3c00543134b667ce5570c1dbcd4a935efe5 100644 (file)
@@ -539,6 +539,34 @@ default_symfile_offsets (struct objfile *objfile,
   if (sect) 
     objfile->sect_index_rodata = sect->index;
 
+  /* This is where things get really weird...  We MUST have valid
+     indices for the various sect_index_* members or gdb will abort.
+     So if for example, there is no ".text" section, we have to
+     accomodate that.  Except when explicitly adding symbol files at
+     some address, section_offsets contains nothing but zeros, so it
+     doesn't matter which slot in section_offsets the individual
+     sect_index_* members index into.  So if they are all zero, it is
+     safe to just point all the currently uninitialized indices to the
+     first slot. */
+
+  for (i = 0; i < objfile->num_sections; i++)
+    {
+      if (ANOFFSET (objfile->section_offsets, i) != 0)
+       {
+         break;
+       }
+    }
+  if (i == objfile->num_sections)
+    {
+      if (objfile->sect_index_text == -1)
+       objfile->sect_index_text = 0;
+      if (objfile->sect_index_data == -1)
+       objfile->sect_index_data = 0;
+      if (objfile->sect_index_bss == -1)
+       objfile->sect_index_bss = 0;
+      if (objfile->sect_index_rodata == -1)
+       objfile->sect_index_rodata = 0;
+    }
 }
 
 /* Process a symbol file, as either the main file or as a dynamically