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]
Other format: [Raw text]

[patch/5.2] Merge in mdebugread.c internal error fix


FYI,

I'm committing the attached to the 5.2 branch.

ya!

Andrew
2002-06-16  Andrew Cagney  <ac131313@redhat.com>

	* NEWS: Mention below.

	Merge from mainline:
	2002-04-22 J. Brobecker <brobecker@gnat.com>:
	* symfile.h (get_section_index): Define.
	* symfile.c (get_section_index): New function.
	* mdebugread.c (SC_IS_SBSS): New macro.
	(SC_IS_BSS): Return true for the scBss storage class only, as
	the scSBss storage class refers to the .sbss section.
	(parse_partial_symbols): Discard the symbols which associated
	section does not exist.
	Make sure to use the .sbss section index for symbols which
	storage class is scBss, rather than using the .bss section index.

Index: NEWS
===================================================================
RCS file: /cvs/src/src/gdb/NEWS,v
retrieving revision 1.58.2.2
diff -u -r1.58.2.2 NEWS
--- NEWS	8 Jun 2002 20:44:22 -0000	1.58.2.2
+++ NEWS	16 Jun 2002 13:50:33 -0000
@@ -7,6 +7,12 @@
 
 Atmel AVR					avr*-*-*
 
+* Bug fixes
+
+gdb/182: gdb/323: gdb/237: On alpha, gdb was reporting:
+mdebugread.c:2443: gdb-internal-error: sect_index_data not initialized
+Fix, by Joel Brobecker imported from mainline.
+
 *** Changes in GDB 5.2:
 
 * New command "set trust-readonly-sections on[off]".
Index: mdebugread.c
===================================================================
RCS file: /cvs/src/src/gdb/mdebugread.c,v
retrieving revision 1.23.2.1
diff -u -r1.23.2.1 mdebugread.c
--- mdebugread.c	25 Mar 2002 16:50:20 -0000	1.23.2.1
+++ mdebugread.c	16 Jun 2002 13:50:44 -0000
@@ -143,7 +143,8 @@
 		   || (sc) == scPData \
 		   || (sc) == scXData)
 #define SC_IS_COMMON(sc) ((sc) == scCommon || (sc) == scSCommon)
-#define SC_IS_BSS(sc) ((sc) == scBss || (sc) == scSBss)
+#define SC_IS_BSS(sc) ((sc) == scBss)
+#define SC_IS_SBSS(sc) ((sc) == scSBss)
 #define SC_IS_UNDEF(sc) ((sc) == scUndefined || (sc) == scSUndefined)
 
 /* Various complaints about symbol reading that don't abort the process */
@@ -2425,26 +2426,72 @@
 	      ms_type = mst_bss;
 	      svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
 	    }
+          else if (SC_IS_SBSS (ext_in->asym.sc))
+            {
+              ms_type = mst_bss;
+              svalue += ANOFFSET (objfile->section_offsets, 
+                                  get_section_index (objfile, ".sbss"));
+            }
 	  else
 	    ms_type = mst_abs;
 	  break;
 	case stLabel:
 	  /* Label */
+
+          /* On certain platforms, some extra label symbols can be
+             generated by the linker. One possible usage for this kind
+             of symbols is to represent the address of the begining of a
+             given section. For instance, on Tru64 5.1, the address of
+             the _ftext label is the start address of the .text section.
+
+             The storage class of these symbols is usually directly
+             related to the section to which the symbol refers. For
+             instance, on Tru64 5.1, the storage class for the _fdata
+             label is scData, refering to the .data section.
+
+             It is actually possible that the section associated to the
+             storage class of the label does not exist. On True64 5.1
+             for instance, the libm.so shared library does not contain
+             any .data section, although it contains a _fpdata label
+             which storage class is scData... Since these symbols are
+             usually useless for the debugger user anyway, we just
+             discard these symbols.
+           */
+          
 	  if (SC_IS_TEXT (ext_in->asym.sc))
 	    {
+              if (objfile->sect_index_text == -1)
+                continue;
+                
 	      ms_type = mst_file_text;
 	      svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
 	    }
 	  else if (SC_IS_DATA (ext_in->asym.sc))
 	    {
+              if (objfile->sect_index_data == -1)
+                continue;
+
 	      ms_type = mst_file_data;
 	      svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_DATA (objfile));
 	    }
 	  else if (SC_IS_BSS (ext_in->asym.sc))
 	    {
+              if (objfile->sect_index_bss == -1)
+                continue;
+
 	      ms_type = mst_file_bss;
 	      svalue += ANOFFSET (objfile->section_offsets, SECT_OFF_BSS (objfile));
 	    }
+          else if (SC_IS_SBSS (ext_in->asym.sc))
+            {
+              const int sbss_sect_index = get_section_index (objfile, ".sbss");
+
+              if (sbss_sect_index == -1)
+                continue;
+
+              ms_type = mst_file_bss;
+              svalue += ANOFFSET (objfile->section_offsets, sbss_sect_index);
+            }
 	  else
 	    ms_type = mst_abs;
 	  break;
Index: symfile.c
===================================================================
RCS file: /cvs/src/src/gdb/symfile.c,v
retrieving revision 1.54.2.1
diff -u -r1.54.2.1 symfile.c
--- symfile.c	1 May 2002 01:25:27 -0000	1.54.2.1
+++ symfile.c	16 Jun 2002 13:50:49 -0000
@@ -120,6 +120,8 @@
 
 bfd *symfile_bfd_open (char *);
 
+int get_section_index (struct objfile *, char *);
+
 static void find_sym_fns (struct objfile *);
 
 static void decrement_reading_symtab (void *);
@@ -1107,6 +1109,18 @@
 	     bfd_errmsg (bfd_get_error ()));
     }
   return (sym_bfd);
+}
+
+/* Return the section index for the given section name. Return -1 if
+   the section was not found. */
+int
+get_section_index (struct objfile *objfile, char *section_name)
+{
+  asection *sect = bfd_get_section_by_name (objfile->obfd, section_name);
+  if (sect)
+    return sect->index;
+  else
+    return -1;
 }
 
 /* Link a new symtab_fns into the global symtab_fns list.  Called on gdb
Index: symfile.h
===================================================================
RCS file: /cvs/src/src/gdb/symfile.h,v
retrieving revision 1.12
diff -u -r1.12 symfile.h
--- symfile.h	1 Feb 2002 01:14:20 -0000	1.12
+++ symfile.h	16 Jun 2002 13:50:50 -0000
@@ -252,6 +252,8 @@
 
 extern bfd *symfile_bfd_open (char *);
 
+extern int get_section_index (struct objfile *, char *);
+
 /* Utility functions for overlay sections: */
 extern enum overlay_debugging_state {
   ovly_off, 

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