This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
[RFA] Fix uninitialized section index internal error
- To: gdb-patches at sources dot redhat dot com
- Subject: [RFA] Fix uninitialized section index internal error
- From: Joel Brobecker <brobecker at act-europe dot fr>
- Date: Thu, 7 Jun 2001 15:08:45 +0200
Hi,
I'm sorry I've been overwhelmed by other tasks in the past weeks, and
could not pursue this issue. I am resubmitting this patch again. Please
let me know if I am not following the right procedure.
While working with gdb on Tru64 5.1, we noticed the following internal
error sometimes happening at the begining of a gdb session:
| gdb/mdebugread.c:2448: gdb-internal-error: Section index is uninitialized
|
| An internal GDB error was detected. This may make further
| debugging unreliable. Continue this debugging session? (y or n) n
To reproduce the problem, simply compile the following C program:
mach.c:
<<
int
main (void)
{
return 0;
};
>>
Make sure libmach is linked in when building the program:
% gcc -o mach mach.c -lmach
After for investigation, I found that gdb was looking for a symbol in
the .bss section of libmach.so, but there is none (which explains why
the section index is not initialized). Instead, there is a .sbss
section, where the symbol is localized.
I modified default_symfile_offsets () to use the .sbss section if the
.bss one does not exist. In that change, I am assuming that a bss and a
sbss section are mutually exclusive.
This change has been integrated in ACT's version of gdb a few months
ago, and has worked well so far.
Here is the change log:
2001-06-07 J. Brobecker <brobecker@act-europe.fr>
* symfile.c (default_symfile_offsets): use the .sbss section in
place of the .bss section when the latter does not exist.
--
Joel
Index: gdb/symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.31
diff -c -3 -p -r1.31 symfile.c
*** symfile.c 2001/04/05 02:02:13 1.31
--- symfile.c 2001/05/10 19:41:39
*************** default_symfile_offsets (struct objfile
*** 529,534 ****
--- 529,536 ----
objfile->sect_index_data = sect->index;
sect = bfd_get_section_by_name (objfile->obfd, ".bss");
+ if (!sect)
+ sect = bfd_get_section_by_name (objfile->obfd, ".sbss");
if (sect)
objfile->sect_index_bss = sect->index;