From bbcd32adda2a0f5690371ac8002da2e3fc598656 Mon Sep 17 00:00:00 2001 From: Fred Fish Date: Sun, 12 May 2002 18:13:33 +0000 Subject: [PATCH] Approved by ezannoni@redhat.com: 2002-05-12 Fred Fish * 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 | 6 ++++++ gdb/symfile.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d7514e307dd..6c27c1148c3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2002-05-12 Fred Fish + + * 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 * configure.tgt (sparc-*openbsd): Remove entry accidentially diff --git a/gdb/symfile.c b/gdb/symfile.c index 7c7141d7b86..8303f3c0054 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -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 -- 2.30.2