This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[RFA] Fix uninitialized section index internal error


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;
  

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]