diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/Makefile.dist ./Makefile.dist
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/Makefile.dist	Tue Jan 30 18:42:57 1990
--- ./Makefile.dist	Sun Sep 16 18:36:42 1990
***************
*** 114,119 ****
--- 114,126 ----
  #ifndef M_CLIBS
  #define M_CLIBS
  #endif
+ 
+ /* M_COBJS, if defined, has system-dependent objects
+  For example, coff-dbx.o on systems using stabs in coff.  */
+ #ifndef M_COBJS
+ #define M_COBJS
+ #endif
+ 
  CLIBS = ${ADD_FILES} ${TERMCAP} M_CLIBS
  
  ADD_FILES = ${OBSTACK} ${REGEX} ${ALLOCA} ${GNU_MALLOC}
***************
*** 126,132 ****
  	 utils.c valarith.c valops.c valprint.c values.c version.c expread.y \
  	 xgdb.c
  
! DEPFILES = umax-dep.c gould-dep.c default-dep.c sun3-dep.c \
  	   sparc-dep.c hp9k320-dep.c hp300bsd-dep.c news-dep.c i386-dep.c \
  	   symmetry-dep.c convex-dep.c altos-dep.c isi-dep.c pyr-dep.c
  
--- 133,139 ----
  	 utils.c valarith.c valops.c valprint.c values.c version.c expread.y \
  	 xgdb.c
  
! DEPFILES = umax-dep.c gould-dep.c default-dep.c sun3-dep.c coff-dbx.c \
  	   sparc-dep.c hp9k320-dep.c hp300bsd-dep.c news-dep.c i386-dep.c \
  	   symmetry-dep.c convex-dep.c altos-dep.c isi-dep.c pyr-dep.c
  
***************
*** 177,183 ****
      command.o utils.o expread.o expprint.o pinsn.o environ.o version.o \
      copying.o ${READLINEOBS}
  
! TSOBS = core.o inflow.o dep.o
  
  NTSOBS = standalone.o
  
--- 184,190 ----
      command.o utils.o expread.o expprint.o pinsn.o environ.o version.o \
      copying.o ${READLINEOBS}
  
! TSOBS = core.o inflow.o dep.o M_COBJS
  
  NTSOBS = standalone.o
  
***************
*** 270,275 ****
--- 277,299 ----
  gdb.tar.Z: gdb.tar
  	if [ -f gdb.tar.Z ]; then rm -f gdb.tar.Z; else true; fi
  	compress gdb.tar
+ 
+ COFF_ADD = `cat GDBONLY`
+ 
+ COFF_DIFFS = gdb-3.5/GDBDIFFS
+ 
+ DIST  = /dca/local/gnu/gdb/gdb-3.5/dist-gdb
+ 
+ coff-diffs:
+ 	rm -f GDBDIFFS
+ 	-diff -rc $(DIST) . >../GDBDIFFS
+ 
+ coff-only:
+ 	-grep '^Only' ../GDBDIFFS | awk '{print "gdb-3.5/" $$4 }' >../GDBONLY
+ 	-grep -v '^Only' ../GDBDIFFS> GDBDIFFS
+ 
+ coff-dist: 
+ 	(cd .. ;tar cf gdbcoff.tar $(COFF_DIFFS) $(COFF_ADD) )
  
  clean:
  	rm -f ${OBS} ${TSOBS} ${NTSOBS} ${OBSTACK} ${REGEX} ${GNU_MALLOC}
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/a.out.gnu.h ./a.out.gnu.h
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/a.out.gnu.h	Tue Jan 16 19:17:57 1990
--- ./a.out.gnu.h	Fri Jul 13 23:07:58 1990
***************
*** 37,43 ****
    M_68020 = 2,
  #endif
  #if defined (M_SPARC)
!   M__SPARC = M_SPARC
  #else
    M_SPARC = 3,
  #endif
--- 37,43 ----
    M_68020 = 2,
  #endif
  #if defined (M_SPARC)
!   M__SPARC = M_SPARC,
  #else
    M_SPARC = 3,
  #endif
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/coffread.c ./coffread.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/coffread.c	Wed Jan 10 15:54:43 1990
--- ./coffread.c	Fri Jul 13 23:53:00 1990
***************
*** 23,29 ****
  #include <stdio.h>
  #include "defs.h"
  #include "param.h"
! #ifdef COFF_FORMAT
  #include "symtab.h"
  
  #ifdef USG
--- 23,29 ----
  #include <stdio.h>
  #include "defs.h"
  #include "param.h"
! #if defined(COFF_FORMAT) && !defined(READ_DBX_FORMAT)
  #include "symtab.h"
  
  #ifdef USG
***************
*** 58,64 ****
--- 58,68 ----
  extern void free_all_symtabs ();
  extern void free_all_psymtabs ();
  
+ /* to be an sdb debug type, type must have at least a basic or primary
+    derived type */
  
+ #define SDB_TYPE(type) (BTYPE(type) |(type &N_TMASK))
+ 
  /* Name of source file whose symbol data we are now processing.
     This comes from a symbol named ".file".  */
  
***************
*** 916,922 ****
  	}
  
        /* Special case for file with type declarations only, no text.  */
!       if (!last_source_file && cs->c_type != T_NULL && cs->c_secnum == N_DEBUG)
  	complete_symtab (filestring, 0, 0);
  
        /* Typedefs should not be treated as symbol definitions.  */
--- 920,926 ----
  	}
  
        /* Special case for file with type declarations only, no text.  */
!       if (!last_source_file &&  SDB_TYPE(cs->c_type) && cs->c_secnum == N_DEBUG)
  	complete_symtab (filestring, 0, 0);
  
        /* Typedefs should not be treated as symbol definitions.  */
***************
*** 990,996 ****
  		cs->c_secnum == N_ABS &&
  		strcmp (cs->c_name, _ETEXT) == 0)
  		    end_of_text_addr = cs->c_value;
! 	    if (cs->c_type == T_NULL) {
  		    if (cs->c_secnum <= 1) {	/* text or abs */
  			    record_misc_function (cs->c_name, cs->c_value);
  			    break;
--- 994,1000 ----
  		cs->c_secnum == N_ABS &&
  		strcmp (cs->c_name, _ETEXT) == 0)
  		    end_of_text_addr = cs->c_value;
! 	    if ( !SDB_TYPE(cs->c_type)) {
  		    if (cs->c_secnum <= 1) {	/* text or abs */
  			    record_misc_function (cs->c_name, cs->c_value);
  			    break;
***************
*** 1203,1208 ****
--- 1207,1214 ----
    cs->c_sclass = (sym->n_sclass & 0xff);
    cs->c_secnum = sym->n_scnum;
    cs->c_type = (unsigned) sym->n_type;
+   if (!SDB_TYPE(cs->c_type))
+     cs->c_type = 0;
  
    symnum += cs->c_nsyms;
  }
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/config.gdb ./config.gdb
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/config.gdb	Tue Jan 30 12:35:46 1990
--- ./config.gdb	Sun Sep 16 17:57:54 1990
***************
*** 1,3 ****
--- 1,4 ----
+ 
  #!/bin/sh
  
  #
***************
*** 134,139 ****
--- 135,150 ----
  	depfile=altos-dep.c
  	opcodefile=m68k-opcode.h
  	;;
+ pbb)
+ 	m_regex=-DM_REGEX=regex.o
+ 	m_clibs=-DM_CLIBS=-lbsd
+ 	m_cflags=-DM_CFLAGS=-DSETJMP_MASKS_SIGNALS
+ 	m_cobjs=-DM_COBJS=coff-dbx.o
+ 	makedefine="$m_regex $m_cobjs $m_clibs $m_cflags -DM_SYSV"
+ 	pinsnfile=m68k-pinsn.c
+ 	depfile=pbb-dep.c
+ 	opcodefile=m68k-opcode.h
+ 	;;
  pyramid)
  	echo
  	echo "Note that GDB on Pyramids only works with GCC."
***************
*** 214,219 ****
--- 225,238 ----
  # of this file about unneeded files.
  	opcodefile=m-i386.h
  	;;
+ i386gcoff)
+ 	makedefine="-DM_CLIBS=-lPW -DM_SYSV -DM_REGEX=regex.o -DM_COBJS=coff-dbx.o"
+ 	pinsnfile=i386-pinsn.c
+ 	depfile=i386-dep.c
+ # The following is a lie, but a necessary one.  See comment at beginning
+ # of this file about unneeded files.
+ 	opcodefile=m-i386.h
+ 	;;
  merlin)
  	echo ""
  	echo "To install GDB on this machine you must copy /bin/sh"
***************
*** 285,290 ****
--- 304,323 ----
  	pinsnfile=m68k-pinsn.c
  	opcodefile=m68k-opcode.h
  	depfile=sun3-dep.c
+ 	;;	
+ sun386i)
+ # Compile GDB without shared libraries so that it can be run on itself.
+ 	makedefine="-DM_CFLAGS=-Bstatic -DM_COBJS=coff-dbx.o"
+ 	echo
+ 	echo "Make sure to compile any program on which you want to run gdb"
+ 	echo " without shared libraries (cc -Bstatic)"
+ 	echo
+ 	paramfile=m-sun386i.h
+ 	pinsnfile=i386-pinsn.c
+ # The following is a lie, but a necessary one.  See comment at beginning
+ # of this file about unneeded files.
+ 	opcodefile=m68k-opcode.h
+ 	depfile=sun386i-dep.c
  	;;	
  sun4os4|sun4-os4)
  # Compile GDB without shared libraries so that it can be run on itself.
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/core.c ./core.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/core.c	Wed Jan 10 15:55:17 1990
--- ./core.c	Fri Jul 13 23:08:03 1990
***************
*** 343,348 ****
--- 343,352 ----
    int fileptr;
    int returnval = 0;
  
+ #ifdef KERNEL_CORE_HOOK
+   KERNEL_CORE_HOOK	/* can have data definitions and code using them */
+ #endif
+ 
    while (len > 0)
      {
        xferfile = 0;
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/dbxread.c ./dbxread.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/dbxread.c	Fri Jan 26 23:30:54 1990
--- ./dbxread.c	Thu Aug 23 19:40:23 1990
***************
*** 40,51 ****
  #define L_INCR 1
  #endif
  
! #ifdef COFF_ENCAPSULATE
! #include "a.out.encap.h"
! #include "stab.gnu.h"
  #else
! #include <a.out.h>
! #include <stab.h>
  #endif
  #include <ctype.h>
  
--- 40,60 ----
  #define L_INCR 1
  #endif
  
! #ifdef COFF_FORMAT
! #  ifdef COFF_ENCAPSULATE
! #    include "a.out.encap.h"
! #    include "stab.gnu.h"
! #  else
! #    include "coff-dbx.h"
! #    ifdef NO_NATIVE_STAB_INCLUDE
! #      include "stab.gnu.h"
! #    else
! #      include <stab.h>
! #    endif
! #  endif
  #else
! #  include <a.out.h>
! #  include <stab.h>
  #endif
  #include <ctype.h>
  
***************
*** 129,134 ****
--- 138,177 ----
  #include "defs.h"
  #include "symtab.h"
  
+ #define NEXT_SYMBOL_TEXT() \
+   if (symbuf_idx == symbuf_end) \
+     fill_symbuf (stringtab_global); \
+   symnum++; \
+   return symbuf[symbuf_idx++].n_un.n_strx + stringtab_global; \
+ 
+ 
+ /* copy of symbol count */
+ int  number_of_symbols;	
+ 
+ /* Set namestring based on bufp. - a.out version */
+ #ifndef SET_NAMESTRING
+ #define SET_NAMESTRING()\
+   if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size)  \
+     error ("Invalid symbol data: bad string table offset: %d",       \
+ 	   bufp->n_un.n_strx);                                       \
+   namestring = bufp->n_un.n_strx + stringtab
+ #endif /* SET_NAMESTRING */
+ 
+ #ifndef IS_O_FILE_START
+ #define IS_O_FILE_START(name,len) ((name[0] == '-' && name[1] == 'l') \
+ 	      || (name [(len = strlen (name)) - 1] == 'o'	      \
+ 		  && name [len - 2] == '.'))
+ #endif /* IS_O_FILE_START */
+ 
+ /* Size (in elements) of buffer for reading the symbol table entries.  */
+ #ifndef SYMBUFSIZE
+ #define SYMBUFSIZE 4096
+ #endif
+ 
+ #ifndef ONDISK_SYMBOL_SIZE
+ #define ONDISK_SYMBOL_SIZE  sizeof(struct nlist)
+ #endif
+ 
  #ifndef COFF_FORMAT
  #ifndef AOUTHDR
  #define AOUTHDR		struct exec
***************
*** 187,195 ****
  #ifdef COFF_HEADER
  #define NUMBER_OF_SYMBOLS \
    ((COFF_HEADER(hdr) ? hdr.coffhdr.filehdr.f_nsyms : hdr.a_syms) /	\
!    sizeof (struct nlist))
  #else
! #define NUMBER_OF_SYMBOLS (hdr.a_syms / sizeof (struct nlist))
  #endif
  #endif
  
--- 230,238 ----
  #ifdef COFF_HEADER
  #define NUMBER_OF_SYMBOLS \
    ((COFF_HEADER(hdr) ? hdr.coffhdr.filehdr.f_nsyms : hdr.a_syms) /	\
!    ONDISK_SYMBOL_SIZE)
  #else
! #define NUMBER_OF_SYMBOLS (hdr.a_syms / ONDISK_SYMBOL_SIZE)
  #endif
  #endif
  
***************
*** 336,341 ****
--- 379,387 ----
  /* Count symbols as they are processed, for error messages.  */
  
  static int symnum;
+ 				/* dont bother ifdeffing these; theyre cheap */
+ int symnum_limit =0;
+ int conv_symnum =0;
  
  /* Vector of types defined so far, indexed by their dbx type numbers.
     (In newer sun systems, dbx uses a pair of numbers in parens,
***************
*** 473,480 ****
--- 519,533 ----
  
  #ifdef NAMES_HAVE_UNDERSCORE
  #define HASH_OFFSET 1
+ #define IS_ETEXT(name) name[6] == '\0' && name[5] == 't' \
+ 	      && name[4] == 'x' && name[3] == 'e'	 \
+ 	      && name[2] == 't' && name[1] == 'e'	 \
+ 	      && name[0] == '_'
  #else
  #define HASH_OFFSET 0
+ #define IS_ETEXT(name) name[5] == '\0' && name[4] == 't' \
+ 		    && name[3] == 'x' && name[2] == 'e'	 \
+ 		    && name[1] == 't' && name[0] == 'e'	 
  #endif
  
  #if 0
***************
*** 1078,1085 ****
  }
  
  /* Manage the vector of line numbers.  */
! 
! static void
  record_line (line, pc)
       int line;
       CORE_ADDR pc;
--- 1131,1140 ----
  }
  
  /* Manage the vector of line numbers.  */
! 				/* not static: must be visible from dep.c
! 				 * at least on sun 386i systems.
! 				 */
! void
  record_line (line, pc)
       int line;
       CORE_ADDR pc;
***************
*** 1132,1138 ****
    new_object_header_files ();
  
    for (s = symseg_chain; s; s = s->next)
!     if (s->ldsymoff == symnum * sizeof (struct nlist))
        break;
    current_symseg = s;
    if (s != 0)
--- 1187,1193 ----
    new_object_header_files ();
  
    for (s = symseg_chain; s; s = s->next)
!     if (s->ldsymoff == symnum * ONDISK_SYMBOL_SIZE)
        break;
    current_symseg = s;
    if (s != 0)
***************
*** 1568,1573 ****
--- 1623,1631 ----
  /* The entry point.  */
  static CORE_ADDR entry_point;
  
+ static char *symfile_string_table;
+ static int symfile_string_table_size;
+ 
  /* This is the symbol-file command.  Read the file, analyze its symbols,
     and add a struct symtab to symtab_list.  */
  
***************
*** 1629,1634 ****
--- 1687,1697 ----
  
    READ_FILE_HEADERS (desc, name);
  
+ #ifdef N_MULTI_LINE_TYPE
+   val = init_lineno (desc, scn[text_scn].s_lnnoptr, scn[text_scn].s_nlnno);
+   if (val < 0)
+     error ("\"%s\": error reading line numbers\n", name);
+ #endif 
    entry_point = ENTRY_POINT;
  
    if (NUMBER_OF_SYMBOLS == 0)
***************
*** 1656,1661 ****
--- 1719,1732 ----
    READ_STRING_TABLE_SIZE (buffer);
    if (buffer >= 0 && buffer < statbuf.st_size)
      {
+       /* This should speed things up without consuming much
+ 	 extra memory (because probably little of the space is going
+ 	 to be reused anyway, whether in data or stack space).
+ 
+ 	 A quick test (running GDB on itself and setting 9 breakpoints
+ 	 in different files) showed that memory usage was almost
+ 	 identical for the two cases.  */
+ #if 0
  #ifdef BROKEN_LARGE_ALLOCA
        stringtab = (char *) xmalloc (buffer);
        make_cleanup (free, stringtab);
***************
*** 1662,1667 ****
--- 1733,1742 ----
  #else
        stringtab = (char *) alloca (buffer);
  #endif
+ #endif
+       stringtab = (char *) xmalloc (buffer);
+       symfile_string_table = stringtab;
+       symfile_string_table_size = buffer;
      }
    else
      stringtab = NULL;
***************
*** 1706,1711 ****
--- 1781,1789 ----
    init_misc_functions ();
    make_cleanup (discard_misc_bunches, 0);
  
+ #ifdef EXTRA_STRINGS_INIT
+   EXTRA_STRINGS_INIT ( 0 )
+ #endif
    free_pendings = 0;
    pending_blocks = 0;
    file_symbols = 0;
***************
*** 1761,1770 ****
  }
  
  /* Buffer for reading the symbol table entries.  */
! static struct nlist symbuf[4096];
  static int symbuf_idx;
! static int symbuf_end;
! 
  /* I/O descriptor for reading the symbol table.  */
  static int symtab_input_desc;
  
--- 1839,1850 ----
  }
  
  /* Buffer for reading the symbol table entries.  */
! static struct nlist symbuf[SYMBUFSIZE];
  static int symbuf_idx;
! int symbuf_end;			/* Not static: may be adjusted from dep.c
! 				 * on coff systems if the buffer's last symbol 
! 				 * has an auxent.
! 				 */
  /* I/O descriptor for reading the symbol table.  */
  static int symtab_input_desc;
  
***************
*** 1779,1790 ****
     (into the string table) but this does no harm.  */
  
  static int
! fill_symbuf ()
  {
    int nbytes = myread (symtab_input_desc, symbuf, sizeof (symbuf));
    if (nbytes <= 0)
      error ("error or end of file reading symbol table");
    symbuf_end = nbytes / sizeof (struct nlist);
    symbuf_idx = 0;
    return 1;
  }
--- 1859,1875 ----
     (into the string table) but this does no harm.  */
  
  static int
! fill_symbuf (stringtab)
!      char * stringtab;
  {
+ #ifdef FILL_SYMBUF
+   FILL_SYMBUF
+ #else
    int nbytes = myread (symtab_input_desc, symbuf, sizeof (symbuf));
    if (nbytes <= 0)
      error ("error or end of file reading symbol table");
    symbuf_end = nbytes / sizeof (struct nlist);
+ #endif
    symbuf_idx = 0;
    return 1;
  }
***************
*** 1797,1806 ****
  static char *
  next_symbol_text ()
  {
!   if (symbuf_idx == symbuf_end)
!     fill_symbuf ();
!   symnum++;
!   return symbuf[symbuf_idx++].n_un.n_strx + stringtab_global;
  }
  
  /*
--- 1882,1888 ----
  static char *
  next_symbol_text ()
  {
!   NEXT_SYMBOL_TEXT();		/* contains return of ptr */
  }
  
  /*
***************
*** 1989,2000 ****
    symtab_input_desc = desc;	/* This is needed for fill_symbuf below */
    symbuf_end = symbuf_idx = 0;
  
    for (symnum = 0; symnum < nlistlen; symnum++)
      {
        /* Get the symbol for this run and pull out some info */
        QUIT;	/* allow this to be interruptable */
        if (symbuf_idx == symbuf_end)
! 	fill_symbuf ();
        bufp = &symbuf[symbuf_idx++];
  
  #ifdef PROFILE_TYPES
--- 2071,2085 ----
    symtab_input_desc = desc;	/* This is needed for fill_symbuf below */
    symbuf_end = symbuf_idx = 0;
  
+   symnum_limit = nlistlen;
+   conv_symnum = 0;
+ 
    for (symnum = 0; symnum < nlistlen; symnum++)
      {
        /* Get the symbol for this run and pull out some info */
        QUIT;	/* allow this to be interruptable */
        if (symbuf_idx == symbuf_end)
! 	fill_symbuf (stringtab);
        bufp = &symbuf[symbuf_idx++];
  
  #ifdef PROFILE_TYPES
***************
*** 2006,2011 ****
--- 2091,2100 ----
         */
        if (bufp->n_type == N_SLINE) continue;
  
+ #ifdef  N_MULTI_LINE_TYPE
+       if (bufp->n_type == N_MULTI_LINE_TYPE) continue;
+       if (bufp->n_type == N_LINE_COUNT_TYPE) continue;
+ #endif
        /* Ok.  There is a lot of code duplicated in the rest of this
           switch statiement (for efficiency reasons).  Since I don't
           like duplicating code, I will do my penance here, and
***************
*** 2018,2029 ****
  	    I've imbedded it in the following macro.
  	 */
        
- /* Set namestring based on bufp.  */
- #define SET_NAMESTRING()\
-   if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size)  \
-     error ("Invalid symbol data: bad string table offset: %d",       \
- 	   bufp->n_un.n_strx);                                       \
-   namestring = bufp->n_un.n_strx + stringtab
  
  #define	ADD_PSYMBOL_TO_LIST(NAME, NAMELENGTH, NAMESPACE, CLASS, LIST, VALUE)\
    do {		        						\
--- 2107,2112 ----
***************
*** 2063,2072 ****
  
  	  SET_NAMESTRING();
  
! 	  if (namestring[6] == '\0' && namestring[5] == 't'
! 	      && namestring[4] == 'x' && namestring[3] == 'e'
! 	      && namestring[2] == 't' && namestring[1] == 'e'
! 	      && namestring[0] == '_')
  	    end_of_text_addr = bufp->n_value;
  
  	  /* Figure out beginning and end of global linker symbol
--- 2146,2152 ----
  
  	  SET_NAMESTRING();
  
! 	  if (IS_ETEXT(namestring))
  	    end_of_text_addr = bufp->n_value;
  
  	  /* Figure out beginning and end of global linker symbol
***************
*** 2127,2135 ****
  	case N_TEXT:
  /* #endif */
  	  SET_NAMESTRING();
! 	  if ((namestring[0] == '-' && namestring[1] == 'l')
! 	      || (namestring [(nsl = strlen (namestring)) - 1] == 'o'
! 		  && namestring [nsl - 2] == '.'))
  	    {
  	      if (entry_point < bufp->n_value
  		  && entry_point >= last_o_file_start)
--- 2207,2214 ----
  	case N_TEXT:
  /* #endif */
  	  SET_NAMESTRING();
! 
! 	  if (IS_O_FILE_START(namestring,nsl))
  	    {
  	      if (entry_point < bufp->n_value
  		  && entry_point >= last_o_file_start)
***************
*** 2137,2146 ****
  		  startup_file_start = last_o_file_start;
  		  startup_file_end = bufp->n_value;
  		}
! 	      if (past_first_source_file && pst)
  		{
  		  end_psymtab (pst, psymtab_include_list, includes_used,
! 			       symnum * sizeof (struct nlist), bufp->n_value,
  			       dependency_list, dependencies_used,
  			       global_psymbols.next, static_psymbols.next);
  		  pst = (struct partial_symtab *) 0;
--- 2216,2229 ----
  		  startup_file_start = last_o_file_start;
  		  startup_file_end = bufp->n_value;
  		}
! 	      if (past_first_source_file && pst
! 		  /* The gould NP1 uses low values for .o and -l symbols
! 		     which are not the address.  */
! 		  && bufp->n_value > pst->textlow)
! 
  		{
  		  end_psymtab (pst, psymtab_include_list, includes_used,
! 			       symnum * ONDISK_SYMBOL_SIZE, bufp->n_value,
  			       dependency_list, dependencies_used,
  			       global_psymbols.next, static_psymbols.next);
  		  pst = (struct partial_symtab *) 0;
***************
*** 2210,2216 ****
  	  if (pst && past_first_source_file)
  	    {
  	      end_psymtab (pst, psymtab_include_list, includes_used,
! 			   symnum * sizeof (struct nlist), bufp->n_value,
  			   dependency_list, dependencies_used,
  			   global_psymbols.next, static_psymbols.next);
  	      pst = (struct partial_symtab *) 0;
--- 2293,2299 ----
  	  if (pst && past_first_source_file)
  	    {
  	      end_psymtab (pst, psymtab_include_list, includes_used,
! 			   symnum * ONDISK_SYMBOL_SIZE, bufp->n_value,
  			   dependency_list, dependencies_used,
  			   global_psymbols.next, static_psymbols.next);
  	      pst = (struct partial_symtab *) 0;
***************
*** 2221,2227 ****
  	    past_first_source_file = 1;
  
  	  pst = start_psymtab (namestring, bufp->n_value,
! 			       symnum * sizeof (struct nlist),
  			       global_psymbols.next, static_psymbols.next);
  
  	  continue;
--- 2304,2310 ----
  	    past_first_source_file = 1;
  
  	  pst = start_psymtab (namestring, bufp->n_value,
! 			       symnum * ONDISK_SYMBOL_SIZE,
  			       global_psymbols.next, static_psymbols.next);
  
  	  continue;
***************
*** 2417,2422 ****
--- 2500,2510 ----
  	case N_STSYM:		/* Data seg var -- static  */
  	case N_LCSYM:		/* BSS      "  */
  
+ #if defined (N_NBSTS)
+ 	case N_NBSTS:           /* Gould nobase.  */
+ 	case N_NBLCS:           /* symbols.  */
+ #endif
+ 
  	/* Following may probably be ignored; I'll leave them here
  	   for now (until I do Pascal and Modula 2 extensions).  */
  
***************
*** 2601,2607 ****
    if (pst)
      {
        end_psymtab (pst, psymtab_include_list, includes_used,
! 		   symnum * sizeof (struct nlist), end_of_text_addr,
  		   dependency_list, dependencies_used,
  		   global_psymbols.next, static_psymbols.next);
        includes_used = 0;
--- 2689,2695 ----
    if (pst)
      {
        end_psymtab (pst, psymtab_include_list, includes_used,
! 		   symnum * ONDISK_SYMBOL_SIZE, end_of_text_addr,
  		   dependency_list, dependencies_used,
  		   global_psymbols.next, static_psymbols.next);
        includes_used = 0;
***************
*** 2905,2910 ****
--- 2993,2999 ----
  
        READ_FILE_HEADERS (desc, name);
  
+ #if 0
        /* Read in the string table */
        lseek (desc, STRING_TABLE_OFFSET, L_SET);
        READ_STRING_TABLE_SIZE (stsize);
***************
*** 2930,2935 ****
--- 3019,3027 ----
        val = myread (desc, stringtab, stsize);
        if (val < 0)
  	perror_with_name (name);
+ #endif /* 0 */
+       stringtab = symfile_string_table;
+       stsize = symfile_string_table_size;
  
        psymtab_to_symtab_1 (pst, desc, stringtab, stsize,
  			   SYMBOL_TABLE_OFFSET);
***************
*** 3064,3079 ****
  
       Detecting this in read_dbx_symtab
       would slow down initial readin, so we look for it here instead.  */
!   if (sym_offset >= sizeof (struct nlist))
      {
!       lseek (desc, sym_offset - sizeof (struct nlist), L_INCR);
!       fill_symbuf ();
        bufp = &symbuf[symbuf_idx++];
  
!       if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size)
! 	error ("Invalid symbol data: bad string table offset: %d",
! 	       bufp->n_un.n_strx);
!       namestring = bufp->n_un.n_strx + stringtab;
  
        processing_gcc_compilation =
  	(bufp->n_type == N_TEXT
--- 3156,3173 ----
  
       Detecting this in read_dbx_symtab
       would slow down initial readin, so we look for it here instead.  */
! 
!   conv_symnum = 0;
!   symnum_limit = sym_size / ONDISK_SYMBOL_SIZE;
! 
! #ifndef STABS_BEFORE_GCC_COMPILED
!   if (sym_offset >= ONDISK_SYMBOL_SIZE)
      {
!       lseek (desc, sym_offset - ONDISK_SYMBOL_SIZE, L_INCR);
!       fill_symbuf (stringtab);
        bufp = &symbuf[symbuf_idx++];
  
!       SET_NAMESTRING();
  
        processing_gcc_compilation =
  	(bufp->n_type == N_TEXT
***************
*** 3080,3085 ****
--- 3174,3180 ----
  	 && !strcmp (namestring, GCC_COMPILED_FLAG_SYMBOL));
      }
    else
+ #endif /* not STABS_BEFORE_GCC_COMPILED */
      {
        /* The N_SO starting this symtab is the first symbol, so we
  	 better not check the symbol before it.  I'm not this can
***************
*** 3089,3106 ****
      }
  
    if (symbuf_idx == symbuf_end)
!     fill_symbuf();
    bufp = &symbuf[symbuf_idx];
    if ((unsigned char) bufp->n_type != N_SO)
      fatal("First symbol in segment of executable not a source symbol");
  
    for (symnum = 0;
!        symnum < sym_size / sizeof(struct nlist);
         symnum++)
      {
        QUIT;			/* Allow this to be interruptable */
        if (symbuf_idx == symbuf_end)
! 	fill_symbuf();
        bufp = &symbuf[symbuf_idx++];
        type = bufp->n_type;
  
--- 3184,3201 ----
      }
  
    if (symbuf_idx == symbuf_end)
!     fill_symbuf(stringtab);
    bufp = &symbuf[symbuf_idx];
    if ((unsigned char) bufp->n_type != N_SO)
      fatal("First symbol in segment of executable not a source symbol");
  
    for (symnum = 0;
!        symnum < sym_size / ONDISK_SYMBOL_SIZE;
         symnum++)
      {
        QUIT;			/* Allow this to be interruptable */
        if (symbuf_idx == symbuf_end)
! 	fill_symbuf(stringtab);
        bufp = &symbuf[symbuf_idx++];
        type = bufp->n_type;
  
***************
*** 3108,3117 ****
  	  (type == N_TEXT || type == N_DATA || type == N_BSS))
  	bufp->n_value += text_offset;
  
!       if (bufp->n_un.n_strx < 0 || bufp->n_un.n_strx >= stringtab_size)
! 	error ("Invalid symbol data: bad string table offset: %d",
! 	       bufp->n_un.n_strx);
!       namestring = bufp->n_un.n_strx + stringtab;
  
        if (type & N_STAB)
  	process_one_symbol(type, bufp->n_desc,
--- 3203,3209 ----
  	  (type == N_TEXT || type == N_DATA || type == N_BSS))
  	bufp->n_value += text_offset;
  
!       SET_NAMESTRING();
  
        if (type & N_STAB)
  	process_one_symbol(type, bufp->n_desc,
***************
*** 3227,3232 ****
--- 3319,3332 ----
  
    switch (type)
      {
+ #ifdef N_MULTI_LINE_TYPE
+     case  N_MULTI_LINE_TYPE:
+       sun_mark_linenos (value,desc);
+       break;
+     case  N_LINE_COUNT_TYPE:
+       sun_enter_linenos (value);
+       break;
+ #endif
      case N_FUN:
      case N_FNAME:
        /* Either of these types of symbols indicates the start of
***************
*** 3322,3329 ****
--- 3422,3434 ----
  	    new->start_addr = value;
  	  /* Make a block for the local symbols within.  */
  	  finish_block (0, &local_symbols, new->old_blocks,
+ #if defined (BLOCK_ADDRESS_ABSOLUTE)
+ 			new->start_addr,
+ 			value);
+ #else
  			new->start_addr + last_source_start_addr,
  			value + last_source_start_addr);
+ #endif
  	}
        else
  	{
***************
*** 3477,3488 ****
  /* Read in another .o file and create a symtab entry for it.*/
  
  static void
! read_addl_syms (desc, stringtab, nlistlen, text_addr, text_size)
       int desc;
       register char *stringtab;
       register int nlistlen;
       unsigned text_addr;
       int text_size;
  {
    FILE *stream = fdopen (desc, "r");
    register char *namestring;
--- 3582,3594 ----
  /* Read in another .o file and create a symtab entry for it.*/
  
  static void
! read_addl_syms (desc, stringtab, nlistlen, text_addr, text_size, stringtab_size)
       int desc;
       register char *stringtab;
       register int nlistlen;
       unsigned text_addr;
       int text_size;
+      int  stringtab_size;
  {
    FILE *stream = fdopen (desc, "r");
    register char *namestring;
***************
*** 3492,3503 ****
  #ifdef N_BINCL
    subfile_stack = 0;
  #endif
  
    last_source_file = 0;
    bzero (global_sym_chain, sizeof global_sym_chain);
    symtab_input_desc = desc;
    stringtab_global = stringtab;
!   fill_symbuf ();
  
    for (symnum = 0; symnum < nlistlen; symnum++)
      {
--- 3598,3611 ----
  #ifdef N_BINCL
    subfile_stack = 0;
  #endif
+   conv_symnum = 0;
+   symnum_limit = nlistlen;
  
    last_source_file = 0;
    bzero (global_sym_chain, sizeof global_sym_chain);
    symtab_input_desc = desc;
    stringtab_global = stringtab;
!   fill_symbuf (stringtab);
  
    for (symnum = 0; symnum < nlistlen; symnum++)
      {
***************
*** 3506,3515 ****
  
        QUIT;	/* allow this to be interruptable */
        if (symbuf_idx == symbuf_end)
! 	fill_symbuf ();
        bufp = &symbuf[symbuf_idx++];
        type = bufp->n_type & N_TYPE;
!       namestring = bufp->n_un.n_strx + stringtab;
  
        if( (type == N_TEXT) || (type == N_DATA) || (type == N_BSS) )
  	{
--- 3614,3623 ----
  
        QUIT;	/* allow this to be interruptable */
        if (symbuf_idx == symbuf_end)
! 	fill_symbuf (stringtab);
        bufp = &symbuf[symbuf_idx++];
        type = bufp->n_type & N_TYPE;
!       SET_NAMESTRING();
  
        if( (type == N_TEXT) || (type == N_DATA) || (type == N_BSS) )
  	{
***************
*** 3549,3557 ****
  	  int used_up = 0;
  
  	  /* Record the location of _etext.  */
! 	  if (type == (N_TEXT | N_EXT)
! 	      && !strcmp (namestring, "_etext"))
! 	    end_of_text_addr = bufp->n_value;
  
  #if 0
  	  /* 25 Sep 89: The following seems to be stolen from
--- 3657,3664 ----
  	  int used_up = 0;
  
  	  /* Record the location of _etext.  */
! 	  if (type == (N_TEXT | N_EXT) && IS_ETEXT (namestring))
! 	      end_of_text_addr = bufp->n_value;
  
  #if 0
  	  /* 25 Sep 89: The following seems to be stolen from
***************
*** 3742,3749 ****
    global_symbols = 0;
    make_cleanup (really_free_pendings, 0);
  
    read_addl_syms (desc, stringtab, NUMBER_OF_SYMBOLS, text_addr,
! 		  SIZE_OF_TEXT_SEGMENT);
  
  
    /* Sort symbols alphabetically within each block.  */
--- 3849,3859 ----
    global_symbols = 0;
    make_cleanup (really_free_pendings, 0);
  
+ #ifdef EXTRA_STRINGS_INIT
+   EXTRA_STRINGS_INIT ( 1 )
+ #endif
    read_addl_syms (desc, stringtab, NUMBER_OF_SYMBOLS, text_addr,
! 		  SIZE_OF_TEXT_SEGMENT, buffer /* really string table size */); 
  
  
    /* Sort symbols alphabetically within each block.  */
***************
*** 4162,4169 ****
--- 4272,4318 ----
      }
    undef_types_length = 0;
  }
+ /* Skip rest of this symbol and return an error type.
  
+    General notes on error recovery:  error_type always skips to the
+    end of the symbol (modulo cretinous dbx symbol name continuation).
+    Thus code like this:
  
+    if (*(*pp)++ != ';')
+      return error_type (pp);
+ 
+    is wrong because if *pp starts out pointing at '\0' (typically as the
+    result of an earlier error), it will be incremented to point to the
+    start of the next symbol, which might produce strange results, at least
+    if you run off the end of the string table.  Instead use
+ 
+    if (**pp != ';')
+      return error_type (pp);
+    ++*pp;
+ 
+    And in case it isn't obvious, the point of all this hair is so the compiler
+    can define new types and new syntaxes, and old versions of the
+    debugger will be able to read the new symbol tables.  */
+ static struct type *
+ error_type (pp)
+      char **pp;
+ {
+   while (1)
+     {
+       /* Skip to end of symbol.  */
+       while (**pp != '\0')
+ 	(*pp)++;
+ 
+       /* Check for and handle cretinous dbx symbol name continuation!  */
+       if ((*pp)[-1] == '\\')
+ 	*pp = next_symbol_text ();
+       else
+ 	break;
+     }
+   return builtin_type_error;
+ }
+ 
+ 
  
  /* Read a dbx type reference or definition;
     return the type that is meant.
***************
*** 4566,4572 ****
  	  if (**pp == '\\')
  	    *pp = next_symbol_text ();
  
! 	  switch (*(*pp)++)
  	    {
  	    case '0':
  	      via_virtual = 0;
--- 4715,4721 ----
  	  if (**pp == '\\')
  	    *pp = next_symbol_text ();
  
! 	  switch (**pp)
  	    {
  	    case '0':
  	      via_virtual = 0;
***************
*** 4578,4585 ****
  	      error ("Invalid symbol data: bad visibility format at symtab pos %d",
  		     symnum);
  	    }
  
! 	  switch (*(*pp)++)
  	    {
  	    case '0':
  	      via_public = 0;
--- 4727,4735 ----
  	      error ("Invalid symbol data: bad visibility format at symtab pos %d",
  		     symnum);
  	    }
+ 	  ++*pp;
  
! 	  switch (**pp)
  	    {
  	    case '0':
  	      via_public = 0;
***************
*** 4588,4597 ****
  	      via_public = 1;
  	      break;
  	    default:
! 	      error ("Invalid symbol data: bad visibility format at symtab pos %d.",
! 		     symnum);
  	    }
  
  	  /* Offset of the portion of the object corresponding to
  	     this baseclass.  Always zero in the absence of
  	     multiple inheritance.  */
--- 4738,4749 ----
  	      via_public = 1;
  	      break;
  	    default:
! 	      /* Bad visibility format.  */
! 	      return error_type (pp);
  	    }
  
+ 	  ++*pp;
+ 
  	  /* Offset of the portion of the object corresponding to
  	     this baseclass.  Always zero in the absence of
  	     multiple inheritance.  */
***************
*** 4707,4714 ****
   	  continue;
   	}
         else if (**pp != ',')
! 	 error ("Invalid symbol data: bad structure-type format at symtab pos %d.",
! 	       symnum);
        (*pp)++;			/* Skip the comma.  */
        list->field.bitpos = read_number (pp, ',');
        list->field.bitsize = read_number (pp, ';');
--- 4859,4867 ----
   	  continue;
   	}
         else if (**pp != ',')
! 	 /* Bad structure-type format.  */
! 	 return error_type (pp);
! 
        (*pp)++;			/* Skip the comma.  */
        list->field.bitpos = read_number (pp, ',');
        list->field.bitsize = read_number (pp, ';');
***************
*** 4807,4815 ****
  	  while (*p != ':') p++;
  	  if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && (*pp)[2] == '$')
  	    {
! 	      static char opname[32] = "operator ";
! 	      char *o = opname + 9;
! 
  	      /* Skip past '::'.  */
  	      p += 2;
  	      while (*p != '.')
--- 4960,4970 ----
  	  while (*p != ':') p++;
  	  if ((*pp)[0] == 'o' && (*pp)[1] == 'p' && (*pp)[2] == '$')
  	    {
! 	      /* This lets the user type "break operator+".
! 	         We could just put in "+" as the name, but that wouldn't
! 		 work for "*".  */
! 	      static char opname[32] = "operator";
! 	      char *o = opname + 8;
  	      /* Skip past '::'.  */
  	      p += 2;
  	      while (*p != '.')
***************
*** 4836,4843 ****
  
  	      new_sublist->fn_field.type = read_type (pp);
  	      if (**pp != ':')
! 		error ("invalid symtab info for method at symbol number %d.",
! 		       symnum);
  	      *pp += 1;
  	      new_sublist->fn_field.args =
  		TYPE_ARG_TYPES (new_sublist->fn_field.type);
--- 4991,4999 ----
  
  	      new_sublist->fn_field.type = read_type (pp);
  	      if (**pp != ':')
! 		/* Invalid symtab info for method.  */
! 		return error_type (pp);
! 
  	      *pp += 1;
  	      new_sublist->fn_field.args =
  		TYPE_ARG_TYPES (new_sublist->fn_field.type);
***************
*** 4975,4981 ****
  
  	  t = read_type (pp);
  	  p = (*pp)++;
! 	  while (*p != ';') p++;
  	  TYPE_VPTR_BASETYPE (type) = t;
  	  if (type == t)
  	    {
--- 5131,5141 ----
  
  	  t = read_type (pp);
  	  p = (*pp)++;
! 	  while (*p != '\0' && *p != ';') p++;
! 	  if (*p == '\0')
! 	    /* Premature end of symbol.  */
! 	    return error_type (pp);
! 	  
  	  TYPE_VPTR_BASETYPE (type) = t;
  	  if (type == t)
  	    {
***************
*** 4989,4995 ****
  		    break;
  		  }
  	      if (i < 0)
! 		error ("virtual function table field not found");
  	    }
  	  else
  	    TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, 1));
--- 5149,5156 ----
  		    break;
  		  }
  	      if (i < 0)
! 		/* Virtual function table field not found.  */
! 		return error_type (pp);
  	    }
  	  else
  	    TYPE_VPTR_FIELDNO (type) = TYPE_VPTR_FIELDNO (TYPE_BASECLASS (type, 1));
***************
*** 5031,5038 ****
       for these, produce a type like float[][].  */
  
    index_type = read_type (pp);
!   if (*(*pp)++ != ';')
!     error ("Invalid symbol data; improper format of array type decl.");
  
    if (!(**pp >= '0' && **pp <= '9'))
      {
--- 5192,5201 ----
       for these, produce a type like float[][].  */
  
    index_type = read_type (pp);
!   if (**pp != ';')
!     /* Improper format of array type decl.  */
!     return error_type (pp);
!   ++*pp;
  
    if (!(**pp >= '0' && **pp <= '9'))
      {
***************
*** 5303,5309 ****
    else if (n2 >= MIN_OF_TYPE(long) && n3 <= MAX_OF_TYPE(long))
      TYPE_LENGTH (result_type) = sizeof (long);
    else
!     error ("Ranged type doesn't fit within known sizes.");
  
    TYPE_LENGTH (result_type) = TYPE_LENGTH (TYPE_TARGET_TYPE (result_type));
    TYPE_CODE (result_type) = TYPE_CODE_RANGE;
--- 5466,5473 ----
    else if (n2 >= MIN_OF_TYPE(long) && n3 <= MAX_OF_TYPE(long))
      TYPE_LENGTH (result_type) = sizeof (long);
    else
!     /* Ranged type doesn't fit within known sizes.  */
!     return error_type (pp);
  
    TYPE_LENGTH (result_type) = TYPE_LENGTH (TYPE_TARGET_TYPE (result_type));
    TYPE_CODE (result_type) = TYPE_CODE_RANGE;
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/expread.tab.c ./expread.tab.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/expread.tab.c	Wed Jan 10 22:34:38 1990
--- ./expread.tab.c	Wed Jul 18 22:22:10 1990
***************
*** 137,143 ****
  #ifndef YYLTYPE
  typedef
    struct yyltype
!  {
        int timestamp;
        int first_line;
        int first_column;
--- 137,143 ----
  #ifndef YYLTYPE
  typedef
    struct yyltype
!     {
        int timestamp;
        int first_line;
        int first_column;
***************
*** 145,151 ****
        int last_column;
        char *text;
     }
!  yyltype;
  
  #define YYLTYPE yyltype
  #endif
--- 145,151 ----
        int last_column;
        char *text;
     }
!   yyltype;
  
  #define YYLTYPE yyltype
  #endif
***************
*** 197,204 ****
      50,    51,    52
  };
  
! #if YYDEBUG != 0
! static const short yyrline[] = { 0,
     190,   194,   195,   200,   203,   206,   210,   214,   218,   222,
     226,   230,   234,   238,   244,   248,   254,   258,   262,   266,
     272,   275,   279,   283,   289,   295,   301,   305,   309,   313,
--- 197,203 ----
      50,    51,    52
  };
  
! static const short yyrline[] = {     0,
     190,   194,   195,   200,   203,   206,   210,   214,   218,   222,
     226,   230,   234,   238,   244,   248,   254,   258,   262,   266,
     272,   275,   279,   283,   289,   295,   301,   305,   309,   313,
***************
*** 221,227 ****
  "DECREMENT","ARROW","'.'","'['","'('","'!'","'~'","']'","')'","'{'",
  "'}'","':'","start"
  };
- #endif
  
  static const short yyr1[] = {     0,
      63,    64,    64,    65,    65,    65,    65,    65,    65,    65,
--- 220,225 ----
Common subdirectories: /dca/local/gnu/gdb/gdb-3.5/dist-gdb/hp-include and ./hp-include
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/i386-dep.c ./i386-dep.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/i386-dep.c	Wed Jan 10 15:58:05 1990
--- ./i386-dep.c	Mon Aug 27 22:31:17 1990
***************
*** 34,41 ****
  #include <sys/ioctl.h>
  #include <fcntl.h>
  
! #ifdef COFF_ENCAPSULATE
! #include "a.out.encap.h"
  #else
  #include <a.out.h>
  #endif
--- 34,47 ----
  #include <sys/ioctl.h>
  #include <fcntl.h>
  
! #ifdef COFF_FORMAT
! # ifdef COFF_ENCAPSULATE
! #   include "a.out.encap.h"
! # else
! #   include "coff-dbx.h"
! #   include <linenum.h>
! #   include "stab.gnu.h"
! # endif
  #else
  #include <a.out.h>
  #endif
***************
*** 354,359 ****
--- 360,372 ----
  
  /* a.out header saved in core file.  */
    
+ #ifdef COFF_FORMAT
+ #undef CORE_AOUTHDR
+ #define CORE_AOUTHDR struct aouthdr
+ #undef AOUTHDR
+ #define AOUTHDR struct aouthdr
+ #endif
+ 
  extern AOUTHDR core_aouthdr;
  
  /* a.out header of exec file.  */
***************
*** 501,508 ****
  	aout_hdrsize = file_hdr.f_opthdr;
  	num_sections = file_hdr.f_nscns;
  
! 	if (read_aout_hdr (execchan, &exec_aouthdr, aout_hdrsize) < 0)
! 	  error ("\"%s\": can't read optional aouthdr", execfile);
  
  	if (read_section_hdr (execchan, _TEXT, &text_hdr, num_sections,
  			      aout_hdrsize) < 0)
--- 514,521 ----
  	aout_hdrsize = file_hdr.f_opthdr;
  	num_sections = file_hdr.f_nscns;
  
! 	if ( ! aout_hdrsize )
! 	  printf ("Warning:  no optional header--File may be relocatable.\n");
  
  	if (read_section_hdr (execchan, _TEXT, &text_hdr, num_sections,
  			      aout_hdrsize) < 0)
***************
*** 512,522 ****
  			      aout_hdrsize) < 0)
  	  error ("\"%s\": can't read data section header", execfile);
  
! 	text_start = exec_aouthdr.text_start;
! 	text_end = text_start + exec_aouthdr.tsize;
  	text_offset = text_hdr.s_scnptr;
! 	exec_data_start = exec_aouthdr.data_start;
! 	exec_data_end = exec_data_start + exec_aouthdr.dsize;
  	exec_data_offset = data_hdr.s_scnptr;
  	data_start = exec_data_start;
  	data_end += exec_data_start;
--- 525,535 ----
  			      aout_hdrsize) < 0)
  	  error ("\"%s\": can't read data section header", execfile);
  
! 	text_start = text_hdr.s_vaddr;
! 	text_end = text_start + text_hdr.s_size;
  	text_offset = text_hdr.s_scnptr;
! 	exec_data_start = data_hdr.s_vaddr;
! 	exec_data_end = exec_data_start + data_hdr.s_size;
  	exec_data_offset = data_hdr.s_scnptr;
  	data_start = exec_data_start;
  	data_end += exec_data_start;
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/main.c ./main.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/main.c	Fri Jan 26 12:12:59 1990
--- ./main.c	Fri Jul 13 23:08:17 1990
***************
*** 156,161 ****
--- 156,174 ----
  
  jmp_buf to_top_level;
  
+ /* This kludge is for the TTI Unicom "pbb" systems, which implement
+    the signal mask in signal() but not in setjmp()!!!  The expression
+    below will call setjmp, and then if setjmp returned nonzero, it executes
+    the sigsetmask and returns a 1 itself.  None of the setjmp callers
+    in this function care about the result from setjmp, only whether it
+    is zero or nonzero.  */
+ 
+ #ifdef SETJMP_MASKS_SIGNALS
+ #define kludge_setjmp(x) (setjmp(x) && (sigsetmask (0), 1))
+ #else
+ #define	kludge_setjmp(x)  setjmp(x)
+ #endif
+ 
  void
  return_to_top_level ()
  {
***************
*** 187,193 ****
  
    bcopy (to_top_level, saved, sizeof (jmp_buf));
  
!   if (setjmp (to_top_level) == 0)
      val = (*func) (arg);
    else
      {
--- 200,206 ----
  
    bcopy (to_top_level, saved, sizeof (jmp_buf));
  
!   if (kludge_setjmp (to_top_level) == 0)
      val = (*func) (arg);
    else
      {
***************
*** 351,357 ****
  
  	  if (++i == argc)
  	    fprintf (stderr, "No argument follows \"%s\".\n", arg);
! 	  if (!setjmp (to_top_level))
  	    {
  	      /* -s foo: get syms from foo.  -e foo: execute foo.
  		 -se foo: do both with foo.  -c foo: use foo as core dump.  */
--- 364,370 ----
  
  	  if (++i == argc)
  	    fprintf (stderr, "No argument follows \"%s\".\n", arg);
! 	  if (!kludge_setjmp (to_top_level))
  	    {
  	      /* -s foo: get syms from foo.  -e foo: execute foo.
  		 -se foo: do both with foo.  -c foo: use foo as core dump.  */
***************
*** 396,402 ****
  	     are treated as, first, the symbol/executable file
  	     and, second, the core dump file.  */
  	  count++;
! 	  if (!setjmp (to_top_level))
  	    switch (count)
  	      {
  	      case 1:
--- 409,415 ----
  	     are treated as, first, the symbol/executable file
  	     and, second, the core dump file.  */
  	  count++;
! 	  if (!kludge_setjmp (to_top_level))
  	    switch (count)
  	      {
  	      case 1:
***************
*** 427,433 ****
  	strcpy (homeinit, getenv ("HOME"));
  	strcat (homeinit, "/.gdbinit");
  	if (!inhibit_gdbinit && access (homeinit, R_OK) == 0)
! 	  if (!setjmp (to_top_level))
  	    source_command (homeinit);
  
  	/* Do stats; no need to do them elsewhere since we'll only
--- 440,446 ----
  	strcpy (homeinit, getenv ("HOME"));
  	strcat (homeinit, "/.gdbinit");
  	if (!inhibit_gdbinit && access (homeinit, R_OK) == 0)
! 	  if (!kludge_setjmp (to_top_level))
  	    source_command (homeinit);
  
  	/* Do stats; no need to do them elsewhere since we'll only
***************
*** 451,457 ****
  		 (char *) &cwdbuf,
  		 sizeof (struct stat)))
        if (!inhibit_gdbinit && access (".gdbinit", R_OK) == 0)
! 	if (!setjmp (to_top_level))
  	  source_command (".gdbinit");
    }
  
--- 464,470 ----
  		 (char *) &cwdbuf,
  		 sizeof (struct stat)))
        if (!inhibit_gdbinit && access (".gdbinit", R_OK) == 0)
! 	if (!kludge_setjmp (to_top_level))
  	  source_command (".gdbinit");
    }
  
***************
*** 471,477 ****
  
    while (1)
      {
!       if (!setjmp (to_top_level))
  	command_loop ();
        clearerr (stdin);		/* Don't get hung if C-d is typed.  */
      }
--- 484,490 ----
  
    while (1)
      {
!       if (!kludge_setjmp (to_top_level))
  	command_loop ();
        clearerr (stdin);		/* Don't get hung if C-d is typed.  */
      }
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/munch ./munch
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/munch	Wed Jul  5 12:46:28 1989
--- ./munch	Fri Jul 13 23:08:18 1990
***************
*** 10,17 ****
      nm $* | egrep '^(.*[^a-zA-Z_]_|_)initialize_' | \
  	sed -e 's/^.*\(_initialize_[a-zA-Z0-9_]*\)[^a-zA-Z0-9_].*$/   \1 ();/'
  else
!     nm -p $* | egrep 'T *__initialize_' | \
! 	sed -e 's/^.*T *_*\(.*\)/    _\1 ();/'
  fi
  
  echo '}'
--- 10,25 ----
      nm $* | egrep '^(.*[^a-zA-Z_]_|_)initialize_' | \
  	sed -e 's/^.*\(_initialize_[a-zA-Z0-9_]*\)[^a-zA-Z0-9_].*$/   \1 ();/'
  else
! 
!   # if (NAMES_HAVE_UNDERSCORES)
! 
!     if test ""`nm version.o |grep -c _version` != 0  ; then
!         nm -p $* | egrep 'T *__initialize_' | \
! 	    sed -e 's/^.*T *_*\(.*\)/    _\1 ();/'
!     else
!         nm -p $* | egrep 'T *_initialize_' | \
! 	    sed -e 's/^.*T *_*\(.*\)/    _\1 ();/'
!     fi
  fi
  
  echo '}'
Common subdirectories: /dca/local/gnu/gdb/gdb-3.5/dist-gdb/readline and ./readline
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/symseg.h ./symseg.h
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/symseg.h	Sat Jan  6 19:11:57 1990
--- ./symseg.h	Fri Jul 13 23:08:19 1990
***************
*** 117,122 ****
--- 117,123 ----
    TYPE_CODE_SET,		/* Pascal sets */
    TYPE_CODE_RANGE,		/* Range (integers within spec'd bounds) */
    TYPE_CODE_PASCAL_ARRAY,	/* Array with explicit type of index */
+   TYPE_CODE_ERROR,		/* Unknown type */
  
    /* C++ */
    TYPE_CODE_MEMBER,		/* Member type */
***************
*** 464,473 ****
   * Vectors of all partial symbols read in from file; actually declared
   * and used in dbxread.c.
   */
! extern struct psymbol_allocation_list {
    struct partial_symbol *list, *next;
    int size;
! } global_psymbols, static_psymbols;
  
  
  /* Source-file information.
--- 465,474 ----
   * Vectors of all partial symbols read in from file; actually declared
   * and used in dbxread.c.
   */
! struct psymbol_allocation_list {
    struct partial_symbol *list, *next;
    int size;
! };
  
  
  /* Source-file information.
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/symtab.c ./symtab.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/symtab.c	Wed Jan 10 15:56:39 1990
--- ./symtab.c	Fri Jul 13 23:08:30 1990
***************
*** 65,70 ****
--- 65,71 ----
  #endif
  struct type *builtin_type_float;
  struct type *builtin_type_double;
+ struct type *builtin_type_error;
  
  /* Block in which the most recently searched-for symbol was found.
     Might be better to make this a parameter to lookup_symbol and 
***************
*** 2432,2436 ****
--- 2433,2439 ----
    builtin_type_unsigned_long_long = 
      init_type (TYPE_CODE_INT, sizeof (long long), 1, "unsigned long long");
  #endif
+   builtin_type_error = init_type (TYPE_CODE_ERROR, 0, 0, "<unknown type>");
+ 
  }
  
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/symtab.h ./symtab.h
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/symtab.h	Thu Sep  7 17:59:14 1989
--- ./symtab.h	Fri Jul 13 23:08:31 1990
***************
*** 159,164 ****
--- 159,168 ----
  
  struct partial_symtab *partial_symtab_list;
  
+ /* From symtab.c */
+ 
+ extern struct psymbol_allocation_list static_psymbols, global_psymbols;
+ 
  /* This symtab variable specifies the current file for printing source lines */
  
  struct symtab *current_source_symtab;
***************
*** 318,323 ****
--- 322,330 ----
  extern struct type *builtin_type_unsigned_long;
  extern struct type *builtin_type_float;
  extern struct type *builtin_type_double;
+ /* This type represents a type that was unrecognized in symbol
+    read-in.  */
+ extern struct type *builtin_type_error;
  
  #ifdef LONG_LONG
  extern struct type *builtin_type_long_long;
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/readline/Makefile ./readline/Makefile
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/readline/Makefile	Wed Feb  7 22:05:33 1990
--- ./readline/Makefile	Fri Jul 13 23:08:32 1990
***************
*** 33,39 ****
  
  DEBUG_FLAGS = -g
  LDFLAGS = $(DEBUG_FLAGS) 
! CFLAGS = $(DEBUG_FLAGS) $(TYPE) $(SYSV) -I.
  
  # A good alternative is gcc -traditional.
  #CC = gcc -traditional
--- 33,39 ----
  
  DEBUG_FLAGS = -g
  LDFLAGS = $(DEBUG_FLAGS) 
! CFLAGS = $(DEBUG_FLAGS) $(TYPES) $(SIGS)  $(SYSV) -I.
  
  # A good alternative is gcc -traditional.
  #CC = gcc -traditional
diff -rc /dca/local/gnu/gdb/gdb-3.5/dist-gdb/readline/readline.c ./readline/readline.c
*** /dca/local/gnu/gdb/gdb-3.5/dist-gdb/readline/readline.c	Sun Nov 26 13:31:36 1989
--- ./readline/readline.c	Fri Jul 13 23:08:43 1990
***************
*** 320,330 ****
    while (!rl_done)
      {
        int lk = last_command_was_kill;
        int code = setjmp (readline_top_level);
  
        if (code)
! 	rl_redisplay ();
! 
        if (!rl_pending_input)
  	{
  	  /* Then initialize the argument and number of keys read. */
--- 320,337 ----
    while (!rl_done)
      {
        int lk = last_command_was_kill;
+ #ifdef SETJMP_MASKS_SIGNALS
+       int mask = sigblock(0);
+ #endif
        int code = setjmp (readline_top_level);
  
        if (code)
!         {
! #ifdef SETJMP_MASKS_SIGNALS
! 	  sigsetmask(mask);
! #endif
! 	  rl_redisplay ();
!         }
        if (!rl_pending_input)
  	{
  	  /* Then initialize the argument and number of keys read. */
