* complaints.c: New file, code moved from utils.c.
authorFred Fish <fnf@specifix.com>
Tue, 15 Dec 1992 12:18:53 +0000 (12:18 +0000)
committerFred Fish <fnf@specifix.com>
Tue, 15 Dec 1992 12:18:53 +0000 (12:18 +0000)
* complaints.c (complain):  Made into a varargs function.
* complaints.h:  New file, code moved from symfile.h.
* Makefile.in (SFILES_MAINDIR):  Add complaints.c.
* Makefile.in (HFILES):  Add complaints.h.
* Makefile.in (OBS):  Add complaints.o.
* symfile.c (complaint_root, stop_whining, complaint_series,
complain, clear_complaints, add_show_from_set for stop_whining):
Moved to complaints.c.
* symfile.h (struct complaint, complaint_root decl, complain
prototype, clear_complaints prototype):  Moved to complaints.h.
* buildsym.c, coffread.c, dbxread.c, dwarfread.c, elfread.c,
gdbtypes.c, mipsread.c, stbsread.c, symfile.c:  Include
complaints.h.  Remove casts from arguments to complain(),
which is now a varargs function, and remove unnecessary
placeholder zero args.
* defs.h (begin_line):  Add prototype.
* defs.h (vprintf_filtered):  Add prototype.
* dwarfread.c (varargs.h):  Remove, no longer needed.
* dwarfread.c (dwarfwarn):  Remove prototype and function.
* dwarfread.c (complaints):  Define a bunch of complaints.
* dwarfread.c (SQUAWK):  Remove macro defs, convert all
usages to standard complain() calls.
* utils.c (begin_line):  New function that ensures that
whatever gets filter-printed next starts on its own line.
* utils.c (vprintf_filtered):  New func, like vfprintf_filtered,
but to stdout (calls vfprintf_filtered internally).

19 files changed:
gdb/.Sanitize
gdb/ChangeLog
gdb/Makefile.in
gdb/buildsym.c
gdb/coffread.c
gdb/complaints.c [new file with mode: 0644]
gdb/complaints.h [new file with mode: 0644]
gdb/dbxread.c
gdb/defs.h
gdb/dwarfread.c
gdb/elfread.c
gdb/gdbtypes.c
gdb/mipsread.c
gdb/partial-stab.h
gdb/remote-vx.c
gdb/stabsread.c
gdb/symfile.c
gdb/symfile.h
gdb/utils.c

index f0be8cd9692eea0b3bd72a8ac6ab4ff148ec1397..28ebf29b6115b7119b146f14948c273f7e3198bd 100644 (file)
@@ -61,6 +61,8 @@ call-cmds.h
 coffread.c
 command.c
 command.h
+complaints.c
+complaints.h
 config
 configure.in
 convex-pinsn.c
index de5942e5d0ddd0cd039eb49ad0d714c77530a20c..c248d25c0ba81cca7e4f2bb2dad43e22f0afa1bb 100644 (file)
@@ -1,3 +1,33 @@
+Tue Dec 15 04:14:24 1992  Fred Fish  (fnf@cygnus.com)
+
+       * complaints.c:  New file, code moved from utils.c.
+       * complaints.c (complain):  Made into a varargs function.
+       * complaints.h:  New file, code moved from symfile.h.
+       * Makefile.in (SFILES_MAINDIR):  Add complaints.c.
+       * Makefile.in (HFILES):  Add complaints.h.
+       * Makefile.in (OBS):  Add complaints.o.
+       * symfile.c (complaint_root, stop_whining, complaint_series,
+       complain, clear_complaints, add_show_from_set for stop_whining):
+       Moved to complaints.c.
+       * symfile.h (struct complaint, complaint_root decl, complain
+       prototype, clear_complaints prototype):  Moved to complaints.h.
+       * buildsym.c, coffread.c, dbxread.c, dwarfread.c, elfread.c,
+       gdbtypes.c, mipsread.c, stbsread.c, symfile.c:  Include
+       complaints.h.  Remove casts from arguments to complain(),
+       which is now a varargs function, and remove unnecessary
+       placeholder zero args.
+       * defs.h (begin_line):  Add prototype.
+       * defs.h (vprintf_filtered):  Add prototype.
+       * dwarfread.c (varargs.h):  Remove, no longer needed.
+       * dwarfread.c (dwarfwarn):  Remove prototype and function.
+       * dwarfread.c (complaints):  Define a bunch of complaints.
+       * dwarfread.c (SQUAWK):  Remove macro defs, convert all
+       usages to standard complain() calls.
+       * utils.c (begin_line):  New function that ensures that
+       whatever gets filter-printed next starts on its own line.
+       * utils.c (vprintf_filtered):  New func, like vfprintf_filtered,
+       but to stdout (calls vfprintf_filtered internally).
+
 Tue Dec 15 02:01:00 1992  John Gilmore  (gnu@cygnus.com)
 
        * remote.c:  Avoid printf_filtered line limit.  Suggested by
index fee05da0dc13b109e723484a9c3802f3237db0de..622f32b477b1eee85bba13520de1498d976240a3 100644 (file)
@@ -201,7 +201,8 @@ SFILES_MAINDIR = \
         mem-break.c target.c \
         dbxread.c coffread.c elfread.c dwarfread.c xcoffread.c stabsread.c \
         ieee-float.c language.c parse.c buildsym.c objfiles.c \
-        minsyms.c mipsread.c maint.c ch-exp.y c-lang.c ch-lang.c m2-lang.c
+        minsyms.c mipsread.c maint.c ch-exp.y c-lang.c ch-lang.c m2-lang.c \
+        complaints.c
 
 # Source files in subdirectories (which will be handled separately by
 #  'make gdb.tar.Z').
@@ -210,14 +211,12 @@ SFILES_MAINDIR = \
 SFILES_SUBDIR = \
         ${srcdir}/vx-share/dbgRpcLib.h \
         ${srcdir}/vx-share/ptrace.h \
-        ${srcdir}/vx-share/reg.h \
         ${srcdir}/vx-share/vxTypes.h \
         ${srcdir}/vx-share/vxWorks.h \
         ${srcdir}/vx-share/wait.h \
         ${srcdir}/vx-share/xdr_ld.h \
         ${srcdir}/vx-share/xdr_ptrace.h \
         ${srcdir}/vx-share/xdr_rdb.h \
-        ${srcdir}/vx-share/xdr_regs.h \
         ${srcdir}/nindy-share/b.out.h \
         ${srcdir}/nindy-share/block_io.h \
         ${srcdir}/nindy-share/coff.h \
@@ -225,12 +224,6 @@ SFILES_SUBDIR = \
         ${srcdir}/nindy-share/env.h \
         ${srcdir}/nindy-share/stop.h \
         ${srcdir}/nindy-share/ttycntl.h \
-        ${srcdir}/29k-share/include/coff.h \
-        ${srcdir}/29k-share/include/error.h \
-        ${srcdir}/29k-share/include/macros.h \
-        ${srcdir}/29k-share/include/main.h \
-        ${srcdir}/29k-share/include/memspcs.h \
-        ${srcdir}/29k-share/include/miniint.h \
         ${srcdir}/29k-share/udi/udiphcfg.h \
         ${srcdir}/29k-share/udi/udiphsun.h \
         ${srcdir}/29k-share/udi/udiproc.h \
@@ -270,7 +263,7 @@ HFILES=     breakpoint.h buildsym.h call-cmds.h command.h defs.h \
        nm-sun2.h nm-sun3.h nm-sun386.h nm-sun4os4.h nm-trash.h \
        nm-ultra3.h nm-hppab.h nm-hppah.h nm-umax.h nm-sysv4.h \
        nm-apollo68b.h nm-apollo68v.h nm-vax.h nm-hp300bsd.h \
-       nm-hp300hpux.h c-lang.h ch-lang.h m2-lang.h
+       nm-hp300hpux.h c-lang.h ch-lang.h m2-lang.h complaints.h
 
 REMOTE_EXAMPLES = m68k-stub.c i386-stub.c sparc-stub.c rem-multi.shar
 
@@ -310,7 +303,7 @@ OBS = version.o main.o blockframe.o breakpoint.o findvar.o stack.o source.o \
     ieee-float.o putenv.o parse.o language.o $(YYOBJ) \
     buildsym.o objfiles.o minsyms.o maint.o demangle.o \
     dbxread.o coffread.o elfread.o dwarfread.o xcoffread.o mipsread.o \
-    stabsread.o core.o c-lang.o ch-lang.o m2-lang.o
+    stabsread.o core.o c-lang.o ch-lang.o m2-lang.o complaints.o
 
 RAPP_OBS = rgdb.o rudp.o rserial.o serial.o udp.o $(XDEPFILES)
 
@@ -431,7 +424,6 @@ alldeps.mak: ${srcdir}/config
              -e 's!xdr_ld.o!vx-share/xdr_ld.c!' \
              -e 's!xdr_ptrace.o!vx-share/xdr_ptrace.c!' \
              -e 's!xdr_rdb.o!vx-share/xdr_rdb.c!' \
-             -e 's!xdr_regs.o!vx-share/xdr_regs.c!' \
              -e 's!udr.o!29k-share/udi/udr.c!' \
              -e 's!udip2soc.o!29k-share/udi/udip2soc.c!' \
              -e 's/\.o/.c/' \
@@ -610,8 +602,7 @@ make-proto-gdb-1: ${TARFILES} ${TARDIRS} gdb.info
          for i in $(ALLCONFIG) ; do ln -s ../../$$i ../$$i ; done
        mkdir proto-gdb.dir/vx-share proto-gdb.dir/nindy-share \
                proto-gdb.dir/29k-share
-       mkdir proto-gdb.dir/29k-share/include proto-gdb.dir/29k-share/udi
-       mkdir proto-gdb.dir/29k-share/dfe
+       mkdir proto-gdb.dir/29k-share/udi
        cd proto-gdb.dir/config ; \
          for i in $(SFILES_SUBDIR) $(NONSRC_SUBDIR) $(ALLDEPFILES_SUBDIR); \
            do ln -s ../../$$i ../$$i ; done
@@ -775,9 +766,6 @@ xdr_ptrace.o: ${srcdir}/vx-share/xdr_ptrace.c
 xdr_rdb.o: ${srcdir}/vx-share/xdr_rdb.c
        ${CC} -c ${INTERNAL_CFLAGS} ${srcdir}/vx-share/xdr_rdb.c
 
-xdr_regs.o: ${srcdir}/vx-share/xdr_regs.c
-       ${CC} -c ${INTERNAL_CFLAGS} ${srcdir}/vx-share/xdr_regs.c
-
 nindy.o: ${srcdir}/nindy-share/nindy.c
        ${CC} -c ${INTERNAL_CFLAGS} -DSTRIP='"$(tooldir)/bin/strip"' \
                ${srcdir}/nindy-share/nindy.c
index a25190a6168054fd9b1e698bb85e84cf23984ce5..73ca9b24ce6b7e738cd944fc1234651b2ee3f774 100644 (file)
@@ -31,6 +31,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "symtab.h"
 #include "symfile.h"           /* Needed for "struct complaint" */
 #include "objfiles.h"
+#include "complaints.h"
 #include <string.h>
 
 /* Ask buildsym.h to define the vars it normally declares `extern'.  */
@@ -260,7 +261,7 @@ finish_block (symbol, listhead, old_blocks, start, end, objfile)
                }
              else
                {
-                 complain (&innerblock_anon_complaint, 0);
+                 complain (&innerblock_anon_complaint);
                }
              BLOCK_START (pblock->block) = BLOCK_START (block);
              BLOCK_END   (pblock->block) = BLOCK_END   (block);
@@ -345,7 +346,7 @@ make_blockvector (objfile)
              > BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i)))
            {
              complain (&blockvector_complaint, 
-                       (char *) BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i)));
+                       BLOCK_START(BLOCKVECTOR_BLOCK (blockvector, i)));
            }
        }
     }
index 1086d4c5aadeb479ff42c04df45a9e753c68f33e..6df64928776625635e5c645e72f5be464e401d68 100644 (file)
@@ -26,6 +26,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "symfile.h"
 #include "objfiles.h"
 #include "buildsym.h"
+#include "complaints.h"
 #include <obstack.h>
 
 #include <string.h>
@@ -614,8 +615,7 @@ coff_end_symtab (objfile)
 
          if (BLOCK_START(pb->block) < BLOCK_START(pbnext->block)) {
            struct block *tmp = pb->block;
-           complain (&misordered_blocks_complaint,
-                     (char *) BLOCK_START (pb->block));
+           complain (&misordered_blocks_complaint, BLOCK_START (pb->block));
            pb->block = pbnext->block;
            pbnext->block = tmp;
            swapped = 1;
@@ -1069,7 +1069,7 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
                /* main_aux.x_sym.x_misc.x_lnsz.x_lnno
                            contains line number of '{' } */
                if (cs->c_naux != 1)
-                 complain (&bf_no_aux_complaint, (char *) cs->c_symnum);
+                 complain (&bf_no_aux_complaint, cs->c_symnum);
                fcn_first_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
 
                new = (struct coff_context_stack *)
@@ -1094,12 +1094,12 @@ read_coff_symtab (symtab_offset, nsyms, objfile)
                new = coff_context_stack;
                if (new == 0)
                  {
-                   complain (&ef_complaint, (char *) cs->c_symnum);
+                   complain (&ef_complaint, cs->c_symnum);
                    within_function = 0;
                    break;
                  }
                if (cs->c_naux != 1) {
-                 complain (&ef_no_aux_complaint, (char *) cs->c_symnum);
+                 complain (&ef_no_aux_complaint, cs->c_symnum);
                  fcn_last_line = 0x7FFFFFFF;
                } else {
                  fcn_last_line = main_aux.x_sym.x_misc.x_lnsz.x_lnno;
@@ -1446,7 +1446,7 @@ enter_linenos (file_offset, first_line, last_line)
 
   if (file_offset < linetab_offset)
     {
-      complain (&lineno_complaint, (char *) file_offset);
+      complain (&lineno_complaint, file_offset);
       if (file_offset > linetab_size)  /* Too big to be an offset? */
        return;
       file_offset += linetab_offset;  /* Try reading at that linetab offset */
diff --git a/gdb/complaints.c b/gdb/complaints.c
new file mode 100644 (file)
index 0000000..b8ab240
--- /dev/null
@@ -0,0 +1,154 @@
+/* Support for complaint handling during symbol reading in GDB.
+   Copyright (C) 1990, 1991, 1992  Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+#include "defs.h"
+#include "complaints.h"
+#include "gdbcmd.h"
+#include <varargs.h>
+
+/* Structure to manage complaints about symbol file contents.  */
+
+struct complaint complaint_root[1] = {
+  {
+    (char *) NULL,     /* Complaint message */
+    0,                 /* Complaint counter */
+    complaint_root     /* Next complaint. */
+  }
+};
+
+/* How many complaints about a particular thing should be printed before
+   we stop whining about it?  Default is no whining at all, since so many
+   systems have ill-constructed symbol files.  */
+
+static unsigned int stop_whining = 0;
+
+/* Should each complaint be self explanatory, or should we assume that
+   a series of complaints is being produced? 
+   case 0:  self explanatory message.
+   case 1:  First message of a series that must start off with explanation.
+   case 2:  Subsequent message, when user already knows we are reading
+            symbols and we can just state our piece.  */
+
+static int complaint_series = 0;
+
+/* External variables and functions referenced. */
+
+extern int info_verbose;
+
+\f
+/* Functions to handle complaints during symbol reading.  */
+
+/* Print a complaint about the input symbols, and link the complaint block
+   into a chain for later handling.  */
+
+/* VARARGS */
+void
+complain (va_alist)
+     va_dcl
+{
+  va_list args;
+  struct complaint *complaint;
+  char *val;
+
+  va_start (args);
+  complaint = va_arg (args, struct complaint *);
+  complaint -> counter++;
+  if (complaint -> next == NULL)
+    {
+      complaint -> next = complaint_root -> next;
+      complaint_root -> next = complaint;
+    }
+  if (complaint -> counter > stop_whining)
+    {
+      return;
+    }
+  wrap_here ("");
+
+  switch (complaint_series + (info_verbose << 1))
+    {
+
+      /* Isolated messages, must be self-explanatory.  */
+      case 0:
+        begin_line ();
+        puts_filtered ("During symbol reading, ");
+       wrap_here ("");
+       vprintf_filtered (complaint -> message, args);
+       puts_filtered (".\n");
+       break;
+
+      /* First of a series, without `set verbose'.  */
+      case 1:
+        begin_line ();
+       puts_filtered ("During symbol reading...");
+       vprintf_filtered (complaint -> message, args);
+       puts_filtered ("...");
+       wrap_here ("");
+       complaint_series++;
+       break;
+
+      /* Subsequent messages of a series, or messages under `set verbose'.
+        (We'll already have produced a "Reading in symbols for XXX..."
+        message and will clean up at the end with a newline.)  */
+      default:
+       vprintf_filtered (complaint -> message, args);
+       puts_filtered ("...");
+       wrap_here ("");
+    }
+  va_end (args);
+}
+
+/* Clear out all complaint counters that have ever been incremented.
+   If sym_reading is 1, be less verbose about successive complaints,
+   since the messages are appearing all together during a command that
+   reads symbols (rather than scattered around as psymtabs get fleshed
+   out into symtabs at random times).  If noisy is 1, we are in a
+   noisy symbol reading command, and our caller will print enough
+   context for the user to figure it out.  */
+
+void
+clear_complaints (sym_reading, noisy)
+     int sym_reading;
+     int noisy;
+{
+  struct complaint *p;
+
+  for (p = complaint_root -> next; p != complaint_root; p = p -> next)
+    {
+      p -> counter = 0;
+    }
+
+  if (!sym_reading && !noisy && complaint_series > 1)
+    {
+      /* Terminate previous series, since caller won't.  */
+      puts_filtered ("\n");
+    }
+
+  complaint_series = sym_reading ? 1 + noisy : 0;
+}
+
+_initialize_complaints ()
+{
+  add_show_from_set
+    (add_set_cmd ("complaints", class_support, var_zinteger,
+                 (char *) &stop_whining,
+                 "Set max number of complaints about incorrect symbols.",
+                 &setlist),
+     &showlist);
+
+}
diff --git a/gdb/complaints.h b/gdb/complaints.h
new file mode 100644 (file)
index 0000000..f7ff5a5
--- /dev/null
@@ -0,0 +1,46 @@
+/* Definitions for complaint handling during symbol reading in GDB.
+   Copyright (C) 1990, 1991, 1992  Free Software Foundation, Inc.
+
+This file is part of GDB.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+
+
+/* Support for complaining about things in the symbol file that aren't
+   catastrophic.
+
+   Each such thing gets a counter.  The first time we have the problem,
+   during a symbol read, we report it.  At the end of symbol reading,
+   if verbose, we report how many of each problem we had.  */
+
+struct complaint
+{
+  char *message;
+  unsigned counter;
+  struct complaint *next;
+};
+
+/* Root of the chain of complaints that have at some point been issued. 
+   This is used to reset the counters, and/or report the total counts.  */
+
+extern struct complaint complaint_root[1];
+
+/* Functions that handle complaints.  (in complaints.c)  */
+
+extern void
+complain ();
+
+extern void
+clear_complaints PARAMS ((int, int));
index c6935d7ced7f06162fe3352cba2f36ea04e0090e..a8595973cd805c9bfeb64e76e7244076343f9ac5 100644 (file)
@@ -71,6 +71,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "stabsread.h"
 #include "gdb-stabs.h"
 #include "demangle.h"
+#include "language.h"          /* Needed inside partial-stab.h */
+#include "complaints.h"
 
 #include "aout/aout64.h"
 #include "aout/stab_gnu.h"     /* We always use GNU stabs, not native, now */
@@ -348,7 +350,7 @@ add_old_header_file (name, instance)
        add_this_object_header_file (i);
        return;
       }
-  complain (&repeated_header_complaint, (char *)symnum);
+  complain (&repeated_header_complaint, symnum);
   complain (&repeated_header_name_complaint, name);
 }
 
@@ -919,7 +921,7 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
      symbol table. Read them in first. */
 
   hp_symbuf_end = hp_symbuf_idx = 0;
-  bfd_seek (abfd, HP_SYMTAB_OFFSET (objfile), 0);
+  bfd_seek (abfd, HP_SYMTAB_OFFSET (objfile), L_SET);
 
   for (hp_symnum = 0; hp_symnum < HP_SYMCOUNT (objfile); hp_symnum++)
     {
@@ -980,7 +982,7 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
                                 objfile);
         }
     }
-  bfd_seek (abfd, DBX_SYMTAB_OFFSET (objfile), 0);
+  bfd_seek (abfd, DBX_SYMTAB_OFFSET (objfile), L_SET);
 #endif
 
   for (symnum = 0; symnum < DBX_SYMCOUNT (objfile); symnum++)
@@ -1018,7 +1020,7 @@ read_dbx_symtab (section_offsets, objfile, text_addr, text_size)
 #define SET_NAMESTRING()\
   if (((unsigned)bufp->n_strx + file_string_table_offset) >=           \
       DBX_STRINGTAB_SIZE (objfile)) {                                  \
-    complain (&string_table_offset_complaint, (char *) symnum);                \
+    complain (&string_table_offset_complaint, symnum);                 \
     namestring = "foo";                                                        \
   } else                                                               \
     namestring = bufp->n_strx + file_string_table_offset +             \
@@ -1535,7 +1537,6 @@ read_ofile_symtab (objfile, sym_offset, sym_size, text_offset, text_size,
             However, there is no reason not to accept
             the GCC_COMPILED_FLAG_SYMBOL anywhere.  */
 
-         processing_gcc_compilation = 0;
          if (strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL) == 0)
            processing_gcc_compilation = 1;
          else if (strcmp (namestring, GCC2_COMPILED_FLAG_SYMBOL) == 0)
@@ -1614,6 +1615,12 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
   static CORE_ADDR function_start_offset;
   char *colon_pos;
 
+#ifndef        BLOCK_ADDRESS_FUNCTION_RELATIVE
+  /* N_LBRAC, N_RBRAC and N_SLINE entries are not relative to the
+     function start address, so just use the text offset.  */
+  function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
+#endif
+
   /* Something is wrong if we see real data before
      seeing a source file name.  */
 
@@ -1671,9 +1678,6 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
         absolute, or relative to the N_SO, depending on
         BLOCK_ADDRESS_ABSOLUTE.  */
       function_start_offset = valu;    
-#else
-      /* Default on ordinary systems */
-      function_start_offset = ANOFFSET (section_offsets, SECT_OFF_TEXT);
 #endif
 
       within_function = 1;
@@ -1686,7 +1690,7 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
        }
       /* Stack must be empty now.  */
       if (context_stack_depth != 0)
-       complain (&lbrac_unmatched_complaint, (char *) symnum);
+       complain (&lbrac_unmatched_complaint, symnum);
 
       new = push_context (0, valu);
       new->name = define_symbol (valu, name, desc, type, objfile);
@@ -1708,7 +1712,7 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
 #ifndef SUN_FIXED_LBRAC_BUG
       if (valu < last_pc_address) {
        /* Patch current LBRAC pc value to match last handy pc value */
-       complain (&lbrac_complaint, 0);
+       complain (&lbrac_complaint);
        valu = last_pc_address;
       }
 #endif
@@ -1730,7 +1734,7 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
 
       new = pop_context();
       if (desc != new->depth)
-       complain (&lbrac_mismatch_complaint, (char *) symnum);
+       complain (&lbrac_mismatch_complaint, symnum);
 
       /* Some compilers put the variable decls inside of an
          LBRAC/RBRAC block.  This macro should be nonzero if this
@@ -1762,7 +1766,7 @@ process_one_symbol (type, desc, valu, name, section_offsets, objfile)
          /* FIXME Muzzle a compiler bug that makes end < start.  */
          if (new->start_addr > valu)
            {
-             complain(&lbrac_rbrac_complaint, 0);
+             complain (&lbrac_rbrac_complaint);
              new->start_addr = valu;
            }
          /* Make a block for the local symbols within.  */
@@ -2059,9 +2063,9 @@ elfstab_build_psymtabs (objfile, section_offsets, mainline,
       struct objfile *objfile;
       struct section_offsets *section_offsets;
       int mainline;
-      unsigned int staboffset;
+      file_ptr staboffset;
       unsigned int stabsize;
-      unsigned int stabstroffset;
+      file_ptr stabstroffset;
       unsigned int stabstrsize;
 {
   int val;
index 2ec8a0c38c1159383f5608066e2d4e4efef6c902..34d47f7a2db08a04f988a435f1d1bd684f8be148 100644 (file)
@@ -41,6 +41,7 @@ typedef unsigned int CORE_ADDR;
 
 extern int quit_flag;
 extern int immediate_quit;
+extern int sevenbit_strings;
 
 extern void
 quit PARAMS ((void));
@@ -183,6 +184,9 @@ myread PARAMS ((int, char *, int));
 extern int
 query ();
 
+extern void
+begin_line PARAMS ((void));
+
 extern void
 wrap_here PARAMS ((char *));
 
@@ -198,6 +202,9 @@ fputs_filtered PARAMS ((const char *, FILE *));
 extern void
 puts_filtered PARAMS ((char *));
 
+extern void
+vprintf_filtered ();
+
 extern void
 vfprintf_filtered ();
 
@@ -223,7 +230,7 @@ extern char *
 n_spaces PARAMS ((int));
 
 extern void
-printchar PARAMS ((int, FILE *, int));
+gdb_printchar PARAMS ((int, FILE *, int));
 
 extern char *
 strdup_demangled PARAMS ((const char *));
@@ -334,7 +341,10 @@ extern unsigned output_radix;
 /* Baud rate specified for communication with serial target systems.  */
 extern char *baud_rate;
 
-/* Languages represented in the symbol table and elsewhere. */
+/* Languages represented in the symbol table and elsewhere.
+   This should probably be in language.h, but since enum's can't
+   be forward declared to satisfy opaque references before their
+   actual definition, needs to be here. */
 
 enum language 
 {
@@ -342,31 +352,12 @@ enum language
    language_auto,              /* Placeholder for automatic setting */
    language_c,                         /* C */
    language_cplus,             /* C++ */
+                               /* start-sanitize-chill */
    language_chill,             /* Chill */
+                               /* end-sanitize-chill */
    language_m2                 /* Modula-2 */
 };
 
-/* Return a format string for printf that will print a number in the local
-   (language-specific) hexadecimal format.  Result is static and is
-   overwritten by the next call.  local_hex_format_custom takes printf
-   options like "08" or "l" (to produce e.g. %08x or %lx).  */
-
-#define local_hex_format() (current_language->la_hex_format)
-
-extern char *
-local_hex_format_custom PARAMS ((char *));     /* language.c */
-
-/* Return a string that contains a number formatted in the local
-   (language-specific) hexadecimal format.  Result is static and is
-   overwritten by the next call.  local_hex_string_custom takes printf
-   options like "08" or "l".  */
-
-extern char *
-local_hex_string PARAMS ((int));               /* language.c */
-
-extern char *
-local_hex_string_custom PARAMS ((int, char *));        /* language.c */
-
 \f
 /* Host machine definition.  This will be a symlink to one of the
    xm-*.h files, built by the `configure' script.  */
index 6d635439fff11889592fbc5ae5ea32cde5e33703..5e22da5c6a40d5aefdb9dda8ae4adc6cad994df5 100644 (file)
@@ -52,11 +52,12 @@ other things to work on, if you get bored. :-)
 #include "demangle.h"
 #include "expression.h"        /* Needed for enum exp_opcode in language.h, sigh... */
 #include "language.h"
+#include "complaints.h"
 
-#include <varargs.h>
 #include <fcntl.h>
 #include <string.h>
 #include <sys/types.h>
+
 #ifndef        NO_SYS_FILE
 #include <sys/file.h>
 #endif
@@ -66,11 +67,117 @@ other things to work on, if you get bored. :-)
 #define L_SET 0
 #endif
 
-#ifdef MAINTENANCE     /* Define to 1 to compile in some maintenance stuff */
-#define SQUAWK(stuff) dwarfwarn stuff
-#else
-#define SQUAWK(stuff)
-#endif
+/* Some macros to provide DIE info for complaints. */
+
+#define DIE_ID (curdie!=NULL ? curdie->die_ref : 0)
+#define DIE_NAME (curdie!=NULL && curdie->at_name!=NULL) ? curdie->at_name : ""
+
+/* Complaints that can be issued during DWARF debug info reading. */
+
+struct complaint no_bfd_get_N =
+{
+  "DIE @ 0x%x \"%s\", no bfd support for %d byte data object", 0, 0
+};
+
+struct complaint malformed_die =
+{
+  "DIE @ 0x%x \"%s\", malformed DIE, bad length (%d bytes)", 0, 0
+};
+
+struct complaint bad_die_ref =
+{
+  "DIE @ 0x%x \"%s\", reference to DIE (0x%x) outside compilation unit", 0, 0
+};
+
+struct complaint unknown_attribute_form =
+{
+  "DIE @ 0x%x \"%s\", unknown attribute form (0x%x)", 0, 0
+};
+
+struct complaint unknown_attribute_length =
+{
+  "DIE @ 0x%x \"%s\", unknown attribute length, skipped remaining attributes", 0, 0
+};
+
+struct complaint unexpected_fund_type =
+{
+  "DIE @ 0x%x \"%s\", unexpected fundamental type 0x%x", 0, 0
+};
+
+struct complaint unknown_type_modifier =
+{
+  "DIE @ 0x%x \"%s\", unknown type modifier %u", 0, 0
+};
+
+struct complaint volatile_ignored =
+{
+  "DIE @ 0x%x \"%s\", type modifier 'volatile' ignored", 0, 0
+};
+
+struct complaint const_ignored =
+{
+  "DIE @ 0x%x \"%s\", type modifier 'const' ignored", 0, 0
+};
+
+struct complaint botched_modified_type =
+{
+  "DIE @ 0x%x \"%s\", botched modified type decoding (mtype 0x%x)", 0, 0
+};
+
+struct complaint op_deref2 =
+{
+  "DIE @ 0x%x \"%s\", OP_DEREF2 address 0x%x not handled", 0, 0
+};
+
+struct complaint op_deref4 =
+{
+  "DIE @ 0x%x \"%s\", OP_DEREF4 address 0x%x not handled", 0, 0
+};
+
+struct complaint basereg_not_handled =
+{
+  "DIE @ 0x%x \"%s\", BASEREG %d not handled", 0, 0
+};
+
+struct complaint dup_user_type_allocation =
+{
+  "DIE @ 0x%x \"%s\", internal error: duplicate user type allocation", 0, 0
+};
+
+struct complaint dup_user_type_definition =
+{
+  "DIE @ 0x%x \"%s\", internal error: duplicate user type definition", 0, 0
+};
+
+struct complaint missing_tag =
+{
+  "DIE @ 0x%x \"%s\", missing class, structure, or union tag", 0, 0
+};
+
+struct complaint bad_array_element_type =
+{
+  "DIE @ 0x%x \"%s\", bad array element type attribute 0x%x", 0, 0
+};
+
+struct complaint subscript_data_items =
+{
+  "DIE @ 0x%x \"%s\", can't decode subscript data items", 0, 0
+};
+
+struct complaint unhandled_array_subscript_format =
+{
+  "DIE @ 0x%x \"%s\", array subscript format 0x%x not handled yet", 0, 0
+};
+
+struct complaint unknown_array_subscript_format =
+{
+  "DIE @ 0x%x \"%s\", unknown array subscript format %x", 0, 0
+};
+
+struct complaint not_row_major =
+{
+  "DIE @ 0x%x \"%s\", array not row major; not handled correctly", 0, 0
+};
 
 #ifndef R_FP           /* FIXME */
 #define R_FP 14                /* Kludge to get frame pointer register number */
@@ -371,9 +478,6 @@ static void
 read_lexical_block_scope PARAMS ((struct dieinfo *, char *, char *,
                                  struct objfile *));
 
-static void
-dwarfwarn ();
-
 static void
 scan_partial_symbols PARAMS ((char *, char *, struct objfile *));
 
@@ -712,55 +816,6 @@ record_minimal_symbol (name, address, ms_type, objfile)
 
 /*
 
-LOCAL FUNCTION
-
-       dwarfwarn -- issue a DWARF related warning
-
-DESCRIPTION
-
-       Issue warnings about DWARF related things that aren't serious enough
-       to warrant aborting with an error, but should not be ignored either.
-       This includes things like detectable corruption in DIE's, missing
-       DIE's, unimplemented features, etc.
-
-       In general, running across tags or attributes that we don't recognize
-       is not considered to be a problem and we should not issue warnings
-       about such.
-
-NOTES
-
-       We mostly follow the example of the error() routine, but without
-       returning to command level.  It is arguable about whether warnings
-       should be issued at all, and if so, where they should go (stdout or
-       stderr).
-
-       We assume that curdie is valid and contains at least the basic
-       information for the DIE where the problem was noticed.
-*/
-
-static void
-dwarfwarn (va_alist)
-     va_dcl
-{
-  va_list ap;
-  char *fmt;
-  
-  va_start (ap);
-  fmt = va_arg (ap, char *);
-  warning_setup ();
-  fprintf (stderr, "warning: DWARF ref 0x%x: ", curdie -> die_ref);
-  if (curdie -> at_name)
-    {
-      fprintf (stderr, "'%s': ", curdie -> at_name);
-    }
-  vfprintf (stderr, fmt, ap);
-  fprintf (stderr, "\n");
-  fflush (stderr);
-  va_end (ap);
-}
-
-/*
-
 LOCAL FUNCTION
 
        read_lexical_block_scope -- process all dies in a lexical block
@@ -826,7 +881,7 @@ lookup_utype (die_ref)
   utypeidx = (die_ref - dbroff) / 4;
   if ((utypeidx < 0) || (utypeidx >= numutypes))
     {
-      dwarfwarn ("reference to DIE (0x%x) outside compilation unit", die_ref);
+      complain (&bad_die_ref, DIE_ID, DIE_NAME);
     }
   else
     {
@@ -870,12 +925,12 @@ alloc_utype (die_ref, utypep)
   if ((utypeidx < 0) || (utypeidx >= numutypes))
     {
       utypep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
-      dwarfwarn ("reference to DIE (0x%x) outside compilation unit", die_ref);
+      complain (&bad_die_ref, DIE_ID, DIE_NAME);
     }
   else if (*typep != NULL)
     {
       utypep = *typep;
-      SQUAWK (("internal error: dup user type allocation"));
+      complain (&dup_user_type_allocation, DIE_ID, DIE_NAME);
     }
   else
     {
@@ -1002,7 +1057,7 @@ struct_type (dip, thisdie, enddie, objfile)
        /* Should never happen */
        TYPE_CODE (type) = TYPE_CODE_UNDEF;
        tpart1 = "???";
-       SQUAWK (("missing class, structure, or union tag"));
+       complain (&missing_tag, DIE_ID, DIE_NAME);
        break;
     }
   /* Some compilers try to be helpful by inventing "fake" names for
@@ -1210,7 +1265,7 @@ decode_array_element_type (scan)
   scan += SIZEOF_ATTRIBUTE;
   if ((nbytes = attribute_size (attribute)) == -1)
     {
-      SQUAWK (("bad array element type attribute 0x%x", attribute));
+      complain (&bad_array_element_type, DIE_ID, DIE_NAME, attribute);
       typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
     }
   else
@@ -1237,7 +1292,7 @@ decode_array_element_type (scan)
            typep = decode_mod_u_d_type (scan);
            break;
          default:
-           SQUAWK (("bad array element type attribute 0x%x", attribute));
+           complain (&bad_array_element_type, DIE_ID, DIE_NAME, attribute);
            typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
            break;
          }
@@ -1326,7 +1381,7 @@ decode_subscript_data_item (scan, end)
       if (nexttype == NULL)
        {
          /* Munged subscript data or other problem, fake it. */
-         SQUAWK (("can't decode subscript data items"));
+         complain (&subscript_data_items, DIE_ID, DIE_NAME);
          nexttype = dwarf_fundamental_type (current_objfile, FT_INTEGER);
        }
       typep = create_array_type ((struct type *) NULL, nexttype, indextype,
@@ -1339,12 +1394,12 @@ decode_subscript_data_item (scan, end)
     case FMT_UT_C_X:
     case FMT_UT_X_C:
     case FMT_UT_X_X:
-      SQUAWK (("array subscript format 0x%x not handled yet", format));
+      complain (&unhandled_array_subscript_format, DIE_ID, DIE_NAME, format);
       typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
       typep = create_array_type ((struct type *) NULL, typep, typep, 0, 1);
       break;
     default:
-      SQUAWK (("unknown array subscript format %x", format));
+      complain (&unknown_array_subscript_format, DIE_ID, DIE_NAME, format);
       typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
       typep = create_array_type ((struct type *) NULL, typep, typep, 0, 1);
       break;
@@ -1382,7 +1437,7 @@ dwarf_read_array_type (dip)
   if (dip -> at_ordering != ORD_row_major)
     {
       /* FIXME:  Can gdb even handle column major arrays? */
-      SQUAWK (("array not row major; not handled correctly"));
+      complain (&not_row_major, DIE_ID, DIE_NAME);
     }
   if ((sub = dip -> at_subscr_data) != NULL)
     {
@@ -1412,7 +1467,7 @@ dwarf_read_array_type (dip)
        {
          /* Double ick!  Not only is a type already in our slot, but
             someone has decorated it.  Complain and leave it alone. */
-         SQUAWK (("duplicate user defined array type definition"));
+         complain (&dup_user_type_definition, DIE_ID, DIE_NAME);
        }
     }
 }
@@ -1521,7 +1576,7 @@ read_subroutine_type (dip, thisdie, enddie)
     }
   else
     {
-      SQUAWK (("duplicate user defined function type definition"));
+      complain (&dup_user_type_definition, DIE_ID, DIE_NAME);
     }
 }
 
@@ -2142,7 +2197,8 @@ locval (loc)
            else
              {
                stack[++stacki] = 0;
-               SQUAWK (("BASEREG %d not handled!", regno));
+
+               complain (&basereg_not_handled, DIE_ID, DIE_NAME, regno);
              }
            break;
          case OP_ADDR:
@@ -2159,10 +2215,10 @@ locval (loc)
            break;
          case OP_DEREF2:
            /* pop, deref and push 2 bytes (as a long) */
-           SQUAWK (("OP_DEREF2 address 0x%x not handled", stack[stacki]));
+           complain (&op_deref2, DIE_ID, DIE_NAME, stack[stacki]);
            break;
          case OP_DEREF4:       /* pop, deref and push 4 bytes (as a long) */
-           SQUAWK (("OP_DEREF4 address 0x%x not handled", stack[stacki]));
+           complain (&op_deref4, DIE_ID, DIE_NAME, stack[stacki]);
            break;
          case OP_ADD:  /* pop top 2 items, add, push result */
            stack[stacki - 1] += stack[stacki];
@@ -2668,7 +2724,8 @@ scan_partial_symbols (thisdie, enddie, objfile)
                      temp = dbbase + di.at_sibling - dbroff;
                      if ((temp < thisdie) || (temp >= enddie))
                        {
-                         dwarfwarn ("reference to DIE (0x%x) outside compilation unit", di.at_sibling);
+                         complain (&bad_die_ref, DIE_ID, DIE_NAME,
+                                   di.at_sibling);
                        }
                      else
                        {
@@ -3166,7 +3223,7 @@ decode_modified_type (modifiers, modcount, mtype)
            }
          break;
        default:
-         SQUAWK (("botched modified type decoding (mtype 0x%x)", mtype));
+         complain (&botched_modified_type, DIE_ID, DIE_NAME, mtype);
          typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
          break;
        }
@@ -3184,17 +3241,16 @@ decode_modified_type (modifiers, modcount, mtype)
            typep = lookup_reference_type (typep);
            break;
          case MOD_const:
-           SQUAWK (("type modifier 'const' ignored"));         /* FIXME */
+           complain (&const_ignored, DIE_ID, DIE_NAME);  /* FIXME */
            break;
          case MOD_volatile:
-           SQUAWK (("type modifier 'volatile' ignored"));      /* FIXME */
+           complain (&volatile_ignored, DIE_ID, DIE_NAME); /* FIXME */
            break;
          default:
            if (!(MOD_lo_user <= (unsigned char) modifier
                  && (unsigned char) modifier <= MOD_hi_user))
              {
-               SQUAWK (("unknown type modifier %u",
-                        (unsigned char) modifier));
+               complain (&unknown_type_modifier, DIE_ID, DIE_NAME, modifier);
              }
            break;
        }
@@ -3337,7 +3393,7 @@ decode_fund_type (fundtype)
       typep = dwarf_fundamental_type (current_objfile, FT_INTEGER);
       if (!(FT_lo_user <= fundtype && fundtype <= FT_hi_user))
        {
-         SQUAWK (("unexpected fundamental type 0x%x", fundtype));
+         complain (&unexpected_fund_type, DIE_ID, DIE_NAME, fundtype);
        }
     }
     
@@ -3440,7 +3496,7 @@ basicdieinfo (dip, diep, objfile)
   if ((dip -> die_length < SIZEOF_DIE_LENGTH) ||
       ((diep + dip -> die_length) > (dbbase + dbsize)))
     {
-      dwarfwarn ("malformed DIE, bad length (%d bytes)", dip -> die_length);
+      complain (&malformed_die, DIE_ID, DIE_NAME, dip -> die_length);
       dip -> die_length = 0;
     }
   else if (dip -> die_length < (SIZEOF_DIE_LENGTH + SIZEOF_DIE_TAG))
@@ -3508,7 +3564,7 @@ completedieinfo (dip, objfile)
       diep += SIZEOF_ATTRIBUTE;
       if ((nbytes = attribute_size (attr)) == -1)
        {
-         SQUAWK (("unknown attribute length, skipped remaining attributes"));;
+         complain (&unknown_attribute_length, DIE_ID, DIE_NAME);
          diep = end;
          continue;
        }
@@ -3665,8 +3721,7 @@ completedieinfo (dip, objfile)
          diep += strlen (diep) + 1;
          break;
        default:
-         SQUAWK (("unknown attribute form (0x%x)", form));
-         SQUAWK (("unknown attribute length, skipped remaining attributes"));;
+         complain (&unknown_attribute_form, DIE_ID, DIE_NAME, form);
          diep = end;
          break;
        }
@@ -3724,7 +3779,7 @@ target_to_host (from, nbytes, signextend, objfile)
        rtnval = bfd_get_8 (objfile -> obfd, (bfd_byte *) from);
        break;
       default:
-       dwarfwarn ("no bfd support for %d byte data object", nbytes);
+       complain (&no_bfd_get_N, DIE_ID, DIE_NAME, nbytes);
        rtnval = 0;
        break;
     }
@@ -3780,7 +3835,7 @@ attribute_size (attr)
        nbytes = TARGET_FT_POINTER_SIZE (objfile);
        break;
       default:
-       SQUAWK (("unknown attribute form (0x%x)", form));
+       complain (&unknown_attribute_form, DIE_ID, DIE_NAME, form);
        nbytes = -1;
        break;
       }
index 737943602cff03fd3f46d78d04b431acd3bbf179..8c212434bc5e36ce660d1ba1a3f5eee8927cd032 100644 (file)
@@ -43,6 +43,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "objfiles.h"
 #include "buildsym.h"
 #include "gdb-stabs.h"
+#include "complaints.h"
 #include <string.h>
 
 #define STREQ(a,b) (strcmp((a),(b))==0)
@@ -373,13 +374,12 @@ elf_symtab_read (abfd, addr, objfile)
                                           sizeof (*sectinfo));
                      memset ((PTR) sectinfo, 0, sizeof (*sectinfo));
                      if (!filesym)
-                       complain (&section_info_complaint, (char *)sym->name);
+                       complain (&section_info_complaint, sym->name);
                      else
                        sectinfo->filename = (char *)filesym->name;
                    }
                  if (sectinfo->sections[index])
-                   complain (&section_info_dup_complaint,
-                             (char *)sectinfo->filename);
+                   complain (&section_info_dup_complaint, sectinfo->filename);
 
                  symaddr = sym -> value;
                  /* Relocate all non-absolute symbols by base address.  */
index e3ec14a7bb596660dbb2e68273fb8d1750fbca31..392fec36d9bbda2a9ac0e8b20a40913de68477bb 100644 (file)
@@ -30,6 +30,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "target.h"
 #include "value.h"
 #include "demangle.h"
+#include "complaints.h"
 
 /* Alloc a new type structure and fill it with some defaults.  If
    OBJFILE is non-NULL, then allocate the space for the type structure
@@ -733,7 +734,7 @@ check_stub_type (type)
       struct symbol *sym;
       if (name == NULL)
        {
-         complain (&stub_noname_complaint, 0);
+         complain (&stub_noname_complaint);
          return;
        }
       sym = lookup_symbol (name, 0, STRUCT_NAMESPACE, 0, 
index 15e5d8bce2b3fae373cba903314bbd753a6105c7..0760f1e310605cbe06475014401e3b8ef215033a 100644 (file)
@@ -58,6 +58,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "obstack.h"
 #include "buildsym.h"
 #include "stabsread.h"
+#include "complaints.h"
 
 #ifdef USG
 #include <sys/types.h>
@@ -1135,7 +1136,7 @@ data:             /* Common code for symbols describing data */
                            tsym = ((SYMR*)cur_fdr->isymBase)
                                + tsym->index-1;
                    }
-                   else complain (&block_member_complaint, (char *)tsym->st);
+                   else complain (&block_member_complaint, tsym->st);
                  }
 
                /* In an stBlock, there is no way to distinguish structs,
@@ -1292,7 +1293,7 @@ data:             /* Common code for symbols describing data */
                        /* End of file.  Pop parse stack and ignore.  Higher
                           level code deals with this.  */
                        ;
-               } else complain (&stEnd_complaint, (char *)sh->sc);
+               } else complain (&stEnd_complaint, sh->sc);
 
                pop_parse_stack();      /* restore previous lexical context */
                break;
@@ -1328,7 +1329,7 @@ data:             /* Common code for symbols describing data */
            case stConstant:
                break;          /* constant */
            default:
-               complain(&unknown_mips_symtype_complaint, (char *)sh->st);
+               complain(&unknown_mips_symtype_complaint, sh->st);
                break;
        }
        sh->st = stParsed;
@@ -1390,7 +1391,7 @@ parse_type(ax, bs, bigend)
        tax = ax;
        ecoff_swap_tir_in (bigend, &tax->a_ti, t);
        if (t->bt > (sizeof (map_bt)/sizeof (*map_bt))) {
-               complain (&basic_type_complaint, (char *)t->bt);
+               complain (&basic_type_complaint, t->bt);
                return builtin_type_int;
        }
        if (map_bt[t->bt]) {
@@ -1426,7 +1427,7 @@ parse_type(ax, bs, bigend)
                        break;
                    case btTypedef:
                    default:
-                       complain (&basic_type_complaint, (char *)t->bt);
+                       complain (&basic_type_complaint, t->bt);
                        return builtin_type_int;
                }
        }
@@ -1606,7 +1607,7 @@ upgrade_type(tpp, tq, ax, bigend)
                        TYPE_LENGTH(TYPE_TARGET_TYPE(t)) = id >> 3;
                }
                if (id != rf)
-                       complain (&array_bitsize_complaint, (char *)rf);
+                       complain (&array_bitsize_complaint, rf);
 
                TYPE_LENGTH(t) = (upper < 0) ? 0 :
                        (upper - lower + 1) * (rf >> 3);
@@ -1622,7 +1623,7 @@ upgrade_type(tpp, tq, ax, bigend)
                return 0;
 
        default:
-               complain (&unknown_type_qual_complaint, (char *)tq);
+               complain (&unknown_type_qual_complaint, tq);
                return 0;
        }
 }
@@ -1650,7 +1651,7 @@ parse_procedure (pr, bound, have_stabs)
 
     /* Static procedure at address pr->adr.  Sigh. */
     if (sh == (SYMR*)-1) {
-       complain (&pdr_static_symbol_complaint, (char *)pr->adr);
+       complain (&pdr_static_symbol_complaint, pr->adr);
        return;
     }
     sh_name = (char*)sh->iss;
@@ -1937,7 +1938,7 @@ parse_partial_symbols (end_of_text_seg, objfile, section_offsets)
                break;
        default:
                ms_type = mst_unknown;
-               complain (&unknown_ext_complaint, (char *)esh->asym.iss);
+               complain (&unknown_ext_complaint, esh->asym.iss);
        }
        prim_record_minimal_symbol ((char *)esh->asym.iss,
                                    esh->asym.value,
@@ -2114,8 +2115,8 @@ parse_partial_symbols (end_of_text_seg, objfile, section_offsets)
                  default:
                    /* Both complaints are valid:  one gives symbol name,
                       the other the offending symbol type.  */
-                   complain (&unknown_sym_complaint, (char *)sh->iss);
-                   complain (&unknown_st_complaint, (char *)sh->st);
+                   complain (&unknown_sym_complaint, sh->iss);
+                   complain (&unknown_st_complaint, sh->st);
                    cur_sdx++;
                    continue;
                }
@@ -2147,7 +2148,7 @@ parse_partial_symbols (end_of_text_seg, objfile, section_offsets)
                    class = LOC_LABEL;
                    break;
                  default:
-                   complain (&unknown_ext_complaint, (char *)sh->iss);
+                   complain (&unknown_ext_complaint, sh->iss);
                    /* Fall through, pretend it's global.  */
                  case stGlobal:
                    class = LOC_STATIC;
@@ -2206,7 +2207,7 @@ parse_partial_symbols (end_of_text_seg, objfile, section_offsets)
        for (s_idx = s_id0; s_idx < fh->crfd; s_idx++) {
            RFDT *rh = (RFDT *) (fh->rfdBase) + s_idx;
            if (*rh < 0 || *rh >= hdr->ifdMax)
-               complain(&bad_file_number_complaint, (char *)*rh);
+               complain(&bad_file_number_complaint, *rh);
            else
                pst->dependencies[s_idx-s_id0] = fdr_to_pst[*rh].pst;
        }
@@ -2401,7 +2402,7 @@ psymtab_to_symtab_1(pst, filename)
                /* Handle encoded stab line number. */
                record_line (current_subfile, sh->index, valu);
            }
-           else complain (&stab_unknown_complaint, (char *)sh->iss);
+           else complain (&stab_unknown_complaint, sh->iss);
        }
        st = end_symtab (pst->texthigh, 0, 0, pst->objfile);
        end_stabs ();
index 2c2c0f8cc4ffedc4adfba87441034e47157855a5..b7fc44552721f0a3fb842c0ae1b930773a20f8a5 100644 (file)
@@ -642,6 +642,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
        default:
          /* If we haven't found it yet, ignore it.  It's probably some
             new type we don't know about yet.  */
-         complain (&unknown_symtype_complaint, local_hex_string(CUR_SYMBOL_TYPE));
+         complain (&unknown_symtype_complaint,
+                   local_hex_string (CUR_SYMBOL_TYPE));
          continue;
        }
index 90a0ef11f6135084073dc1a1563f6e6007bbe830..1f862a61ea253eb4b6d00a55ab6bb38b1e3853ce 100644 (file)
@@ -809,7 +809,7 @@ vx_lookup_symbol (name, pAddr)
   status = net_clnt_call (VX_SYMBOL_INQ, xdr_wrapstring, &name,
                          xdr_SYMBOL_ADDR, &symbolAddr);
   if (status != RPC_SUCCESS) {
-      complain (&cant_contact_target, 0);
+      complain (&cant_contact_target);
       return -1;
   }
 
index dfbd3cbfd64be965db70e417e4aecf76ae76f9dd..ec7900b6100637ed7959c40b2327b5072506f47d 100644 (file)
@@ -29,10 +29,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "obstack.h"
 #include "symtab.h"
 #include "gdbtypes.h"
-#include "symfile.h"           /* Needed for "struct complaint" */
+#include "symfile.h"
 #include "objfiles.h"
 #include "aout/stab_gnu.h"     /* We always use GNU stabs, not native */
 #include "buildsym.h"
+#include "complaints.h"
 
 /* Ask stabsread.h to define the vars it normally declares `extern'.  */
 #define        EXTERN  /**/
@@ -943,7 +944,7 @@ struct type *
 error_type (pp)
      char **pp;
 {
-  complain (&error_type_complaint, 0);
+  complain (&error_type_complaint);
   while (1)
     {
       /* Skip to end of symbol.  */
@@ -1229,7 +1230,7 @@ read_type (pp, objfile)
          (*pp)++;
          return_type = read_type (pp, objfile);
          if (*(*pp)++ != ';')
-           complain (&invalid_member_complaint, (char *) symnum);
+           complain (&invalid_member_complaint, symnum);
          type = allocate_stub_method (return_type);
          if (typenums[0] != -1)
            *dbx_lookup_type (typenums) = type;
@@ -1504,7 +1505,7 @@ read_member_functions (fip, pp, type, objfile)
              case '.':
                break;
              default:
-               complain (&const_vol_complaint, (char *) (long) **pp);
+               complain (&const_vol_complaint, **pp);
                break;
            }
          
@@ -1565,7 +1566,7 @@ read_member_functions (fip, pp, type, objfile)
              
              default:
                /* error */
-               complain (&member_fn_complaint, (char *) (long) (*pp)[-1]);
+               complain (&member_fn_complaint, (*pp)[-1]);
                /* Fall through into normal member function.  */
              
              case '.':
@@ -1659,7 +1660,7 @@ read_cpp_abbrev (fip, pp, type, objfile)
       name = type_name_no_tag (context);
       if (name == NULL)
        {
-         complain (&invalid_cpp_type_complaint, (char *) symnum);
+         complain (&invalid_cpp_type_complaint, symnum);
          name = "FOO";
        }
       fip -> list -> field.name =
@@ -1791,7 +1792,7 @@ read_one_struct_field (fip, pp, p, type, objfile)
      stuff.  */
   if (fip -> list -> field.bitpos == 0 && fip -> list -> field.bitsize == 0)
     {
-      complain (&dbx_class_complaint, 0);
+      complain (&dbx_class_complaint);
       /* Ignore this field.  */
       fip -> list = fip -> list -> next;
     }
@@ -2908,7 +2909,7 @@ read_range_type (pp, typenums, objfile)
 
   TYPE_TARGET_TYPE (result_type) = *dbx_lookup_type(rangenums);
   if (TYPE_TARGET_TYPE (result_type) == 0) {
-    complain (&range_type_base_complaint, (char *) rangenums[1]);
+    complain (&range_type_base_complaint, rangenums[1]);
     TYPE_TARGET_TYPE (result_type) = lookup_fundamental_type (objfile, FT_INTEGER);
   }
 
index 96c994fb305d1ab7edc07da3c143f04715a3cac4..908ff09eb9fea29d83ab6c8cee7343df0c44163b 100644 (file)
@@ -30,6 +30,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "gdbcmd.h"
 #include "breakpoint.h"
 #include "language.h"
+#include "complaints.h"
 
 #include <obstack.h>
 #include <assert.h>
@@ -44,6 +45,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
 int readnow_symbol_files;              /* Read full symbols immediately */
 
+struct complaint oldsyms_complaint = {
+  "Replacing old symbols for `%s'", 0, 0
+};
+
+struct complaint empty_symtab_complaint = {
+  "Empty symbol table found for `%s'", 0, 0
+};
+
 /* External variables and functions referenced. */
 
 extern int info_verbose;
@@ -96,20 +105,6 @@ int symbol_reloading = SYMBOL_RELOADING_DEFAULT;
 int symbol_reloading = 0;
 #endif
 
-/* Structure to manage complaints about symbol file contents.  */
-
-struct complaint complaint_root[1] = {
-  {(char *) 0, 0, complaint_root},
-};
-
-/* Some actual complaints.  */
-
-struct complaint oldsyms_complaint = {
-       "Replacing old symbols for `%s'", 0, 0 };
-
-struct complaint empty_symtab_complaint = {
-       "Empty symbol table found for `%s'", 0, 0 };
-
 \f
 /* In the following sort, we always make sure that
    register debug symbol declarations always come before regular
@@ -949,95 +944,7 @@ the_big_top:
   if (reread_one)
     breakpoint_re_set ();
 }
-\f
-/* Functions to handle complaints during symbol reading.  */
-
-/* How many complaints about a particular thing should be printed before
-   we stop whining about it?  Default is no whining at all, since so many
-   systems have ill-constructed symbol files.  */
-
-static unsigned stop_whining = 0;
-
-/* Should each complaint be self explanatory, or should we assume that
-   a series of complaints is being produced? 
-   case 0:  self explanatory message.
-   case 1:  First message of a series that must start off with explanation.
-   case 2:  Subsequent message, when user already knows we are reading
-            symbols and we can just state our piece.  */
-
-static int complaint_series = 0;
-
-/* Print a complaint about the input symbols, and link the complaint block
-   into a chain for later handling.  */
 
-void
-complain (complaint, val)
-     struct complaint *complaint;
-     char *val;
-{
-  complaint->counter++;
-  if (complaint->next == 0) {
-    complaint->next = complaint_root->next;
-    complaint_root->next = complaint;
-  }
-  if (complaint->counter > stop_whining)
-    return;
-  wrap_here ("");
-
-  switch (complaint_series + (info_verbose << 1)) {
-
-  /* Isolated messages, must be self-explanatory.  */
-  case 0:
-    puts_filtered ("During symbol reading, ");
-    wrap_here("");
-    printf_filtered (complaint->message, val);
-    puts_filtered (".\n");
-    break;
-
-  /* First of a series, without `set verbose'.  */
-  case 1:
-    puts_filtered ("During symbol reading...");
-    printf_filtered (complaint->message, val);
-    puts_filtered ("...");
-    wrap_here("");
-    complaint_series++;
-    break;
-
-  /* Subsequent messages of a series, or messages under `set verbose'.
-     (We'll already have produced a "Reading in symbols for XXX..." message
-      and will clean up at the end with a newline.)  */
-  default:
-    printf_filtered (complaint->message, val);
-    puts_filtered ("...");
-    wrap_here("");
-  }
-}
-
-/* Clear out all complaint counters that have ever been incremented.
-   If sym_reading is 1, be less verbose about successive complaints,
-   since the messages are appearing all together during a command that
-   reads symbols (rather than scattered around as psymtabs get fleshed
-   out into symtabs at random times).  If noisy is 1, we are in a
-   noisy symbol reading command, and our caller will print enough
-   context for the user to figure it out.  */
-
-void
-clear_complaints (sym_reading, noisy)
-     int sym_reading;
-     int noisy;
-{
-  struct complaint *p;
-
-  for (p = complaint_root->next; p != complaint_root; p = p->next)
-    p->counter = 0;
-
-  if (!sym_reading && !noisy && complaint_series > 1) {
-    /* Terminate previous series, since caller won't.  */
-    puts_filtered ("\n");
-  }
-
-  complaint_series = sym_reading? 1 + noisy: 0;
-}
 \f
 enum language
 deduce_language_from_filename (filename)
@@ -1052,8 +959,10 @@ deduce_language_from_filename (filename)
      return language_c;
   else if(!strcmp(c,".cc") || !strcmp(c,".C"))
      return language_cplus;
+  /* start-sanitize-chill */
   else if(!strcmp(c,".chill") || !strcmp(c,".c186") || !strcmp(c,".c286"))
      return language_chill;
+  /* end-sanitize-chill */
 
   return language_unknown;             /* default */
 }
@@ -1418,13 +1327,6 @@ The second argument provides the starting address of the file's text.");
    "Dynamically load FILE into the running program, and record its symbols\n\
 for access from GDB.");
 
-  add_show_from_set
-    (add_set_cmd ("complaints", class_support, var_zinteger,
-                 (char *)&stop_whining,
-         "Set max number of complaints about incorrect symbols.",
-                 &setlist),
-     &showlist);
-
   add_show_from_set
     (add_set_cmd ("symbol-reloading", class_support, var_boolean,
                  (char *)&symbol_reloading,
index 1d9b7dd49fc2b1f60233fedb2a44f32f06def03b..3f232ec2b294a13e386b42bbc4b291e411dddb15 100644 (file)
@@ -60,20 +60,31 @@ struct sym_fns {
 
   /* sym_read (objfile, addr, mainline)
      Reads a symbol file into a psymtab (or possibly a symtab).
-     OBJFILE is the objfile struct for the file we are reading.  ADDR
-     is the offset between the file's specified start address and
-     its true address in memory.  MAINLINE is 1 if this is the
+     OBJFILE is the objfile struct for the file we are reading.
+     SECTION_OFFSETS
+     are the offset between the file's specified section addresses and
+     their true addresses in memory.
+     MAINLINE is 1 if this is the
      main symbol table being read, and 0 if a secondary
      symbol file (e.g. shared library or dynamically loaded file)
      is being read.  */
 
-  void (*sym_read) PARAMS ((struct objfile *, CORE_ADDR, int));
+  void (*sym_read) PARAMS ((struct objfile *, struct section_offsets *, int));
 
   /* Called when we are finished with an objfile.  Should do all cleanup
      that is specific to the object file format for the particular objfile. */
  
   void (*sym_finish) PARAMS ((struct objfile *));
 
+  /* This function produces a file-dependent section_offsets structure,
+     allocated in the objfile's storage, and based on the parameter.
+     The parameter is currently a CORE_ADDR (FIXME!) for backward compatibility
+     with the higher levels of GDB.  It should probably be changed to
+     a string, where NULL means the default, and others are parsed in a file
+     dependent way.  The result of this function is handed in to sym_read.  */
+
+  struct section_offsets *(*sym_offsets) PARAMS ((struct objfile *, CORE_ADDR));
+
   /* Finds the next struct sym_fns.  They are allocated and initialized
      in whatever module implements the functions pointed to; an 
      initializer calls add_symtab_fns to add them to the global chain.  */
@@ -82,124 +93,6 @@ struct sym_fns {
 
 };
 
-/* Master structure for keeping track of each input file from which
-   gdb reads symbols.  One of these is allocated for each such file we
-   access, e.g. the exec_file, symbol_file, and any shared library object
-   files. */
-
-struct objfile
-{
-
-  /* All struct objfile's are chained together by their next pointers.
-     The global variable "object_files" points to the first link in this
-     chain. */
-
-  struct objfile *next;
-
-  /* The object file's name.  Malloc'd; free it if you free this struct.  */
-
-  char *name;
-
-  /* Some flag bits for this objfile. */
-
-  unsigned short flags;
-
-  /* Each objfile points to a linked list of symtabs derived from this file,
-     one symtab structure for each compilation unit (source file).  Each link
-     in the symtab list contains a backpointer to this objfile. */
-
-  struct symtab *symtabs;
-
-  /* Each objfile points to a linked list of partial symtabs derived from
-     this file, one partial symtab structure for each compilation unit
-     (source file). */
-
-  struct partial_symtab *psymtabs;
-
-  /* List of freed partial symtabs, available for re-use */
-
-  struct partial_symtab *free_psymtabs;
-
-  /* The object file's BFD.  Can be null, in which case bfd_open (name) and
-     put the result here.  */
-
-  bfd *obfd;
-
-  /* The modification timestamp of the object file, as of the last time
-     we read its symbols.  */
-
-  long mtime;
-
-  /* Obstacks to hold objects that should be freed when we load a new symbol
-     table from this object file. */
-
-  struct obstack psymbol_obstack;      /* Partial symbols */
-  struct obstack symbol_obstack;       /* Full symbols */
-  struct obstack type_obstack;         /* Types */
-
-  /* Vectors of all partial symbols read in from file.  The actual data
-     is stored in the psymbol_obstack. */
-
-  struct psymbol_allocation_list global_psymbols;
-  struct psymbol_allocation_list static_psymbols;
-
-  /* Each file contains a pointer to an array of minimal symbols for all
-     global symbols that are defined within the file.  The array is terminated
-     by a "null symbol", one that has a NULL pointer for the name and a zero
-     value for the address.  This makes it easy to walk through the array
-     when passed a pointer to somewhere in the middle of it.  There is also
-     a count of the number of symbols, which does include the terminating
-     null symbol.  The array itself, as well as all the data that it points
-     to, should be allocated on the symbol_obstack for this file. */
-
-  struct minimal_symbol *msymbols;
-  int minimal_symbol_count;
-
-  /* For object file formats which don't specify fundamental types, gdb
-     can create such types.  For now, it maintains a vector of pointers
-     to these internally created fundamental types on a per objfile basis,
-     however it really should ultimately keep them on a per-compilation-unit
-     basis, to account for linkage-units that consist of a number of
-     compilation units that may have different fundamental types, such as
-     linking C modules with ADA modules, or linking C modules that are
-     compiled with 32-bit ints with C modules that are compiled with 64-bit
-     ints (not inherently evil with a smarter linker). */
-
-  struct type **fundamental_types;
-
-  /* The mmalloc() malloc-descriptor for this objfile if we are using
-     the memory mapped malloc() package to manage storage for this objfile's
-     data.  NULL if we are not. */
-
-  PTR md;
-
-  /* Structure which keeps track of functions that manipulate objfile's
-     of the same type as this objfile.  I.E. the function to read partial
-     symbols for example.  Note that this structure is in statically
-     allocated memory, and is shared by all objfiles that use the
-     object module reader of this type. */
-
-  struct sym_fns *sf;
-
-  /* Hook for information which is shared by sym_init and sym_read for
-     this objfile.  It is typically a pointer to malloc'd memory.  */
-
-  PTR sym_private;
-
-};
-
-/* Defines for the objfile flag word. */
-
-/* Gdb can arrange to allocate storage for all objects related to a
-   particular objfile in a designated section of it's address space,
-   managed at a low level by mmap() and using a special version of
-   malloc that handles malloc/free/realloc on top of the mmap() interface.
-   This allows the "internal gdb state" for a particular objfile to be
-   dumped to a gdb state file and subsequently reloaded at a later time. */
-
-#define OBJF_MAPPED    (1 << 0)        /* Objfile data is mmap'd */
-
-
 extern void
 extend_psymbol_list PARAMS ((struct psymbol_allocation_list *,
                             struct objfile *));
@@ -254,15 +147,6 @@ sort_pst_symbols PARAMS ((struct partial_symtab *));
 extern struct symtab *
 allocate_symtab PARAMS ((char *, struct objfile *));
 
-extern struct objfile *
-allocate_objfile PARAMS ((bfd *, int));
-
-extern void
-free_objfile PARAMS ((struct objfile *));
-
-extern void
-free_all_objfiles PARAMS ((void));
-
 extern int
 free_named_symtabs PARAMS ((char *));
 
@@ -272,11 +156,18 @@ fill_in_vptr_fieldno PARAMS ((struct type *));
 extern void
 add_symtab_fns PARAMS ((struct sym_fns *));
 
+extern void
+init_entry_point_info PARAMS ((struct objfile *));
+
 extern void
 syms_from_objfile PARAMS ((struct objfile *, CORE_ADDR, int, int));
 
+extern void
+new_symfile_objfile PARAMS ((struct objfile *, int, int));
+
 extern struct partial_symtab *
-start_psymtab_common PARAMS ((struct objfile *, CORE_ADDR, char *, CORE_ADDR,
+start_psymtab_common PARAMS ((struct objfile *, struct section_offsets *,
+                             char *, CORE_ADDR,
                              struct partial_symbol *,
                              struct partial_symbol *));
 
@@ -307,90 +198,29 @@ obconcat PARAMS ((struct obstack *obstackp, const char *, const char *,
 
                        /*   Variables   */
 
-/* The object file that the main symbol table was loaded from (e.g. the
-   argument to the "symbol-file" or "file" command).  */
-
-extern struct objfile *symfile_objfile;
-
-/* Where execution starts in symfile */
-
-extern CORE_ADDR entry_point;
-
-/* Root of object file struct chain.  */
-
-extern struct objfile *object_files;
-
-/* Traverse all object files.  ALL_OBJFILES_SAFE works even if you delete
-   the objfile during the traversal.  */
-
-#define        ALL_OBJFILES(obj) \
-   for (obj = object_files; 0 != obj; obj = obj->next)
-
-#define        ALL_OBJFILES_SAFE(obj,nxt) \
-   for (obj = object_files; obj? (nxt=obj->next, 1): 0; obj = nxt)
-
-/* Support for complaining about things in the symbol file that aren't
-   catastrophic.
-
-   Each such thing gets a counter.  The first time we have the problem,
-   during a symbol read, we report it.  At the end of symbol reading,
-   if verbose, we report how many of each problem we had.  */
-
-struct complaint {
-  char *message;
-  unsigned counter;
-  struct complaint *next;
-};
-
-/* Root of the chain of complaints that have at some point been issued. 
-   This is used to reset the counters, and/or report the total counts.  */
-
-extern struct complaint complaint_root[1];
-
-/* Functions that handle complaints.  (in symfile.c)  */
-
-extern void
-complain PARAMS ((struct complaint *, char *));
-
-extern void
-clear_complaints PARAMS ((int sym_reading, int noisy));
-
 /* From symfile.c */
 
 extern struct partial_symtab *
 allocate_psymtab PARAMS ((char *, struct objfile *));
 
-/* From minsyms.c */
-
-extern PTR
-iterate_over_msymbols PARAMS ((PTR (*func) (struct objfile *,
-                                           struct minimal_symbol *,
-                                           PTR arg1, PTR arg2, PTR arg3),
-                              PTR arg1, PTR arg2, PTR arg3));
-
-/* From objfiles.c */
+/* From dwarfread.c */
 
-extern PTR
-iterate_over_objfiles PARAMS ((PTR (*func) (struct objfile *,
-                                           PTR arg1, PTR arg2, PTR arg3),
-                              PTR arg1, PTR arg2, PTR arg3));
+extern void
+dwarf_build_psymtabs PARAMS ((struct objfile *, struct section_offsets *, int,
+                             file_ptr, unsigned int, file_ptr, unsigned int));
 
-extern PTR
-iterate_over_symtabs PARAMS ((PTR (*func) (struct objfile *, struct symtab *,
-                                          PTR arg1, PTR arg2, PTR arg3),
-                             PTR arg1, PTR arg2, PTR arg3));
+/* From dbxread.c */
 
-extern PTR 
-iterate_over_psymtabs PARAMS ((PTR (*func) (struct objfile *,
-                                           struct partial_symtab *,
-                                           PTR arg1, PTR arg2, PTR arg3),
-                              PTR arg1, PTR arg2, PTR arg3));
+extern void
+elfstab_build_psymtabs PARAMS ((struct objfile *objfile,
+       struct section_offsets *section_offsets,
+       int mainline,
+       file_ptr staboff, unsigned int stabsize,
+       file_ptr stabstroffset, unsigned int stabstrsize));
 
-/* From dwarfread.c */
+/* From demangle.c */
 
 extern void
-dwarf_build_psymtabs PARAMS ((int, char *, CORE_ADDR, int, unsigned int,
-                             unsigned int, unsigned int, unsigned int,
-                             struct objfile *));
+set_demangling_style PARAMS ((char *));
 
 #endif /* !defined(SYMFILE_H) */
index 6ad26648bdfb96e5c5ede35bea167fbc1d288dc0..b087b52420f9530502399d8639642270622265a6 100644 (file)
@@ -808,11 +808,13 @@ parse_escape (string_ptr)
     }
 }
 \f
-/* Print the character C on STREAM as part of the contents
-   of a literal string whose delimiter is QUOTER.  */
+/* Print the character C on STREAM as part of the contents of a literal
+   string whose delimiter is QUOTER.  Note that this routine should only
+   be call for printing things which are independent of the language
+   of the program being debugged. */
 
 void
-printchar (c, stream, quoter)
+gdb_printchar (c, stream, quoter)
      register int c;
      FILE *stream;
      int quoter;
@@ -980,6 +982,20 @@ wrap_here(indent)
     }
 }
 
+/* Ensure that whatever gets printed next, using the filtered output
+   commands, starts at the beginning of the line.  I.E. if there is
+   any pending output for the current line, flush it and start a new
+   line.  Otherwise do nothing. */
+
+void
+begin_line ()
+{
+  if (chars_printed > 0)
+    {
+      puts_filtered ("\n");
+    }
+}
+
 /* Like fputs but pause after every screenful, and can wrap at points
    other than the final character of a line.
    Unlike fputs, fputs_filtered does not return a value.
@@ -1211,6 +1227,14 @@ vfprintf_filtered (stream, format, args)
   fputs_filtered (linebuffer, stream);
 }
 
+void
+vprintf_filtered (format, args)
+     char *format;
+     va_list args;
+{
+  vfprintf_filtered (stdout, format, args);
+}
+
 /* VARARGS */
 void
 fprintf_filtered (va_alist)
@@ -1290,7 +1314,10 @@ printfi_filtered (va_alist)
   va_end (args);
 }
 
-/* Easy */
+/* Easy -- but watch out!
+
+   This routine is *not* a replacement for puts()!  puts() appends a newline.
+   This one doesn't, and had better not!  */
 
 void
 puts_filtered (string)
@@ -1378,7 +1405,7 @@ fprint_symbol (stream, name)
    when searching for matching C++ function names (such as if the
    user types 'break FOO', where FOO is a mangled C++ function). */
 
-static int
+int
 strcmp_iw (string1, string2)
      const char *string1;
      const char *string2;