Thu Dec 31 11:06:38 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (BISON):  Add comment that when bison is used, it
	must include the "-y" option.
	* c-exp.y, m2-exp.y (yyrule, yyname, yyss, yyssp, yyvs, yyvsp):
	Remove defines to remap non-yacc symbols, thus backing out of
	previous recent changes.  Standard policy is that non-yacc parser
	generators get fixed, rather than adding bug workarounds in gdb
	for each new one that pops up.  Expand comment to note this.
	* c-exp.y, m2-exp.y (YYDEBUG):  Revert back to disabled by default.

Thu Dec 31 09:03:02 1992  Stu Grossman  (grossman at cygnus.com)

	* partial-stab.h (near N_BINCL):  Remove redundant code in N_BINCL
	case.  Use code in N_SOL.

	* paread.c:  New file that contains all HPPA/HPUX symbol reading
	code.
	* dbxread.c:  Remove almost all HPPA/HPUX symbol reading code.
	* (dbx_symfile_init):  Use sizeof(long) instead of 4.
	* (dbx_symfile_offsets):  Make static.
	* (pastab_build_psymtabs):  New interface routine for paread to
	send stabs into dbxread.
	* gdb-stabs.h:  Remove gobs of HPPA cruft.

Wed Dec 30 19:47:13 1992  Fred Fish  (fnf@cygnus.com)

	* c-exp.y, m2-exp.y (yyrule, yyname):  Remap like other yy* names
	for byacc.
	* ch-exp.y (yyrule, yyname):  Remap like other yy* names for byacc.

	* c-exp.y, m2-exp.y (yyreds, yytoks):  Remap like other yy* names.
	* c-exp.y, m2-exp.y (YYDEBUG):  Define if MAINTENANCE_CMDS is defined
	and YYDEBUG is not already defined.
	* c-exp.y (strncmp):  Replace throughout with STREQN, missed
	them during the previous replacements.
	* printcmd.c (_initialize_printcmd):  Update internal documentation
	for "set" command to note that the assignment syntax is language
	dependent.
	* ch-exp.y (yyreds, yytoks):  Remap like other yy* names.
	* ch-exp.y (YYDEBUG):  Define if MAINTENANCE_CMDS is defined
	and YYDEBUG is not already defined.
	* ch-exp.y (GDB_REGNAME, GDB_LAST, GDB_VARIABLE, GDB_ASSIGNMENT,
	single_assignment_action): New terminals and nonterminal for gdb
	extensions to chill expression grammer.
	* ch-exp.y (match_dollar_tokens):  Lexer routine to match all
	tokens that start with '$' (register names, convenience vars, etc).
	* ch-exp.y (tokentab2):  Add GDB_ASSIGNMENT.
	* ch-exp.y (yylex):  Call match_dollar_tokens.

Mon Dec 28 15:00:01 1992  Stu Grossman  (grossman at cygnus.com)

	* hppah-tdep.c (skip_trampoline_code):  Use new macros for
	accessing minimal symbol data.
	* infcmd.c (read_pc):  Use #ifdef, not #if.
	* symfile.c (syms_from_objfile):  Add CONST to decl for targets.
	* tm-hppa.h (FIX_CALL_DUMMY):  Use new macros for accessing
	minimal symbol data.

	* hppah-tdep.c (frame_saved_pc):  Use better test for outermost
	frame.  Use find_return_regnum to find the caller.
	* (find_unwind_entry):  New routine to locate stack frame info
	associated with a procedure.  This looks in the $UNWIND_START$
	section in the SOM file.
	* (find_return_regnum):  New routine.  Uses find_unwind_entry() to
	figure out where the caller's return address is stored.
	* (find_proc_framesize):  New routine.  Uses find_unwind_entry()
	to figure out the frame size for a procedure.
	* (saved_pc_after_call):  New routine, moved from tm-hppa.h.
	* (init_extra_frame_info):  New routine.  Corrects PC and FP for
	outermost frame if necessary.
	* (frame_chain):  New routine, moved from tm-hppa.h.
	* (skip_trampoline_code):  Handle computed function calls (ie:
	calls from $$dyncall).
	* (unwind_command):  Temporary support function to allow user
	to control/observe aspects of the unwind (stack frame) info.
	* infcmd.c (read_pc):  (Temporary), put a hack in to see if the PC
	was in a system call, if so, then read the PC from r31.
	* tm-hppah.h (SKIP_TRAMPOLINE_CODE, IN_SOLIB_TRAMPOLINE):  Deal
	with extra arg for skip_trampoline_code().
	* (INIT_EXTRA_FRAME_INFO):  Define to point at subr (see above).
	* (FRAME_CHAIN, FRAME_CHAIN_VALID):  Turn into real subroutines.
	* tm-hppa.h (SAVED_PC_AFTER_CALL):  Turn into real subroutine.

Sun Dec 27 17:34:15 1992  Fred Fish  (fnf@cygnus.com)

	* dbxread.c (dbx_symfile_init, elfstab_build_psymtabs):
	Call new bfd_get_size() and verify that string table is no larger
	than the file that is supposed to contain it.
	* symfile.c (syms_from_objfile):  Only complain about configured
	NAMES_HAVE_UNDERSCORE differences between gdb and bfd if the
	current target is the default BFD target.

Sat Dec 26 20:51:41 1992  Fred Fish  (fnf@cygnus.com)

	* solib.c (BKPT_AT_MAIN):  Change to BKPT_AT_SYMBOL.
	* solib.c (bkpt_names):  New array of symbol names to try to
	use for the "mapping complete" breakpoint.  Configurable
	define SOLIB_BKPT_NAME is first one to try.
	* solib.c (find_solib):  Test debug_base for nonzero rather
	than just greater than zero.
	* solib.c (enable_break):  Use bkpt_names to look up address
	at which to set "mapping complete" breakpoint.

Tue Dec 22 20:33:38 1992  Fred Fish  (fnf@cygnus.com)

	* defs.h (STRCMP, STREQ, STREQN):  New macros.
	* defs.h (demangle_and_match):  Remove prototype.
	* dwarfread.c (STREQ, STREQN):  Remove macros, replaced with STREQ
	  and STREQN defined in defs.h.
	* dwarfread.c (set_cu_language):  For completely unknown languages,
	  try to deduce the language from the filename.  Retain behavior
	  that for known languages we don't know how to handle, we use
	  language_unknown.
	* dwarfread.c (enum_type, symthesize_typedef):  Initialize language
	  and demangled name fields in symbol.
	* dwarfread.c, mipsread.c, partial-stab.h:  For all usages of
	  ADD_PSYMBOL_TO_LIST, add language and objfile parameters.
	* dwarfread.c (new_symbol):  Attempt to demangle C++ symbol names
	  and cache the results in SYMBOL_DEMANGLED_NAME for the symbol.
	* elfread.c (STREQ):  Remove macro, use STREQ defined in defs.h.
	  Replace usages throughout.
	* elfread.c (demangle.h):  Include.
	* elfread.c (record_minimal_symbol):  Remove prototype and function.
	* gdbtypes.h, symtab.h (B_SET, B_CLR, B_TST, B_TYPE, B_BYTES,
	  B_CLRALL):  Moved from symtab.h to gdbtypes.h.
	* infcmd.c (jump_command):  Remove code to demangle name and add
	  it to a cleanup list.  Now just use SYMBOL_DEMANGLED_NAME.
	* minsyms.c (demangle.h):  Include.
	* minsyms.c (lookup_minimal_symbol):  Indent comment to match code.
	* minsyms.c (install_minimal_symbols):  Attempt to demangle symbol
	  names as C++ names, and cache them in SYMBOL_DEMANGLED_NAME.
	* mipsread.c (psymtab_language):  Add static variable.
	* stabsread.c (demangle.h):  Include.
	* stabsread.c (define_symbol):  Attempt to demangle C++ symbol
	  names and cache them in the SYMBOL_DEMANGLED_NAME field.
	* stack.c (return_command):  Remove explicit demangling of name
	  and use of cleanups.  Just use SYMBOL_DEMANGLED_NAME. 
	* symfile.c (demangle.h):  Include.
	* symfile.c (add_psymbol_to_list, add_psymbol_addr_to_list):  Fix
	  to match macros in symfile.h and allow them to be compiled
	  if INLINE_ADD_PSYMBOL is not true.
	* symfile.h (INLINE_ADD_PSYMBOL):  Default to true if not set.
	* symfile.h (ADD_PSYMBOL_*):  Add language and objfile parameters.
	  Add code to demangle and cache C++ symbol names.  Use macro form
	  if INLINE_ADD_PSYMBOL is true, otherwise use C function form.
	* symmisc.c (add_psymbol_to_list, add_psymbol_addr_to_list):
	  Remove, also defined in symfile.c, which we already fixed.
	* symtab.c (expensive_mangler):  Remove prototype and function.
	* symtab.c (find_methods):  Remove physnames parameter and fix
	  prototype to match.
	* symtab.c (completion_list_add_symbol):  Name changed to
	  completion_list_add_name.
	* symtab.c (COMPLETION_LIST_ADD_SYMBOL):  New macro, adds both
	  the normal symbol name and the cached C++ demangled name.
	* symtab.c (lookup_demangled_partial_symbol,
	  lookup_demangled_block_symbol):  Remove prototypes and functions.
	* symtab.c (lookup_symbol):  Remove use of expensive_mangler,
	  use lookup_block_symbol instead of lookup_demangled_block_symbol.
	  Remove code to try demangling names and matching them.
	* symtab.c (lookup_partial_symbol, lookup_block_symbol):
	  Fix to try matching the cached demangled name if no match is
	  found using the regular symbol name.
	* symtab.c (find_methods):  Remove unused physnames array.
	* symtab.c (name_match, NAME_MATCH):  Remove function and macro,
	  replaced with SYMBOL_MATCHES_REGEXP from symtab.h.
	* symtab.c (completion_list_add_symbol):  Rewrite to use cached
	  C++ demangled symbol names.
	* symtab.h:  Much reformatting of structures and such to add
	  whitespace to make them more readable, and make them more
	  consistent with other gdb structure definitions.
	* symtab.h (general_symbol_info): New struct containing fields
	  common to all symbols.
	* symtab.h (SYMBOL_LANGUAGE, SYMBOL_DEMANGLED_NAME,
	  SYMBOL_SOURCE_NAME, SYMBOL_LINKAGE_NAME, SYMBOL_MATCHES_NAME,
	  SYMBOL_MATCHES_REGEXP, MSYMBOL_INFO, MSYMBOL_TYPE):  New macros.
	* symtab. (struct minimal_symbol, struct partial_symbol, struct
	  symbol): Use general_symbol_info struct.
	* utils.c (demangle_and_match):  Remove, no longer used.
	* valops.c (demangle.h):  Include.	
	* xcoffexec.c (eq):  Remove macro, replace usages with STREQ.
	* blockframe.c, breakpoint.c, c-exp.y, c-valprint.c, dbxread.c,
	  infcmd.c, m2-exp.y, minsyms.c, objfiles.h, solib.c, stack.c,
	  symmisc.c, symtab.c, valops.c:  Replace references to minimal
	  symbol fields with appropriate macros.
	* breakpoint.c, buildsym.c, c-exp.y, c-typeprint.c, c-valprint.c,
	  coffread.c, command.c, convex-tdep.c, cp-valprint.c, dbxread.c,
	  demangle.c, elfread.c, energize.c, environ.c, exec.c,
	  gdbtypes.c, i960-tdep.c, infrun.c, infrun-hacked.c, language.c,
	  main.c, minsyms.c, mipsread.c, partial-stab.h, remote-es1800.c,
	  remote-nindy.c, remote-udi.c, rs6000-tdep.c, solib.c, source.c,
	  sparc-pinsn.c, stabsread.c, standalone.c, state.c, stuff.c, 
	  symfile.c, symmisc.c, symtab.c, symtab.h, tm-sysv4.h,
	  tm-ultra3.h, values.c, xcoffexec.c, xcoffread.c:  Replace strcmp
	  and strncmp usages with STREQ, STREQN, or STRCMP as appropriate.
	* breakpoint.c, buildsym.c, c-typeprint.c, expprint.c, findvar.c,
	  mipsread.c, printcmd.c, source.c, stabsread.c, stack.c,
	  symmisc.c, tm-29k.h, valops.c, values.c:  Replace SYMBOL_NAME
	  references with SYMBOL_SOURCE_NAME or SYMBOL_LINKAGE_NAME as
	  appropriate.
	* buildsym.c (start_subfile, patch_subfile_names):  Default the
	  source language to what can be deduced from the filename.
	* buildsym.c (end_symtab):  Update the source language in the
	  allocated symtab to match what we have been using.
	* buildsym.h (struct subfile):  Add a language field.
	* c-typeprint.c (c_print_type):  Remove code to do explicit
	  demangling.
	* dbxread.c (psymtab_language):  Add static variable.
	* dbxread.c (start_psymtab):  Initialize psymtab_language using
	  deduce_language_from_filename.

Mon Dec 21 22:24:33 1992  Fred Fish  (fnf@cygnus.com)

	* valprint.c (val_print):  Reorganize comment and add note
	about dependency on target byte ordering.
	* ch-exp.y (value_array_slice):  Fix typo.
	* ch-valprint.c (chill_val_print): Remove C'ism that arrays of
	byte sized ints are assumed to be char strings and printed with
	string syntax.  In chill, arrays of chars and arrays of
	bytes/ubytes are distinquishable, and printed appropriately.

Mon Dec 21 18:02:35 1992  Stu Grossman  (grossman at cygnus.com)

	* tm-hppah.h:  #define NEED_TEXT_START_END for target memory
	read/write routines for HPUX.

	* hppa-pinsn.c (print_insn):  Improve handling of be and ble
	branch targets to compute target address using const from previous
	instruction if necessary.
	* Add `Q' operator to print out bit position field various
	instructions.
	* hppah-nat.c:  #include sys/param.h, and sys/user.h.  General
	cleanups, use new code from Utah.
	* (store_inferior_registers):  Update to new code from Utah.
	* (initialize_kernel_u_addr):  Re-enable decl of struct user u.
	* (fetch_register):  Clear out priv level when reading PCs.
	* hppah-tdep.c:  Get rid of gobs of KERNELDEBUG stuff.
	* Remove decl of errno, #include wait.h and target.h.
	* (frame_saved_pc):  Check `flags' pseudo-register to see if we
	were inside of a kernel call.  If so, then PC is in a different
	register.  Also, mask out bottom two bits of all PCs so as not to
	confuse higher level code.
	* (push_dummy_frame):  Create from #define in tm-hppa.h.
	* (find_dummy_frame_regs):  Update from Utah.
	* (hp_pop_frame):  Create from #define in tm-hppa.h.
	* (hp_restore_pc_queue):  New, from Utah.
	* (hp_push_arguments):  Big fixes from Utah.
	* (pa_do_registers_info, pa_print_registers):  Only print out fp
	regs upon request.
	* (skip_trampoline_code):  New routine to deal with stubs that
	live in nowhereland between callers and callees.
	* i860-tdep.c:  Remove decl of attach_flag.
	* infrun.c (wait_for_inferior):  Add new macro
	INSTRUCTION_NULLIFIED, which can tell if the instruction pointed
	at by PC will be nullified.  If so, then step the target once more
	so as to avoid confusing the user.
	* (just before step_over_function:):  Use stop_func_start, not
	stop_pc when checking for the existance of line number info.
	stop_func_start will reflect the proper address of the target
	routine, not of the stub that we may be traversing to get there.
	* tm-hppa.h:  define SKIP_TRAMPOLINE_CODE and IN_SOLIB_TRAMPOLINE
	to deal with the stubs that PA compilers sometimes stick between
	callers and callees.  Also, define FLAGS_REGNUM for access to the
	`flags' pseudo-reg.
	* (REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW):  Use
	memcpy, not bcopy.
	* (CANNOT_STORE_REGISTER):  New from Utah.  Says that we can't
	write gr0, PC regs, and PSW!
	* (FRAME_FIND_SAVED_REGS):  Bug fixes from Utah.
	* (PUSH_DUMMY_FRAME, POP_FRAME):  Make into real routines in
	hppah-nat.c.
	* (CALL_DUMMY, FIX_CALL_DUMMY):  Fixes from Utah.
	* Define struct unwind_table_entry.
	* valops.c (call_function_by_hand):  Add another arg to
	FIX_CALL_DUMMY (under #ifdef GDB_TARGET_IS_HPPA).  Why is this
	necessary?

Mon Dec 21 02:17:57 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* remote-vx.c: remove include of "symfile.h", replace it with "complaints.h"

Fri Dec 18 10:32:25 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.7.4.
	* Makefile.in (SFILES_MAINDIR):  Add typeprint.c, c-typeprint.c,
	  m2-typeprint.c, c-valprint.c cp-valprint.c m2-valprint.c.
	* Makefile.in (HFILES):  Add valprint.h.
	* Makefile.in (OBS):  Add typeprint.o, c-typeprint.o,
	  m2-typeprint.o, c-valprint.o, cp-valprint.o m2-valprint.o.
	* typeprint.c, typeprint.h:  New files for language independent
	  type printing functions.
	* c-typeprint.c, m2-typeprint.c:  New files for language dependent
	  type printing functions and definitions.
	* valprint.h:  New include file for language independent value
	  printing definitions.
	* c-valprint.c, cp-valprint.c, m2-valprint.c:  New files for language
	  dependent value printing functions.
	* c-exp.y (production ptype):  Add range_type variable and use new
	  create_range_type function.
	* c-exp.y (tokentab2, tokentab3), c-lang.c (c_op_print_tab),
	  infcmd.c (path_var_name), language.c (unk_op_print_tab), 
	  m2-lang.c (m2_op_print_tab):  Change from ANSI-obsolescent
	  "const static" to ANSI-conformant "static const".
	* c-exp.y (c_create_fundamental_type):  Remove unused nbytes.
	* c-exp.y (c_language_defn, cplus_language_defn):  Add c_print_type,
	  and c_val_print.
	* c-lang.h (c_print_type, c_val_print):  Add prototypes.
	* coffread.c (decode_type):  Add range_type variable and call to
	  new create_range_type function.
	* complaints.c (complain):  Remove unused val variable.
	* complaints.c (_initialize_complaints):  Make it void.
	* convex-tdep.c (value_of_trapped_internalvar):  Add range_type
	  variable and call new create_range_type function.
	* defs.h (enum val_prettyprint):  Move enum from value.h to here
	  so we can avoid having to include value.h just for prototypes that
	  need the enum (thanks ANSI).
	* dwarfread.c (struct_type):  Local anonymous_size variable is
	  only used if !BITS_BIG_ENDIAN.
	* dwarfread.c (decode_subscript_data_item):  Add rangetype
	  variable and call new create_range_type function.
	* elfread.c (elf_symfile_read):  Remove unused dbx and text_sect
	  variables.
	* eval.c (evaluate_subexp):  Remove unused local variable name
	  and the statement with no side effects that initializes it.
	* expprint.c (print_subexp):  Change local_printstr to
	  LA_PRINT_STRING.
	* gdbtypes.c (create_range_type):  New function that creates
	  a range type using code fragments from object file readers as
	  an example of what has to be initialized.
	* gdbtypes.c (create_array_type):  Removed index_type, low_bound,
	  and high_bound parameters, replaced with a single range_type
	  parameter.  Change function body to use passed in range_type
	  rather than handcrafting one.
	* gdbtypes.h (create_range_type):  Add prototype.
	* gdbtypes.h (create_array_type):  Change prototype parameters.
	* infrun.c (normal_stop):  Remove unused local variables tem and c.
	* infrun.c (hook_stop_stub):  Return 0 rather than random value.
	* language.c (unk_lang_print_type, unk_lang_val_print):  Add
	  stub functions that call error if called.
	* language.c (unknown_language_defn, auto_language_defn,
	  local_language_defn):  Add initializers unk_lang_print_type and
	  unk_lang_val_print.
	* language.h (struct language_defn):  Reformat for larger
	  comments, add la_print_type and la_val_print members.  Add
	  LA_PRINT_TYPE and LA_VAL_PRINT macros.  Change local_printchar
	  to LA_PRINT_CHAR and local_printstr to LA_PRINT_STRING.
	* m2-lang.c (m2_create_fundamental_type):  Remove unused local
	  variable nbytes.
	* m2-lang.c (m2_language_defn):  Add initializers m2_print_type
	  and m2_val_print.
	* m2-lang.h (m2_print_type, m2_val_print):  Add prototypes.
	* main.c (execute_command): Remove unused local variable cmdlines.
	* main.c (echo_command), stabsread.c (read_type), printcmd.c
	  (clear_displays), symmisc.c (block_depth), values.c
	  (clear_value_history):
	  Make testing of truth value of assignment result explicit.
	* mipsread.c (upgrade_type):  Update FIXME to include future use
	  of create_range_type.
	* printcmd.c (ptype_command, ptype_eval, whatis_command,
	  whatis_exp, maintenance_print_type):  Move prototypes and functions
	  to new typeprint.c.
	* printcmd.c (_initialize_printcmd):  Move add_com calls for
	  ptype_command and whatis_command to new typeprint.c.
	* ser-bsd.c (serial_open):  Remove unused variable sgttyb.
	* source.c (find_source_lines):  Local variable c only used
	  when LSEEK_NOT_LINEAR is defined.
	* stabsread.c (read_array_type):  Use new create_range_type
	  function.
	* stabsread.c (read_range_type):  Add new index_type variable and
	  call new create_range_type function rather than handcrafting
	  range types.
	* symmisc.c (type_print_1):  Change usages to LA_PRINT_TYPE.
	* symtab.c (typedef_print usages):  Use c_typedef_print, renamed.
	* symtab.c (type_print_base usages):  Use c_type_print_base.
	* symtab.c (type_print_varspec_prefix usages):  Use 
	  c_type_print_varspec_prefix.
	* symtab.c (type_print_method_args usages):  Use
	  cp_type_print_method_args.
	* valprint.c:  Completely ripped apart and the fragments used
	  to create c-valprint.c, cp-valprint.c, m2-valprint.c, and
	  valprint.h.  Remaining stuff is language independent.
	* value.h (struct fn_field):  Forward declare for prototypes.
	* value.h (type_print_1):  Remove prototype.
	* value.h (enum val_prettyprint):  Moved to defs.h.
	* value.h (typedef_print):  Prototype renamed to c_typedef_print.
	* value.h (baseclass_offset):  Add prototype.
	* Makefile.in (SFILES_MAINDIR):  Add ch-typeprint.c, ch-valprint.c.
	* Makefile.in (OBS):  Add ch-typeprint.o, ch-valprint.o.
	* ch-typeprint.c:  New file for language dependent type printing.
	* ch-valprint.c:  New file for language dependent value printing.
	* ch-exp.y (parse_number):  Remove prototype and stub function.
	* ch-exp.y (decode_integer_literal):  Removed unused digits and
	  temp variables.
	* ch-exp.y (convert_float):  Completely ifdef out for now.
	* ch-exp.y (tokentab2, tokentab3, tokentab4, tokentab5),
	  ch-lang.c (chill_op_print_tab):
	  Change from ANSI-obsolescent "const static" to ANSI-conformant
	  "static const".
	* ch-exp.y (yylex):  Add unhandled storage class enumeration
	  literals to switch statement for completeness.
	* ch-lang.c (chill_create_fundamental_types):  Remove unused
	  nbytes variable.  Change dummy type to 2 bytes to match int.
	  Handle FT_VOID types gratuituously added to chill DWARF by
	  compiler.  Change FT_CHAR case to generate an TYPE_CODE_CHAR
	  type rather than a one byte TYPE_CODE_INT type.
	* ch-lang.c (chill_language_defn):  Add chill_print_type and
	  chill_val_print.
	* ch-lang.h (chill_print_type, chill_val_print):  Add prototypes.

Thu Dec 17 00:44:57 1992  John Gilmore  (gnu@cygnus.com)

	Eliminate uses of NAMES_HAVE_UNDERSCORE, using
	bfd_get_symbol_leading_char instead.

	* coffread.c (EXTERNAL_NAME):  New macro for removing possible
	leading character from names.
	(read_coff_symtab):  Use BFD's FILE *, don't open a second one.
	(process_coff_symbol, coff_read_struct_type, coff_read_enum_type):
	Replace NAMES_HAVE_UNDERSCORE with EXTERNAL_NAME.

	* kdb-start.c (main):  Remove NAMES_HAVE_UNDERSCORE.
	* minsyms.c (install_minimal_symbols):  Replace NAMES_HAVE_UNDERSCORE.
	Remove SOME_NAMES_HAVE_DOT support (apparently unused).
	* partial-stab.h:  Replace NAMES_HAVE_UNDERSCORE.
	* solib.c:  Replace NAMES_HAVE_UNDERSCORE.
	* stabsread.h:  Remove NAMES_HAVE_UNDERSCORE and HASH_OFFSET.
	* symfile.c (syms_from_objfile):  Insert debugging check to test
	NAMES_HAVE_UNDERSCORE setting against the BFD support.

	* doc/gdbint.texinfo (Host Conditionals):  Remove
	NAMES_HAVE_UNDERSCORE, SOME_NAMES_HAVE_DOT, document
	MEM_FNS_DECLARED.
	(Target Conditionals):  Remove all of the above.

	* xm-rs6000.h (MEM_FNS_DECLARED):  Update comments.

	* coffread.c (read_coff_symtab, C_BLOCK):  Use complain() rather
	than error() for .bb/.eb.  Bug found by Eddie Fung, <efung@cs.uq.oz.au>.

Tue Dec 15 10:05:56 1992  Ian Lance Taylor  (ian@cygnus.com)

	* coffread.c (decode_type): catch negative tagndx fields generated
	by SCO 3.2v4 cc.
	* exec.c: comment out string following #endif.
	* configure.in (i[34]86-*-sco3.2v4*): use host i386sco4.	
	* xm-i386sco.h: include <sys/types.h> and <sys/dir.h>, required by
	<sys/user.h>.
	* config/i386sco4.mh: new file; like i386sco.mh, but don't require
	gcc, and define const to empty to avoid SCO 3.2v4 cc bug.

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
	Robert R. Henry, <rrh@tera.com>.
	* infcmd.c (environment_info):  Ditto, for Don Allen <allen@think.com>.

	* main.c (main):  Accept --silent as well as --quiet.  Change +help
	to --help.  Suggested by Karl Berry, <karl@cs.umb.edu>.

	* doc/gdbint.texinfo:  SWAP_HOST_AND_TARGET => SWAP_TARGET_AND_HOST.
	Noticed by Andy Jackson, <arj@cam-orl.co.uk>.

Mon Dec 14 23:28:15 1992  John Gilmore  (gnu@cygnus.com)

	* tm-nindy960.h, remote-nindy.c:  Lint.

Mon Dec 14 18:48:52 1992  Fred Fish  (fnf@cygnus.com)

	* gdbtypes.c (create_array_type):  Complete rewrite.  Now requires
	a optional type to decorate as an array type, the type of the
	index, and the bounds of the array.  Records this additional info
	in the array type for use with languages with nonzero array
	bounds.
	* gdbtypes.h (enum type_code):  Update comment for TYPE_CODE_ARRAY
	to note that arrays may have bounds.
	* gdbtypes.h (create_array_type):  Update prototype.
	* c-exp.y (ptype production):  Adjust for new create_array_type
	calling conventions.
	* coffread.c (decode_type):  Call create_array_type rather than
	handcrafting array types.
	* convex-tdep.c (value_type):  Remove, now use create_array_type.
	* convex-tdep.c (value_of_trapped_internalvar):  Convert calls to
	vector_type into calls to create_array_type.
	* dwarfread.c (decode_subscr_data):  Name changed to
	decode_subscript_data_item throughout.
	* dwarfread.c (decode_subscript_data_item):  Rewrite to use
	create_array_type.  Now records index type and range as well.
	* dwarfread.c (dwarf_read_array_type):  Rewrite as part of
	change to use create_array_type.
	* dwarfread.c (read_subroutine_type):  Test existing user defined
	types before decorating them, to ensure they are blank, and
	complain about it if they are not.
	* dwarfread.c (decode_fund_type):  For unrecognized types, always
	return some valid type (type integer).  If the unrecognized type
	cannot be an implementation defined type, complain as well.
	* m88k-tdep.c (pushed_size):  Update comment for TYPE_CODE_ARRAY.
	* m88k-tdep.c (store_param):  Update comment for TYPE_CODE_ARRAY.
	* mipsread.c (upgrade_type):  Add FIXME comment that code to
	handcraft arrays should be replaced with call to create_array_type.
	* stabsread.c (read_array_type):  Replace code to handcraft
	array types with call to create_array_type.
	* valprint.c (type_print_varspec_prefix):  Minor formatting
	change, join lines that don't need to be split.

Mon Dec 14 17:18:42 1992  Stu Grossman  (grossman at cygnus.com)

	* convex-xdep.c, hppab-nat.c, infptrace.c:  Remove
	decl for attach_flag, it now lives in inferior.h.
	* hppa-pinsn.c:  Reformat opcode tables.  Add function prototypes.
	Make most functions static.
	* hppah-nat.c:  General cleanups, remove BSD specific code (since
	that all lives in hppab-nat.c).
	* hppah-tdep.c (frame_chain_valid), tm-hppa.h (FRAME_CHAIN):
	Change sense of test against inside_entry_file().  This fix is
	from U. of Utah.
	* tm-hppa.h (PUSH_DUMMY_FRAME, POP_FRAME):  Use char * for 2nd arg
	to read/write_register_bytes().
	* gdbtypes.h:  Remove const from decl for cplus_struct_default to
	work around PA-GAS assembler bug.  Also, add trailing */ to some
	comments.
	* gdbtypes.c:  Remove const from decl for cplus_struct_default.
	Same reason as above.

Wed Dec  9 19:53:25 1992  John Gilmore  (gnu@cygnus.com)

	* mipsread.c (parse_symbol): When checking whether a structured
	type is an enum, check qualifiers of its first member, as well as
	the base type of the member.  Bug found and fixed by John M.
	Farrell, <farrell@fjord.reo.dec.com>.

	* vx-share/{reg.h,xdr_regs.h,xdr_regs.c}:  Remove, unused.
	* remote-vx.c:  Don't include vx-share/reg.h.
	* vx-share/ptrace.h:  Reproduce from scratch.
	* config/{vxworks68,vxworks960}:  Don't include xdr_regs.o.
	* Makefile.in:  Remove references to removed files, and to removed
	29k-share directories.

Tue Dec  8 13:30:58 1992  Fred Fish  (fnf@cygnus.com)

	* c-lang.c (_initialize_c_language):  Name changed from
	_initialize_c_exp.
	* m2-lang.c (_initialize_m2_language):  Name changed from
	_initialize_m2_exp.
	* m2-lang.c (_initialize_m2_language):  Change malloc to xmalloc since
	it is no longer inside m2-exp.y, where it was remapped by Makefile.
	* c-exp.y, m2-exp.y:  Migrate code that has nothing to do with
	expression parsing into c-lang.c and m2-lang.c respectively.
	* c-lang.c, m2-lang.c:  New files, code migrated from c-exp.y and
	m2-exp.y respectively.
	* c-lang.h, m2-lang.h:  New files, internal interfaces between c-*
	and m2-* files respectively.
	* Makefile.in (SFILES_MAINDIR):  Add c-lang.c, m2-lang.c.
	* Makefile.in (HFILES):  Add c-lang.h, m2-lang.h.
	* Makefile.in (OBS):  Add c-lang.o, m2-lang.o.
	* expression.h (struct block):  Forward declaration for prototypes.
	* language.h (struct objfile):  Forward declaration for prototypes.
	* Makefile.in (SFILES_MAINDIR):  Add ch-lang.c.
	* Makefile.in (HFILES):  Add ch-lang.h.
	* Makefile.in (OBS):  Add ch-lang.o.
	* ch-exp.y:  Migrate code that has nothing to do with expression
	parsing into ch-lang.c.
	* ch-lang.c:  New file, code migrated from c-exp.y.
	* ch-lang.h:  New file, internal interface between ch-* files.
	* ch-lang.c (_initialize_chill_language):  Name changed from
	_initialize_chill_exp.

	Changes for Amiga Unix from rhealey@ub.d.umn.edu.
	* config/amix.mh (NAT_FILE):  Add, set to nm-sysv4.h.
	* config/amix.mh (NATDEPFILES):  Add.
	* config/amix.mh (XDEPFILES):  Move procfs.o and fork-child.o
	to NATDEPFILES.

	* dwarfread.c (decode_subscr_data):  Remove spurious test that
	accepted only integer subscript types.  We don't do anything
	with the type at the moment anyway.

Fri Dec  4 06:56:56 1992  Fred Fish  (fnf@cygnus.com)

	* ch-exp.y (match_character_literal):  Fix case where no
	match at all is found.
	* ch-exp.y (chill_create_fundamental_type):  Chill uses fixed
	width types.  For example, "INT" is always 2 bytes regardless
	of the values of any TARGET_*_BIT macros.  So use explicit
	numeric sizes for the types.

Thu Dec  3 12:00:06 1992  Fred Fish  (fnf@cygnus.com)

	* c-exp.y (c_create_fundamental_type):  New function to create
	language specific fundamental types for C.
	* m2-exp.y (m2_create_fundamental_type):  New function to create
	language specific fundamental types for Modula 2.
	* c-exp.y (c_language_defn, cplus_language_defn):  Add
	c_create_fundamental_type to language struct initializers.
	* m2-exp.y (m2_language_defn):  Add m2_create_fundamental_type
	to language struct initializers.
	* dwarfread.c (expression.h, language.h):  Include.
	* dwarfread.c (ftypes):  New array to hold fundamental types
	for current compilation unit.
	* dwarfread.c (cu_language_defn):  New pointer to language
	struct for language of current compilation unit.
	* dwarfread.c (dwarf_fundamental_type):  New function to
	create/lookup fundamental types.
	* dwarfread.c (set_cu_language):  Initialize cu_language_defn.
	* dwarfread.c (throughout):  Replace lookup_fundamental_type
	with dwarf_fundamental_type.
	* dwarfread.c (read_file_scope):  Zero out ftypes for each new
	compilation unit (may be different language or different objfile).
	* gdbtypes.c (lookup_fundamental_type):  Move actual type
	creations into language specific fundamental type creation
	functions and call via create_fundamental_type.  Add comment
	about this function being obsolescent.
	* gdbtypes.h (FT_BYTE, FT_UNSIGNED_BYTE):  New types, true byte
	sized signed and unsigned integers.
	* gdbtypes.h (FT_NUM_MEMBERS):  Increment, new types added.
	* language.c (language_def):  New function to lookup a language
	struct given it's enumeration.
	* language.h (struct language_defn):  Add la_fund_type, a pointer
	to a function that creates fundamental types for this language.
	* language.h (create_fundamental_type):  New macro to create
	fundamental types based on the current language.
	* language.h (language_def):  Add prototype.
	* language.c (unk_lang_create_fundamental_type):  New function
	for initializing language structs, calls error if called.
	* language.c (unk_language_defn, auto_language_defn, 
	local_language_defn):  Use unk_lang_create_fundamental_type.	
	ch-exp.y (chill_create_fundamental_type):  New function.
	ch-exp.y (chill_language_defn):  Add chill_create_fundamental_type.
	ch-exp.y (_initialize_chill_exp):  BOOL types are only one byte.

Tue Dec  1 17:07:31 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (CHILL_PRODUCER):  Add producer string for
	GNU chill.
	* dwarfread.c (handle_producer):  Test CHILL_PRODUCER as well
	as GCC_PRODUCER and GPLUS_PRODUCER.

Mon Nov 30 18:46:58 1992  Stu Grossman  (grossman at cygnus.com)

	* remote-udi.c (udi_wait):  Don't stop if TIP says that remote is
	still running.

Mon Nov 30 12:00:25 1992  Fred Fish  (fnf@cygnus.com)

	* tm-sun4sol2.h:  Add CPLUS_MARKER.  Solaris 2.0 requires '.'
	rather than '$'.  This particular piece of braindamage is
	spreading like ooze. It's now infected libiberty, deja-gnu,
	gdb, and gcc.
	* values.c (baseclass_addr):  Use CPLUS_MARKER rather than
	hardwired '$' character.

Sun Nov 29 15:22:42 1992  Fred Fish  (fnf@cygnus.com)

	(Changes to break incredibly ugly, unmaintainable 750 line
	 read_struct_type function up into managable pieces.)
	* Makefile.in (VERSION):  Bump to 4.7.3.
	* stabsread.c (struct field_info):  Local struct definition.
	* stabsread.c (read_member_functions, read_struct_fields,
	read_baseclasses, read_tilde_fields, attach_fn_fields_to_type,
	attach_fields_to_type, read_cpp_abbrev):  Prototypes and new
	functions from fragmented read_struct_type.
	* stabsread.c (stabs_general_complaint):  Catchall complaint.
	* stabsread.c (STABS_CONTINUE):  Macro'ize cretinous stabs
	symbol name continuation code.  Use macro throughout.
	* stabsread.c (various places):  Replace add-one-to-pointer
	with pointer increment.
	* stabsread.c (read_type):  Retain function local copy of type
	descriptor.  Rearrange code calling read_struct_type() to match
	new conventions.
	* stabsread.c (define_symbol):  For the sake of dbx, gcc emits
	a single blank as the name of nameless enumerations.  Recognize
	this special case and set nameless flag.
	* ch-exp.y (GENERAL_PROCEDURE_NAME, LOCATION_NAME):  New
	terminal tokens.
	* ch-exp.y (access_name):  New non-terminal token and
	production.
	* ch-exp.y (general_procedure_name):  Now a terminal token.
	* ch-exp.y (location):  Expand production.
	* ch-exp.y (match_simple_name_string):  New function.
	* ch-exp.y (yylex):  Call match_simple_name_string and return
	GENERAL_PROCEDURE_NAME or LOCATION_NAME as appropriate.

Wed Nov 25 07:17:13 1992  Fred Fish  (fnf@cygnus.com)

	* munch:  Backslash escape vertical bar characters inside
	grep patterns since they have special meaning for some greps.
	* parse.c (write_exp_string):  Complete rewrite to store string
	contants as a leading explicit length, followed by the string data,
	followed by a trailing explicit length.
	* eval.c (evaluate_subexp), expprint.c (print_subexp),
	parse.c (length_of_subexp), parse.c (prefixify_subexp):
	Use recorded explicit length of strings in expression elements,
	rather than strlen.  Adjust code to skip over strings stored in
	expression elements, and code to access strings, to account for
	new leading explicit size expression element.
	* parse.c (length_of_subexp):  Test for minimum endpos of 1, not
	0, to avoid negative expression element indices.
	* valops.c (search_struct_method):  Minor whitespace change.	

Mon Nov 23 11:14:15 1992  Fred Fish  (fnf@cygnus.com)

	* c-exp.y (yylex):  Add tempbuf, tempbufindex, and tempbufsize,
	which together maintain a dynamically expandable static buffer
	for the lexer to use when translating C strings to their internal
	form (other future uses possible).  Fix parsing of C style strings
	to do the normal C style input conversions of escaped character
	sequences.
	* valops.c (value_string):  Remove translation of escaped
	character sequences, now done in C expression parser.
	* language.h (PRINT_LITERAL_FORM):  New macro that takes character
	and decides if it should be printed in literal form or some other
	form, based on it's ASCII value and setting of sevenbit_strings.
	* {c-exp.y, m2-exp.y} (emit_char):  Use new PRINT_LITERAL_FORM
	macro, change indentation style.
	* ch-exp.y (chill_printchar):  Use new PRINT_LITERAL_FORM macro.
	* ch-exp.y (chill_printstr):  First cut at real function instead
	of error stub.

Sun Nov 22 16:21:41 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* nindy-share/stop.h: fixed bogus comment-end in copyright message

	* i960-pinsn.c: fixed two calls of fputs_filtered that had 3 arguments

Fri Nov 20 21:35:57 1992  Fred Fish  (fnf@cygnus.com)

	* defs.h (sevenbit_strings):  Add declaration.
	* defs.h (printchar):  Replace with gdb_printchar.
	* language.h (language_defn):  Add new function pointers
	la_printchar and la_printstr, to do language dependent
	printing of characters and strings.
	* language.h (local_printchar, local_printstr):  New macros
	to call language dependent functions pointed to by la_printchar
	and la_printstr respectively.
	* c-exp.y (emit_char, c_printchar, c_printstr):  New language
	dependent functions for printing characters and strings.
	* c-exp.y (c_language_defn, cplus_language_defn):  Add
	c_printchar and c_printstr.
	* command.c (do_setshow_command):  Rename printchar use to
	gdb_printchar.
	* expprint.c (print_subexp):  Replace C style string output
	with call to local_printstr.
	* language.c (unk_lang_printchar, unk_lang_printstr):
	New stubs, currently errors.
	* language.c (unknown_language_defn, auto_language_defn,
	local_language_defn):  Add unk_lang_printchar and
	unk_lang_printstr.
	* m2-exp.y (emit_char, m2_printchar, m2_printstr):  New
	language dependent functions to print characters and strings.
	* m2-exp.y (m2_language_defn):  Add m2_printchar and m2_printstr.
	* utils.c (printchar):  Renamed to gdb_printchar.
	* valprint.c (print_string):  Remove prototype, function moved
	to c-exp.y, where it becomes c_printstr.
	* valprint.c (print_max):  Made global for reference from the
	language dependent printing routines in *-exp.y.
	* valprint.c (repeat_count_threshold):  New variable with function
	of old REPEAT_COUNT_THREHOLD define, but now settable by user.
	Change all references to old macro to references to new variable.
	* valprint.c (value_print, val_print):  Replace calls to
	print_string with calls to local_printstr.
	* valprint.c (val_print):  Replace C style character printing
	with call to local_printchar.
	* valprint.c (val_print):  Add case for TYPE_CODE_CHAR.
	* valprint.c (_initialize_valprint):  Add add_show_from_set
	call for setting up repeat_count_threshold as print variable.
	* ch-exp.y (decode_integer_value):  New function.
	* ch-exp.y (decode_integer_literal):  Use decode_integer_value.
	* ch-exp.y (chill_printchar, chill_printstr):  New language
	dependent functions for printing characters and strings.
	* ch-exp.y (chill_language_defn):  Add chill_printchar and
	chill_printstr.

Thu Nov 19 21:22:21 1992  John Gilmore  (gnu@cygnus.com)

	* main.c (main):  Print GDB version number in gdb -help; doc pid arg.
	Suggested by Marty Leisner, <leisner@eso.mc.xerox.com>.
	(print_gdb_version):  New arg is stdout or stderr.  Callers changed.

Wed Nov 18 15:05:45 1992  Ian Lance Taylor  (ian@cygnus.com)

	* remote-vx.c (vx_kill): just warn if we can't contact the board,
	and assume the process has been killed.

Wed Nov 18 14:39:57 1992  Stu Grossman  (grossman at cygnus.com)

	* remote-udi.c (udi_open):  Reset vars so that user can re-run
	programs without leaving GDB.
	* (many routines):  Slightly improve error handling.
	* (download):  Zero out BSS by longs instead of bytes to avoid
	timeouts in real hardware.
	* 29k-share/udi/udip2soc.c (UDIDisconnect, UDIKill):  Indicate
	that connection is no longer in use after shutdown() of socket.
	This keeps GDB from dying of a SIGPIPE when you issue multiple
	`target udi' commands.

Wed Nov 18 14:27:47 1992  Fred Fish  (fnf@cygnus.com)

	* language.h (language_format_info):  New structure to bundle
	local formatting information.
	* language.h (language_defn):  Replace individual format info
	with language_format_info structs.
	* language.h (local_*_format, local_*_format_prefix,
	local_*_format_specifier, local_*_format_suffix):  New macros
	for binary/octal/decimal/hex formats to access info elements.
	* c-exp.y (c_language_defn):  Update for new format handling.
	* m2-exp.y (m2_language_defn):  Update for new format handling.
	* dbxread.c (language.h):  Include for partial-stab.h use.
	* mipsread.c (expression.h, language.h):  Include for
	partial-stab.h use.
	* defs.h (local_hex_format, local_hex_format_custom,
	local_hex_string, local_hex_string_custom):  Move to language.h.
	* language.c (local_hex_format_custom, local_hex_string,
	local_hex_string_custom, local_octal_format_custom):  Use new
	format handling.
	* language.c (unknown_language_defn, auto_language_defn,
	local_language_defn):  Update for new format handling.
	* printcmd.c (print_scalar_formatted):  Use new macros
	to access decimal and binary format info for printing.
	* c-exp.y (chill_language_defn):  Update for new format handling.
	* ch-exp.y (CHARACTER_LITERAL):  Add support to yylex.
	* ch-exp.y (decode_integer_literal):  Add function
	* ch-exp.y (match_integer_literal):  Use decode_integer_literal.
	* ch-exp.y (builtin_type_chill_char):  Add definition.
	* gdbtypes.h (builtin_type_chill_char):  Add declaration.

Tue Nov 17 11:17:06 1992  Ian Lance Taylor  (ian@cygnus.com)

 	* tm-rs6000.h (BELIEVE_PCC_PROMOTION): Define, since AIX cc gets
	it right.
	(aix_framedata): added nosavedpc field.
	(SAVED_PC_AFTER_CALL): Don't try to optimize; just call
	read_register.
	(FRAMELESS_FUNCTION_INVOCATION): Pass second argument of 0.
	(FRAME_SAVED_PC): If PC not saved, use SAVED_PC_AFTER_CALL.
	* rs6000-tdep.c (skip_prologue): Handle gcc generated stfd
	instructions as function_frame_info does.  Expand special case of
	st r31,-4(r1) to be st r31,NUM(r1), since gcc can generate offsets
	other than -4.
	(pop_frame): Add 4 rather than sizeof (int) to avoid host
	dependence.
	(function_frame_info): Set frameless if the function has no frame,
	and set nosavedpc if the PC was not saved.  Handle gcc generated
	stfd 31,-4(31); st 31, -12(31) correctly.
	(frameless_function_invocation): New second argument pcsaved; if 0
	return whether the function has a frame, if 1 return whether the
	function saved PC.
	(frame_initial_stack_address): Correct typo: cache registers for
	callee_fi, not for fi, (avoids reading garbage memory locations).

Mon Nov 16 15:58:07 1992  Stu Grossman  (grossman at cygnus.com)

	* infrun.c (wait_for_inferior (just before step_over_function
	label)):  Change test for stepping into subroutine to check for the
	presence of line number info.  This makes stuff compiled with -g1
	cause GDB to not lose control when stepping.

	* symtab.c (find_pc_line):  Improve code per gnu's suggestions.
	Improve comments as well.

Sun Nov 15 09:22:09 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.7.2
	* symtab.c (find_pc_symtab):  Fix return of random value
	to caller.
	* Makefile.in (c-exp.tab.c, m2-exp.tab.c):  Add dependency on
	Makefile since it contains sed patterns used in generation.
	Add sed pattern to also delete #include of any malloc.h.
	* c-exp.y, expr.c, expression.h, language.c, m2-exp.y,
	parser-defs.h, valarith.c, valops.c, value.h:  Remap macros and
	function names to conform to K&R terminology with respect to
	logical and bitwise operators:
	UNOP_ZEROP => UNOP_LOGICAL_NOT
	UNOP_LOGNOT => UNOP_COMPLEMENT
	BINOP_LOGAND => BINOP_BITWISE_AND
	BINOP_LOGXOR => BINOP_BITWISE_XOR
	BINOP_LOGIOR => BINOP_BITWISE_IOR
	BINOP_AND => BINOP_LOGICAL_AND
	BINOP_OR => BINOP_LOGICAL_OR
	PREC_OR => PREC_LOGICAL_OR
	PREC_AND => PREC_LOGICAL_AND
	PREC_LOGIOR => PREC_BITWISE_IOR
	PREC_LOGXOR => PREC_BITWISE_XOR
	PREC_LOGAND => PREC_BITWISE_AND
	value_zerop() => value_logical_not()
	value_lognot() => value_complement()
	* c-exp.y (c_op_print_tab):  Add explicit empty terminator.
	* m2-exp.y (m2_op_print_tab):  Add explicit empty terminator.
	* i387-tdep.c (sys/dir.h):  Remove, appears to be unnecessary
	and is nonexistant in some SVR4 based systems.
	* language.c (DEFAULT_ALLOCSIZE):  Change from 3 => 4.
	* m2-exp.y (number_sign, modblock):  Make static, #ifdef out
	unused modblock.
	* m2-exp.y (ANDAND):  Rename to LOGICAL_AND.
	* source.c (source_info):  Fix minor nits, print "1 line" rather
	than "1 lines", and "language is <lang>".
	* valarith.c (value_binop):  Handle TYPE_CODE_BOOL as well
	as TYPE_CODE_INT and TYPE_CODE_FLOAT.
	* valprint.c (val_print):  Print TYPE_CODE_BOOL type values as
	"TRUE" or "FALSE".
	* values.c (value_from_longest):  Handle TYPE_CODE_BOOL.
	* ch-exp.y:  New expression parser, for GNU-Chill.
	* defs.h (enum language):  Add language_chill.
	* dwarfread.c (set_cu_language):  Add LANG_CHILL case and make
	LANG_MODULA2 a recognized language.
	* gdbtypes.h (enum_typecode):  Note TYPE_CODE_BOOL used for 
	Chill as well as Modula-2.
	* gdbtypes.y (builtin_type_chill_bool, builtin_type_chill_long,
	builtin_type_chill_ulong, builtin_type_chill_real):  Add.
	* language.c (set_language_command):  Add chill.
	* language.c (binop_result_type, integral_type, character_type,
	boolean_type, structured_type, value_true, binop_type_check):
	Add language_chill cases.
	* language.h (_LANG_chill):  Define.
	* symfile.c (deduce_language_from_filename):  Recognize the
	filename extensions ".chill", ".c186", and ".c286" for Chill.
	* valprint.c (typedef_print):  Add case for language_chill.
	* Makefile.in (SFILES_MAINDIR):  Add ch-exp.y.
	* Makefile.in (YYFILES):  Add ch-exp.tab.c.
	* Makefile.in (YYOBJ):  Add ch-exp.tab.o.
	* Makefile.in (saber_gdb):  Add unload of ch-exp.y and load
	of ch-exp.tab.c.
	* Makefile.in (distclean):  Add target ch-exp.tab.c.
	* Makefile.in (realclean):  Add rm of ch-exp.tab.c.
	* Makefile.in (ch-exp.tab.o, ch-exp.tab.c):  New targets.
	* eval.c (evaluate_subexp):  Add OP_BOOL case.
	* expprint.c (print_subexp):  Add OP_BOOL case.	

Fri Nov 13 20:36:28 1992  John Gilmore  (gnu@cygnus.com)

	* infcmd.c (set_environment_command):  Avoid skipping first
	char of env value if an '=' appears in it.  Bug report and fix
	by Mark Jungerman, <maj@lucid.com>.

Fri Nov 13 20:24:10 1992  Stu Grossman  (grossman at cygnus.com)

	* infcmd.c (step_over_calls):  Improve comments.
	* symtab.c (find_pc_psymtab):  Clean up a bit.
	* (find_pc_symtab):  Fix comments, clean up code.
	* (find_pc_line):  General cleanups, efficiency improvements.
	Also, don't return garbage when some line info exists, but there
	was no good match.

Thu Nov  5 23:04:38 1992 Rob Ryan (rr2b@andrew.cmu.edu)

        * xcoffexec.c (vmap_symtab): fixed a bug where if a object has no
        member, and the stat pointer passed to vmap_symtab was NULL, the
        wrong vmap entries would be modified.  Fixes behavior where
        attempting to load symbols for a module with no member would mess
        up already read in symbols.

Wed Nov 11 17:09:17 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Remove dependancies for 29k-share/dfe/yank.o and
	29k-share/dfe/mini2udi.o.
	* config/a29k-udi.mt:  Remove yank.o and mini2udi.o.
	* alldeps.mak, depend:  Update to deal with removal of
	aforementioned files.
	* remote-udi.c:  Major cleanups.  Clean up udi_open and drop
	requirement for useless 'program' argument.  Clean up
	udi_create_inferior, and udi_load to call common download()
	routine.  Create download routine to load remote hosts directly
	(with the help of BFD) so that we don't need yank.c and
	mini2udi.c.
	Fix udi_detach to call UDIDisconnect with
	the right arguments.  Clean up udi_resume, don't assign tip_error
	twice.  Clean up udi_wait, straighten out status codes.  Make
	udi_kill really work.

Fri Nov  6 10:26:01 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

    	* c-exp.y: separated host/target idea of integer type size,
	removed redundant parse rules. (YYSTYPE): added typed_val, removed
	UINT and CHAR rules. (parse_number): work out the targetwise type
	of a number based upon it's size and qualifiers. (yylex): chars
	are now treated the same way as ints.

	* source.c (indentify_source_line): don't core dump if wanted
	line is larger than number of lines in source. (can happen when
	coff gets confused about #included source).

Fri Nov  6 03:00:39 1992  John Gilmore  (gnu@cygnus.com)

	Fix problems noticed by Allan Steel, <allan@maths.su.oz.au>,
	when debugging a program with 100 shared libraries.

	* solib.c (solib_map_sections):  Always close the BFD we open.
	Free all malloc'd storage we allocate, too, including error cases.
	(struct so_list):  Remove unused so_bfd member.
	(clear_solib):  Don't bother closing so_bfd.

	* symfile.c (symfile_bfd_open):  Mark newly opened BFD as
	cacheable.  `So many symbol files, so little file descriptors.'
	
Fri Nov  6 00:14:38 1992  John Gilmore  (gnu@cygnus.com)

	* m68k-stub.c:  Remove ansidecl.h and the few uses of it.
	Stubs should stand alone as much as possible.

	* source.c (show_directories):  Avoid printf_filtered length prob
	pointed out by Jonathan Stone.

	* i960-pinsn.c (MEM_MAX, MEM_SIZ):  Set upper limit properly to
	avoid accesses beyond end of table.  Fix by Lee W. Cooprider,
	<Lee_Cooprider@vos.stratus.com>.

Thu Nov  5 17:33:08 1992  Fred Fish  (fnf@cygnus.com)

	* {ser-bsd.c, ser-termios.c} (serial_close):  Pass address of
	struct, not struct itself.
	* serial.h (serial_restore):  Fix prototype, takes pointer not
	struct.

Thu Nov  5 17:12:42 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (depend):  Add nm.h to the list of things to fixup.
	* depend:  Redo, to fixup nm.h problems with *-tab.c files.

Thu Nov  5 00:19:51 1992  John Gilmore  (gnu@cygnus.com)

	* i386-stub.c:  Remove ansidecl.h and the few uses of it.
	Stubs should stand alone as much as possible.

	* README:  Add remote-es1800.c and remote-st2000.c to table.
	* go32-nat.c:  Remove, there is no native go32 support.
	* go32-xdep.c:  Remove unused fork, fvork, wait, execlp, kill_inferior.

Wed Nov  4 15:27:31 1992  Stu Grossman  (grossman at cygnus.com)

	* inflow.c (pass_signal, set_sigint_trap, clear_sigint_trap):  Add
	new routines to deal with sending SIGINTs to attached processes
	when the user interrupts the controlling GDB.
	* inftarg.c (child_wait), procfs.c (procfs_wait):  Add calls to
	the aforementioned routines when waiting for the attached process.

	* elfread.c, mipsread.c:  Include <string.h>.
	* i386-stub.c:  Include "ansidecl.h" to deal with prototypes.
	* serial.h:  Add prototype for serial_restore().	

Wed Nov  4 11:13:25 1992  Ian Lance Taylor  (ian@cygnus.com)

	* minsyms.c (lookup_minimal_symbol_by_pc): subtract 1, not 2, from
	minimal_symbol_count, because the NULL symbol is not included in
	the count.  This prevented this function from finding the last
	symbol in the table.

Tue Nov  3 11:29:17 1992  Ian Lance Taylor  (ian@cygnus.com)

	* dbxread.c (process_one_symbol): if not defined
	(BLOCK_ADDRESS_FUNCTION_RELATIVE), set function_start_offset at
	the start of the function, not just after N_FUN.

Fri Oct 30 16:33:02 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (c-exp.tab.c, m2-exp.tab.c):  Add sed patterns to
	  remap all malloc's to xmalloc's and all realloc's to xrealloc's.
	* c-exp.y, m2-exp.y:  Add comment about how malloc/realloc are
	  remapped to xmalloc/xrealloc, use only malloc/realloc in grammer
	  file.  Remove preprocessor defines that previously did remapping.

Fri Oct 30 00:58:18 1992  John Gilmore  (gnu@cygnus.com)

	* infcmd.c (run_command):  Avoid long calls to printf_filtered.
	Bug fix courtesy of Alexander Klaiber.

Tue Oct 27 17:08:45 1992  K. Richard Pixley  (rich@cygnus.com)

	hp300 native support (hp300hpux untested).

	* hp300ux-xdep.c: removed.
	* xm-hp300bsd.h (REGISTER_U_ADDR): removed.
	* xm-hp300hpux.h: updated copyright.
	  (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS): removed.
	* nm-hp300bsd.h, nm-hp300hpux.h, hp300ux-nat.c: new files.
	* Makefile.in (HFILES): added nm-hp300bsd.h and nm-hp300hpux.h.
	* config/hp300bsd.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o corelow.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/hp300bsd.mt (TDEPFILES): removed exec.o.
	* config/hp300hpux.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/hp300hpux.mt (TDEPFILES): removed exec.o.

	Vax ultrix native support.

	* nm-vax.h: new file.
	* Makefile.in (HFILES): added nm-vax.h.
	* config/vaxult.mh (XDEPFILES): infptrace.o inftarg.o fork-child.o
	  coredep.o corelow.o removed.
	  (NAT_FILE, NATDEPFILES): new macros.
	* xm-vax.h: updated copyright.
	  (REGISTER_U_ADDR): removed.

	Apollo native support (untested).

	* Makefile.in (HFILES): added nm-apollo68[bv].h.
	* a68v-nat.c, nm-apollo68[bv].h: new files.
	* xm-apollo68[bv].h (FETCH_INFERIOR_REGISTERS): removed.
	* xm-apollo68b.h (PTRACE_IN_WRONG_PLACE): removed.
	* a68v-xdep.c: removed.
	* config/apollo68[bv].mh (XDEPFILES): removed infptrace.o
	  inftarg.o fork-child.o a68v-xdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.

	* defs.h: include nm.h.
	* coredep.c, infptrace.c, procfs.c, rs6000-nat.c, sparc-nat.c,
	  sparc-tdep.c, : do not include nm.h.
	* doc/gdbint.texinfo: nm.h now included in defs.h.

Fri Oct 23 04:47:17 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (VERSION):  4.7.1 post release!

	* config/hppahpux.mh (NATDEPFILES):  Add hppah-nat.o.

Fri Oct 23 00:48:08 1992  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  gdb-4.7 release.
	* README:  Update for gdb-4.7.

Thu Oct 22 11:24:18 1992  Stu Grossman  (grossman at cygnus.com)

	* sparc-tdep.c:  include nm.h (for now) so that we get USE_PROC_FS
	when necessary.

	* alldeps.mak, depend:  Update.

Thu Oct 22 03:14:36 1992  John Gilmore  (gnu@cygnus.com)

	* partial-stab.h ('f', 'F'):  Don't reference pst->textlow if pst
	is null.
	* tm-sun4sol2.h (PROLOGUE_FIRSTLINE_OVERLAP):  Remove -- it 
	causes problems in setting breakpoint in the right place in
	functions with `float' args which are passed as doubles.
	* xm-vaxbsd.h (MEM_FNS_DECLARED):  Avoid erroneous redecl's.
	* config/rs6000.mh (NATDEPFILES):  Add corelow.o.

Thu Oct 22 01:01:24 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (HFILES):  Add nm-i386sco.h.
	* dwarfread.c:  include <sys/types.h> for SCO.
	* infptrace.c:  Don't include ptrace.h under SCO.
	* config/i386sco.mh:  Use -D_POSIX_SOURCE instead of -posix for
	gcc.
	* config/i386v.mt:  Add exec.o to TDEPFILES.

Wed Oct 21 19:08:20 1992  Stu Grossman  (grossman at cygnus.com)

	* i386v-nat.c:  Remove space from front of #endif.
	* irix4-nat.c:  Remove externs of registers[], include inferior.h
	instead.
	* mips-nat.c:  Explicitly initialize zerobuf to 0!
	* mips-tdep.c (init_extra_frame_info):  Undo John's last change.
	Always setup fci->frame, even if it's non-zero.  Too many places
	depend upon this behavior (and I have to get a release out the
	door)!
	* mipsread.c (parse_partial_symbols, psymtab_to_symtab_1):  Set
	processing_gcc_compilation if we find the embedded stabs marker.
	This fixes several bugs with finding the location of short or char
	function parameters passed on the stack.

Wed Oct 21 17:46:07 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Native support for sun4sol2.

	* xm-sysv4.h (USE_PROC_FS, ATTACH_DETACH): removed to nm-sysv4.h.
	* nm-sysv4.h: new file.
	* Makefile.in (HFILES): added nm-sysv4.h.
	* config/sun4sol2.mh (XDEPFILES): removed procfs.o fork-child.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/sun4sol2.mt (TDEPFILES): removed exec.o and solib.o.

Wed Oct 21 03:51:01 1992  John Gilmore  (gnu@cygnus.com)

	* coredep.c:  Include "nm.h" to get REGISTER_U_ADDR.
	* doc/gdbint.texinfo:  Improve REGISTER_U_ADDR and USE_PROC_FS doc.

	* Makefile.in (VERSION):  Tick to 4.6.9.

Tue Oct 20 23:27:56 1992  John Gilmore  (gnu@cygnus.com)

	* mipsread.c (UNSAFE_DATA_ADDR):  Remove MIPS-host-specific
	definition, replace with portable one.
	* remote-nindy.c:  Lint.
	(nindy_wait):  Return type is int, result is inferior_pid.
	* symmisc.c (dump_psymtab):  Only print section_offsets if set.
	(initialize_symmisc):  Remove empty function.
	* tm-spc-noun.h, tm-sun4os4.h, tm-sun4sol2.h (STACK_END_ADDRESS):
	Remove obsolete, misspelled macro.
	* doc/gdbint.texinfo:  Document obsolete STACK_END_ADDR.
	(all @node commands):  Use new form to avoid nitpicking errors.
	* doc/gdbint.texinfo:  Document host/native/target split.
	                                                                   
Wed Oct 21 00:14:34 1992  Stu Grossman  (grossman at cygnus.com)

	* mips-nat.c (zerobuf):  Get rid of const to avoid gcc warnings.

	* xm-mips.h (offsetof):  Don't define this if __STDC__.

Tue Oct 20 21:32:18 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	umax native support (untested).

	* config/umax.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/umax.mt (TDEPFILES): removed exec.o.
	* xm-umax.h (U_REGS_OFFSET, ATTACH_DETACH, REGISTER_U_ADDR):
	  removed to nm-umax.h.
	* nm-umax.h: new file.
	* Makefile.in (HFILES): added nm-umax.h.

	hppa native support (untested).

	* config/hppahpux.mh, config/hppabsd.mh (XDEPFILES): now empty.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/hppabsd.mt (TDEPFILES): removed exec.o and hppab-core.o.
	* config/hppahpux.mt (TDEPFILES): removed exec.o.
	* xm-hppa[bh].h (REGISTER_U_ADDR, U_REGS_OFFSET): removed.
	* nm-hppa[bh].h, hppa[bh]-nat.c: new files.
	* hppa[bh]-xdep.c: removed.
	* hppa[bh]h-tdep.c: do not include ptrace.h.
	* Makefile.in (HFILES): added nm-hppa[bh].h.

	* doc/gdbint.texinfo: add PUSH_DUMMY_FRAME, POP_FRAME.

Tue Oct 20 00:01:46 1992  Stu Grossman  (grossman at cygnus.com)

	* mips-nat.c:  Straighten out include files.  Work around
	conflicting defs of JB_xxx syms in <setjmp.h> and <machine/pcb.h>
	for Ultrix-4.2.

Mon Oct 19 15:09:57 1992  Stu Grossman  (grossman at cygnus.com)

	* mips-nat.c (fetch_core_registers, register_addr):  Copy from
	coredep.c, but zero out FP_REGNUM & ZERO_REGNUM so that stack
	backtraces from core files work.
	* config/decstation.mh, config/irix3.mh:  Remove coredep.o.
	Functions are now defined in mips-nat.c.

	* tm-irix3.h:  Put MIPS_EFI_SYMBOL_NAME in here too.

	* remote-hms.c:  Disable all uses of serial_nextbaudrate and
	serial_default_name().

	* remote-hms.c, ser-go32.c, serial.h:  Change from
	serial_timedreadchar() to new serial_readchar().

	* Makefile.in (HFILES):  Fixup list of nm-*.h files.  Add missing ones.

Mon Oct 19 12:45:23 1992  Per Bothner  (bothner@cygnus.com)

	* c-exp.y:  Moved handling of 'const' and 'volatile' from
	<type> to <typebase>.  This removes 2 conflicts.

Sun Oct 18 00:36:30 1992  Fred Fish  (fnf@cygnus.com)

	* breakpoint.c (breakpoint_re_set_one):  Don't delete watchpoints
	from breakpoint table when reseting breakpoints.

Sat Oct 17 00:59:23 1992  Fred Fish  (fnf@cygnus.com)

	Native support cleanup and corefile fixes for i386 SVR4 systems.

	* i386-tdep.c (supply_gregset, fill_gregset, supply_fpregset,
	  fill_fpregset): Moved to i386v4-nat.c
	* i386v4-nat.c, nm-i386v4.h, :  New files.
	* i386sol2.mh, i386v4.mh, ncr3000.mh (NAT_FILE):  Use nm-i386v4.h.
	* i386sol2.mh, i386v4.mh, ncr3000.mh (NATDEPFILES):  Add corelow.o,
	  change i386v-nat.o to i386v4-nat.o.

Fri Oct 16 13:06:08 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Miscellaneous 386 configs updated.

	* config/i386aout.mt (TDEPFILES): removed exec.o.
	* config/i386sol2.mh, config/ncr3000.mh, config/i386v4.mh
	  (XDEPFILES): removed procfs.o fork-child.o i386-xdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/i386aout.mt, config/i386sol2.mt, config/ncr3000.mt,
	  config/i386v4.mt (TDEPFILES): removed exec.o.
	* config/i386v32.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o corelow.o i386-xdep.o i387-tdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/i386sco.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o corelow.o i386-xdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.

	Native support cleanup for i386bsd (untested).

	* config/i386bsd.mt (NATDEPFILES): exec.o removed.
	* config/i386bsd.mh (NATDEPFILES): added exec.o
	* tm-i386bsd.h (FLOAT_INFO): removed.
	* nm-i386bsd.h (FLOAT_INFO): added.

	Native support for i386v (untested).

	* config/i386v.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o corelow.o i386-xdep.o i387-tdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/i386v.mt (TDEPFILES): removed exec.o, added i387-tdep.o.
	* i386-xdep.c: removed.
	* Makefile.in (HFILES): added nm-i386v.h
	* i386v-nat.c, nm-i386v.h: new file.
	* xm-i386v.h: (REGISTER_U_ADDR, i386_register_u_addr): removed to
	  nm-i386v.h.
	* tm-i386v.h (FLOAT_INFO): removed.

	Native support for linux (untested).

	* config/linux.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o corelow.o i387-tdep.o i386-xdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/linux.mt (TDEPFILES): removed exec.o, added i387-tdep.o.
	* Makefile.in (HFILES): added nm-linux.h.
	* nm-linux.h: new file.
	* xm-linux.h: updated copyright.  cleaned up formatting.
	  (ATTACH_DETACH, U_REGS_OFFSET): removed to nm-linux.h.

	Native support for sun386 (untested).

	* config/sun386.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o sun386-xdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/sun386.mt (TDEPFILES): removed exec.o.
	* Makefile.in (HFILES): added nm-sun386.h.
	* sun386-nat.c, nm-sun386.h: new file.
	* sun386-xdep.c: removed.
	* xm-sun386.h: updated comment and copyright.
	  (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS): removed to
	  nm-sun386.h.

	Native support for i386mach (untested).

	* config/i386mach.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o mach386-xdep.o.
	  (NAT_FILE, NATDEPFILES): new macros.	  
	* Makefile.in (HFILES): added nm-i386mach.h.
	* nm-i386mach.h, i386mach-nat.c: new files.
	* mach386-xdep.c: removed.
	* xm-i386mach.h: updated copyright.
	  (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS): removed to
	  nm-i386mach.h.

	Native separation for go32 (untested).

	* config/go32.mh (NAT_FILE, NATDEPFILES): new macros.
	* go32-nat.c: new file.
	* go32-xdep.c (call_ptrace, child_resume,
	  fetch_inferior_registers, store_inferior_registers,
	  child_xfer_memory, fetch_core_registers): removed to go32-nat.c.

	Native support for m88k (untested).

	* Makefile.in (HFILES): added nm-m88k.h
	* xm-delta88.h, xm-m88k.h (REGISTER_U_ADDR,
	  FETCH_INFERIOR_REGISTERS): removed.
	* config/m88k.mh, config/delta88.mh (XDEPFILES): infptrace.o
	  inftarg.o fork-child.o m88k-xdep.o removed to NATDEPFILES.
	  (NAT_FILE, NATDEPFILES): new macros.
	* config/m88k.mt, config/delta88.mt (TDEPFILES): removed exec.o.
	* m88k-nat.c, nm-m88k.h, nm-delta88.h: new files.o.
	* m88k-xdep.c: removed.

Fri Oct 16 04:16:30 1992  John Gilmore  (gnu@cygnus.com)

	* i386b-nat.c:  Comment changes.
	* nm-i386bsd.h, xm-i386bsd.h:  Split native dependent pieces out
	into new nm-file.
	* config/i386bsd.mh (NAT_FILE):  Point to new nm-file.

Fri Oct 16 03:34:01 1992  John Gilmore  (gnu@cygnus.com)

	Avoid longjmp()-catching compilation errors in cross-ports.

	* doc/gdbint.texinfo:  Update GET_LONGJMP_TARGET, L_SET doc.
	* irix4-nat.c, mips-nat.c (JB_ELEMENT_SIZE, get_longjmp_target):
	Move from mips-tdep.c and tm-{irix3,mips}.h.
	* mips-nat.c:  Remove a bunch of code that was ifdef'd out of
	native MIPS ports.
	* nm-irix3.h, nm-mips.h (GET_LONGJMP_TARGET):  Move from tm-irix3.h
	and tm-mips.h.

	* ultra3-nat.c (register_addr):  Move from ultra3-xdep.c.
	(fetch_core_registers):  Fix bfd_seek arguments.	

Fri Oct 16 03:02:28 1992  John Gilmore  (gnu@cygnus.com)

	Make core files work again (add back the `core' target).

	* config/decstation.mh, news.mh, sun2os3.mh, sun2os4.mh
	(NATDEPFILES):  Add corelow.o.
	* config/delta88.mt, m88k.mt (TDEPFILES):  Remove coredep.o, it's
	native dependent.

	* config/3b1.mh, bigmips.mh, hp300bsd.mh, hppabsd.mh, hppahpux.mh,
	i386sco.mh, i386v.mh, i386v32.mh, irix3.mh, isi.mh, linux.mh,
	littlemips.mh, merlin.mh, news1000.mh, pn.mh, rtbsd.mh, tahoe.mh,
	vaxbsd.mh, vaxult.mh (XDEPFILES): Add corelow.o whenever coredep.o
	appears.  FIXME, these should be moved to NATDEPFILES for native
	use only.

Thu Oct 15 21:53:53 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Ultra3 host/target/native split.  (untested).

	* ultra3-xdep.c: updated copyright.  Do not include sys/ptrace.h.
	  (fetch_register, fetch_inferior_registers,
	  store_inferior_registers, fetch_core_registers): removed to
	  ultra3-nat.c.
	* xm-ultra3.h (FETCH_INFERIOR_REGISTERS, U_REGS_OFFSET): removed
	  to nm-ultra3.h.
	* Makefile.in (HFILES): added nm-ultra3.h.
	* nm-ultra3.h, ultra3-nat.c: new files for native support.
	* config/ultra3.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o.
	  (NAT_FILE, NATDEPFILES): new macros for native support.
	* config/ultra3.mt (TDEPFILES): exec.o removed.

	* xm-vaxult.h: add MEM_FNS_DECLARED.

Thu Oct 15 02:59:30 1992  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  Roll to 4.6.8.
	(OBS):  Put version.o first, so Makefile rebuild happens early.
	
	* command.h:  Publicize prototype for not_just_help_class_command.
	* command.c:  Remove proto.
	* maint.c:  Mark "mt" as an abbrev, to avoid duplicated help
	output.  Move "maint info" from class info to class maintenance,
	and improve text.
	* infrun.c:  Move "stop" to class_obscure, and give it a
	function so it will not be seen as a global help topic.  FIXME,
	it should be possible to set these attributes independently.

	* core.c (core_command):  Make nicer error message for no core support.

	Lint around file_ptr's (bfd's off_t's) and bfd_seek.

	* dbxread.c (read_dbx_symtab):  Use L_SET as bfd_seek arg.
	(elfstab_build_psymtabs):  staboffset and stabstroffset args are
	file_ptr's.
	* dwarfread.c (struct dwfinfo):  Convert dbfoff, lnfoff to file_ptr.
	(scan_compilation_units):  Punt unused filename arg.  dbfoff,
	lnoffset, and curlnoffset are file_ptr's now.
	(dwarf_build_psymtabs):  Drop desc and filename args; use
	objfile.  dbfoff and lnoffset are file_ptr's now.
	(read_ofile_symtab):  foffset is now file_ptr.  Use L_SET in bfd_seek.
	* elfread.c (struct elfinfo):  dboffset and lnoffset are file_ptr's.
	(elf_symfile_read):  Skip desc and filename args to
	dwarf_build_psymtabs.  Pass file_ptr's to elfstab_build_psymtabs.
	* gdb-stabs.h:  Use file_ptr rather than off_t.
	* mipsread.c (fixup_symtab): f_ptr is a file_ptr.  Re-enable
	compile-time debug check that someone turned off as "unused".
	(read_the_mips_symtab):  st_filptr is a file_ptr.  Fix bfd_seek call.
	* symfile.h:  Update dwarf_build_psymtabs and
	elfstab_build_psymtabs prototypes.
	* xcoffread.c (init_stringtab, init_lineno, xcoff_symfile_read):
	Use file_ptr offsets.  bfd_seeks use L_SET.

Thu Oct 15 01:27:32 1992  Stu Grossman  (grossman at cygnus.com)

	* mips-tdep.c, mipsread.c, tm-mips.h:  Get rid of ".gdbinfo."
	symbol.  #define MIPS_EFI_SYMBOL_NAME instead.  Use different
	value so that demangler won't be invoked.  This greatly speeds up
	stepping.
	* mips-tdep.c (mips_pop_frame):  Rewrite handling of
	linked_proc_info so that it properly deallocates the appropriate
	item after it is done with it instead of before.
	* Don't pass bogus frame pointer to create_new_frame().  Just
	leave it as zero so that lower level code will figure out the
	correct value.

Wed Oct 14 18:56:28 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Sony News native support.

	* Makefile.in (HFILES): added nm-news.h.
	* nm-news.h: new file.
	* config/news.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o to NATDEPFILES.
	  (NAT_FILE, NATDEPFILES): new macros for native support.
	* config/news.mt (TDEPFILES): removed exec.o.

	* remote-vx.c: remove redundant include of sys/time.h.

	* infrun.c: include ctype.h.  Otherwise some machines result in
	  undefined for isdigit.

Tue Oct 13 01:27:14 1992  John Gilmore  (gnu@cygnus.com)

	* configure.in:  Convert m68k entries to m68* entries to handle
	all the various m68xxx hosts and targets.
	* config/news1000.mt:  No longer needed, same as news.mt.

Fri Oct  9 18:54:37 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/sun3os[34].mh (NATDEPFILES): remove duplicate inftarg.o.

Fri Oct  9 14:20:08 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (HFILES):  Add all nm-irix3.h, nm-irix4.h,
	nm-sun2.h, nm-mips.h.

	* config/irix3.mh (NATDEPFILES):  nat-mips.o => mips-nat.o.

	* Makefile.in (alldeps.mak):  Add = sign after NATDEPFILES.

	* config/bigmips.mh config/littlemips.mh:  Remove mips-xdep.o.

Fri Oct  9 08:41:11 1992  Ian Lance Taylor  (ian@cygnus.com)

	* xm-hppah.h: if __STDC__ is not defined, define
	HPPA_COMPILER_BUG.
	symtab.c (decode_line_1): avoid a bug in the HP9000/700 native
	compiler; see the comment in the file.

Fri Oct  9 04:43:43 1992  John Gilmore (gnu@cygnus.com)

	First cut at support for all BSD variants on 386.

	* tm-i386bsd.h, xm-i386bsd.h:  New config files.
	* i386b-nat.c:  New native support file.
	* configure.in:  Add host and target for i[34]86-*-bsd*.
	* config/i386bsd.mh, config/i386bsd.mt:  New config files.

Fri Oct  9 00:31:33 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Sun2 native support (untested).

	* xm-sun2.h (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS,
	  REGISTER_U_ADDR): removed to nm-sun2.h.
	* nm-sun2.h: new file.
	* config/sun2os[34].mh (XDEPFILES): infptrace.o inftarg.o
	  fork-child.o sun3-xdep.o removed.
	  (NAT_FILE, NATDEPFILES): new macros.

	Mips native support.  Decstation and iris4 have been tested.
	Iris3 has not.

	* mips-tdep.c (supply_gregset, fill_gregset, supply_fpregset,
	  fill_fpregset): removed to irix4-nat.c
	* mips-xdep.c: removed.
	* irix4-nat.c, mips-nat.c, nm-irix3.h, nm-irix4.h, nm-mips.h: new
	  files.
	* procfs.c: include nm.h.
	* xm-irix3.h (U_REGS_OFFSET, FETCH_INFERIOR_REGISTERS): removed.
	* xm-irix4.h: bump copyright.
	(U_REGS_OFFSET, FETCH_INFERIOR_REGISTERS, USE_PROC_FS,
	PROC_NAME_FMT): removed.
	* xm-mips.h (FETCH_INFERIOR_REGISTERS): removed.
	* config/irix4.mh (XDEPFILES): removed procfs.o fork-child.o.
	(NAT_FILE, NATDEPFILES): new macros for native support.
	(CC): supply default compiler switches.
	* config/irix3.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o coredep.o.
	(NAT_FILE, NATDEPFILES): new macros for native support.  Note that
	irix3 is untested.
	* config/decstation.mh (XDEPFILES): removed infptrace.o inftarg.o
	  fork-child.o mips-xdep.o coredep.o.
	  (NAT_FILE, NATDEPFILES): new macros for native support.

Thu Oct  8 23:50:51 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/rs6000.mh (XDEPFILES): removed fork-child.o.
	(NATDEPFILES): added fork-child.o
	* config/sun3os3.mh (XDEPFILES): removed fork-child.o.
	(NATDEPFILES): added fork-child.o
	* config/sun3os4.mh (XDEPFILES): removed fork-child.o.
	(NATDEPFILES): added fork-child.o

Thu Oct  8 23:19:25 1992  John Gilmore  (gnu@cygnus.com)

	* infcmd.c (path_info):  Avoid 250-char limit on printf_filtered,
	by using puts_filtered instead.

Fri Oct  9 00:28:25 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* remote-nindy.c (nindy_load): Replacement version from Steve
	Chamberlain, doesn't require forking to run "strip" or "sx".

Thu Oct  8 18:27:35 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (HFILES):  Add nm-*.h files.

Thu Oct  8 16:27:45 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/sun4os4.mh (XDEPFILES): fork-child.o removed.
	(NATDEPFILES): added fork-child.o.

	* doc/gdbint.texinfo: document a few more macros, create new
	  section for native macros.

Thu Oct  8 13:52:46 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in alldeps.mak depend:  Rip out 29k/udi pending
	resolution of copyright issues.

Wed Oct  7 20:08:53 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (setup-to-dist):  Remove -norecursion so that doc
	subdir gets configured.

Wed Oct  7 12:24:01 1992  Ken Raeburn  (raeburn@cygnus.com)

	* Makefile.in (nindy.o): Define "STRIP" as pathname of strip
	program.
	* nindy-share/nindy.c (coffstrip): Use that pathname, instead of
	searching for a "bfd_strip" program.  Also, fixed up arguments
	passed to that program.

	* tm-nindy960.h (ADDITIONAL_OPTIONS): Use "-ser" rather than "-r",
	which is now used for something else.  Rewrite description of
	associated parameters to match how gdb does it now.
	(ADDITIONAL_OPTION_HELP): Fix message accordingly.

	* m68k-pinsn.c (print_insn_arg): Handle new "`" operand type.

Tue Oct  6 14:47:11 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	NOTICE_SIGNAL_HANDLING_CHANGE macro added to the target vector as
	to_notice_signals.

	* inferior.h (proc_signal_handling_change): prototype removed.
	* infrun.c (NOTICE_SIGNAL_HANDLING_CHANGE): default removed.
	(handle_command): now calls target_notice_signals.
	* procfs.c (proc_signal_handling_change): renamed to
	  procfs_notice_signals.  Now static.  Add prototype.  All callers
	  changed.
	* target.h (struct target_ops): new field, to_notice_signals.
	(target_notice_signals): new macro to cover new field.
	* target.c (cleanup_target): default to_notice_signals to ignore.
	* corelow.c (core_ops),
	exec.c (exec_ops),
	inftarg.c (child_ops),
	procfs.c (procfs_ops),
	remote-adapt.c (adapt-ops),
	remote-eb.c (eb_ops),
	remote-es1800.c (es1800_ops, es1800_child_ops),
	remote-hms.c (hms_ops),
	remote-mm.c (mm_ops),
	remote-nindy.c (nindy_ops),
	remote-st2000.c (st2000_ops),
	remote-udi.c (udi_ops),
	remote-vx.c (vx_ops, vx_run_ops),
	remote.c (remote_ops),
	target.c (dummy_target),
	xcoffexec.c (exec_ops): added static initializer for
	to_notice_signals.
	* xm-irix4.h, xm-sysv4.h (NOTICE_SIGNAL_HANDLING_CHANGE): removed.

Tue Oct  6 12:13:08 1992  John Gilmore  (gnu@cygnus.com)

	* main.c (define_command):  Add forgotten initializer.

Tue Oct  6 02:23:17 1992  John Gilmore  (gnu@cygnus.com)

	* language.c, language.h:  Move saved_language out to global
	expected_language.  Set expected_language when user expectation
	changes.
	* language.c (language_info):  Don't print type/range checking gub.
	* main.c (main):  Set expected language.
	(execute_command):  Check against expected language.
	* symfile.c (set_initial_language):  Set expected language.

	* configure.in, config/i386sol2.{mh,mt}:  Preliminary Solaris-x86 conf.

Fri Sep  4 00:34:30 1992  Per Bothner  (bothner@rtl.cygnus.com)

	A bunch of changes mostly to improve debugging of C++ programs.
	Specifically, the calling of inferiors methods is improved.

	* value.h:  New macros METHOD_PTR_IS_VIRTUAL,
	METHOD_PTR_FROM_VOFFSET, METHOD_PTR_TO_VOFFSET to partially
	hide the implementation details of pointer-to-method objects.
	How to tell if the pointer points to a virtual method is
	still very dependent on the particular compiler, but this
	should make it easier to find the places to change.
	* eval.c (evaluate_subexp [case OP_FUNCALL]), valprint.c
	(val_print [case TYPE_CODE_PTR]):  Use the new METHOD_PTR_*
	macros, instead of a hard-wired-in code that incorrectly
	assumed a no-longerused representation of pointer-to-method
	values.  And otherwise fix the relevant bit-rotted code.

	* valprint.c (type_print_base [case TYPE_CODE_STRUCT]):
	If there are both fields and methods, put a space between.

	* stabsread.c (read_struct_type):  Fix bug in handling of
	GNU C++ anonymous type (indicated by CPLUS_MARKER followed
	by '_').  (It used to prematurely exit the loop reading in
	the fields, so it would think it should start reading
	methods while still in the fields.  This could crash gdb
	given a gcc that can emit nested type information.)

	* valops.c (search_struct_method):  Pass 'this' value by
	reference instead of by value.  This provides a more
	consistent interface through a recursive search where the
	"bottom" functions may need to adjust offsets (due to multiple
	inheritance).
	* valops.c, value.h, values.c:  Pass extra parameters to
	value_fn_field and value_virtual_fn_field so we can
	correctly adjust offset for multiple inheritance.
	* eval.c (evaluate_subexp [case OP_FUNCALL]):  Simplify
	virtual function calls by using value_virtual_fn_field().
	* values.c: New function baseclass_offset, derived from
	baseclass_addr (which perhaps can be made obsolete?).
	It returns an offset rather than an address.  This is a
	cleaner interface since it doesn't mess around allocating
	new values.
	* valops.c (search_struct_method):  Use baseclass_offset
	rather than baseclass_addr.

Mon Oct  5 16:02:04 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Re-install 29K/UDI stuff.
	* remote-udi.c (udi_resume):  Clean up.
	* (udi_wait):  Rewrite, leave out bugs.
	* Add debugging code to print out all register fetches and stores.
	* Straighten out target_ops.
	* tm-29k.h (DUMMY_FRAME_RSIZE):  Pad out to doubleword.

Mon Oct  5 09:46:44 1992  Ian Lance Taylor  (ian@cygnus.com)

	* remote-udi.c (udi_create_inferior): run with no arguments should
	not pass the program name as an argument, since the UDI code
	already handles that.
	(udi_load): get the symbols from prog_name, not arg_string (the
	load command should really use arg_string as the program name, not
	prog_name, but at least the run command works now).

	* munch: HP9000/300 nm puts an extra space between T and symbol
	name.

	* config/irix4.mh: added -lsun to XM_CLIBS to get RPC functions
	needed for vxworks targets.

Fri Oct  2 22:04:42 1992  John Gilmore  (gnu@cygnus.com)

	* am29k-tdep.c (_initialize_29k):  Make it possible for the
	user to set and query the address where function calls into the
	inferior write a small scratch routine.  `set call_scratch_address'
	* inferior.h (PC_IN_CALL_DUMMY):  Fix fencepost error.
	* remote.c (remote_prepare_to_store): Only fetch regs if they are
	not already cached validly.

Thu Oct  1 14:36:42 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Rs6000 native support.

	* infptrace.c: remove #ifdef USG from around include ptrace.h.
	  machines without this header should not be compiling this file.
	* nm-rs6000.h, rs6000-nat.c: new files for native support.
	* rs6000-tdep.c: do not include sys/ptrace.h or sys/reg.h.
	* rs6000-xdep.c: removed.  all code now in rs6000-nat.c.
	* xm-rs6000.h: do not include ptrace.h.
	  (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS): moved to nm-rs6000.h.
	* config/rs6000.mh (XDEPFILES): removed rs6000-xdep.o.
	  infptrace.o and inftarg.o move to NATDEPFIES.
	  (NAT_FILE, NATDEPFILES): new macro for native support.

	Sun3 native support.

	* config/sun3os3.mh, config/sun3os4.mh (NAT_FILE, NATDEPFILES):
	  new macros for native support.
	  (XDEPFILES): moved infptrace.o and inftarg.o to NATDEPFILES,
	  removed sun3-xdep.o.
	* xm-sun3.h (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS): moved to
	  nm-sun3.h.
	* sun3-xdep.c: removed.  All code is now in sun3-nat.c.
	* sun3-nat.c, nm-sun3.h: new files for native support.

Thu Oct  1 10:30:54 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (dbsize):  New variable to hold size of dwarf info.
	* dwarfread.c (dwarf_build_psymtabs):  Rename dbsize parameter to 
	dbfsize and use it to initialize new local file scope dbsize.
	* dwarfread.c (read_ofile_symtab):  Initialize dbsize and use it.
	* dwarfread.c (basicdieinfo):  Use dbsize to check for oversize
	DIEs as well as the current check for undersize DIEs.  This helps
	to gracefully detect and reject corrupted DIE information.

Thu Oct  1 01:57:56 1992  John Gilmore  (gnu@cygnus.com)

	Add `command hooks' and a hook for inferior program stopping.

	* command.h (struct cmd_list_element):  Remove unused `aux'
	field.  Add new `hook', `hookee', and `cmd_pointer' fields.
	* command.c (add_cmd):  Initialize new fields, elim old.
	(add_alias_cmd):  Clone new fields.
	(delete_cmd):  Un-hook hookee if we're deleting hook.
	(help_cmd):  Tell user the command is hooked, if it is.
	(lookup_cmd_1):  Abbreviations return the original command
	instead of themselves, so that hooks on the original cmd will be
	run.
	* defs.h (enum command_class):  Add class_pseudo and comments.
	* gdbcmd.h (execute_user_command):  Add prototype.
	* infrun.c (normal_stop):  If the stop command is hooked,
	run the hook whenever we stop.
	(hook_stop_stub):  Stub for catch_errors.
	(_initialize_infrun):  Set up pseudo "stop" command.
	* main.c (execute_user_command):  Code extracted from execute_command.
	(execute_command):  If hooked, run the hook before the command.
	(define_command):  If defining a new hook, check the command it
	is hooking, and warn if none.  Install the hook.
	* source.c (_initialize_source):  "l" is an abbrev for "list".
	* doc/gdb.texinfo:  Document command hooks.

	* Makefile.in (VERSION):  Roll to 4.6.7.
	* config/sun4os4.mh:  Remove dup inftarg.o from NATDEPFILES.
	* infrun.c (breakpoints_inserted):  Make it static again.
	* tm-symmetry.h (FLOAT_INFO):  #if 0 it for cross-ptrace abuse.

Wed Sep 30 15:33:22 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Native file renaming.

	* nat-sparc.c -> sparc-nat.c
	* nat-sun4os4.h -> nm-sun4os4.h
	* nat-trash.h -> nm-trash.h
	* config/sun4os4.mh: track file renaming.
	* configure.in: link to nm.h rather than nat.h.
	* infptrace.c: include nm.h rather than nat.h.

Tue Sep 29 14:35:00 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Host/target/native split for sun4.

	* Makefile.in (TSOBS): removed corelow.o.
	* infptrace.c: included nat.h.
	* nat-trash.h: temporary header file.  This should be removed once
	  all hosts have the native/host/target split.
	* configure.in: add a symlink from nat-trash.h to nat.h if no
	  other nat file exists for this configuration.
	* sparc-tdep.c: no longer include sys/ptrace.h.
	* sparc-xdep.c: removed.  contents have been moved to nat-sparc.c.
	* xm-sparc.h (ATTACH_DETACH, FETCH_INFERIOR_REGISTERS): moved to
	  nat-sun4os4.h.
	* nat-sparc.c, nat-sun4os4.h: new files for sun4 native support.
	* config/sun4os4.mh (XDEPFILES): moved infptrace.o and inftarg.o
	  to NATDEPFILES.  removed sparc-xdep.o.
	  (NATDEPFILES, NAT_FILE): new macros for native support.

	Break the direct connection from core_file_command to any
	particular type of core file support.

	* target.h (find_core_target): new prototype.
	* target.c (find_core_target): new function.  Walks the target
	  list looking for the core target.
	* core.c (core_file_command): replace calls to core_detach and
	  core_open with find_core_target and direct calls.

Tue Sep 29 10:19:00 1992  Ian Lance Taylor  (ian@cygnus.com)

	* xm-hp300hpux.h: define MEM_FNS_DECLARED; include <sys/ptrace.h>
	for infptrace.c.
	config/hp300hpux.mh: ALLOCA1 was not defined.

Mon Sep 28 22:03:41 1992  Stu Grossman  (grossman at cygnus.com)

	* breakpoint.c, exec.c, language.c, main.c, printcmd.c, symfile.c,
	target.c, valprint.c:  Use unfiltered forms of f/printf, et. al.
	until we can figure out a better way to do paging.

Sat Sep 26 02:07:31 1992  John Gilmore  (gnu@cygnus.com)

	* findvar.c (supply_register):  Add CLEAN_UP_REGISTER_VALUE hook.
	* tm-hppa.h (CLEAN_UP_REGISTER_VALUE):  Use it.
	* hppa-coredep.c:  Remove, now that we use the hook.
	* config/hppab.mh, config/hppah.mh:  Use standard coredep.o.
	* hppab-xdep.c, hppah-xdep.c:  Remove custom code, use hook.

	* dbxread.c, partial-stab.h:  Replace all #ifdef hp9000s800's with
	GDB_TARGET_IS_HPPA's.  This is a SERIOUS KLUDGE.  The code needs to all
	be ripped out and reimplemented right (see elfread.c).
	* tm-hppa.h (GDB_TARGET_IS_HPPA):  Define.

	Rename all HPPA files to fit into unique DOS filenames:
	* *hppabsd*  => *hppab*
	* *hppahpux* => *hppah*

Sat Sep 26 00:25:15 1992  John Gilmore  (gnu@cygnus.com)

	Make the /proc support a target-struct in its own right.

	* Makefile.in: Remove inftarg.[co], since it is now included via
	config/*.mh files.
	* config/*.mh:  Add inftarg.o and fork-child.o to all *.mh that
	reference infptrace.o.  Add fork-child.o to all *.mh that
	reference procfs.o.

	* inferior.h (proc_wait, inferior_proc_init, proc_set_exec_trap):
	No longer global functions.
	(fork_inferior):  New global function from fork-child.c.
	* inftarg.c (child_wait):  Remove USE_PROC_FS conditional.
	(ptrace_me, ptrace_him):  New stub functions for fork_inferior().
	(child_create_inferior):  Moved to fork-child.c as fork_inferior.
	(child_create_inferior):  New tiny function that calls fork_inferior.
	* fork-child.c:  New file, containing fork_inferior, which is
	built from slight mods to inftarg.c's child_create_inferior.

	* procfs.c (procfs_ops):  Add target vector.
	(attach):  Rename as static do_attach.
	(procfs_create_inferior):  New tiny function that calls fork_inferior.
	(child_xfer_memory):  Rename to static procfs_xfer_memory.
	(store_inferior_registers):  Rename to static procfs_store_registers.
	(inferior_proc_init):  Rename to static procfs_init_inferior.
	(procfs_attach, procfs_detach, procfs_prepare_to_store,
	procfs_files_info, procfs_open, procfs_mourn_inferior,
	procfs_can_run):  Slightly mangled copies of the corresponding
	child_XXX routines from inftarg.c.
	(proc_wait):  Renamed to static procfs_wait.
	(child_resume):  Rename to static procfs_resume.
	(fetch_inferior_registers):  Rename to static procfs_fetch_registers.
	(initialize_proc_fs):  Rename to initialize_procfs.  Set up
	procfs_ops, too.

	* putenv.c:  index -> strchr.
	* regex.c:  Always rename bcopy to memcpy, etc.
	FIXME:  Eventually do the renames rather than use #define's.
	* sparc-tdep.c (deferred_stores):  Moved from sparc-xdep.c.
	Fix bcopy->memcpy.
	* sparc-xdep.c:  Move deferred_stores to target dependent.
	* xm-irix4.h, xm-sysv4.h (CREATE_INFERIOR_HOOK):  No longer needed.

Fri Sep 25 21:59:27 1992  John Gilmore  (gnu@cygnus.com)

	Split non-target-dependent code out of target_attach routines.

	* target.h:  Comments on target_attach args and results.
	* infcmd.c (attach_command): Check for existing execution, call
	target_attach, set up terminal status and wait_for_inferior, wait
	for the attach status, and do normal_stop.
	* inftarg.c (child_attach):  Remove target independent stuff.
	* remote-adapt.c (adapt_attach):  Ditto.
	* remote-mm.c (mm_attach):  Ditto.
	* remote-udi.c (udi_attach):  Ditto.
	* remote-vx.c (vx_attach):  Ditto.

	Cleanup.

	* remote-hms.c (hms_attach):  Remove completely, it was useless.
	* remote-mm.c, remote-hms.c, remote-udi.c, remote-adapt.c:  Remove
	commented-out start_remote calls.
	* remote-hms.c, remote-adapt.c, remote-mm.c, remote-udi.c: Remove
	DENTER and DEXIT macros and their calls.  Use a real debugger --
	like gdb -- to see what functions are being called when.
	* utils.c (strcmp_iw):  Make nonstatic, for lint.

Fri Sep 25 18:48:20 1992  John Gilmore  (gnu@cygnus.com)

	* infrun.c, inftarg.c, inferior.h:  Comment and lint cleanups.

Fri Sep 25 15:13:44 1992  Stu Grossman  (grossman at cygnus.com)

	* tm-sparc.h, dbxread.c (read_ofile_symtab):  Install Jim Wilson's
	fix to differentiate between gcc1 & gcc2 compiled files so that we
	can debug calls that pass structs as args correctly.
	* symmisc.c (dump_symtab):  If block was compiled with gcc, say
	so, and what version.

	* remote.c (remote_wait):  Make regs be char to avoid picayune
	ANSI compiler warnings.

	* energize.h:  Move all external struct decls to inside of
	__STDC__, add prototype for energize_shell_wait().
	* energize.c (getpty):  Clean up, make us really get a controlling
	terminal.
	* (energize_initialize):  Disable SIGIO prior to setting up for
	I/O interrupts.  Move setsid(), et. al. to getpty().
	* (energize_shell_wait):  New routine to wait for things started
	via the shell command, uses wait() instead of /dev/proc.
	* Also, add prototype for execute_command_1().

Fri Sep 25 12:09:33 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* inftarg.c (child_create_inferior, child_attach,
	  child_mourn_inferior): collect unix child process stratum
	  functions which live below the target vector into this file to
	  facilitate host/target/native split.  Also, make them static.
	* inflow.c (child_mourn_inferior): removed.
	* infrun.c (child_create_inferior, child_attach): removed.
	  (resume): becomes global so that functions below the
	  target vector can find it.
	* inferior.h (resume): add prototype.
	  (child_mourn_inferior, child_create_inferior, child_attach):
	  remove prototypes.

	* xcoffexec.c (exec_ops): child_attach and child_create_inferior
	  replaced with find_default_attach and
	  find_default_create_inferior.

Fri Sep 25 10:21:04 1992  Ken Raeburn  (raeburn@rtl.cygnus.com)

	* i960-pinsn.c: Use _filtered routines for printing, so symbolic
	addresses don't get displayed in the wrong positions.

Fri Sep 25 09:52:47 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

        Separate core functions along target vector in preparation for
        native support.  Functions above vector now live in core.c.  Those
        below in corelow.c.

	* core.c (solib_add_stub, core_close, core_open, core_detach,
	  get_core_registers, core_files_info, core_ops): moved to corelow.c
	  (_initialize_core): removed addition of core_ops target.
	* corelow.c: new file.
	(solib_add_stub, core_close, core_open, core_detach,
	get_core_registers, core_files_info, core_ops): moved from core.c
	(_initialize_corelow): new function.
	* gdbcore.h (core_open, core_detach): added prototypes.
	(core_ops): add forward declaration.
	* Makefile.in (SFILES_MAINDIR): add core.c
	(OBS): add core.o
	(TSOBS): change core.o to corelow.o

Wed Sep 23 11:14:53 1992  Stu Grossman  (grossman at cygnus.com)

	* m68k-tdep.c (m68k_saved_pc_after_call):  Use 'GDB_TARGET_IS_SUN3'
	instead of 'sun' predefined symbol so that trap analysis code is
	enabled only when the TARGET is a sun3.

Tue Sep 22 17:13:19 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* tm-i960.h (ext_format_i960): Add top-level declaration.
	(REGISTER_CONVERT_TO_{VIRTUAL,RAW}): Don't declare it in nested
	blocks, else Sun4 compiler complains.

Tue Sep 22 00:43:51 1992  John Gilmore  (gnu@cygnus.com)

	* mips-pinsn.c (print_insn_arg, case 'B'):  Disassemble `break'
	instruction's argument.  Patch from jonathan@cs.stanford.edu
	(Jonathan Stone).

Mon Sep 21 18:16:30 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	Break the thread of control that implies that a unix child
	process will be the default target.

	* target.c (find_default_run_target, find_default_attach,
	find_default_create_inferior, return_zero):  new functions.
	(cleanup_target):  Make return_zero the default for to_can_run.

	* exec.c (exec_ops), core.c (core_ops):  Replace child_attach and
	child_create_inferior references with find_default_XXX instead.

	* target.h (struct target_ops): new field, to_can_run.
	(find_default_attach, find_default_create_inferior):  new prototypes.
	(target_can_run): new macro.

	* Also added a zero (default) to_can_run element to all static
	struct target_ops initializations throughout GDB, except: 
	* inftarg.c (child_ops): Use new child_can_run() to enable child runs.

	* infrun.c (child_create_inferior):  Clean up error handling when
	no exec file is specified.
	(child_attach):  Don't require exec file.

Mon Sep 21 19:43:13 1992  John Gilmore and K. Richard Pixley (gnu@cygnus.com)

	Remove kill_inferior_fast, in favor of target_kill, which goes
	through the target vector.

	* inferior.h (kill_inferior_fast): remove declaration.

	* main.c (disconnect): call quit_cover using catch_errors rather
	than calling kill_inferior_fast directly.  New way goes through
	the target vector, handles attached processes, and writes
	command history if appropriate.
	(quit_cover): new function, wrapper for quit_command.

	* convex-xdep.c, go32-xdep.c, hppabsd-xdep.c, hppahpux-xdep.c,
	infptrace.c, procfs.c:  Removed all instances of kill_inferior_fast,
	inlining them into the local kill_inferior when needed.

Mon Sep 21 19:23:05 1992  John Gilmore  (gnu@cygnus.com)

	* infrun.c (_initialize_infrun):  Alias `i handle' == `i signals'.
	* stabsread.c (read_struct_type): Simplify complicated expression
	for dumb DECstation compiler.

Mon Sep 21 14:54:35 1992  Ian Lance Taylor  (ian@cygnus.com)

	* m68k-pinsn (print_insn_arg, fetch_arg): added support for
	operands to memory management instructions, from WRS.

Sep 20 08:42:12 1992  Fred Fish  (fnf@cygnus.com)

	* main.c (main):  Back out previous language setting changes.
	Replace with simple default to C before processing any init
	files.  There MUST be a language set, even in the absence of
	init files or executables, or expression parsing fails.

Sat Sep 19 09:52:26 1992  Fred Fish  (fnf@cygnus.com)

	* main.c (main):  Move code that sets initial language to
	symfile.c.  Fixup places where command files are processed to
	be consistent in setting a default language if none has been
	previously set.
	* symfile.c (set_initial_language):  Add code moved from
	main() that sets an initial default language when a new
	symbol file is read.
	* symfile.c (symbol_file_command):  Call set_initial_language.
	* symtab.c (find_main_psymtab):  Add FIXME comment.

Wed Sep 16 22:31:55 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* breakpoint.c, sparc-tdep.c: comment changes.
	* configure.in: removed target_dependent line.

	* remote-mm.c (mm_attach): change printf to error to prevent
	fallthrough bug.
	* remote-udi.c (udi_attach): change printf to error to prevent
	fallthrough bug.

	* rs6000-tdep.c (push_dummy_frame, pop_dummy_frame): replace
	calls to {fetch|store}_inferior_registers with calls to
	target_{fetch|store}_registers, for remote-target independence.

Sat Sep 19 04:23:54 1992  John Gilmore  (gnu@cygnus.com)

	* Makefile.in:  Fix bug I introduced in merging Rich's change.
	* infrun.c (child_create_inferior):  Use proceed() rather than
	doing all the same stuff by hand.

Thu Sep 17 17:35:37 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in, configure.in: add support for files used only when
	configured native, that is, when host = target.

Wed Sep 16 23:03:23 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* tm-sparc.h, xm-sparc.h: externs and macros relating to deferred
	stores are target dependent and were moved from xm to tm.

Sat Sep 19 03:14:37 1992  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (gdb-all.texi):  Build in objdir, not $srcdir.

	* config/decstation.mh:  Add MMALLOC_LIB and MMALLOC_DISABLE
	overrides, to avoid problem in xdr_bytes with malloc(0) => 0.

Wed Sep 16 20:04:54 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* target.h (struct target_ops):  removed to_convert_to_virtual and
	to_convert_from_virtual elements.  Initializations removed from
	all static initializations.
	(target_convert_to_virtual, target_convert_from_virtual):
	removed.
	(host_convert_to_virtual, host_convert_from_virtual):  Removed
	forward declarations.
	* target.c (cleanup_target): removed default assignments for
	to_convert_to_virtual and to_convert_from_virtual.
	* inftarg.c (host_convert_to_virtual, host_convert_from_virtual):
	removed.
	* findvar.c (value_of_register, value_from_register):  
	target_convert_to_virtual inlined.
	* infcmd.c (do_registers_info):  target_convert_to_virtual inlined.
	* valops.c (value_assign):  target_convert_from_virtual inlined.

Fri Sep 18 02:07:39 1992  John Gilmore  (gnu@cygnus.com)

	* main.c (gdb_readline):  Avoid printf_filtered, which sets char
	position wrong if used for the prompt.
	* utils.c (puts_filtered):  Comment:  NOT a puts() replacement!

	Support for accessing arbitrary MIPS stack frames in memory.

	* blockframe.c (get_prev_frame_info):  If INIT_FRAME_PC_FIRST is
	set, run it before INIT_EXTRA_FRAME_INFO.
	* stack.c (frame_info):  If PRINT_EXTRA_FRAME_INFO defined, call it.

	* mips-tdep.c (init_extra_frame_info): Only clobber the `frame'
	(FP) value in the frame_info struct if it is zero (as from top of
	execution stack).
	(setup_arbitrary_frame):  Implement FRAME_SPECIFICATION_DYADIC.

	* mips-xdep.c (fetch_inferior_registers):  ZERO_REGNUM always
	comes back as zero.  So does FP_REGNUM, as a trigger for
	init_extra_frame_info.

	* tm-mips.h (INIT_FRAME_PC_FIRST):  Kludge, FIXME, defined to get
	the program counter set before INIT_EXTRA_FRAME_INFO is run.
	(INIT_FRAME_PC):  Defined to null.
	(PRINT_EXTRA_FRAME_INFO): print frame pointer location via symtab.
	(FRAME_SPECIFICATION_DYADIC):  Ask for two args in frame command.
	Briefly explain MIPS stacks in GDB.

Thu Sep 17 03:49:59 1992  John Gilmore  (gnu@cygnus.com)

	* copying.awk, copying.c (show_copying_command,
	show_warranty_command):  Rename from copying_info, warranty_info,
	to match command function conventions.

	* utils.c (prompt_for_continue):  Reinitialize more-counts
	before printing anything, and again afterward.  Fix comments.
	(vfprintf_filtered):  Eliminate static buffer; use auto buffer,
	or alloca() if needed.

	* rs6000-xdep.c:  Use correct conditional (IBM6000_TARGET) to
	detect native versus cross-host.

Wed Sep 16 21:57:14 1992  Stu Grossman  (grossman at cygnus.com)

	* m68k-tdep.c (sun3_saved_pc_after_call):  Only do trap check for
	Suns.  Rename to m68k_saved_pc_after_call.
	* tm-68k-noun.h, tm-sun3.h (SAVED_PC_AFTER_CALL):  Use
	m68k_saved... instead of sun3_saved...

Wed Sep 16 17:00:07 1992  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (update-depend, update-alldeps): Split out of
	setup-to-dist, for convenience in rebuilding the depend and
	alldeps.mak files.
	(assorted):  Update to catch straggler files when building gdb.tar.Z.

Tue Sep 15 01:18:50 1992  John Gilmore  (gnu@cygnus.com)

	Preliminary cleanup for splitting host/native/target.

	* infptrace.c (child_resume):  Don't deal with NO_SINGLE_STEP
	here; it is dealt with at a gdb-target-independent level.
	* rs6000-tdep.c (single_step):  Don't call ptrace, we are a
	high toned routine.  Fix return type to void.
	* tm-rs6000.h (AIX_BUGGY_PTRACE_CALL): Zap, we think we fixed it.
	Rich and I believe the "real problem" was that both single_step
	and target_resume were issuing PT_CONTINUE calls.  This would
	cause the second PT_CONTINUE to sometimes fail because the process
	was already running.
	* infptrace.c (child_resume):  Remove AIX_BUGGY_PTRACE_CALL kludge.

Mon Sep 14 19:20:43 1992  Stu Grossman  (grossman at cygnus.com)

	* energize.c (pty_to_kernel):  Must check for EAGAIN as
	termination condition.
	(full_filename):  Don't prepend dirname if filename begins with /.
	(breakpoint_notify, kernel_dispatch):  Deal with DynamicLoad
	messages properly!!
	(getpty (NCR)):  Lotsa bug fixes...
	(kernel_dispatch (case StopRType)):  Use kill() instead of
	killpg() so we can deal with losing systems...
	(wait_for_events):  Work around NCR select() lossage.  It doesn't
	zero out readfds when select() returns zero.
	(energize_initialize):  Use I_SETSIG to get SIGIO interrupts.  Use
	getcwd() instead of getwd() (NCR getwd() seg faults).
	(energize_wait):  Use sigaction() for NCR.  Their version of signal()
	is unreliable by default.

	* procfs.c (proc_wait):  Call print_sys_errmsg() if we get an
	error from PIOCSWSTOP.

	* breakpoint.c, core.c, exec.c, language.c, main.c, printcmd.c,
	symfile.c, target.c, valprint.c:  Use _filtered form of *printf.
	defs.h, utils.c:  Make vfprintf_filtered global.

	* energize.c (send_location):  New routine to consolidate all
	places where we must notify kernel of where the given pc is.
	(cplus_demangle):  Put single-quotes around demangled names.
	(energize_call_command):  Call send_location() after doing up,
	down, and frame commands.

Fri Sep 11 18:28:28 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/gdb.texinfo, doc/gdbinv-m.m4.in, doc/gdbinv-s.m4.in: first
	pass at doc for two new remote targets---29K using UDI, and Tandem
	ST2000 using STDBUG.

	* doc/all.m4, doc/none.m4: new m4 switch, _ST2000__

	* doc/all.m4: turn on H8/300 stuff for generic manual

	* doc/gdbinv-s.m4.in: remove text on special procedures to continue 
	after explicit call to breakpoint() in serial stubs.

Fri Sep 11 01:34:25 1992  John Gilmore  (gnu@sphagnum.cygnus.com)

	* mipsread.c:  Clean up some white space.
	(parse_symbol):  Handle stEnd of stFile.
	(parse_partial_symbols):  Remove old #if 0'd code.  Handle stLocal.

	* mips-xdep.c (REGISTER_PTRACE_ADDR, fetch_inferior_registers,
	store_inferior_registers):  Replace unexplained numbers
	with manifest constants from a DECstation header file.
	* xm-mips.h (KERNEL_U_ADDR):  Get from <machine/param.h>.
	(REGISTER_U_ADDR):  Fix up for Ultrix 4.2.

	* tm-tahoe.h, xm-tahoe.h (KERNEL_U_ADDR):  Move macro to xm-tahoe.h.

	* stack.c (_initialize_stack):  "dow" should be a valid abbreviation
	for "down".  Suggested by Richard Stallman.

Thu Sep 10 15:26:07 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* remote-vx.c: Rename realloc for inclusion of rpc/rpc.h, to avoid
	redeclaration bug on SunOS 4.

Wed Sep  9 17:36:53 1992  John Gilmore  (gnu@cygnus.com)

	* i386-stub.c, sparc-stub.c (getpacket):  Actually check checksums.
	* m68k-stub.c:  Remove a few extraneous ANSI-isms.
	* remote-nindy.c (nindy_prepare_to_store):  Only fetch regs if 
	they aren't already there.
	* remote-vx.c (vx_prepare_to_store):  Ditto.
	* xcoffread.c:  Surround forward struct defns with #ifdef __STDC__.

Wed Sep  9 16:50:22 1992  John Gilmore  (gnu@cygnus.com)

	Removed a large number of changes inserted by Per Bothner
	for C++ support.  These will go back in when they've been
	examined.

Tue Sep  8 21:05:18 1992  Stu Grossman  (grossman at cygnus.com)

	* serial.h:  Fix prototye for serial_raw().
	* ser-bsd.c, ser-termios.c:  Fix args for serial_open() &
	serial_write() to match prototypes.
	* remote-st2000.c (get_reg_name):  Make *p be const.

Tue Sep  8 17:24:52 1992  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* remote-nindy.c (nindy_fetch_registers): Make return type void,
	to agree with target structure field type.
	(nindy_store_registers): Ditto.

	* Makefile (OPCODES): New var, pointing to opcodes library.
	(CLIBS, CDEPS): Include it.
	(saber_gdb): Load opcodes library.

Tue Sep  8 15:22:06 1992  Stu Grossman  (grossman at cygnus.com)

	* a68v-xdep.c (store_inferior_registers):  declare as void.
	* infptrace.c:  HP/Apollos have ptrace.h in the wrong place.
	* remote-st2000.c:  Massive changes to use new serial package.
	Also added 'connect' command to transparantly connect to serial
	port.
	* ser-termios.c:  Big cleanup, use nicer coding conventions.
	* ser-bsd.c:  New module, serial stuff for BSD systems.
	* serial.h:  Define struct ttystate properly using HAVE_TERMIO.
	* xm-apollo68b.h:  #define PTRACE_IN_WRONG_PLACE...

Fri Sep  4 18:53:57 1992  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/gdb.texinfo: fix shameful error of agreement reported by
	jimb@occs.cs.oberlin.edu (Jim Blandy)
	* doc/gdb.texinfo: remove old partial discussion of remote serial
	protocol (via serial debug stubs)
	* doc/gdbinv-m.m4.in, doc/gdbinv-s.m4.in: new section discussing
	use of serial debug stubs

Fri Sep  4 00:34:30 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* symfile.h:  Declaration of set_demangling_style() moved
	here from demangle.h (which is now in ../include).
	* i386-xdep.c:  Update comment.

Thu Sep  3 13:44:46 1992  K. Richard Pixley  (rich@sendai.cygnus.com)

	* symtab.c (completion_list_add_symbol): restructured to optimize
	for time.  First clip names that cannot match.  Then clip any
	names we've already considered.  Drop a redundant strncpy.  Drop
	a redundant malloc and associated free for demangled names.

Thu Sep  3 09:17:05 1992  Stu Grossman  (grossman at cygnus.com)

	* a68v-xdep.c (store_inferior_registers):  Define as type void.
	* configure.in:  Add host m68k-apollo*-bsd*.
	* demangle.c (struct demanglers):  Use enum instead of constant
	value to keep braindamaged HP/Apollo compiler happy.

Wed Sep  2 20:45:31 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* utils.c (strcmp_iw):  Add a hack to allow "FOO(ARGS)" to
	match "FOO".  This allows 'break Foo' to work when Foo is
	a mangled C++ function.  (See comment before function.)

Wed Sep  2 13:45:27 1992  John Gilmore  (gnu@cygnus.com)

	* config/rs6000.mh (MH_CFLAGS):  Circumvent IBM <rpc/rpc.h> bug,
	for files in vx-share/*.c.
	* xm-rs6000.h (fd_set):  Circumvent the rs6000.mh circumvention,
	for normal GDB source files.

	* Makefile.in (VERSION):  Roll to 4.6.6.

	* tm-vx68.h, tm-es1800.h:  Use tm-68k.h rather than tm-sun3.h.
	* tm-sun3.h:  Remove STACK_END_ADDR, no longer used.
	* tm-sun3os4.h:  Update comments.
	* xm-delta88.h:  Remove STACK_END_ADDR.

Wed Sep  2 01:18:31 1992  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  Roll to 4.6.5.

	* infrun.c:  Lint for recent `handle' changes.

	* ser-termios.c, ser-go32.c:  Remove DEFUN crap, clean up.
	* serial.h (EXFUN):  Remove all uses, convert to PARAMS.
	* config/sun4os4.mh:  Include ser-termios.o.  FIXME, all .mh files
	should include a ser-XXX.o module.

	* dbxread.c (elfstab_build_psymtabs):  Remove DEFUN crap.
	* defs.h, i960-pinsn.c, remote-hms.c:  Replace CONST with simple const.

	* configure.in:  Map unrecognized sun 68k's, sun sparcs, into 
	known suns in configure.in, rather than mapping them to unique
	config files that happen to duplicate other config files.
	* config/sun3.{mh,mt}:  Remove (use identical sun3os4.*).
	* config/sun4.{mh,mt}:  Remove (use identical sun4os4.*).

Wed Sep  2 00:10:43 1992  John Gilmore  (gnu@cygnus.com)

	* configure.in (*-*-sunos*):  Use trailing * to match all
	sub-variants of SunOS, e.g. sunos4* to match sunos4.1.1.
	(sparc-*-sunos3):  Remove host & target.  Sunos3 never shipped
	in production on Sun-4.
	({a29k,i[34]86,i960}-*-elf):  Add targets, equivalent to coff.
	(m68k-*-{aout,coff,elf}):  Add targets, w/new config and tm files.
	(sparc-*-{aout,coff,elf}):  Add targets, w/new config and tm files.

	* config/m68k-un.mt, config/m68k-noun.mt, config/sparc-un.mt,
	config/sparc-noun.mt:  New target configs for embedded.
	* config/sun4os3.{mh,mt}:  Remove, never existed in production.

	* tm-68k-un.h, tm-68k-noun.h, tm-spc-un.h, tm-spc-noun.h:  New
	target definitions for embedded with and without underlines on
	identifiers.

	* tm-sparc.h, tm-sun2.h, tm-sun3.h:  Delete NAMES_HAVE_UNDERSCORE:
	not a parameter of the CPU, but of the development environment.
	* tm-es1800.h, tm-sunos.h, tm-vx68.h:  Add NAMES_HAVE_UNDERSCORE.

Tue Sep  1 17:31:45 1992  John Gilmore  (gnu@cygnus.com)

	* breakpoint.c (breakpoint_re_set):  Avoid setting source symtab
	(which involves reading in main's symtab) if we have no breakpoints.

Mon Aug 31 13:47:45 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (cu_language):  New local variable to record
	language for current compilation unit being processed.
	* dwarfread.c (set_cu_language):  New local function to decode
	and record language for current compilation unit being processed.
	* dwarfread.c (synthesize_typedef):  Add local function to
	synthesize a typedef for C++ classes, structs, unions, and
	enumerations.
	* dwarfread.c (read_structure_scope):  Synthesize typedefs
	for C++ classes, structs and unions.
	* dwarfread.c (read_enumeration):  Synthesize typedefs for
	C++ enumerations.
	* dwarfread.c (read_file_scope):   Call set_cu_language to
	record language for current compilation unit.  After symtab
	is built, save this recorded language.
	* dwarfread.c (process_dies, add_partial_symbol, struct_type,
	scan_partial_symbols, new_symbol):  Recognize TAG_class_type.
	* dwarfread.c (add_partial_symbol):  Synthesize partial symbol
	typedefs for C++ classes, structs, unions, and enumerations.
	* dwarfread.c (scan_compilation_units):  Call set_cu_language
	to record language for current compilation unit.	
	* dwarfread.c (scan_partial_symbols):  Call add_enum_psymbol here
	for TAG_enumeration_types, rather than in add_partial_symbol.
	* dwarfread.c (add_partial_symbol):  Combine TAG_enumeration_type
	case with class, struct, and union type cases, now that they are
	the same.  Remove tests for non-NULL name attributes, now done
	by callers.
	* gdbtypes.h (TYPE_CODE_CLASS):  Add type for C++ classes, but
	treat as alias for TYPE_CODE_STRUCT for now.

Sun Aug 30 21:32:17 1992  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: map "gdb" through program_transform_name when
	installing.

Sun Aug 30 21:18:51 1992  Fred Fish  (fnf@cygnus.com)

	* {i386-tdep.c, m68k-tdep.c, mips-tdep.c, sparc-tdep.c}
	  (supply_gregset, fill_gregset, supply_fpregset, fill_fpregset):
	Use "regi" for local indexing through register numbers, reserving
	"regno" for the name of a specific register passed as an input
	parameter.  Fix bug propagated through all versions that sometimes
	used regno as an index when it should have been regi, thus using
	-1 as an index in some cases.

Sun Aug 30 18:15:17 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* cplus-dem.c, demangle.h:  Moved to ../libiberty and ../include,
	respectively, so same demangler can be used by other programs.
	* Makefile.in:  Remove demangler stuff.
	* Makefile.in (depend):  Pass -I../readline (needed for main.c).
	* demangle.c (_initialize_demangler):  Tell demangler which
	CPLUS_MARKER to assume.

Fri Aug 28 13:13:33 1992  John Gilmore  (gnu@cygnus.com)

	RS/6000 portability changes (for hosting cross-debuggers).

	* breakpoint.c (fixup_breakpoints):  Re-kludge to IBM6000_TARGET.
	* buildsym.c, rs6000-xdep.c, rs6000-tdep.c, tm-rs6000.h, 
	xcoffexec.c, xcoffread.c:  Rename aixcoff to xcoff everywhere.
	* printcmd.c (print_frame_args):  Remove an RS/6000 dependency.
	* stabsread.c (define_symbol):  Remove RS/6000 dependencies.
	* tm-rs6000.h (ATTACH_DETACH):  Remove: host-dependent.
	(PTRACE_ATTACH, PTRACE_DETACH):  Remove: host-dep.
	(NO_SINGLE_STEP):  Add, target-dependent.
	(loadinfotextindex):  Lowercase, remove "aix_".
	* xm-rs6000.h:  Add <sys/ptrace.h> for infptrace.c.
	(NO_SINGLE_STEP):  Remove, target-dependent.
	* xcoffexec.c (vmap_symtab):  Cleanup #if 0'd code.
	* xcoffread.c:  Only build file if RS/6000 native GDB.
	(build_function_symbol):  Remove #if 0'd code.
	* rs6000-tdep.c:  Cleanup.  Add static fn protos.
	Use CORE_ADDR for addresses throughout.  Make void fns void.
	(pop_dummy_frame):  Add FIXME about bogosity of design here.
	(rs6000_struct_return_address):  Ditto.
	(frameless_function_invocation, frame_get_cache_fsr,
	frame_initial_stack_address, xcoff_relocate_symtab,
	xcoff_init_loadinfo, free_loadinfo, xcoff_add_toc_to_loadinfo,
	add_text_to_loadinfo, find_toc_address):  Move from xdep file.
	Use CORE_ADDRs.  Change identifiers to lowercase.

	* rs6000-xdep.c:  Make whole file conditional on native RS/6000,
	supplying dummy routines if non-native.  Add prototype for
	static exec_one_dummy_insn.  Move a mess of functions to
	rs6000-tdep.c (as above).  Remove #if 0'd code.

	* config/rs6000.mh (XDEPFILES):  Move xcoffexec.o to target side.
	(XM_CLIBS):  Add -lm to circumvent AIX 3.2 libc ldexp bug.
	* config/rs6000.mt (TDEPFILES):  Adopt xcoffexec.o.

	* gdbtypes.h (TYPE_ALLOC):  Parenthesize result to avoid problems
	for callers.

	* vx-share/README, nindy-share/README:  New files describing
	how these directories' code is shared, and with whom.

Thu Aug 27 20:04:56 1992  John Gilmore  (gnu@cygnus.com)

	* configure.in (target configurations):  Reformat into table.
	Remove unsupp. Amigados host and target.  Ditto Mach 386 target.

	* tm-altosgas.h, tm-i386v-g.h:  Remove ancient coff encap configs.
	* config/{altosgas.mt, i386v-g.mt, i386v32-g.mt}:  Ditto.
	* config/{i386sco.mt,i386v32.mt}:  Remove; identical to i386v.mt.
	* config/{go32.mt,i960.mt}:  Remove; they only printed error msgs.
	* config/nindy960.mt:  Remove useless MT_CFLAGS setting.
	* config/i386aout.mt:  Use tm-i386v.h, not tm-i386v-g.h.

	* Makefile.in (config-check):  Add command to check whether
	configure.in is consistent with config/*.

Wed Aug 26 21:10:52 1992  John Gilmore  (gnu@cygnus.com)

	* configure.in (host configurations):  Reformat nested cases into
	easy-to-maintain table.
	(m68k-altos-*, i386v*):  We don't care whether coff encap is used.
	config/{altosgas.mh, i386v-g.mh, i386v32-g.mh}:  Remove.

Wed Aug 26 16:02:01 1992  Fred Fish  (fnf@cygnus.com)

	* cplus-dem.c:  Reorder args to most local functions to make them
	follow the consistent pattern of struct work_stuff pointer first,
	followed by pointer into string being demangled, followed by
	pointer to the string where the result is being stored, followed
	by other args.  Also generally replace most variables of name
	"type" with "mangled" for consistency.  They all pointed to the
	same string but half were one name and half the other.
	* cplus-dem.c (LONGERNAMES):  Remove #ifndef's.
	* cplus-dem.c (demangle_qualified):  Rewrite to clean up and allow
	use whenever a qualified name is being demangled.
	* cplus-dem.c (do_type):  Qualified names are treated similarly
	to fundamental types, not as modifiers of fundamental types.	

Mon Aug 24 20:44:38 1992  Stu Grossman  (grossman at cygnus.com)

	* configure.in:  Add sparclite as a target.

	* sparc-stub.c (handle_exception):  Flush instruction cache just
	before returning to the user.  (hexToInt):  Fix overzealous cleanup.

Mon Aug 24 11:57:13 1992  Fred Fish  (fnf@cygnus.com)

	* infrun.c (handle_command):  Rewrite to allow multiple signal
	numbers, signal number ranges, and to recognize "all" to mean all
	signals except those used by the debugger.
	* infrun.c (SET_SIGS, UNSET_SIGS):  Macros used in handle_command
	to set or reset actions for specific signals.

Sun Aug 23 17:10:07 1992  Fred Fish  (fnf@cygnus.com)

	* coffread.c (decode_type):  Call alloc_type to alloc new
	types.
	* stabsread.c (read_array_type, read_range_type, define_symbol):
	Call alloc_type to alloc new types.
	* stabsread.c (define_symbol):  Move dbl_valu symbol field data
	from type_obstack to symbol_obstack.
	* stabsread.c (define_symbol):  Move typedef_sym from type_obstack
	to symbol_obstack.
	* gdbtypes.h (TYPE_ALLOC):  New macro to allocate space for data
	associated with a type, using the same mechanism as was used to
	allocate space for the type structure itself.
	* coffread.c (patch_type, coff_read_struct_type,
	coff_read_enum_type):  Use TYPE_ALLOC.
	* dwarfread.c (struct_type):  Use TYPE_ALLOC.
	* gdbtypes.c (create_array_type, check_stub_method, 
	allocate_cplus_struct_type):  Use TYPE_ALLOC.
	* mipsread.c (parse_symbol, parse_type):  Use TYPE_ALLOC.
	* stabsread.c (read_struct_type, read_array_type, read_enum_type,
	read_range_type):  Use TYPE_ALLOC.

Sun Aug 23 11:04:08 1992  Fred Fish  (fnf@cygnus.com)

	* breakpoint.c (breakpoint_re_set):  Select a default source
	symtab if one is not currently selected.
	* utils.c (query):  Call wrap_here before building the output
	query string, to turn off wrapping and flush any buffered output.
	Otherwise our query may end up in the wrap buffer and never be
	seen by the user.
	* eval.c (evaluate_subexp):  Report error when attempting to
	evaluate subscript for types without a target type, rather
	than dumping core by using the NULL pointer.
	* symfile.c (symbol_file_command):  Forget current_source_symtab
	and current_source_line when discarding symbol table.

Sat Aug 22 22:33:20 1992  John Gilmore  (gnu@cygnus.com)

	Bug fixes from Andrew Heybey <ath@lcs.mit.edu>.

	* tm-mips.h (REGISTER_VIRTUAL_TYPE):  Float regs are float type.
	* mips-tdep.c (mips_print_register):  Alloc enough space for two regs.

Fri Aug 21 15:17:03 1992  Stu Grossman  (grossman at cygnus.com)

	* remote.c (remote_open):  Fix baud rate setting to make -b flag
	work.  (remote_wait):  Change 'T' message parser to deal with new
	improved format which allows stub to send an arbitrary bunch of
	registers.
	* sparc-stub.c:  General cleanups.  (trap_low, handle_exception):
	make all this re-entrant by storing all state on the stack.  Clean
	up memory error trapping.  (computeSignal, set_debug_traps):
	make it all table driven.  Make a start at a baud rate setting command.

Wed Aug 19 10:23:27 1992  Ian Lance Taylor  (ian@cygnus.com)

	* m68k-pinsn.c: handle new operand type 'r', introduced for cas2.

	* remote-vx.c: redefine malloc to avoid buggy declaration on
	RS/6000 <rpc/types.h>.
	xm-rs6000.h: include <sys/select.h> to define fd_set for
	<rpc/svc.h> on RS/6000.

Tue Aug 18 14:48:24 1992  Ian Lance Taylor  (ian@cygnus.com)

 	* Makefile.in: added FLAGS_TO_PASS variable, and passed it to
	recursive invocations of make.  Always create installation
	directories.

Mon Aug 17 18:29:58 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* m68k-pinsn.c:  Minor fix in style of output (don't use
	range to indicate floating point control registers).

Sat Aug 15 02:58:03 1992  John Gilmore  (gnu@cygnus.com)

	* m68k-pinsn.c:  Surround extended support with #ifdef HAVE_68881.

	* infcmd.c (registers_info):  Handle multiple register names.
	Changes inspired by Roland McGrath.

Sat Aug 15 02:28:52 1992  Stu Grossman  (grossman at cygnus.com)

	* sparc-stub.c:  New file.  Mix it with your SPARClite
	application, and it will speak GDB remote protocol!
	* remote.c (remote_wait):  Change 'T' (expedited reply) message to
	deal with arbitrary registers.  Needed for sparc-stub.

Fri Aug 14 12:11:25 1992  Fred Fish  (fnf@cygnus.com)

	* cplus-dem.c (cplus_markers):  Add table for gnu style and
	use throughout, in place of compile time constant CPLUS_MARKER.
	* cplus-dem.c (ARM_VTABLE_STRING, ARM_VTABLE_STRLEN):  Add.
	* cplus-dem.c (cfront_special):  New function, as suggested
	by pfieland@stratus.com.
	* cplus-dem.c (forget_types):  New function.
	* cplus-dem.c (cplus_demangle):  Call gnu_special, moved from
	demangle_prefix().
	* cplus-dem.c (mop_up):  Call forget_types().
	* cplus-dem.c (AUTO_DEMANGLING, GNU_DEMANGLING, LUCID_DEMANGLING):
	Use throughout, instead of checking current_demangling_style.
	* cplus-dem.c (demangle_signature):  When finding an explicit
	start of function args, forget all remembered types for
	lucid/cfront style demangling.
	* cplus-dem.c (demangle_prefix):  In a sequence of two or more
	underbar characters, use last pair as the delimiter.  Hoist
	gnu_special() call up to cplus_demangle().  Call cfront_special()
	when appropriate.
	* cplus-dem.c (cplus_special):  Fix virtual table name demangling
	for inherited classes.	
	* cplus-dem.c (demangle_args):  Document quirks of numbered
	references to previously seen types.
	* dbxread.c (read_ofile_symtab, process_one_symbol):
	Use AUTO_DEMANGLING rather than explicitly checking
	current_demangling_style.
	* demangle.h:  Add some comments.
	* demangle.h (AUTO_DEMANGLING, GNU_DEMANGLING, LUCID_DEMANGLING,
	CFRONT_DEMANGLING):  New macros.
	* dwarfread.c (LCC_PRODUCER):  Remove trailing space, which is
	not found in the actual producer string produced by lcc.
	* dwarfread.c (handle_producer):  Use AUTO_DEMANGLING rather
	than explicitly checking current_demangling_style.

Thu Aug 13 11:54:46 1992  John Gilmore  (gnu at cygnus.com)

	* breakpoint.c (enable_longjmp_breakpoint,
	disable_longjmp_breakpoint, set_longjmp_resume_breakpoint):
	Check for duplicate breakpoints at the same address.  Bug report
	and preliminary fix from Dave Morrison, <drmorris@us.oracle.com>.

Wed Aug 12 11:14:58 1992  Fred Fish  (fnf@cygnus.com)

	* buildsym.c (end_symtab):  Document that end_symtab can return
	NULL under non-error conditions.
	* dwarfread.c (read_file_scope):  Guard against dereferencing NULL
	returned from end_symtab for empty compilation units.

Tue Aug 11 02:49:39 1992  John Gilmore  (gnu at cygnus.com)

	* am29k-tdep.c:  Lint from DECstation compiler.
	* mem-break.c:  Restore test of BREAKPOINT size that Fred removed.
	As the man page says, "Sometimes you just can't get lint to shut
	up".  That doesn't mean you should blow away the code it won't
	shut up about.
	* mips-xdep.c:  Revise stubbing-out of code until Rich cleans
	it up over the next few weeks.  Make mips x 29k build.
	* tm-29k.h (CALL_DUMMY):  Make it work on cross-endian hosts.
	(FIX_CALL_DUMMY):  Comment in the patching of the breakpoint,
	but leave it as a comment because the breakpoint instruction 
	is not easily accessible at this moment (it's static, and if
	we define one here, it goes into every file compiled).

Mon Aug 10 22:27:19 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.6.3.
	* dwarfread.c (scan_partial_symbols):  Skip over DIE's within
	function scopes when building partial symbol tables.
	* objfiles.c (open_existing_mapped_file):  Make it clear in
	warning message that out of date mapped files are ignored.
	* symtab.c (lookup_symtab_1, lookup_symbol):  Print compilation
	unit source file name in error message.

Sat Aug  8 23:12:22 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (struct dieinfo):  Add has_at_byte_size.
	* dwarfread.c (struct_type):  In absence of AT_byte_size for
	bitfield, use size of object of member's type for the size of
	the anonymous object containing the bit field.
	* dwarfread.c (completedieinfo):  Set has_at_byte_size when
	an AT_byte_size attribute is seen.
	* mipsread.c (psymtab_to_symtab_1):  Fix misspelled cast to
	union aux_ext (was aux_ent).
	* i386-pinsn.c (print_insn):  Cast 2'nd arg to read_memory from
	unsigned char* to char*, for Lucid compiler.
	* i386-tdep.c (codestream_fill):  Fix cast of 2'nd arg to read_memory
	to be correct type (from unsigned char* to char*).
	* valprint.c (type_print_derivation_info):  Minor tweak to placement
	of commas in derived class printing.
	* xcoffread.c (builtin_type):  Fix misspelling in fatal message.

Fri Aug  7 11:18:23 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* xm-go32.h: Define LSEEK_NOT_LINEAR
	* source.c (find_source_lines): if LSEEK_NOT_LINEAR is defined
	then work out the lseek positions of newlines by running through
	the file and `tell'ing.  This makes source file listing work on
	OS's where the relationship between physical position in file and
	canonical position is indeterminate, eg VMS and DOS.

Thu Aug  6 10:56:01 1992  Fred Fish  (fnf@cygnus.com)

	* stabsread.c:  Ensure that all members of all allocated structures
	are initialized to known state to avoid hard to find bugs with gdb
	using fields containing random data.
	* buildsym.c (start_subfile):  Compact dirname initialization.
	* buildsym.c (patch_subfile_names):  New function.
	* buildsym.c (end_symtab):  Make copy of dirname on symbol obstack.
	* buildsym.c (end_symtab):  Free all malloc'd subfile fields.
	* buildsym.h (patch_subfile_names):  Add prototype.
	* dbxread.c (process_one_symbol):  Call patch_subfile_names.

Wed Aug  5 01:42:40 1992  John Gilmore  (gnu at cygnus.com)

	* remote-udi.c:  Update comments.

	* remote.c (getpkt):  Only force retransmission ten times;
	after that, assume bug in target code, and handle pkt anyway.

Mon Aug  3 17:06:20 1992  Stu Grossman  (grossman at cygnus.com)

	* configure.in:  Add support for apollo 68k under BSD environment.
	* xm-apollo68b.h:  New file to support above.

Mon Aug  3 00:25:56 1992  Fred Fish  (fnf@cygnus.com)

	* configure.in:  Recognize i486 host cpu.
	* valprint.c (type_print_derivation_info):  Print derivation info
	in same form as class declarations in source.
	* valprint.c (type_print_varspec_suffix):  Split arg printing
	code out to type_print_args function.
	
Sat Aug  1 13:32:58 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (struct dieinfo):  Remove obsolete at_visibility, 
	at_import, at_frame_base.
	* dwarfread.c (completedieinfo):  Remove cases for obsolete
	AT_visibility, AT_import, and AT_frame_base attributes.
	* breakpoint.h (BREAKPOINT_MAX):  Increase from 10 to 16 for
	i860, which can keep up to 4 shadow breakpoints.
	* tm-stratus.h (USG):  Define.
	* tm-stratus.h (TARGET_BYTE_ORDER):  Define to BIG_ENDIAN.
	* xm-stratus.h (HOST_BYTE_ORDER):  Define to BIG_ENDIAN.
	* xm-stratus.h (xm-sysv4.h):  Include, name changed from xm-svr4.h.
	* xm-stratus.h (NO_JOB_CONTROL):  Remove define.
	* config/stratus.mt (TDEPFILES):  Include files available from
	stratus that are not yet in release pending receipt of paperwork
	at FSF.
	* buildsym.c (finish_block):  Minor code format change.
	* gdbtypes.h (struct field):  Add to comments.
	* gdbtypes.h (virtual_field_bits):  Add to comments.
	* objfiles.c (allocate_objfile):  Change obstack interface to
	match FSF merging efforts.

Mon Jul 27 21:14:44 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.6.2.
	* Makefile.in (SFILES_MAINDIR):  Add stabsread.c
	* Makefile.in (OBS):  Add stabsread.o
	* Makefile.in (stabsread.o):  Add build rule.
	* stabsread.c, stabsread.h:  New files.
	* buildsym.c:  Split out stabs specific support to stabsread.c.
	* buildsym.h:  Split out stabs specific support to stabsread.h.
	* dbxread.c (stabsread.h):  Include
	* dbxread.c (dbx_new_init):  Call stabsread_new_init.
	* dbxread.c (dbx_psymtab_to_symtab_1):  Call stabsread_init.
	* dbxread.c (read_ofile_symtab):  Call end_stabs.
	* dbxread.c (process_one_symbol):  Call end_stabs and start_stabs.
	* dbxread.c (elfstab_build_psymtabs):  Call stabsread_new_init.
	* dwarfread.c (psymtab_to_symtab_1):  Call buildsym_init, add
	really_free_pendings to cleanups.
	* elfread.c (elf_new_init):  Call stabsread_new_init.
	* gdbtypes.c:  Small changes to maintenance commands.
	* mipsread.c (stabsread.h):  Include.
	* mipsread.c (psymtab_to_symtab_1):  Call end_stabs.
	* xcoffread.c (stabsread.h):  Include.
	* xcoffread.c (global_stabs):  Remove redundant def.
	* xcoffread.c (read_xcoff_symtab):  Call start_stabs and end_stabs.

Wed Jul 22 21:39:33 1992  Fred Fish  (fnf@cygnus.com)

	* lmode_inferior_valid, lmode_ours_valid:  New static vars.
	* inflow.c (terminal_init_inferior, terminal_inferior,
	terminal_ours_1, initialize_inflow):  Record and use state
	of lmode_inferior_valid and lmode_ours_valid.

Wed Jul 22 04:23:03 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* es1800.c: use FREAD|FWRITE rather than _FREAD|_FWRITE.
	include <sgtty.h> on USG.  (from sef).

	* depend: es1800 dependency needed here.

Mon Jul 20 21:09:53 1992  Fred Fish  (fnf@cygnus.com)

	* buildsym.c (read_struct_type):  Initialize structs allocated
	with alloca, to avoid using random values from stack later on.
	* defs.h (fprintf_filtered):  Add prototype.
	* gdbtypes.c (check_stub_method):  Fix misleading comments.
	* gdbtypes.c (print_arg_types, dump_fn_fieldlists):  New maint
	support functions.
	* gdbtypes.c (print_cplus_stuff, recursive_dump_type):  Many
	small changes to maint support functions.
	* gdbtypes.h (cplus_struct_type):  Reorganize member ordering
	for some fields and expand comments.
	* objfiles.c (allocate_objfile):  Use new obstack_alloc_arg
	macro and track change to obstack_full_begin macro.
	* utils.c (fprintfi_filtered):  New function.
	* valprint.c (type_print_base):  Fixup field printing to not
	print extraneous lines and not print bogus "no data fields"
	messages for C++ classes with no data members.  Also use new
	fprintfi_filtered function.

Mon Jul 20 11:25:18 1992  D. V. Henkel-Wallace  (gumby@cygnus.com)

	* configure.in: es1800 ok for 68000 too.

Sat Jul 18 15:48:58 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: echo error messages to stderr, not stdout

Fri Jul 17 17:07:24 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognize hppa* instead of hppa

Fri Jul 17 16:52:04 1992  Stu Grossman  (grossman at cygnus.com)

	* energize.c:  Second cut at DynamicLoad message handling.

	* energize.c:  Relativize pathnames in #include statements.
	* (kernel_dispatch):  Better error messages for unknown protocol
	messages.
	* (kernel_dispatch):  First cut at DynamicLoad message handling.

	* Makefile.in:  Remove -I../readline from all compilations,
	include a special case for main.o instead.

Fri Jul 17 10:14:56 1992  Fred Fish  (fnf@cygnus.com)

	* eval.c (evaluate_subexp):  Ask lookup_struct_elt_type to call
	error if it fails to find a member type, rather than return NULL
	and trigger a coredump.
	* symtab.c (lookup_symbol, lookup_demangled_block_symbol,
	lookup_demangled_partial_symbol,):  Ask demangle_and_match to
	match on complete demanglings, including argument lists for member
	functions, rather than just accepting the first demangling that
	matches the class and function name.
	* dwarfread.c (read_file_scope):  Pass contents of AT_comp_dir
	to start_symtab as the directory name.
	* dwarfread.c (completedieinfo):  Strip off any leading hostname
	portion of the AT_comp_dir attribute string.  Gdb doesn't know
	what to do with them (FIXME).

Thu Jul 16 13:37:09 1992  Stu Grossman  (grossman at cygnus.com)

	* breakpoint.c (commands_command):  Simplify code a bit, remove
	unnecessary fflush().

	* Makefile.in (OTHERS):  Add gcc.patch.
	* partial-stab.h (N_SO):  Fix handling of redundant SOs (again...)

Thu Jul 16 12:07:40 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (LCC_PRODUCER):  Change to match current NCR
	lcc producer string.

Thu Jul 16 11:40:55 1992  Stu Grossman  (grossman at cygnus.com)

	* WHATS.NEW renamed to NEWS.

Wed Jul 15 11:37:31 1992  Fred Fish  (fnf@cygnus.com)

	* dbxread.c, dwarfread.c:  Re-enable experimental code to
	automatically select demangling style.
	* demangle.c (DEFAULT_DEMANGLING_STYLE):  Rename from simply
	DEMANGLING_STYLE, to make more descriptive.  Revert back to
	"auto" as default.  Comment use.
	* Makefile.in (DEMANGLING_STYLE, DEMANGLE_OPTS):  Remove.
	* Makefile.in (${DEMANGLER}.o) Remove target and special
	compilation rule.

Tue Jul 14 23:05:14 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.6.1 (post-release versions).

Tue Jul 14 19:26:54 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in, demangle.c:  Change default demangling style to
	gnu.
	* Makefile.in:  Update version to 4.6 !!!
	* README, WHATS.NEW:  Update for 4.6.

Tue Jul 14 16:59:46 1992  Ken Raeburn  (raeburn@cygnus.com)

	* i960-tdep.c (frame_args_address): If arg pointer can't be found,
	use frame address.

	* buildsym.c (read_struct_type): Don't die on TYPE_CODE_UNDEF
	nodes as base classes.

Tue Jul 14 00:12:30 1992  Stu Grossman  (grossman at cygnus.com)

	* alldeps.mak, depend:  Update.

	* xcoffread.c:  Add decl for section_offset to keep prototype happy.

	* Makefile.in (VERSION):  4.5.9.

	* xm-hp300bsd.h:  Add decl for strdup().
	* mips-tdep.c (heuristic_proc_desc):  Fill in proc start addr in
	PDR.  Cleanup a few things, fix compilation warnings.

Mon Jul 13 19:06:54 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (DEMANGLING_STYLE):  New define to set default
	demangling style for C++.  Defaults to "auto".
	* Makefile.in (DEMANGLE_OPTS):  Use DEMANGLING_STYLE.
	* Makefile.in (SFILES_MAINDIR):  Add demangle.c
	* Makefile.in (OBS):  Add demangle.o
	* cplus-dem.c (GNU_DEMANGLING, ARM_DEMANGLING, LUCID_DEMANGLING):
	Remove compile time decisions about demangling style and replace
	with runtime decisions using current_demangling_style.
	* cplus-dem.c (main):  Expand code included during building of
	standalone demangler to recognize demangling style options.
	* dbxread.c (demangle.h):  Include.
	* dbxread.c (read_ofile_symtab, process_one_symbol):  Set GNU C++
	demangling style if processing g++ code and current demangling style
	is auto (Note: this feature currently disabled.)
	* demangle.c:  New file, generic demangling control.
	* demangle.h (demangling_styles):  New enumeration to select one
	of several demangling styles.  Also define string names for each
	style.
	* demangle.h (set_demangling_style):  Add prototype.
	* dwarfread.c (demangle.h):  Include.
	* dwarfread.c (GPLUS_PRODUCER, LCC_PRODUCER, CFRONT_PRODUCER):
	New producer string prefixes to recognize.
	* dwarfread.c (handle_producer):  Consolidate actions for specific
	producers.  Set demangling style based on producer string if
	current style is auto.  (Note: this feature currently disabled.)
	* config/ncr3000.mt (DEMANGLE_OPTS):  Remove.

Sat Jul 11 18:23:58 1992  John Gilmore  (gnu at cygnus.com)

	* config/sun4sol2.mh:  Remove -xs flag, default INSTALL to cp.

Fri Jul 10 13:58:34 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* gdbtypes.c, gdbtypes.h:  New function lookup_signed_typename.
	* c-exp.y:  Call lookup_signed_typename() after seeing
	"signed".  This handles "signed char" correctly.
	* c-exp.y:  Recognize (but ignore) 'const' and 'volatile'
	keywords before a type specifier.

Fri Jul 10 10:19:52 1992  Fred Fish  (fnf@cygnus.com)

	* command.c (lookup_cmd_1):  Clarify descriptive comments.
	* gdbcmd.h (maintenanceprintlist):  Add declaration.
	* main.c (maintenanceprintlist):  Add definition.
	* main.c (gdb_completer_command_word_break_characters):  Add.
	* main.c (symbol_completion_function):  Switch completer word
	break character sets dynamically, based on whether completion is
	being done on commands or on something else.
	* main.c (initialize_cmd_lists):  Init maintenanceprintlist.
	* maint.c:  Include demangle.h.
	* maint.c (maintenance_demangle):  New function.
	* maint.c (maintenance_print_command):  New function.
	* maint.c (_initialize_maint_cmds):  Reorganize some commands
	under new maintenance print subcommand.

Thu Jul  9 19:05:27 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* gdbtypes.c (lookup_struct_elt_type):  If the input type is
	TYPE_CODE_PTR or TYPE_CODE_REF, dereference it to get the
	target type.  Otherwise, 'whatis this.field' wouldn't work,
	which would be inconsistent, since 'print this.field' works.
	* buildsym.c (read_struct_type, read_enum_type):  Clear
	TYPE_FLAG_STUB flag.
	* buildsym.c (cleanup_undefined_types):  Don't rely on a
	flawed "Reasonable test to see if" a type has been defined
	since it was referred to; now we can just see if the
	TYPE_FLAG_STUB flag has been cleared.
	* valprint.c (print_type_base):  Emit public/protected/private
	labels for methods as well as fields.  Also, indent these labels
	2 spaces instead of 4, for a more conventional "look".
	* symtab.c (gdb_mangle_name):  Undo Fred's change, unless
	GCC_MANGLE_BUG is defined.  Also, handle destructors specially.
	* gcc.patch:  New file.  Contains patch for gcc (so people
	with gdb-2.2.x won't have to wait for a new gcc release).

Thu Jul  9 18:44:26 1992  Ken Raeburn  (raeburn@cygnus.com)

	* i960-pinsn.c (mem): Variables reg[123] should point to CONST.
	(print_addr): Call print_address to show symbolic version as well.

	* remote-vx.c (vx_kill): Don't look for arguments; they aren't
	being passed.
	(vx_read_register): Declare inferior_fp_regs.  Delete code for
	copying "inferior_registers" around; the values are already in var
	"registers".  Use correct size for register set.

	* remote-vx.c (vx_write_register): Don't try writing FP regs; the
	target doesn't support it.
	(vx_read_register): Don't try reading them either.

	* tm-i960.h (IP_REGNUM): Move to end of non-FP list, since the
	VxWorks back end reads them in one contiguous set except for this
	one.
	(register_names): Change "pc" to "pcw" to avoid confusion printing
	"$pc".
	* tm-vx960.h (PC_REGNUM): Use RIP_REGNUM, since that's where we
	find the PC under VxWorks.

Wed Jul  8 21:34:30 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (alloc_utype, decode_subscr_data):  Call alloc_type
	to create new blank types, instead of handcrafting them.
	* defs.h (printfi_filtered):  Add prototype.
	* utils.c (printfi_filtered):  New function.
	* gdbtypes.c (recursive_dump_type):  Use printfi_filtered to
	to simplify the code.  Other cleanups.
	* gdbtypes.c (check_stub_method):  Demangle using DMGL_ANSI.
	* gdbtypes.h (struct cplus_struct_type):  Add comments describing
	use of various fields.
	* gdbtypes.c (print_bit_vector, print_cplus_stuff):  New functions.
	* c-exp.y (%token):  Add CLASS as a token for C++, add grammar
	production that currently treats it exactly the same as STRUCT.
	* c-exp.y (yylex):  Recognize "class" as token CLASS.
	* symtab.c (gdb_mangle_name):  Rewrite to match current g++ stabs.
	* symtab.c (decode_line_1):  Fix to pass quoted args on down to
	general symbol handling code.  Call cplus_mangle_opname with
	DMGL_ANSI.
	* symtab.c (decode_line_2):  Print demangled function names in
	breakpoint menus, instead of just file and line number.
	* symtab.c (name_match):  Call cplus_demangle with DMGL_ANSI.
	* valprint.c (type_print_base):  Print "class" for C++ classes,
	rather than "struct".  Print section labels for public, protected
	and private members of C++ classes.	
	* values.c:  Include demangle.h.
	* values.c (value_headof):  Call cplus_demangle with DMGL_ANSI.

Wed Jul  8 17:23:07 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (VERSION):  Update to 4.5.8.

 Wed Jul  8 00:11:02 1992  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c (dbx_symfile_init):  Init stab_section_info to NULL to
	prevent crashes when examining cross-targets.
	* dbxread.c (process_one_symbol):  Include directory name when
	calling start_subfile for SOL & BINCL symbols.  This allows gdb to
	find include files, and yacc/lex sources when the cwd doesn't match
	that in which the object was compiled.
	* objfiles.h (ALL_MSYMBOLS):  Don't seg fault when there are no
	msymbols.
	* symtab.c (lookup_symtab_1):  Rewrite.  It now handles include
	files.

Tue Jul  7 09:00:42 1992  Fred Fish  (fnf@cygnus.com)

	* maint.c (maintenance_command, maintenance_info_command):
	Install with allow_unknown as 0 and call help_list to show
	list of possibilities when no subcommand is specified.

Tue Jul  7 00:20:29 1992  Fred Fish  (fnf@cygnus.com)

	* configure.in:  Add m68k-ericsson-*.
	* remote-es1800.c, tm-es1800.h, config/es1800.mt:  New files.

Sun Jul  5 17:17:16 1992  Fred Fish  (fnf@cygnus.com)

	* maint.c:  New file.
	* Makefile.in (SFILES_MAINDIR):  Add new file maint.c.
	* Makefile.in (OBS):  Add new file maint.o.
	* defs.h (command_class):  Add class_maintenance.
	* defs.h (MAINTENANCE_CMDS):  Default to including maintenance
	commands.  Allow for them (and other nonessential parts of gdb)
	to be selectively left out under special circumstances.
	* gdbtypes.c (recursive_dump_type):  New function; supports
	maintenance print-type command.
	* gdbtypes.h (recursive_dump_type, maintenance_print_type):
	Add prototypes.
	* main.c (maintenancelist, maintenanceinfolist):  Add maintenance
	command lists.
	* main.c (initialize_cmd_lists):  Eliminate unnecessary casts on
	initializers.  Add initializations for setprintlist, showprintlist,
	setchecklist, showchecklist, maintenancelist, and maintenanceinfolist.
	* printcmd.c (maintenance_print_type):  New maintenance cmd.
	* valprint.c (setprintlist, showprintlist):  Move to main.c, as
	implied by comment that all cmd lists are owned by main.c.
	* infcmd.c (unsetlist):  Move to main.c, as implied by comment
	that all cmd lists are owned by main.c.
	* language.c (setchecklist, showchecklist):  Move to main.c, as
	implied by comment that all cmd lists are owned by main.c
	* breakpoint.c (enablelist, enablebreaklist, disablelist, cmdlist,
	deletelist):  Remove redundant declarations (also in gdbcmd.h).
	* symmisc.c (printsyms_command):  Now maintenance_print_symbols.
	* symmisc.c (printmsyms_command):  Now maintenance_print_msymbols.
	* symmisc.c (printpsyms_command):  Now maintenance_print_psymbols.
	* symmisc.c (printobjfiles_command):  Now maintenance_print_objfiles.
	* symtab.h (maintenance_print_symbols, maintenance_print_psymbols,
	maintenance_print_msymbols, maintenance_print_objfiles):
	Add prototypes.
	* symmisc.c (printsyms_command, printpsyms_command,
	printmsyms_command, printobjfiles_command):  Removed from
	_initialize_symmisc.
	* main.c (dump_me_command):  Moved to maint.c and renamed to
	maintenance_dump_me.
	* breakpoint.c (all_breakpoints_info):  Rename to
	maintenance_info_breakpoints.
	* breakpoint.c (_initialize_breakpoint):  Convert add_info of
	all_breakpoints_info to add maintenance_info_breakpoints to the
	maintenanceinfolist instead.
	main.c (initialize_main):  Set up maintenance class commands.

Sun Jul  5 11:03:53 1992  Stu Grossman  (grossman at cygnus.com)

	* energize-patches:  Fix minor problems with building energize lib.

	* energize-patches:  Change names of all cadillac procedure calls
	to be energize procedure calls.  Simplify many hooks by moving
	tests energize.c.  Configure energize, and build it automatically now.

Sun Jul  5 09:43:28 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.5.7.
	* cplus-dem.c (demangle_args):  Validate index for previously
	seen type to guard against bogus values from malformed manglings.
	* valops.c (value_struct_elt_for_reference):  Guard against
	blindly using NULL return value from lookup_symbol.

Sun Jul  5 09:46:43 1992  Stu Grossman  (grossman at cygnus.com)

	* cadillac.c, cadillac-patches:  Rename to energize.c and
	energize-patches.  Change all routines and variables named
	'cadillac*' to 'energize*'.  Create new file called energize.h to
	hold all interface declarations.

	* deblib/connection/*:  Move all of this stuff into energize/, but
	delete unneeded files.

Sun Jul  5 03:06:39 1992  John Gilmore  (gnu at cygnus.com)

	* tm-sysv4.h (NAMES_HAVE_UNDERSCORE):  SVR4 systems don't.

	* buildsym.c (finish_block):  Fix thinko `inner block' complaints.
	* dbxread.c (process_one_symbol):  Parse N_OPT "gcc2_compiled.".
	* procfs.c (proc_set_exec_trap): Set run-on-last-close flag on
	child processes, to avoid dead ones "hanging around" after GDB exits.
	(attach): Always stop the process if it needs it.  Set RLC flag
	when attaching running processes, so it will continue if we detach
	it, quit, or are killed.
	(detach):  Clear faults and set RLC flag to make process run
	when we close it.
	(open_proc_file):  New `mode' argument for O_RDONLY or O_RDWR.
	Callers changed.
	(info_proc):  Open process O_RDONLY, so we can see any process,
	even those controlled by debuggers.
	* tm-sun4sol2.h (SUN_FIXED_LBRAC_BUG):  They did (in Sol 2).

Sat Jul  4 03:43:38 1992  John Gilmore  (gnu at cygnus.com)

	Relocate symbols using an array of section_offsets, rather than a
	single `addr' or `offset'.  This makes Solaris-2 support work, and
	permits better VxWorks (and maybe xcoff) support later.

	* symtab.h (struct section_offsets):  New structure for keeping
	a set of offsets, rather than a single one.
	(struct objfile):  Replace addr with section_offsets member.
	* symfile.h:  Add sym_offsets to struct sym_fns.  Conforming changes.
	* gdb-stabs.h:  New include file with `symbol type specific'
	parameters for psymtabs and objfiles.
	* Makefile.in (HFILES):  Add gdb-stabs.h.
	* buildsym.h (start_psymtab, process_one_symbol):  Fix prototypes.
	* coffread.c:  Conforming changes.  Fake offset array always 0.
	* dbxread.c:  Conforming changes.
	(struct dbx_symfile_info):  Move to gdb-stabs.h.
	(start_psymtab):  Call elfstab_offset_sections to calculate good
	offsets for this source file, based on the ELF symbol table info.
	(read_ofile_symtab):  Yank N_CATCH, which is dead.
	(process_one_symbol, N_CATCH):  Yank.
	(", N_FUN, N_FNAME, N_FN, N_FN_SEQ, N_SO, N_SOL, N_ENTRY):
	Relocate with SECT_OFF_TEXT.
	(", N_STSYM, N_LCSYM, N_ROSYM):  Grope around in the stab string
	to distinguish relocatable from absolute symbols.  Then, if not
	absolute, do:
	(", N_STSYM, N_DSLINE):  SECT_OFF_DATA.
	(", N_LCSYM, N_BSLINE):  SECT_OFF_BSS.
	(", N_ROSYM):  SECT_OFF_RODATA.
	(elfstab_build_psymtabs):  Caller has allocated dbx_symfile_info.
	(dbx_symfile_offsets):  Add to translate addr to offset.
	* dwarfread.c:  Conforming changes.  Single offset currently used.
	* elfread.c:  Add various complaints about elf/stab stuff.
	#include gdb-stabs.h.  Conforming changes, using a single offset.
	(elf_symtab_read):  Record info from BSF_FILE symbols, and local
	variables called "Bbss.bss", "Ddata.data", and "Drodata.rodata",
	for later use in building psymtabs.
	(elf_symfile_read):  Allocate dbx_symfile_info here, to keep
	the info collected in elf_symtab_read.  Cleanup calls free_elfinfo.
	(free_elfinfo):  New fn, frees all chained stab_section_infos
	in an objfile, and zaps the start-of-chain pointer.
	(elfstab_offset_sections):  New fn, looks in stab_section_info
	chain to determine section bases to relocate a psymtab's worth
	of symbols, as they are being read.
	* mipsread.c:  Conforming changes.  Stabs-reading will relocate
	using one offset.  MIPS-reading will not relocate at all.
	* partial-stab.h:  Relocate different symbol types using different
	offsets from section_offsets.
	* symfile.c:  Conforming changes.
	(find_lowest_section):  Unused function to use later
	to free us from the Tyranny of the Text Section.
	(syms_from_objfile):  Translate absolute arg ADDR to offsets used
	in all lower layers of symbol reading.  Call format-specific
	sym_offsets function to initialize offsets for high speed symbol
	reading.
	(symbol_file_add):  Call reinit_frame_cache so callers don't have to.
	(symbol_file_command, add_symbol_file_command):  Callers changed.
	* symmisc.c (dump_psymtab):  Print new relocation parameters.
	* xcoffread.c:  Corresponding changes.

	* buildsym.c:  Tidy innerblock_complaint and blockvector_complaint.
	* main.c (main):  Read the $HOME/.gdbinit file before processing
	the argv arguments (e.g. reading symbol files or core
	files).  This allows global parameters to be set, which will apply
	during the symbol reading.  The ./.gdbinit is still read after
	argv processing.
	* symtab.c (list_symbols):  `i variables' shouldn't show enum values.
	* xcoffexec.c:  Clean up quote inside comment.

Fri Jul  3 20:18:26 1992  Fred Fish  (fnf@cygnus.com)

	* breakpoint.c, buildsym.c, c-exp.y, coffread.c, command.c,
	core.c, cplus-dem.c, dbxread.c, dwarfread.c, elfread.c, environ.c,
	eval.c, findvar.c, gdbtypes.c, hppabsd-tdep.c, hppahpux-tdep.c,
	i386-tdep.c, ieee-float.c, infcmd.c, inflow.c, infptrace.c,
	infrun.c, m2-exp.y, mipsread.c, objfiles.c, parse.c, procfs.c,
	putenv.c, remote-mm.c, remote-vx.c, solib.c, sparc-tdep.c,
	sparc-xdep.c, stack.c, symfile.c, symtab.c, symtab.h, target.c,
	tm-i386v.h, tm-sparc.h, utils.c, valarith.c, valops.c, valprint.c,
	values.c, xcoffread.c:
	Remove "(void)" casts from function calls where the return value
	is ignored, in accordance with GNU coding standards.

Fri Jul  3 00:00:49 1992  John Gilmore  (gnu at cygnus.com)

	* dbxread.c (process_one_symbol):  Ignore N_MAIN, N_ENDM for Solaris.
	* partial-stab.h:  Ignore N_ENDM.
	* elfread.c (elf_symtab_read):  Ignore symbols that don't have a
	CODE or DATA section attachment.  This eliminates a lot of random
	values from shared libraries, which screw up the ordinary symbols
	in the address ranges they happen to overlap.
	* buildsym.c (define_symbol):  Eliminate special tests
	for function types; move into "function" cases in switch statement.
	(define_symbol: 'f', 'F', 'P'):  Process all parameter types
	in case they define new type numbers.  But ignore them (FIXME).
	('k', 'B'):  Ignore const and volatile if we see them (FIXME).
	(read_sun_builtin_type):  Add commentary.

Wed Jul  1 00:47:02 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* xm-rs6000.h: define MEM_FNS_DECLARED

Tue Jun 30 02:25:10 1992  John Gilmore  (gnu at cygnus.com)

	* tm-mips.h (GDB_TARGET_IS_MIPS):  Define for mips-xdep.c.
	(READ_MIPS_FORMAT, COFF_FORMAT):  Remove, unused now.
	* mips-xdep.c:  Remove most include files (unused, caused errs).
	(fetch_core_registers):  Use right parameters in dummy fn.

Mon Jun 29 18:30:57 1992  John Gilmore  (gnu at cygnus.com)

	* buildsym.c (scan_file_globals):  Beware the null file.
	Fix from Jim Williams.

	* stack.c (return_command):  Evaluate expression *before* popping
	off the stack frames!  Fix inspired by Jim Williams.
	(up_silently_command, down_silently_command):  No sel frame is error.

	* defs.h (memcpy, memset):  Conditionalize decls on
	#ifndef MEM_FNS_DECLARED, since DECstation differs.
	(alloca):  Break out the STDC and non-STDC alloca cases, to make
	it work on old preprocessors as well as "picky ANSI" ones.
	* xm-mips.h (memcpy, memset):  Declare, and set MEM_FNS_DECLARED.

	* mips-tdep.c (heuristic_proc_start):  Zero arg produces zero.
	* utils.c (fputs_demangled):  Rename SLOP since DECstation system
	header files define it!

	* tm-29k.h (BREAKPOINT):  Allow it to be overridden with -D.

Mon Jun 29 16:30:25 1992  Fred Fish  (fnf@cygnus.com)

	* dbxread.c, i386-pinsn.c, i386-tdep.c, regex.c, solib.c, symmisc.c,
	symtab.h, tm-i386v4.h, valprint.c, values.c:  Lint.
	* breakpoint.c, c-exp.y, coffread.c, command.c, environ.c, eval.c,
	findvar.c, infcmd.c, infptrace.c, infrun.c, m2-exp.y, parse.c,
	putenv.c, solib.c, sparc-xdep.c, symtab.c, tm-i386v.h, tm-sparc.h,
	utils.c, valarith.c, valops.c, valprint.c, values.c:
	Replace bcopy() use with memcpy(), which is more standard and can
	take advantage of gcc's builtin functions for increased performance.
	* breakpoint.c, buildsym.c, coffread.c, dbxread.c, i386-tdep.c,
	ieee-float.c, infcmd.c, sparc-tdep.c, stack.c, symtab.c, symtab.h,
	target.c, values.c:
	Replace bzero() use with memset(), which is more standard and can
	take advantage of gcc's builtin functions for increased performance.
	* i386-tdep.c, main.c, valprint.c:
	Replace bcmp() use with memcmp(), which is more standard and can
	take advantage of gcc's builtin functions for increased performance.

Sun Jun 28 13:30:22 1992  Fred Fish  (fnf@cygnus.com)

	* remote.c (remote_wait):  Fix cast on signal() call.
	* defs.h (alloca):  More diddling with alloca.  Have to ensure
	that it has a prototype, so that if alloca is defined as a macro
	that takes an arg, the definition is seen as a use of a macro
	that takes an arg, to satisfy picky ANSI preprocessors.

Sat Jun 27 12:12:20 1992  Fred Fish  (fnf@cygnus.com)

	* sparc-pinsn.c:  Use <string.h> rather than "string.h", for
	consistency with all other gdb files.
	* cadillac.c:  Use <string.h> rather than <strings.h>.
	* cadillac.c (kernel_dispatch):  Convert rindex usage to strrchr.
	* Makefile.in (MAKE):  Remove definition for consistency with
	other Makefile.in files and to fix problem with recursive makes.

Fri Jun 26 19:03:23 1992  John Gilmore  (gnu at cygnus.com)

	* hppahpux-xdep.c (child_xfer_memory):  Avoid PT_WDUSER because it
	crashes H-PUX.

Fri Jun 26 11:09:10 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* source.c (print_source_lines): for DOS interoperability; don't
	print CR (013) as ^M.

Thu Jun 25 15:18:42 1992  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c (dbx_symfile_init):  Move more code under hp9000s800
	conditional.
	* hppabsd-core.c:  Don't include "param.h", include <sys/param.h>
	instead.
	* remote.c (remote_wait):  Cast signal to void * to avoid warning
	from busted HP compiler.

	* partial-stab.h (N_SO):  Rearrange code a little so that all SO
	stabs cause end_psymtab to be called.

	* buildsym.c (read_sun_builtin_type):  Handle new FCS Sun CC
	compiler feature of putting 'c' into basic type descriptors for
	all forms of char.

	* procfs.c (child_resume):  Work around Solaris (on Sparc) lossage
	where there is no place for nPC in prrun struct.

Thu Jun 25 12:06:00 1992  Fred Fish  (fnf@cygnus.com)

	* mipsread.c:  Pass NULL name pointer to init_type, not 0.
	* gdbtypes.c (init_type):  Use copy of typename on type_obstack.
	* dwarfread.c (enum_type):  Save enum names on type_obstack.
	* dwarfread.c (struct_type):  Save member name on type_obstack.
	* symtab.c (_initialize_symtab):  Fix misspelling.
	* regex.c (store_jump, insert_jump):  Return void.

Thu Jun 25 04:00:10 1992  John Gilmore  (gnu at cygnus.com)

	* defs.h (PARAMS):  Move to ../include/ansidecl.h.
	(alloca):  Declare return type on SPARC, since Sun doesn't.
	(*_BYTE_ORDER):  Improve comment:  *must* be defined.

	* tm-hppa.h:  New file, architectural definition of HP PA.
	* tm-hppabsd.h, tm-hppahpux.h:  Shrink to deltas from tm-hppa.h.

	* am29k-pinsn.c, am29k-tdep.c, copying.awk, copying.c,
	hppa-coredep.c, hppa-pinsn.c, hppabsd-core.c, hppabsd-tdep.c,
	hppabsd-xdep.c, hppahpux-tdep.c, hppahpux-xdep.c, remote-udi.c,
	ser-go32.c, xcoffsolib.c:  Remove <stdio.h> which is already in
	"defs.h".

	* hppa-coredep.c, hppa-pinsn.c, hppabsd-core.c, hppabsd-tdep.c,
	hppabsd-xdep.c, hppahpux-tdep.c, hppahpux-xdep.c, xcoffsolib.c,
	xcoffsolib.h, xm-go32.h, xm-hppabsd.h, xm-hppahpux.h:  Copyrights.

Wed Jun 24 12:53:20 1992  John Gilmore  (gnu at cygnus.com)

	* printcmd.c (output_command):  Thinko.
	(x_command):  Only set remembered size/format if cmd succeeds.

	* dbxread.c (read_ofile_symtab):  Remove N_CATCH special case,
	since it is no longer used and burns time for every symbol read.
	(process_one_symbol):  Treat N_CATCH like default (complain).

Wed Jun 24 00:26:56 1992  Stu Grossman  (grossman at cygnus.com)

	* partial-stab.h (case N_TEXT):  Fix fencepost error when
	detecting start of new symbol info after reading symtab for a
	module with a zero length TEXT segment.

Tue Jun 23 21:46:26 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.5.6.
	* coffread.c (coff_end_symtab):  Cast 2nd arg of complain() to
	correct type.
	* defs.h (NORETURN):  Define away for Lucid compiler.
	* remote.c (remote_timer, remote_interrupt):  Signal handlers
	take one int arg.
	* ser-termios.c (serial_write, serial_close):  Return whatever
	value the write/close call returns, rather than falling off end.
	* inferior.h (PTRACE_ARG3_TYPE):  Third arg to ptrace is int on
	more systems than it is "char *".  Define PTRACE_ARG3_TYPE to
	default to int.
	* infptrace.c, hppabsd-xdep.c, hppahpux-xdep.c, i386-xdep.c,
	inferior.h (call_ptrace):  Use PTRACE_ARG3_TYPE to declare type
	of third arg.
	* a68v-xdep.c, arm-xdep.c, convex-xdep.c, hp300ux-xdep.c, infrun.c,
	m88k-xdep.c, mach386-xdep.c, mips-xdep.c, os68k-xdep.c, pyr-tdep.c,
	pyr-xdep.c, rs6000-xdep.c, sparc-xdep.c, sun3-xdep.c, sun386-xdep.c,
	symm-xdep.c, ultra3-xdep.c:  Use PTRACE_ARG3_TYPE to cast ptrace
	argument 3.
	* sparc-xdep.c, a68v-xdep.c (fetch_inferior_registers,
	store_inferior_registers): Supply missing fourth argument to
	ptrace().
	* cadillac.c (kernel_dispatch):  Make return type void.
	* cadillac.c (iosig):  Signal handlers take one int arg.
	* valprint.c (val_print_fields):  Call fprint_symbol to get
	automatic C++ demangling for mangled field names.

Mon Jun 22 20:18:06 1992  Fred Fish  (fnf@cygnus.com)

	* command.c (add_abbrev_prefix_cmd):  Fix misspelling in comment.
	* dwarfread.c (enum_type):  Fix misspelling in comment.
	* valprint.c (val_print_fields, cplus_val_print):  Minor
	adjustment to printing of C++ class structures to more closely
	match format for printing C structures, with and without setting
	pretty print.

Mon Jun 22 17:19:02 1992  Per Bothner  (bothner@cygnus.com)

	* infrun.c (wait_for_inferior):  Don't test for SIGEMT
	(which is not a Posix signal) if it isn't defined.
	* tm-linux.h, xm-linux.h, config/linux.m[ht], configure.in:
	New port to Linux (a free Unix clone for 386 machines).

Sat Jun 20 19:19:52 1992  John Gilmore  (gnu at cygnus.com)

	COFF changes for dealing better with EPI 29K C compiler output.

	* coffread.c (record_minimal_symbol):  Pass the minsym type to it.
	Callers changed.
	(coff_end_symtab):  Sort blocks if needed.  Complain if misordered.
	(read_coff_symtab):  Move patch_opaque_types call from
	coff_symfile_read.  Restrict it to symtabs from this objfile.
	(process_coff_symbol: C_TPDEF):  Don't put ordinary foward
	references on opaque type chain; just let coff_lookup_type handle 'em.
	(decode_type):  Complain about tagndx values on
	non-struct/union/enum types, which the EPI compiler tends to produce.

	* symtab.c (list_symbols):  Make minimal symbol variable-finding work.

	* tm-68k.h (FIX_CALL_DUMMY): Avoid alignment and byte order
	dependency.

	* elfread.c (elf_symfile_read):  Update bfd_elf_find_section
	usage to match new prototype.  Include libbfd.h to get prototype.

	* source.c (find_source_lines):  Handle large st_size fields.

Sat Jun 20 16:28:39 1992  Fred Fish  (fnf@cygnus.com)

	* infcmd.c (jump_command):  Use cleanups to avoid memory leaks.
	* stack.c (return_command):  Use cleanups to avoid memory leaks.

Fri Jun 19 19:06:41 1992  John Gilmore  (gnu at cygnus.com)

	* remote-adapt.c, remote-eb.c, remote-mm.c:  Lint.  Fix
	INT_REGNUM to INTE_REGNUM.

	* tm-29k.h (SDB_REG_TO_REGNUM):  Add for EPI 29K C compiler.

Fri Jun 19 15:30:15 1992  Stu Grossman  (grossman at cygnus.com)

	* configure.in, dbxread.c, hppa-coredep.c, hppa-pinsn.c,
	hppabsd-core.c, hppabsd-tdep.c, hppabsd-xdep.c, hppahpux-tdep.c,
	hppahpux-xdep.c, munch, partial-stab.h, tm-hppabsd.h,
	tm-hppahpux.h, xm-hppabsd.h, xm-hppahpux.h:  HPPA merge.

	* Makefile.in (c-exp.tab.c, m2-exp.tab.c):  Filter out bogus extern
	declarations of malloc/realloc/free that are inserted by some
	versions of yacc.
	* m2-exp.y:  Prevent conflicts with TRUE and FALSE tokens by
	#undeffing them.
	* xm-rs6000.h:  Declare malloc/realloc/free appropriately.  Yet
	another decl of strdup (this really ought to come from libiberty.h!).

Fri Jun 19 10:28:05 1992  John Gilmore  (gnu at cygnus.com)

	* remote.c (getpkt):  Error if input exceeds buffer size.
	(_initialize_remote):  `set remotedebug' enables packet trace.

	* dbxread.c (process_one_symbol:N_FUN):  GCC now produces relative
	N_SLINE's, etc, just like Sun cc on Solaris2.	

	* am29k-tdep.c (read_register_stack, write_register_stack):
	Change RSTACK_HIGH_ADDR to rstack_high_address, a user-settable
	variable.  Add `set' and `show' commands for it.
	* doc/gdb.texinfo:  Document it.

Thu Jun 18 19:35:22 1992  Fred Fish  (fnf@cygnus.com)

	* valprint.c (type_print_1):  Plug memory leak.  Print all
	C++ syms as demangled, not just functions.
	* buildsym.c (read_range_type):  When we find a signed char
	type, do a lookup of signed char, not plain char.  Plain char's
	still get looked up as plain char's elsewhere.

Thu Jun 18 18:59:04 1992  John Gilmore  (gnu at cygnus.com)

	* eval.c:  Avoid residue-by-zero when evaluating without side effects.
	(Bug and fix found by Pierre Willard.)

Wed Jun 17 13:08:33 1992  Stu Grossman  (grossman at cygnus.com)

	* xm-rs6000.h:  Fix decls for malloc, realloc, and free.

	* xm-rs6000.h:  Add decl for strdup().

	* tm-rs6000.h:  Remove #include of inferior.h.  Fixes many
	compilation errors.

	* breakpoint.c (enable_command, disable_command):  Without args,
	should only affect normal breakpoints and watchpoints.

	* m68k-pinsn.c (print_insn_arg):  Make register be const.
	* xcoffexec.c:  Remove ' from comment.
	* xm-sun3os4.h:  Define MALLOC_INCOMPATIBLE to avoid conflicts
	with decls of malloc in c-exp.tab.c (as produced by yacc).
	There's got to be a better way to do this...

Wed Jun 17 11:10:40 1992  Fred Fish  (fnf@cygnus.com)

	* partial-stab.h: Convert single rindex use to strrchr.
	* mipsread.c, dbxread.c:  Remove troublesome inclusion of non-
	standard <strings.h> file, now that the only single use of
	rindex in the gdb source files is gone.

Tue Jun 16 22:17:49 1992  Fred Fish  (fnf@cygnus.com)

	* mipsread.c:  Undo ill effects from including <strings.h>,
	which #defines index to be strchr.  Unfortunately, index is
	a member of a symbol table structure that can't be changed.
	* mipsread.c:  tm-mips.h includes coff/symconst.h and coff/sym.h,
	remove redundant #include's.

Tue Jun 16 14:15:51 1992  Stu Grossman  (grossman at cygnus.com)

	* mipsread.c:  #include <strings.h> for rindex().

Tue Jun 16 09:01:49 1992  Fred Fish  (fnf@cygnus.com)

	* xcoffexec.c (map_vmap):  Turn comment into a real C comment.

Mon Jun 15 18:41:23 1992  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c (process_one_symbol), partial-stab.h:  Ignore
	extraneous SO stabs from busted C++ compilers.

Mon Jun 15 12:21:45 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.5.5.
	* symtab.c (decode_line_1):  Until C++ support stabilizes, when
	C++ lookups fail, print possibly helpful hint about completion.
	* cplus-dem.c (demangle_signature):  Fix ARM style demangling
	for static data members.
	* dbxread.c (dbx_psymtab_to_symtab_1):  Fix prototype.
	* config/ncr3000.mh (INSTALL):  Don't use /usr/ucb/install,
	it's broken on ncr3000's.

Mon Jun 15 07:21:00 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (decode_modified_type):  Change type of first arg.
	Change 'modifier' to char from unsigned char.  Cast single use
	that needs to be unsigned char.
	* symtab.h (SYMBOL_BASEREG_VALID):  Explain disabling.
	* utils.c (strdup_demangled):  Add function.
	* defs.h (strdup_demangled):  Add prototype.
	* stack.c (return_command):  Demangle C++ function names for query.
	* infcmd.c (jump_command):  Demangle C++ function names for query.
	* cplus-dem.c (consume_count):  New function and prototype.
	* cplus-dem.c (demangle_class, gnu_special, demangle_func_type,
	do_type):  Replace conversion code with consume_count().
	* cplus-dem.c (gnu_special):  Fix demangled of static members.
	* source.c (list_command):  Print demangled function names
	when appropriate.  Fix supplied by Peter Schauer.

Mon Jun 15 01:45:48 1992  John Gilmore  (gnu at cygnus.com)

	* sparc-tdep.c:  Clean up slightly for Solaris2.

	* buildsym.c (define_symbol):  Nameless types are now on several
	platforms; generalize them and un-ifdef them to make Solaris 2
	work.

Sun Jun 14 10:55:51 1992  John Gilmore  (gnu at cygnus.com)

	* infcmd.c:  Fix typo (reported by Rob Savoye).
	* xm-sun4sol2.h (gregset_t):  Thinko in register set definition.
	* symtab.h:  Disable SYMBOL_BASEREG_VALID until it works.
	* dbxread.c (dbx_psymtab_to_symtab_1):  Renamed from
	psymtab_to_symtab_1.  Use current psymtab's sym_offset and symbol_size,
	rather than the one for the first file in the dependency chain.

	* dbxread.c (end_psymtab):  Only reset texthigh if it's not already
	set.  Don't reset our own texthigh, or dependency-only pst's, in
	scanning all the rest of the psymtabs.
	(process_one_symbol):  Fix comments around N_OBJ, N_OPT, N_UNDF.

	* buildsym.h (N_UNDF):  Improve comments.
	(N_LSYM, etc):  Skip types without names (":T(0,3)=sfoob...").

Sat Jun 13 11:16:45 1992  Fred Fish  (fnf at cygnus.com)

	* symtab.h (struct symbol):  Add aux_value union for preserving
	an additional per-symbol value.
	* symtab.h (SYMBOL_BASEREG, SYMBOL_BASEREG_VALID):  Add defines.
	* frame.h (FRAME_GET_BASEREG_VALUE):  Provide default definition.
	* findvar.c (read_var_value):  Use SYMBOL_BASEREG if valid.
	* printcmd.c (address_info):  Use SYMBOL_BASEREG if valid.
	* symmisc.c (print_symbol):  Use SYMBOL_BASEREG if valid.

Sat Jun 13 09:18:46 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* symfile.c (clear_symtab_users_once): Now non-static (for
	objfiles.c).

Fri Jun 12 18:54:40 1992  John Gilmore  (gnu at cygnus.com)

	* arm-pinsn.c, i960-pinsn.c, m68k-pinsn.c, mips-pinsn.c, 
	ns32k-pinsn.c, pyr-pinsn.c, sparc-pinsn.c, tahoe-pinsn.c, 
	vax-pinsn.c:  Remove reg_names decl (now in defs.h).

	Solaris-2 support on SPARC:

	* dbxread.c:  Add symbol_size to struct dbx_symfile_info.
	Add symbol_size and file offsets to struct symloc.
	Add static symbol_table_offset, string_table_offset,
	file_string_table_offset, next_file_string_table_offset, 
	last_function_name.
	(add_old_header_file):  Convert error() to complain()t.
	(dbx_symfile_read):  Get symbol size via the objfile.
	Also get symbol_table_offset.
	(dbx_symfile_init):  Record symbol size and count via the objfile.
	(dbx_next_symbol_text):  Always add file_string_table_offset when
	accessing string table.
	(read_dbx_symtab):  Initialize file_string_table_offset to 0.
	(SET_NAMESTRING):  Use the offset.
	(end_psymtab):  Large kludge to determine addresses where source
	files start and end (for the psymtab header).
	(psymtab_to_symtab_1):  Set file_string_table_offset before reading.
	Get this, symbol size, and symbol offset, from psymtab.
	(read_ofile_symtab):  Don't back up one symbol for Solaris2.
	Patch up last_source_start_addr if zero in N_SO.
	(process_one_symbol):  Add variable function_start_offset.
	( "", N_FUN, N_LBRAC, N_RBRAC, N_SLINE):  Add ifdef for
	BLOCK_ADDRESS_FUNCTION_RELATIVE.
	( "", N_OBJ, N_OPT):  Ignore.
	(elfstab_build_psymtabs):  New function to read stabs out of
	an ELF file.

	* Makefile.in:  Accept $(BISON) even though we really want $(YACC).
	(gdb):  use GLOBAL_CFLAGS when linking, too.
	* partial-stab.h (N_UNDF):  Deal with Sol2 relative stringtab offsets.
	(N_OBJ, N_OPT):  Ignore.
	('f', 'F'):  Save last function name.

	* elfread.c (record_minimal_symbol_and_info):  Kludged to put
	extra info in the minimal symbol.
	(elf_symtab_read):  The extra info is the size of an ELF object,
	which was kludged to us in the `udata' field of the BFD symbol.
	Gag me with a crowbar...
	(elf_symfile_read):  Keep track of both the absolute load address,
	and the offset between load addr and symbols.  Handle STABS as
	well as DWARF sections, passing the absolute load address to
	elfstab_build_psymtabs.

	* symfile.h:  Prototype elfstab_build_psymtabs.
	* symfile.c:  Add almost-OK debug versions of add_psymbol_*to_list.

	* xm-sysv4.h:  Add <limits.h> to avoid conflicting defns in defs.h.

	* buildsym.h:  Add processing_acc_compilation flag.
	* buildsym.c (read_sun_builtin_type, read_sun_floating_type):  New.
	(define_symbol):  Skip arg types in function entries.  Resolve
	overloaded 'P' which acc uses for prototypes of functions called
	by this file.
	(read_type: 'b', 'r'):  Handle Solaris2 builtin types.

	* minsyms.c (prim_record_minimal_symbol_and_info):  Hack to
	save size of ELF symbols.  FIXME.
	* tm-sun4os5.h:  Rename to tm-sun4sol2.h.  Update defines for Sol2.
	* xm-sun4os5.h:  Rename to xm-sun4sol2.h.  Hack more defines.

	* configure.in:  Solaris config is sparc-sun-solaris2.
	* config/sun4os5.m[ht]:  Rename to config/sun4sol2.m[ht]; new xm, tm.

	* objfiles.c (free_objfile):  Eliminate storage leaks.  Contributed
	by <Peter.Schauer@regent.e-technik.tu-muenchen.dbp.de>. 
	* symfile.c (symfile_bfd_open):  Comment where name is freed.
	* symmisc.c (extend_psymbol_list):  Comment where list is freed.

Fri Jun 12 08:24:36 1992  Fred Fish  (fnf at cygnus.com)

	* expprint.c (print_subexp):  Add missing ']'.
	* defs.h (reg_names):  Fix declaration to match that in infcmd.c
	* stack.c (reg_names):  Delete redundant (and inconsistent) decl.
	* WHATS.NEW:  Point out improved C++ function name handling.
	* gdbtypes.c (lookup_fundamental_type):  For now, use the same
	type names for both implicitly and explicitly signed integral
	types.  See comment in the source code.

Thu Jun 11 12:31:50 1992  John Gilmore  (gnu at cygnus.com)

	Two `long long' fixes from Robert R. Henry (rrh@dino.tera.com):
	* defs.h (longest_to_int):  Avoid void arm of ?: in error case.
	* expprint.c (print_subexp):  Fix printing of register names.

Thu Jun 11 01:33:40 1992  John Gilmore  (gnu at cygnus.com)

	* inferior.h (register_valid):  Declare.
	* remote-udi.c, rs6000-xdep.c, sparc-xdep.c, tm-rs6000.h:  Remove decl.
	* objfiles.h (ALL_OBJFILE_{SYMTABS,PSYMTABS,MSYMBOLS}):  Add
	macros for traversing the data structures in a single objfile.
	* tm-m88k.h, tm-sparc.h (REGISTER_NAMES):  Remove extra semicolon.
	* tm-i960.h (REGISTER_NAMES):  Cosmetic change.
	* infcmd.c:  Lint.

Tue Jun  9 17:19:45 1992  Fred Fish  (fnf at cygnus.com)

	* c-exp.y, m2-exp.y:  Move remapping defines for malloc and
	realloc.  Add remapping defines for {yyss, yyssp, yyvs, yyvsp}.
	* config/{amix.mh, i386v4.mh, ncr3000.mh, stratus.mh,
	sun4os5.mh}:  Add definition for INSTALL using /usr/ucb/install.

Tue Jun  9 16:29:19 1992  Stu Grossman  (grossman at cygnus.com)

	* depend:  rebuild to account for remote-st2000.c.
	* remote-st2000.c:  Almost works now.
	* tm-st2000.h:  Need to turn on HAVE_68881, else things won't compile.

Mon Jun  8 23:05:51 1992  Fred Fish  (fnf@cygnus.com)

	* c-exp.y (yylex):  Recognize single-quoted strings that specify
	tokens with embedded whitespace, such as C++ demangled names.
	* defs.h (demangle_and_match, strcmp_iw, skip_quoted):  Prototypes.
	* main.c (gdb_completer_quote_characters):  Add global variable.
	* main.c (symbol_completion_function):  Total rewrite for C++
	demangled name handling.
	* main.c (skip_quoted):  New function.
	* main.c (main):  Set rl_completer_quote_characters.
	* symmisc.c (dump_symtab):  Print source language for symtab.	
	* symtab.c (expensive_mangler):  Add prototype and function.
	* symtab.c (completion_list_add_symbol):  Total rewrite for new
	C++ demangled name handling.
	* symtab.c (lookup_symbol): Check for demangled C++ symbol first,
	other changes for demangled C++ symbol handling.
	* symtab.c (lookup_demangled_block_symbol):  Use demangle_and_match.
	* symtab.c (lookup_demangled_partial_symbol):  Use demangle_and_match.
	* symtab.c (decode_line_1):  Recognize C++ demangled names on input.
	* symtab.c (completion_list_add_symbol):  Total rewrite for new
	C++ demangled name handling.
	* symtab.c (expensive_mangler):  New function.
	* utils.c (strcmp_iw, demangle_and_match):  New functions.
	* xcoffread.c (aixcoff_symfile_read):  Fix prototype.

Mon Jun  8 21:59:08 1992  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  Roll VERSION to 4.5.4.
	* Makefile.in, config/*.mh, config/*.mt:  Rename TM_CFLAGS
	to MT_CFLAGS, XM_CFLAGS to MH_CFLAGS to match file names.
	* config/sun4os5.mh:  Add MH_CFLAGS=-xs to save debug info.

Mon Jun  8 14:17:42 1992  Stu Grossman  (grossman at cygnus.com)

	* alldeps.mak:  Rebuild to account for new files.
	* config/st2000.mt:  Use tm-st2000.h, not tm-68k.h.
	* tm-st2000.h:  New file.
	* configure.in:  Tandem debug monitor (st2000) support.
	* remote-st2000.c, config/st2000.mt:  ditto.

Fri Jun  5 11:51:01 1992  John Gilmore  (gnu at cygnus.com)

	* blockframe.c (inside_entry_file, inside_main_func,
	inside_entry_func):  Return 0 if no symbols; avoid crashing.

Wed Jun  3 17:48:04 1992  John Gilmore  (gnu@cygnus.com)

	* xcoffread.c (read_xcoff_symtab):  Set c_sclass from n_sclass
	without masking, since it is signed and will later be compared
	against signed quantities.  The right fix is probably to make
	it all unsigned, but this is a small, safe fix for this release.
	FIXME -- make the real change sometime soon.

Mon Jun  1 16:16:12 1992  Michael Tiemann  (tiemann@cygnus.com)

	* remote-vx.c (vx_load_command,add_symbol_stub): Default READNOW
	parameter in call to `symbol_file_add' to 0.

	* xm-sun4os4.h (MALLOC_INCOMPATIBLE): Define it.

Sun May 31 06:38:27 1992  Michael Tiemann  (tiemann@cygnus.com)

	* configure.in: Handle -m680[01234]0-wrs.

Fri May 29 22:16:02 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* m68k-pinsn.c (print_insn_arg): Pass &EXT_FORMAT_68881 to
	`ieee_extended_to_double'.

Wed May 27 09:27:57 1992  John Gilmore  (gnu at cygnus.com)

	* valops.c (value_assign):  Lint, by Pierre Willard.

Tue May 19 19:38:10 1992  John Gilmore  (gnu at cygnus.com)

	* coredep.c (fetch_core_registers):  Remove premature warning,
	which triggers on DECstation even though all regs are accessible.

	* m68k-pinsn.c (print_insn_arg):  Use new macros to get
	sign-extension of instruction fields even on unsigned-char hosts.
	Bug found by Fred J Roeber, fjr@sgfb.ssd.ray.com.

	88K changes inspired by Ted Lemon (uunet!lupine!mellon):
	* tm-m88k.h, tm-umax.h:  Avoid sizeof() in REGISTER_xxx macros,
	since they define the target, not the host.
	* m88k-pinsn.c:  Fix typo.

Thu May 14 01:16:48 1992  John Gilmore  (gnu at cygnus.com)

	* valarith.c (value_zerop):  -0.0 is still zero.
	* eval.c (evaluate_subexp):  Avoid NaN anomalies in float compares.
	Patches by Paul Eggert <eggert@twinsun.com>.

Mon May 18 13:53:51 1992  Stu Grossman  (grossman at cygnus.com)

	* alldeps.mak, depend:  re-make to account for ser-*.c.

Sun May 17 16:51:20 1992  Fred Fish  (fnf@cygnus.com)

	* inflow.c (new_tty):  Temporarily ignore SIGTTOU when
	disconnecting from controlling terminal, to avoid gdb hanging
	on SVR4.  Fixes bug reported by Oliver Okrongli.
	* procfs.c (PROC_NAME_FMT):  Change format to match default used
	by system, as suggested by Oliver Okrongli.
	* tm-68k.h (FRAME_FIND_SAVED_REGS):  Apply missing parentheses
	bug fix from Brent Townshend (bst%tt@cam.ORG).
	* c-exp.y (nonempty_typelist):  Fix memory overrun bug reported
	by turlais@rechser.total.fr.
	* dwarfread.c (decode_subscr_data):  Fix bug in calculation of
	length of non-zero lowerbound arrays.  Bug fix from Peggy Fieland.
	* objfiles.h (unlink_objfile):  Add prototype.
	* objfiles.c (unlink_objfile):  Add function.
	* objfiles.c (free_objfile):  Call unlink_objfile.
	* objfiles.c (allocate_objfile):  Call unlink_objfile on newly
	remapped objfiles.  Bug reported by hahn@sunshine.labs.tek.com.
	Also, discard old possibly bogus sf struct.
	* symfile.c (symbol_file_add):  Call init_entry_point_info() and
	find_sym_fns() for remapped symbol files, in case of any changes
	since the last mapping.

Wed May 13 18:28:20 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* findvar.c (read_relative_register_raw_bytes): use the raw size
	of a register to bcopy, rather than the host's sizeof(CORE_ADDR).

Tue May 12 17:44:39 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	Changes to support GDB running on DOS using GO32 and H8 support

	* defs.h: if xm.h doesn't define FOPEN_RB, include "fopen-same.h",
	allowing hosts with different text and binary file formats to
	work.
	* coffread.c (read_coff_symtab): changed calling convention and
	operation - now it opens its own file with FOPEN_RB rather than
	duping and fdopening the provided handle.
	* dbxread.c, cplus-dem.c: #include mangling.
	* exec.c: If O_BINARY isn't defined, set it to 0, call openp for
	binary files oring in the right bit.
	* utils.c, terminal.h, inflow.c: hackery because dos doesn't have terminals.
	* remote-hms.c: cleanup to use the new remote serial stuff
	* serial.h, ser-termios.c, ser-go32.c: newfiles to provide host
	independent remote terminal I/O.
	* remote.c: if DONT_USE_REMOTE not defined, then don't use it.
	* source.c (openp): fix off by one problem removing / - can now
	open a source file in the root directory with DOS.
	* values.c (value_as_pointer): remove bogus address bits from
	long. (unpack_long): unpack into unsigned long/short if pointer.

Tue May 12 14:15:48 1992  Stu Grossman  (grossman at cygnus.com)

	* infrun.c (child_attach):  Don't allow gdb to attach to itself.
	It gets permanently stuck in many OSes.
	* breakpoint.c, infcmd.c, infrun.c, utils.c:  Change many printfs
	to printf_filtered.
	* breakpoint.c: Improve	help text for info breakpoints.

Mon May 11 14:17:18 1992  John Gilmore  (gnu at cygnus.com)

	* README:  Add pointer to internals doc, and describe reading
	info files.
	* utils.c (print_sys_errmsg):  Use stderr.  Reported by Pierre Willard.
	* symtab.c (output_source_filename):  Remove old glop for wrapping
	lines, use wrap_here.  Reported by Pierre Willard (pierre@la.tce.com).

Thu May  7 11:45:03 1992  John Gilmore  (gnu at cygnus.com)

	* Makefile.in:  version.c should depend on Makefile, not Makefile.in.
	* munch:  Add sort -u to avoid duplications.
	* symtab.c (lookup_symbol):  Improve Stu's fix of 22 April.
	Improved fix by hahn@sunshine.labs.tek.com (Doug Hahn).

Mon May 11 13:27:46 1992  Fred Fish  (fnf@cygnus.com)

	* cplus-dem.c (demangle_signature):  Recognize misplaced '_' to
	avoid infinite loops while demangling bogus mangled names.
	* valprint.c (type_print_base):  Minor fix for GNU style guide
	conformance.

Sat May  9 18:02:17 1992  Fred Fish  (fnf at fishpond)

	* Makefile.in (VERSION):  Bump to 4.5.3
	* Makefile.in (DEMANGLE_OPTS):  Remove obsolete -Dnounderscore
	* Makefile.in (demangle):  New target to create standalone
	demangler with same code and options as internal demangler.
	* cplus-dem.c:  Massive restructuring, rewriting, cleanups, etc
	to support ARM style and Lucid style demangling, improve
	maintainability, fix several demangling bugs.  More changes
	to follow.
	* defs.h (strstr):  Add ANSI compatible prototype.
	* valprint.c (type_print_1):  Demangle using ansi option.
	* config/ncr3000.mt (DEMANGLE_OPTS):  Remove -Dnounderscore.

Sat May  9 14:47:28 1992  Stu Grossman  (grossman at cygnus.com)

	* xcoffexec.c (vmap_exec):  Don't assume .text and .data are the
	first two sections.

Fri May  8 11:42:15 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* mipsread.c (parse_procedure):  Return rather than using
	uninitialized variable 'b'.

Fri May  8 07:48:27 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in, remote-udi.c, remote-vx.c, 29k-share/dfe/mini2udi.c,
	29k-share/dfe/yank.c, vx-share/xdr_ptrace.c, vx-share/xdr_regs.c:
	Remove -I29k-share, -Ivx-share from Makefile.in.  Make #includes
	relative to each source file.

Fri May  8 07:48:27 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: propogate INSTALL, INSTALL_DATA, INSTALL_PROGRAM on
	recursions.

Thu May  7 10:00:52 1992  Stu Grossman  (grossman at cygnus.com)

	* am29k-pinsn.c:  Use new opcode table in "opcode/a29k.h".
	* am29k-tdep.c:  Update to latest code from AMD.
	(get_saved_register) don't crap out if no frame.
	* remote-udi.c:  Set/clear inferior_pid as appropriate.
	(udi_open) call target_preopen, don't close fd 0!!!, clean up
	error handling.  Fixup end-of-debugging messages.
	(udi_fetch_registers) clean up big time, mainly don't multiply
	register_valid indices by 4, and use proper Offset when reading
	gr96-gr127.  (udi_store_registers) general cleanup.
	(fetch_register) cleanup, simplify.  (regnum_to_srnum)
	INT_REGNUM->INTE_REGNUM.
	* tm-29k.h:  Upgrade to latest code from AMD.
	* 29k-share/udi/udip2soc.c:  Get rid of useless errmsg_m macro.
	(UDIConnect) Clean up error processing (like, don't do exit() if
	execlp fails), make code restartable, make more attractive.
	(UDIStop) Use SIGINT instead of SIGUSR1, as isstip won't stop
	otherwise.

Wed May  6 14:34:18 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* tm-irix3.h:  Re-define CPLUS_MARKER to '.'.
	* xm-rs6000.h, tm-rs6000.h:  Move re-definition of CPLUS_MARKER
	from former to latter.

Wed May  6 14:12:35 1992  Fred Fish  (fnf@cygnus.com)

	* cplus-dem.c (do_args):  Handle void args the same as others.
	* objfiles.c (free_objfile):  Only try to unmap files when
	reusable objfiles are supported.
	* valprint.c (type_print_varspec_suffix):  Add parameter that
	specifies if C++ demangling included function arguments.  Use
	it to suppress printing extra pair of ()'s.
	* valprint.c (type_print_1):  Fix problem with printing demangled
	C++ function types where demangled type includes the function
	args.

Tue May  5 11:10:27 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (DEMANGLER):  Define and default to cplus-dem.
	Allows selection of C++ demangler to be a configuration option
	until multiple demanglers are supported.
	* demangle.h:  New include file for extended demangler support.
	* breakpoint.c, gdbtypes.c, printcmd.c, stack.c, symtab.c,
	utils.c, valprint.c:  Include "demangle.h" and change all calls
	to cplus_demangle() or fputs_demangled() to use individual
	demangling options.
	* valprint.c (type_print_1):  Change options to cplus_demangle
	to print demangled function args.  Still broken, but now less so.
	* cplus-dem.c:  Include demangle.h, reorganize and update some
	comments to reflect reality.
	* cplus-dem.c (cplus_demangle, cplus_mangle_opname):  Change
	second arg from fixed integer to bit based multiple options.
	* cplus-dem.c (optable):  Reformat and replace ansi members with
	bit based options.
	* cplus-dem.c (do_type):  Fix bug with parsing missing return type.

Mon May  4 22:26:59 1992  John Gilmore  (gnu at cygnus.com)

	* values.c (set_internalvar):  Force evaluation of lazy values.
	Bug reported by RMS.

Sun May  3 15:47:45 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.5.2.
	* Makefile.in (DEMANGLE_OPTS):  Add, default to -Dnounderscore.
	* configure.in:  Simplify ncr3000 gdb_host logic, add gdb_target.
	* dwarfread.c (struct_type):  Apply fix from Peggy Fieland for
	proper handling of bit fields.
	* gdbtypes.h (struct type):  Clarify use of field.bitpos.
	* symtab.h:  Fix couple of misspellings in comments.
	* value.h (struct value):  Clarify use of bitpos.
	* value.h (unpack_field_as_long):  Change prototype, returns
	LONGEST.
	* values.c (unpack_field_as_long):  Change return type to LONGEST,
	sign extend unpacked fields that are signed, other rewriting.
	* config/ncr3000.mt:  New target config file.

Fri May  1 01:53:26 1992  John Gilmore  (gnu at cygnus.com)

	* utils.c (printchar):  Print 0x7F and 0x80-0x9F in \nnn notation
	even when printing 8-bit characters.

	* gdbtypes.c (make_{reference,pointer,function}_type):  New
	functions which handle overwriting of forward-referenced types
	for stabs file reading.
	(lookup_{reference,pointer,function}_type):  These just call
	the make_*_type functions with a null storage alloc parameter.
	* gdbtypes.h (make_{reference,pointer,function}_type):  Declare.
	* xcoffread.c (smash_to_pointer_type):  Remove, no longer used.

	* buildsym.c (dbx_lookup_type):  Zero result for (-1,-1) arg.
	(dbx_alloc_type):  Make it easier to understand.  No funct change.
	(define_symbol: 't'):  Don't put the typedef name into the name of
	the struct, union, or enum.  Bugfix.
	(read_type: '*', '&', 'f'):  Add comments.  Use make_XXX_type
	routines to properly handle overwriting preallocated types so that
	forward references will work.
	(read_enum_type):  Force enum values to file scope, due to bug in
	Sun compiler output.  FIXME, fix later.

	Remove unused header_file_prev_index mechanism.  It was already
	obsolete in gdb-3.5.  These comments appeared in 3.5:
	  /* This code was used before I knew about the instance codes.
	     My first hypothesis is that it is not necessary now
	     that instance codes are handled.  */
	* dbxread.c (add_new_header_file):  Remove header_file_prev_index.
	* buildsym.h:  Remove it and prev_index that saves it.
	* buildsym.c (push_subfile, pop_subfile, start_symtab):  Remove it.

	* solib.c (special_symbol_handling):  When called from core files,
	must set up debug_addr.  Don't print error messages, just return.
	* symmisc.c (print_symbol):  Less ascii diarrhea for enums, please.

Wed Apr 29 15:26:51 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* cplus-dem.c:  Allow nested class names (as in
	Foo::Bar::method()).
	Allow the cleaner cfront style of nested class names
	(Q2_3Foo3Bar as well as Q23Foo3Bar).
	Make cplus_demangle re-entrant by removing use of global
	variables.  Instead, place all shared variables in a
	stack-allocated structure, and pass around its address.	

Fri Apr 24 07:41:19 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (make-proto-gdb-1):  1st cut at packaging
	29k-share/* subdirs...

	* remote-udi.c (udi_insert/remove_breakpoint):  Completely
	rewrite, only leave out the bugs.

	* Makefile.in:  Add 29k/UDI support.  Improve depend.
	* alldeps.mak, configure.in, depend:  Add 29k/UDI support.

	* am29k-tdep.c:  Update to use new calling conventions, and misc
	symbol elements.

	* m68k-pinsn.c (print_insn_arg):  Make branch offsets be signed.

Thu Apr 23 18:43:17 1992  Fred Fish  (fnf@cygnus.com)

	* tm-29k.h:  Set DECR_PC_AFTER_BREAK to 0, as 29ks have nice
	breakpoint instructions that leave PC pointing at the right place.

	* core.c (core_open):  Call warning() to print warnings.

Wed Apr 22 09:55:42 1992  Stu Grossman  (grossman at cygnus.com)

	* symtab.c (lookup_symbol):  Need to check if msymbol->name is
	NULL, as ALL_MSYMBOLS will never return a NULL msymbol pointer.
	This prevents a crash when trying to lookup the value of a
	non-existent symbol.

Wed Apr 22 09:42:15 1992  Fred Fish  (fnf@cygnus.com)

	* signame.c, signame.h:  Remove, replaced by strsignal.c in
	libiberty.
	* i960-tdep.c, infrun.c, mach386-xdep.c, procfs.c, sparc-tdep.c,
	sun386-xdep.c:  Remove include of signame.h	
	* Makefile.in (SFILES_MAINDIR):  Remove signame.c
	* Makefile.in (HFILES):  Remove signame.h
	* Makefile.in (OBS):  Remove signame.o
	* defs.h (safe_strerror, safe_strsignal, strerrno, strsigno,
	errno_max, signo_max, strtoerrno, strtosigno, strsignal,
	psignal, perror):  Add prototypes.
	* defs.h, xm-apollo68v.h, xm-ultra3.h (SYS_SIGLIST_MISSING):
	Remove define.
	* depend:  Manually remove signame.[cho] references.
	* convex-tdep.c (subsig_name):  Replace use of sys_siglist with
	strsignal.
	* convex-xdep.c (core_file_command):  Replace use of sys_siglist
	with safe_strsignal.
	* core.c (core_open):  Replace use of sys_siglist with
	safe_strsignal.
	* core.c (memory_error):  Replace use of sys_errlist with
	safe_strerror.
	* i960-tdep.c (print_fault):  Replace use of sys_siglist with
	safe_strsignal.
	* infcmd.c (program_info):  Replace use of sys_siglist with
	safe_strsignal.
	* infrun.c (signal_stop, signal_print, signal_program):
	Allocate dynamically based on dynamic determination of number
	of signals to support.
	* infrun.c (child_create_inferior):  Replace use of sys_errlist
	with safe_strerror.
	* infrun.c (wait_for_inferior):  Replace use of sys_siglist with
	safe_strsignal.
	* infrun.c (sig_print_info):  Replace use of sig_abbrev with
	strsigno and sys_siglist with safe_strsignal.
	* infrun.c (handle_command):  Call signo_max to find number of
	signals.  Replace sig_number with strtosigno and sig_abbrev with
	strsigno.
	* infrun.c (signals_info):  Replace sig_number with strtosigno.	
	* infrun.c (_initialize_infrun):  Call signo_max to find number of
	signals.  Dynamically allocate signal_{stop,print,program}.
	* procfs.c (errno_table):  Remove, now in libiberty/strerror.c.
	* procfs.c (errnoname):  Add function and prototype.
	* procfs.c (info_proc_siginfo):  Call errnoname, replace use
	of sys_siglist with safe_strsignal.
	* procfs.c (info_proc_stop, info_proc_signals):  Replace use of
	sys_siglist with safe_strsignal.
	* procfs.c (info_proc_stop):  Call errnoname.
	* procfs.c (signalname):  Replace sig_abbrev with strsigno.
	* stuff.c (main, get_offset):  Replace use of sys_errlist with
	strerror.
	* sun386-xdep.c (core_file_command):  Replace use of sys_siglist
	with safe_strsignal.
	* umax-xdep.c (core_file_command):  Replace use of sys_siglist
	with safe_strsignal.
	* utils.c (safe_strerror, safe_strsignal):  Add functions that
	call strerror and strsignal respectively, and deal with NULL
	returns.
	* utils.c (perror_with_name, print_sys_errmsg):  Replace use of
	sys_errlist with safe_strerror.
	* valprint.c (val_print):  Replace use of sys_errlist with
	safe_strerror.

Tue Apr 21 12:00:47 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: rework CFLAGS so that they can be set from the
	  command line to make.  CFLAGS -> INTERNAL_CFLAGS.
	  USER_CFLAGS -> CFLAGS.  Remove MINUS_G.  Default CFLAGS to -g.
	  Pass CFLAGS on recusions.

Fri Apr 17 19:25:57 1992  Fred Fish  (fnf@cygnus.com)

	* gdbtypes.h, c-exp.y, m2-exp.y, mipsread.c, gdbtypes.c:  Back
	out of change on 4/14/92 and remove TYPE_FLAG_FUND_TYPE.  It was
	overkill for the problem it solved.
	* valprint.c (type_print_base):  Remove TYPE_FLAG_FUND_TYPE test
	and default to simply printing type names as appropriate.
	* main.c (main):  Remove one of the leading newlines from
	warning_pre_print initialization.
	* objfiles.c (open_existing_mapped_file):  Add function and
	prototype.
	* objfiles.c (open_mapped_file):  Rewrite to use new function
	open_existing_mapped_file.

Thu Apr 16 23:50:12 1992  John Gilmore  (gnu at cygnus.com)

	* sun3-xdep.c (fetch_core_registers):  Lint.
	* tm-sun3.h:  Prototype lint.
	* value.h:  Typo.

Thu Apr 16 19:56:50 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (TARGET_FT_POINTER_SIZE, TARGET_FT_LONG_SIZE):
	Define using TARGET_PTR_BIT and TARGET_LONG_BIT for now.
	* objfiles.c:  Cast calls to close() with unused returns to void.
	* objfiles.c (allocate_objfile):  Initialize objfile's mmfd, free
	old objfile's name before updating it.
	* objfiles.c (free_objfile):  Major rewrite for mapped objfiles.
	* objfiles.h (objfile struct):  Add mmfd member.
	* symfile.c (syms_from_objfile):  Move some code to
	new_symfile_objfile.
	* symfile.c (new_symfile_objfile):  Add new function, common code
	from syms_from_objfile.
	* symfile.c (symbol_file_add):  Call new_symfile_objfile for both
	mapped and unmapped symbol files.
	* symfile.c (symbol_file_command):  Print "No symbol file now"
	message, ala exec_file_command for the exec file.
	* symfile.h (new_symfile_objfile):  Add prototype.	
	* xcoffexec.c (map_vmap):  Add call to new_symfile_objfile.
	* xcoffsolib.c (solib_add):  Add call to new_symfile_objfile.

Thu Apr 16 18:26:34 1992  Per Bothner  (bothner@cygnus.com)

	* rs6000-pinsn.c:  New version from IBM (Metin).
	* m2-exp.y:  Re-write string initializers ("<>" => {'<', '>'})
	to avoid warnings from some compilers.

Tue Apr 14 22:33:55 1992  Fred Fish  (fnf@cygnus.com)

	* gdbtypes.h (FT_FIXED_DECIMAL, FT_FLOAT_DECIMAL):  Add defines.
	* gdbtypes.h (TYPE_FLAG_FUND_TYPE):  Add define for bit in a
	type's flag word that marks it as a fundamental type.
	* c-exp.y (_initialize_c_exp): Add TYPE_FLAG_FUND_TYPE bit to
	flags argument for all calls to init_type().
	* m2-exp.y (_initialize_m2_exp): Add TYPE_FLAG_FUND_TYPE bit to
	flags argument for all calls to init_type().  Also remove
	dependency on host sizes for ints, floats, etc.
	* mipsread.c (_initialize_mipsread): Add TYPE_FLAG_FUND_TYPE bit to
	flags argument for all calls to init_type().  Also remove
	dependency on host sizes for ints, floats, etc.
	* gdbtypes.c (lookup_fundamental_type):  Add TYPE_FLAG_FUND_TYPE
	bit to flags argument for all calls to init_type().  Add types
	FT_FIXED_DECIMAL and FT_FLOAT_DECIMAL.
	* valprint.c (unsigned_type_table, signed_type_table,
	float_type_table):  Remove.
	* valprint.c (type_print_base):  Test new TYPE_FLAG_FUND_TYPE
	bit when printing fundamental types, and print the actual name
	for such types, rather than inventing one.  Remove code that
	invented fundamental type names.
	* valprint.c (_initialize_valprint):  Remove initializations
	for now removed unsigned_type_table, signed_type_table, and
	float_type_table.

Tue Apr 14 14:30:46 1992  Stu Grossman  (grossman at cygnus.com)

	* remote-vx.c, vx-share/xdr_ptrace.c, vx-share/xdr_ptrace.h,
	vx-share/xdr_rdb.h:  Update for new remote protocol under VxWorks
	5.0.2.

Mon Apr 13 20:59:21 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (target_to_host):  New function similar to previous
	swapin function.
	* dwarfread.c (SWAPIN, swapin):  Remove macro and support function.
	Extensive changes to convert all previous usages to use new
	target_to_host() function.
	* dwarfread.c (struct dieinfo):  Change types of most integral
	members to be unsigned.

Mon Apr 13 15:59:10 1992  John Gilmore  (gnu at cygnus.com)

	* WHATS.NEW:  Revise -mapped doc.

Sat Apr 11 23:14:36 1992  John Gilmore  (gnu at cygnus.com)

	* mipsread.c (parse_partial_symbols):  Complain when sh->index is
	too high or when skipping `forwards' moves us backwards.
	(parse_type):  Print mis-guessed tag name in complaint.
	(parse_external):  Eliminate cur_stab and obscure top_stack clobbers.
	(parse_procedure):  Do not attempt to create symbols; just fill in
	the SYMBOL_VALUE field of a .gdbinfo. symbol if we can find one.
	(psymtab_to_symtab_1):  Split up `stabs' from `native ecoff' code
	for clarity.  Set top_stack before calling parse_external.  In
	stabs, sort symbols before calling parse_procedure.
	* mipsread.c:  Lint.
	* symmisc.c (std_in, std_out, std_err):  Add vars to access std
	FILE *'s when debugging GDB (e.g. as args to dump_symtab).
	* Makefile.in:  Remove stage* targets.  Avoid echo on recursive
	makes.  Eliminate doc/Makefile from tar.Z file if doc/Makefile.in
	exists.

Fri Apr 10 23:47:37 1992  John Gilmore  (gnu at cygnus.com)

	* Makefile.in (VERSION):  Set to 4.5.1.
	* xcoffread.c (NO_TYPEDEFS):  Fix typo in commented-out #define.
	* sparc-tdep.c (supply_gregset, fill_gregset, supply_fpregset,
	fill_gregset):  New functions for SVR4 /proc support.
	* mipsread.c:  Cleanup.  Add more complaints for unhandled cases.
	Remove new symbol types and such to ../include/coff/symconst.h.
	(parse_symbol):  Simplify code for parsing struct/enum/unions.
	(parse_type):  Handle `long long' types.
	(upgrade_type):  Handle `const' qualifier.
	(parse_partial_symbols):  fix indentation, clean a bit.	

Fri Apr 10 22:41:03 1992  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (SWAPIN,swapin):  New macro and function to call to
	copy in data from raw read buffers, calling bfd byteswapping
	routines as appropriate.  Use to replace most existing memcpy
	calls.
	* dwarfread.c (basicdieinfo, completedieinfo):  Add objfile arg.
	* configure.in:  Recognize new ncr3000 config.
	* config/ncr3000.mh:  New config file.

Fri Apr 10 08:30:58 1992  Stu Grossman  (grossman at cygnus.com)

	GDB-4.5 release!

	* README:  Update for release.
	* Makefile.in:  Update version to 4.5.
	* WHATS.NEW:  The obvious.

	* depend:  Generate new depend file for this release.

	* Makefile.in (depend):  Fix dependancy generation so that it does
	not include gcc 'fixincluded' files, which are usually in a system
	specific location.

Thu Apr  9 13:35:00 1992  Per Bothner  (bothner@rtl.cygnus.com)

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik).
	* buildsym.c  (#ifdef RS6000_TARGET):  Don't create unnecessary
	symbols for nameless types.  And, handle `R' (register parameter
	type) for AIX.  (an extension to existing stabstring grammar).
	* rs6000-xdep.c:  Fix typo (= should have been ==).

Thu Apr  9 12:10:06 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  version=4.4.88, add xm-vax.h to HFILES.

Thu Apr  9 02:29:03 1992  John Gilmore  (gnu at cygnus.com)

	* xm-sun4os5.h (DO_DEFERRED_STORES, CLEAR_DEFERRED_STORES):  Zap.
	* signame.c (SIGWAITING, SIGLWP):  Add.

Tue Apr  7 16:34:07 1992  Per Bothner  (bothner@cygnus.com)

	* xm-i386mach.h:  add decls for errno and strdup().

	* breakpoint.c (breakpoint_1):  Add (int) casts for enums
	used in array index context (otherwise, some compilers barf).	

Tue Apr  7 08:45:46 1992  Stu Grossman  (grossman at cygnus.com)

	* m68k-tdep.c, tm-sun3.h:  #ifdef around get_longjmp_target().
	Change def of SAVED_PC_AFTER_CALL to call routine to see if we are
	in a system call, and provide better backtrace if so.

	* Makefile.in (HFILES):  Add xcoffsolib.h.
	* rs6k-opcode.h:  Move to ../include/opcode/rs6k.h.
	* rs6000-pinsn.c:  #include "opcode/rs6k.h"

	* mipsread.c (read_mips_symtab, read_the_mips_symtab,
	mipscoff_symfile_read):  Convert to BFD to do file I/O.

	* symfile.c:  #include <ctype.h> to get proper def if isspace().

	* i386-tdep.c (get_longjmp_target):  #ifdef GET_LONGJMP_TARGET.

Mon Apr  6 17:25:45 1992  Per Bothner  (bothner@cygnus.com)

	* mipsread.c: Create a .gdbinfo pseudo-symbol for each
	function also when parsing embedded stabs.

Mon Apr  6 15:25:03 1992  Stu Grossman  (grossman at cygnus.com)

	* mipsread.c:  Fix more declarations.

	* mipsread.c:  Fix many invocations of complain.  Use enum
	type_code where appropriate.

	* xm-vaxult.h:  Add decl for strdup().

	* Makefile.in: Add dependancies for xm-vaxbsd.h and xm-vaxult.h
	for xm-vax.h.

Fri Apr  3 17:41:29 1992  Stu Grossman  (grossman at cygnus.com)

	* buildsym.h, dbxread.c, mipsread.c:  Add objfile arg to
	process_one_symbol.

Fri Apr  3 12:17:14 1992  Per Bothner  (bothner@cygnus.com)

	* munch: Must pre-pend "_" to "initialize" for SYSV style nm.
	* tm-rs6000.h, xcoffexec.c, xcoffread.c, xm-rs6000.h:
	Merge in more patches for rs6000 from Metin Ozisik.
	* utils.c:  Fix typo in comment.

Fri Apr  3 11:23:03 1992  Fred Fish  (fnf@cygnus.com)

	* procfs.c (procinfo struct):  Add nopass_next_sigstop member.
	* procfs.c (attach):  Set nopass_next_sigstop if attached 
	process is forcibly stopped.
	* procfs.c (child_resume):  Use nopass_next_sigstop to suppress
	resending SIGSTOP to attached process on first resume.

Fri Apr  3 01:37:26 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (SFILES_MAINDIR):  add mipsread.c

Thu Apr  2 20:20:54 1992  John Gilmore  (gnu at cygnus.com)

	* Makefile.in (OBS):  Compile mipsread.c for all targets now.
	(VERSION):  Bump to 4.4.85.
	* mipsread.c:  Update for new include files.  Lint.
	* tm-irix3.h, tm-mips.h:  Use new include files for ECOFF symtab.
	* config/{bigmips.mt, littlemips.mt, irix3.mt, decstation.mt}:
	Don't need to bring in mipsread.o specially any more.

Thu Apr  2 19:38:31 1992  Stu Grossman  (grossman at cygnus.com)

	* mipsread.c (fixup_sigtramp):  Also look for _sigtramp as a real
	routine (for Irix-4.x).  Make many funcs static and void.
	* mips-tdep.c (mips-frame-chain):  Clean up, simplify.
	* (init_extra_frame_info):  Don't trash cached value of frame
	pointer register.  This fixes backtracing through routines that use
	alloca().  Generally clean up declarations of functions, and use
	typedefs and macros to reference data structures as appropriate.
	* tm-irix3.h, tm-mips.h (EXTRA_FRAME_INFO):  use proper type for
	proc_desc element.

Thu Apr  2 09:47:11 1992  Fred Fish  (fnf@cygnus.com)

	* values.c (unpack_long):  Fix unpacking error for signed chars
	on hosts where the default character type is unsigned.
	* procfs.c (pr_flag_table, pr_why_table):  Add some entries
	for newer SVR4 variants.
	* procfs.c (proc_set_exec_trap):  Reorder tests for ioctl's that
	turn off trace inherit-on-fork flag to favor latest SVR4 method.
	* procfs.c (mappingflags):  Add support for MA_PHYS

Thu Apr  2 00:55:56 1992  John Gilmore  (gnu at cygnus.com)

	* buildsym.c (read_struct_type):  Avoid coredump when C++
	abbreviated type name is messed up.  Reported by Joe Buck.
	FIXME, we need to determine whether GDB or GCC needs to be
	smarter to correctly locate this type name.

	* c-exp.y, coffread.c, command.c, command.h, copying.awk,
	dbxread.c, gdbtypes.c, infcmd.c, inferior.h, infrun.c,
	m2-exp.y, printcmd.c, remote.c, solib.c, source.c, stack.c,
	symtab.c, tm-sun4os4.h, tm-sun4os5.h, values.c:  Lint.
	* symfile.c (add_symbol_file_command):  Initialize mapped/readnow.

Wed Apr  1 11:39:52 1992  Fred Fish  (fnf@cygnus.com)

	* breakpoint.h (bpdisp, bptype):  Remove trailing comma.
	* symtab.h (current_source_symtab):  Make extern
	* symtab.h (current_source_line): Make extern
	* inferior.h:  Move all procfs.c prototypes to one place, add
	prototype for proc_signal_handling_change.  Add prototypes for
	signal_stop_state, signal_print_state, and signal_pass_state.
	* inferior.h (stop_soon_quietly):  Make extern
	* inferior.h (attach_flag):  Make extern
	* infrun.c (NOTICE_SIGNAL_HANDLING_CHANGE):  Default is null.
	* infrun.c (signal_stop_state, signal_print_state,
	signal_pass_state):  New functions to query specific signal
	handling flags.
	* infrun.c (handle_command):  Minor error message change, add
	NOTICE_SIGNAL_HANDLING_CHANGE.
	* procfs.c (open_proc_file):  Remove iris specific reset of
	inherit-on-fork flag, moved to proc_set_exec_trap().
	* procfs.c (proc_set_exec_trap):  Add SVR4 and iris code
	to reset inherit-on-fork flag, bash comment to GNU form.
	* procfs.c (proc_base_address, set_proc_siginfo,
	fetch_core_registers):  Conform to code style.
	* procfs.c (signame.h):  Include.
	* procfs.c (MAX_SYSCALLS, syscall_table[], init_syscalltable(),
	syscallname(), info_proc_syscalls()):  New macros, tables, and
	functions to organize and report system call information.
	* procfs.c (saved_fltset, saved_trace, saved_sighold,
	saved_exitset, saved_entryset):  Add to procinfo struct.
	* procfs.c (struct trans):  Add.
	* procfs.c (pr_flag_table, pr_why_table, faults_table,
	siginfo_table, errno_table):  Tables to translate numeric values
	to symbolic names and short descriptions.
	* procfs.c (signalname, info_proc_signals):  Add function and
	prototype.
	* procfs.c (proc_info):  Now info_proc.
	* procfs.c (proc_info_address_map):  Now info_proc_mappings.
	* procfs.c (info_proc_flags, info_proc_stop, info_proc_siginfo,
	info_proc_faults, lookupname, lookupdesc, sigcodename,
	sigcodedesc):  New functions.
	* procfs.c (proc_signal_handling_change):  New function to set
	the trace flags based on the state of gdb's signal handling flags.
	* procfs.c (inferior_proc_init):  Call proc_signal_handling_change
	and remove code to do PIOCSTRACE ioctl.
	* procfs.c (attach, detach):  Preserve and restore process flags
	using saved_* fields in procinfo struct.
	* procfs.c (attach):  Call proc_signal_handling_change.
	* procfs.c (info_proc):  Major rework to expand "info proc" cmd.
	* procfs.c (proc_desc):  Update for latest changes.
	* xm-irix4.h (CREATE_INFERIOR_HOOK):  Protect by USE_PROC_FS.
	* xm-irix4.h (NOTICE_SIGNAL_HANDLING_CHANGE):  Add definition.
	* xm-sysv4.h (NOTICE_SIGNAL_HANDLING_CHANGE):  Add definition.

Tue Mar 31 18:38:28 1992  Fred Fish  (fnf@cygnus.com)

	* procfs.c (set_proc_siginfo):  Add prototype and new function.
	* procfs.c (detach, child_resume):  Call set_proc_siginfo to set
	up inferior siginfo struct.
	* elfread.c (elf_symfile_read):  Compute the relocation amount
	by subtracting off the address of the ".text" section.
	* solib.c:  Add pointer to ".text" section to so_list struct.
	* solib.c (solib_map_sections):  Initialize pointer to ".text"
	section in so_list struct.
	* solib.c (symbol_add_stub):  Pass base address of ".text"
	section to symbol_file_add, rather than the load address of
	the shared library.  On SunOS they are the same.  On SVR4 they
	are not.

Tue Mar 31 17:48:15 1992  Stu Grossman  (grossman at cygnus.com)

	* mipsread.c (parse_procedure):  PDR.isym should get pointer to
	function name, not .gdbinfo. symbol.

Tue Mar 31 17:05:04 1992  John Gilmore  (gnu at cygnus.com)

	* breakpoint.c (breakpoint_1):  Fix prototype, this time for sure!

Tue Mar 31 11:01:06 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (VERSION):  4.4.8

	* procfs.c (open_proc_file):  Disable inherit-on-fork flag so that
	commands in .cshrc/.profile won't get traced.

Tue Mar 31 08:11:58 1992  John Gilmore  (gnu at cygnus.com)

	* elfread.c (elf_symtab_read):  Use xmalloc, not bfd_xmalloc.
	* exec.c (build_section_table):  Don't abort if no sections.
	* sparc-tdep.c (single_step):  Lint.
	* utils.c (mrealloc):  Handle realloc (0, size) case here.

Mon Mar 30 16:50:43 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (alldeps.mak):  Config files are now *.m[ht] as
	opposed to m[ht]-*!

	* config/irix4.mh:  Don't use coredep.o.  It doesn't work with procfs.

	* mipsread.c (parse_symbol, parse_procedure):  Re-do the way that
	.gdbinfo. symbols are created.  Move creation from parse_procedure
	to parse_symbol, where it is fairly easy to grow the symtab.  This
	also fixes a symtab trashing bug on all mips-based systems.
	* (got_numargs, lookup_numargs, free_numargs):  Delete.  Not
	needed anymore.
	* tm-mips.h, tm-iris3.h, mips-tdep.c, mipsread.c:  Re-do struct
	mips_extra_func_info, and all the PROC_xxx macros that look at it.

Mon Mar 30 14:17:53 1992  Per Bothner  (bothner@cygnus.com)

	* c-exp.y:  Add missing return type to yyparse() prototype.

Sat Mar 28 22:22:06 1992  John Gilmore  (gnu at cygnus.com)

	Create and use macros for iterating on symtabs, psymtabs, msymbols.

	* minsyms.c (iterate_over_msymbols):  Remove; clunky and slow.
	* symfile.h, symtab.h (iterate_over_msymbols):  Remove prototype
	* coffread.c (coff_symfile_read):  iterate_over_symtabs => ALL_SYMTABS.
	(patch_opaque_types):  Avoid dummy args and result.
	* objfiles.c (have_partial_symbols, have_full_symbols,
	have_minimal_symbols):  explicit iteration => ALL_OBJFILES; simplify.
	(iterate_over_objfiles, iterate_over_symtabs,
	iterate_over_psymtabs):  Remove, clunky and slow.
	* objfiles.h:  Replace iterate_over_* prototypes with ALL_SYMTABS,
	ALL_PSYMTABS, and ALL_MSYMBOLS macros.
	* symmisc.c (dump_symtab, dump_psymtab, dump_msymbols,
	dump_objfile):  Remove dummy args and results.  Move filename
	comparisons to callers.
	(printsyms_command, printpsyms_command, printmsyms_command,
	printobjfiles_command):  iterate_over_* => ALL_*.  Compare filenames.
	* symtab.c (lookup_symtab_1, lookup_symtab, lookup_partial_symtab,
	lookup_symbol, find_main_psymtab, find_pc_symtab, sources_info,
	list_symbols, make_symbol_completion_list):  Replace explicit
	iteration with ALL_SYMTABS, ALL_PSYMTABS, or ALL_MSYMBOLS.
	Eliminate Dijkstra flag crap, break out of loops with gotos.
	(lookup_symtab_1):  Protect '/' tests from short filenames.
	(cplus_mangled_symbol):  Move inline into lookup_symbol.
	* xcoffexec.c (relocate_objfile_msymbols):  Remove poor hack.
	(relocate_minimal_symbol):  Move inline to vmap_symtab.
	(vmap_symtab):  Replace iteration with ALL_OBJFILES,
	iterate_over_msymbols with ALL_MSYMBOLS.

	Misc cleanup prior to release.

	* Makefile.in (VERSION):  Roll to 4.4.7.
	(HFILES):  Add call-cmds.h.
	* call-cmds.h:  New header for command fns called by other files.
	* breakpoint.c (watchpoints_info):  Remove, same as breakpoints_info.
	(breakpoint_1):  Remove unused type arg.  Change callers.

	* dwarfread.c (dwarf_build_psymtabs):  Remove mainline test.
	* mipsread.c (compare_symtabs, compare_psymtabs):  Remove, unused.
	* mipsread.c:  Add prototypes for all static functions.

	* symmisc.c (dump_symtab_lines, dump_symtabs, dump_last_symtab,
	dump_blockvector, dump_block, dump_addrchass, dump_namespace,
	dump_symbol, dump_type, dump_linetable, dump_strtbl):  Remove, unused.
	* xcoffread.c (dump_symtab_lines, dump_symtabs, dump_last_symtab,
	dump_blockvector, dump_block, dump_addrchass, dump_namespace,
	dump_symbol, dump_type, dump_linetable, dump_strtbl):  Remove 2nd
	unused copy!

	* buildsym.c (define_symbol):  Handle global register variables
	(from Pierre Willard).  Complain if register numbers are too large.
	* target.c (nomemory):  Now that higher levels examine errno, give EIO.
	* tm-sparc.h:  Don't #include <sun4/reg.h>.
	* sparc-tdep.c (sparc_frame_chain, frame_saved_pc):  Remove
	dependency on <sun4/reg.h>.  Start to handle cross-byte-order.

	* language.h:  Avoid forward enum declaration.
	* configure.in, tm-sun4os5.h, xm-sun4os5.h, config/sun4os5.mh,
	config/sun4os5.mt:  New host and target.
	* defs.h (errno): #include <errno.h> rather than assuming int.
	From Pierre Willard.

	* breakpoint.c, breakpoint.h, buildsym.c, coffread.c, cplus-dem.c,
	dbxread.c, dwarfread.c, elfread.c, infcmd.c, infrun.c, inftarg.c,
	language.c, main.c, mem-break.c, mips-tdep.c, mipsread.c,
	partial-stab.h, remote.c, saber.suppress, symfile.c, symtab.c,
	valops.c, valprint.c, xcoffread.c, c-exp.y, m2-exp.y, blockframe.c,
	command.c, core.c, exec.c, gdbtypes.h, parse.c, printcmd.c, solib.c,
	sparc-xdep.c, utils.c, value.h, values.c:  Lint.

Sat Mar 28 02:43:26 1992  John Gilmore  (gnu at cygnus.com)

	* buildsym.c (read_range_type):  Avoid int overflow by using unsigned.
	* dbxread.c (dbx_symfile_init):  Remove bogus `lvalue cast'.
	* language.h (enum exp_opcode):  Avoid forward enum def.
	* main.c (define_command, user_defined_command):  Lint.
	* mem-break.c, xcoffread.c:  Lint.
	* solib.c:  Only #include <a.out.h> on SunOS, not SVR4.

Sun Mar 29 14:16:22 1992  Per Bothner  (bothner@cygnus.com)

	* Merged in latest RS6000 diffs from Metin G. Ozisik.
	* xcoffsolib.c, xcoffsolib.h:  New files, from Metin.
	* Various files: Changed #ifdef IBM6000 to IBM6000_HOST
	or IBM6000_TARGET as (approximately) appropriate.

Sat Mar 28 13:00:10 1992  Fred Fish  (fnf@cygnus.com)

	* objfiles.h (OBJF_SYMS):  Define flag bit for objfile flags.
	* symfile.c (symbol_file_add):  Use OBJF_SYMS to decide  whether
	or not to try reading symbols from a mapped objfile.  Plugs memory
	leak due to shared libraries generating no psymtabs or symtabs.

Fri Mar 27 15:44:55 1992  John Gilmore  (gnu at cygnus.com)

	* buildsym.c (MAX_OF_C_TYPE, MIN_OF_C_TYPE):  Unused, remove.
	* copying.awk:  Lint.  Make stronger warning at top of copying.c.
	* elfread.c (elf_symtab_read):  Eliminate check of mainline.
	* gdbtypes.c (smash_to_*):  Remove FIXME comments.
	(lookup_pointer_type):  Add FIXME comment.
	* main.c (set_history_size_command):  Disallow negative size.
	* partial-stab.h:  Update copyright.
	* rs6000-tdep.c (skip_trampoline_code):  Better comments.

Wed Mar 25 10:45:38 1992  John Gilmore  (gnu at cygnus.com)

	* main.c (set_history_size_command):  Negative size is error.
	(Reported by Peggy Fieland.)

Thu Mar 26 17:01:18 1992  Fred Fish  (fnf@cygnus.com)

	* coffread.c (coff_symfile_init):  Update comment.
	* dbxread.c (DBX_SYMFILE_INFO, DBX_TEXT_SECT, DBX_SYMCOUNT,
	DBX_STRINGTAB, DBX_STRINGTAB_SIZE, DBX_SYMTAB_OFFSET):  Define
	macros to access the dbx specific objfile information.
	* dbxread.c (symfile_string_table, symfile_string_table_size):
	Remove these local variables.
	* dbxread.c (read_ofile_symtab, psymtab_to_symtab_1,
	read_dbx_symtab):  Remove the stringtab and stringtab_size params
	from the function prototypes, the function definition, and the
	function calls.  These are now available via DBX_STRINGTAB and
	DBX_STRINGTAB_SIZE using the objfile pointer.
	* dbxread.c (dbx_symfile_read):  Relocate addr before using as
	an arg to read_dbx_symtab.
	* dbxread.c (dbx_symfile_read):  Remove code that free'd the
	stringtab and the dbx specific per-objfile private info.
	* dbxread.c (init_psymbol_list):  Remove symbol count from passed
	args in prototype, function definition, and function calls.  It is
	now available via the DBX_SYMCOUNT macro using the objfile
	pointer.
	* dbxread.c (dbx_symfile_read, dbx_symfile_init):  Remove the
	local instance of struct dbx_symfile_info and replace with DBX_*
	macros.
	* dbxread.c (dbx_symfile_read):  Remove init's of now deleted
	symfile_string_table and symfile_string_table_size.
	* dbxread.c (dbx_symfile_finish):  Remove now obsolete free of
	symfile_string_table.
	* dbxread.c (init_psymbol_list):  Use DBX_SYMCOUNT.
	* dbxread.c (dbx_psymtab_to_symtab):  Remove local stringtab and
	stringtab size variables.  Remove all code that used to reread
	the stringtab.
	* objfiles.c (allocate_objfile):  Move calls to init_malloc()
	to prior to any calls to mmalloc for the objfile specific heap.
	* utils.c (init_malloc):  Document the requirement that for each
	heap for which corruption checking is desired, that init_mmalloc
	must be called prior to any mmalloc calls on the heap.

Thu Mar 26 13:20:06 1992  Per Bothner  (bothner@cygnus.com)

	* rs6000-pinsn.c:  Make dis-assembly output more like
	other targets:  Don't print instruction in hex before
	the assembly;  use print_address to print out jump
	destinations.

Wed Mar 25 16:52:35 1992  Per Bothner  (bothner@cygnus.com)

	* c-exp.y, gdbtypes.h:  Add builtin_type_signed_char.
	* cplus-dem.c:  Support "Sc" meaning "signed char".

Wed Mar 25 15:21:44 1992  Stu Grossman  (grossman at cygnus.com)

	* configure.in:  fix iris/iris3.

Wed Mar 25 14:55:48 1992  Per Bothner  (bothner@cygnus.com)

	* command.c, main.c (various places):  Use ctype.h macros
	(such as isupper(x)),  instead of hard-wiring in ASCII-isms
	(such as (x >= 'A' && x <= 'Z')).
	(There are still more of these in other files.)
	* main.c (defined_command):  Lower-case the user's
	new command before entering it.  Needed because
	command lookup is case-insensitive (and also lower-cases).
	(Based on Metin's earlier patch.)

Tue Mar 24 23:27:01 1992  K. Richard Pixley  (rich@cygnus.com)

	* config/irix4.mh: new file.

Tue Mar 24 14:17:48 1992  Stu Grossman  (grossman@cygnus.com)

	* infcmd.c (step_1):  Call disable_longjmp_breakpoint at the right
	time.

	* xm-mips.h:  Declare strdup for ultrix.

	* mipsread.c (fixup_sigtramp):  Make sure that current_objfile is setup
	when calling new_symbol.
	* mips-tdep.c (mips_frame_chain):  Use symfile_objfile instead of
	current_objfile.

Tue Mar 24 13:26:25 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* config/rs6000.mh:  Update (for Fred's new mmalloc)
	flags to disable use of GNU malloc/mmalloc.
	* munch:  Change SYSV rule to allow .text before the label,
	as well as after, to work for AIX.
	* gdbtypes.h:  Minor clarifiction.

Tue Mar 24 07:26:19 1992  Michael Tiemann  (tiemann@cygnus.com)

	* buildsym.c (read_struct_type): Handle cretinous dbx symbol name
	continuation in yet another place (between method declarations).

Mon Mar 23 23:01:41 1992  Stu Grossman  (grossman at cygnus.com)

	* mips-tdep.c:  include symfile.h and objfiles.h to fix
	compilation errors.

Mon Mar 23 15:49:14 1992  Per Bothner  (bothner@cygnus.com)

	* valops.c (value_struct_elt_for_reference):  Added 'offset'
	parameter to handle multiple inheritance.
	* eval.c, value.h:  Update accordingly.

Fri Mar 20 17:43:27 1992  Fred Fish  (fnf@cygnus.com)

	* objfiles.h: New file
	* Makefile.in (HFILES):  Add objfiles.h
	* blockframe.c:  Remove entry_scope_lowpc, entry_scope_highpc,
	main_scope_lowpc, main_scope_highpc.
	* blockframe.c, buildsym.c, coffread.c, dbxread.c, dwarfread.c,
	elfread.c, gdbtypes.h, minsyms.c, mipsread.c, objfiles.c, solib.c,
	source.c, symfile.c, symmisc.c, symtab.c, target.c, xcoffexec.c,
	xcoffread.c, :  Include objfiles.h.
	* tm-29k.h, tm-i386v.h, tm-merlin.h, tm-rs6000.h, tm-sun386.h,
	tm-symmetry.h, tm-tahoe.h, tm-umax.h, tm-vax.h, m88k-tdep.c,
	mips-tdep.c (FRAME_CHAIN): Renamed outside_startup_file to
	inside_entry_file() and logic changed appropriately.
	* blockframe.c (outside_startup_file):  Renamed to
	inside_entry_file() and logic changed appropriately.
	* blockframe.c (inside_main_scope):  Renamed to inside_main_func()
	and logic changed to use per-objfile specific fields.
	* blockframe.c (inside_entry_scope):  Renamed to
	inside_entry_func() and logic changed to use per-objfile specific
	fields.
	* blockframe.c, buildsym.h, coffread.c, dwarfread.c, mipsread.c,
	symfile.c, mips-tdep.c (startup_file_start, startup_file_end):
	Remove extern decls.
	* symfile.c, symfile.h (entry_point):  Remove extern decl.	
	* coffread.c (coff_symfile_init):  Common entry point init code
	moved to symfiles.c, call init_entry_point_info().
	* coffread.c (complete_symtab):  Use new per-objfile entry info.
	* mip-tdep.c (mips_frame_chain):  Use new per-objfile entry info.
	* mipsread.c (parse_partial_symbols):  Use new per-objfile entry
	info.
	* dbxread.c (read_dbx_symtab):  Use new per-objfile entry info.
	* defs.h (inside_entry_scope, outside_startup_file,
	inside_main_scope):  Prototypes changed for renames to
	inside_entry_func, inside_entry_file, inside_main_func,
	respectively.
	* symfile.c (syms_from_objfile):  Common entry point init code
	moved to init_entry_point_info() and call init_entry_point_info().
	* symfile.h (init_entry_point_info):  Include prototype.
	* xcoffread.c (aixcoff_symfile_init):  Common entry point init code
	moved to symfiles.c and call init_entry_point_info().
	* dwarfread.c (entry_scope_lowpc, entry_scope_highpc,
	main_scope_lowpc, main_scope_highpc):  Remove extern decls.
	* dwarfread.c (read_func_scope, read_file_scope):  Use new per-
	objfile entry info.
	* frame.h (FRAME_CHAIN_VALID):  Provide default definition that
	works for the majority of targets.
	* tm-68k.h, tm-convex.h, tm-h8300.h, tm-i386v.h, tm-irix3.h,
	tm-merlin.h, tm-mips.h, tm-pyr.h, tm-rs6000.h, tm-sparc.h,
	tm-sun386.h, tm-tahoe.h, tm-umax.h, tm-vax.h (FRAME_CHAIN_VALID):
	Use default definition in frame.h.
	* frame.h (selected_frame_level):  Make decl extern.
	* objfiles.c, symfile.c (current_objfile):  Moved to objfiles.c
	* objfiles.c, symfile.c (symfile_objfile):  Moved to objfiles.c
	* partial-stab.h:  Use new per-objfile entry info.
	* symfile.h (struct objfile):  Removed, moved to objfiles.h.
	* symfile.h, objfiles.h (allocate_objfile, free_objfile,
	free_all_objfiles, iterate_over_objfiles, iterate_over_symtabs,
	iterate_over_psymtabs, have_partial_symbols, have_full_symbols,
	have_minimal_symbols):  Prototypes moved to objfiles.h.
	* symfile.h, objfiles.h (ALL_OBJFILES, ALL_OBJFILES_SAFE):
	Macros moved to objfiles.h.
	* tm-h8300.h, tm-i386v4.h (FRAME_CHAIN_VALID_ALTERNATE): Define.

Thu Mar 19 18:49:45 1992  Per Bothner  (bothner@cygnus.com)

	More C++ improvements (pointers to members, qualified names).
	* c-exp.y:  Support exp.type::name and exp->type::name
	syntaxes.  (Unfortunately, doesn't work for static members.)
	* c-exp.y, eval.c:   Make type::~type work better.
	* eval.c (evaluate_subexp: OP_SCOPE):  Replace use of
	value_static_field by value_struct_elt_for_reference.
	* eval.c (evaluate_subexp):  Merge code for STRUCTOP_MEMBER
	and STRUCTOP_MPTR; cast arg1 to domain-type of arg2.
	* eval.c (evaluate_subexp):  Remove special case for UNOP_ADDR
	for OP_SCOPE operand; no point in it now that we use lazy
	reading of values, and use "reference to member" objects.
	* gdbtypes.h:  Clarify comment.
	* valops.c:  Change value_struct_elt_for_address to return
	a reference (or variable), rather than a pointer.  Change
	the name to value_struct_elt_for_reference to reflect this.
	Returning a reference instead of a address provides a
	generalization, since we can use the routine for both
	class::name as well as &class::name.
	Also, recurse to handle multiple inheritance properly.
	* valprint.c:  Moved code to print pointer-to-members
	to new function point_class_member.  This allows a
	"reference-to-member" to be printed using the same code.
	* valprint.c (type_print_varspec_prefix):  Avoid printing
	"struct " for domains of class-member types.
	* valops.c (search_struct_field):  Inline code for simplified
	version of value_static_field (which can then be deleted).
	* value.h:  Rename value_struct_elt_for_address to
	value_struct_elt_for_reference.  Delete value_static_field.
	* values.c:  Remove no longer used function value_static_field.

Thu Mar 19 13:54:11 1992  Fred Fish  (fnf@cygnus.com)

	* coffread.c, mipsread.c, xcoffread.c, coffread.c, dbxread.c,
	elfread.c (coff_symfile_finish):  Add function, prototype, and
	add to the xxxx_sym_fns struct for each file type.  Also reformat
	the xxxx_sym_fns vector to a standard format and add comments.
	* coffread.c, mipsread.c, xcoffread.c, coffread.c, dbxread.c,
	elfread.c (xxx_symfile_new_init, xxx_symfile_init, xxx_symfile_read):  
	Pass pointer to struct objfile rather than pointer to sym_fns.
	Change references inside each function accordingly.  Allocate any
	symbol file specific info in the per-objfile memory region.
	* dbxread.c (free_and_init_header_files):  Break function into
	free_header_files(), called from dbx_symfile_finish(), and
	init_header_files(), called from dbx_new_init().
	* dbxread.c (dbx_new_init):  Move deallocation things to new
	dbx_symfile_finish function.
	* elfread.c (elf_new_init):  Call buildsym_new_init().
	* objfiles.c (free_objfile): Call the appropriate symfile_finish()
	routine for the objfile before deallocating other stuff.
	* sparc-tdep.c (get_longjmp_target):  Cast target_read_memory arg.
	* symfile.h:  Move struct sym_fns to before struct objfile def.
	Add sym_finish function pointer and change prototypes of other
	function pointers to reflect passing struct objfile pointer rather
	than struct sym_fns pointer.
	* symfile.c:  Remove now obsolete symtab_fns pointer.
	* symfile.c (symfile_init):  Renamed to find_sym_fns, and now only
	locates the correct sym_fns struct for the given objfile.
	* symfile.c (syms_from_objfile, symbol_file_add):  Restructured
	for better support of mapped symbol tables.
	* symfile.c (symbol_file_command):  Remove obsolete code using
	symfile_fns.
	* symfile.h:  Remove duplicate declarations for symfile_objfile,
	entry_point, and object_files.
	* target.c (target_info):  Compare symfile_objfile to NULL.
	* xcoffread.c (aixcoff_new_init):  Move deallocation stuff to
	aixcoff_symfile_finish().

Wed Mar 18 18:22:46 1992  Fred Fish  (fnf@cygnus.com)

	* infrun.c (IN_SOLIB_TRAMPOLINE):  Add default definition.
	* infrun.c (wait_for_inferior):  Use IN_SOLIB_TRAMPOLINE.
	* tm-sysv4.h (IN_SOLIB_TRAMPOLINE): Add SVR4 definition.

Wed Mar 18 15:51:15 1992  Per Bothner  (bothner@cygnus.com)

	Some improvements to g++ debugging.
	* symtab.c (list_symbols): demangle before pattern matching.
	* symtab.c:  Other fixes to improve handing of operators.
	* valprint.c (type_print_base):  Fix test for constructor.
	* values.c (value_static_field):  Allow evaluation of
	CLASS::METHOD, returning a function pointer.

Wed Mar 18 08:39:52 1992  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Roll  4.4.6.
	* exec.c (exec_file_command):  Add code to ignore optional args
	passed in by file_command() for use in symbol_file_command().
	* main.c (main):  Document -mapped and -readnow in help summary.
	* objfiles.c (open_mapped_file):  Cosmetic change, arg renamed.
	* objfiles.c (allocate_objfile):  Filename arg removed.  Changes
	to get filename from bfd with bfd_get_filename().  Test mapto
	against 0, not NULL.  Use mstrsave() to make copy of filename.
	* remote-mm.c (mm_load):  Symbol_file_add() takes an additional
	arg.
	* remote-vx.c (vx_load_command, add_symbol_stub):
	Symbol_file_add() takes an additional arg.
	* solib.c (symbol_add_stub):  Symbol_file_add() takes an
	additional arg.
	* symfile.c (symfile_open):  Renamed to symfile_bfd_open and
	changed to return a bfd not an objfile pointer.
	* symfile.c (syms_from_objfile): Eliminate local copy of bfd.
	* symfile.c (symbol_file_add):  Takes an additional arg (readnow).
	Change to eliminate local bfd and use symfile_bfd_open() plus
	allocate_objfile().  Add code to implement readnow option.
	* symfile.c (symbol_file_command): Changes to option handling,
	readnow functionality moved to symbol_file_add().
	* symfile.c (symfile_init):  Eliminate local copy of bfd.
	* symfile.c (add_symbol_file_command):  Changes to parse mapped
	and readnow options.
	* symfile.h (allocate_objfile):  Arg removed from prototype.
	* symtab.h (symbol_file_add):  Arg added to prototype.
	* xcoffexec.c (map_vmap):  Allocate_objfile() takes an additional
	arg.

Sat Mar 14 16:38:47 1992  Fred Fish  (fnf@cygnus.com)

	* gmalloc.c, gmalloc.h mcheck.c mmap-alloc.c mmap-sbrk.c mtrace.c,
	mtrace.awk, state.c, state.h:  Removed.
	* .gdbinit: Add ../malloc, ../libiberty, and ../bfd to list of
	directories searched for source files.
	* Makefile.in (GNU_MALLOC, MALLOC_CFLAGS, MALLOCSRC): Removed
	* Makefile.in (MMALLOC_DIR, MMALLOC_DEP, MMALLOC_LIB,
	MMALLOC_DISABLE, MMALLOC_CHECK, MMALLOC_CFLAGS): Add
	* Makefile.in (CFLAGS):  Replace MALLOC_CFLAGS with MMALLOC_CFLAGS.
	* Makefile.in (CLIBS, CDEPS):  Add MMALLOC_LIB
	* Makefile.in (ADD_FILES, ADD_DEPS):  Remove GNU_MALLOC.
	* Makefile.in (SFILES_MAINDIR): Remove stat.c mmap-alloc.c, mmap-
	sbrk.c
	* Makefile.in (HFILES): Remove state.h
	* Makefile.in (POSSLIBS_MAINDIR): Remove MALLOCSRC.
	* Makefile.in (OBS): Remove state.o mmap-alloc.o mmap-sbrk.o
	* Makefile.in (saber_gdb): Remove mcheck, mtrace.  Add MMALLOC_DIR.
	* Makefile.in (clean): Remove all object files.
	* c-exp.y:  Define malloc to xmalloc and realloc to xrealloc.
	* cplus-dem.c: Remove prototypes definitions that are now done in
	def.h.
	* dbxread.c (throughout):  Change from using per-objfile
	xmalloc/xrealloc/free functions to xmmalloc/xmrealloc/mfree.
	* defs.h: Remove prototypes for mmap_* functions.  Add prototypes
	for xmmalloc, xmrealloc, mfree, mmcheck, mmtrace, mmalloc_attach, 
	mmalloc_detach, mmalloc_setkey, msavestring, and mstrsave, nomem.
	* depend:  Remove dependencies for state.o, state.h.
	* dwarfread.c: Add declaration for warning_pre_print.
	* dwarfread.c (dwarfwarn):  Use warning_pre_print.
	* dwarfread.c (throughout):  Change from using per-objfile
	xmalloc/xrealloc/free functions to xmmalloc/xmrealloc/mfree.
	* gdbtypes.c (lookup_fundamental_type):  Fix init_type calls to
	use supplied objfile.
	* i386-xdep.c (print_387_status): Change to use warning() rather
	than printfs.
	* i387-tdep.c (print_387_control_word):  Change to use warning()
	rather than printfs.
	* infrun.c (wait_for_inferior):  Remove unreachable abort() call
	that some compilers grumble about.		
	* language.c (throughout):  Add declaration for warning_pre_print
	and using warning() instead of printfs.
	* m2-exp.y:  Define malloc to xmalloc and realloc to xrealloc.
	* main.c (main):  Add declaration for warning_pre_print and set it
	similarly to error_pre_print.  Add declarations for
	mapped_symbol_files and readnow_symbol_files.  Add appropriate
	definitions to long_options[].
	* minsyms.c:  Trivial fix to comment.
	* objfiles.c (allocate_objfile):  Substantially rewritten for
	using mapped symbol files.
	* objfiles.c (throughout):  Change from using per-objfile
	xmalloc/xrealloc/free functions to xmmalloc/xmrealloc/mfree.
	* objfiles.c (open_mapped_file, mapped_to_address):  Add functions.
	* source.c (throughout):  Change from using per-objfile
	xmalloc/xrealloc/free functions to xmmalloc/xmrealloc/mfree.
	* source.c (open_source_file):  Use mstrsave to save file name in
	mapped symbol region for objfile.
	* symfile.c:  Remove include for state.h.
	include to local form.
	* symfile.c (symbol_file_add_digested):  Remove.
	* symfile.c (symbol_file_add):  Substantially rewritten for mapped
	symbol files.
	* symfile.h:  Remove malloc/xrealloc/xmalloc/xrealloc/free members
	from objfile structure.  Add malloc descriptor pointer (md).
	* symfile.h (OBJF_DUMPABLE):  Changed name to OBJF_MAPPED.
	* symm-xdep.c (print_fpu_status):  Use warning() rather than
	printfs.
	* symmisc.c (free_symtab_block):  Now takes and uses current
	objfile pointer.
	* symmisc.c (throughout):  Change from using per-objfile
	xmalloc/xrealloc/free functions to xmmalloc/xmrealloc/mfree.
	* symtab.c (cplus_mangled_symbol):  Cast return value to avoid
	Sun compiler grumblings when PTR is char *.
	* symtab.c (lookup_symbol):  Cast return value of iterate_over_
	msymbols() to correct pointer type.
	* utils.c (warning_pre_print):  Initialize to "\nwarning: ".
	* utils.c (fatal, fatal_dump_core):  Ensure that the fatal
	error always starts on a line of it's own.
	* utils.c (init_malloc, malloc_botch, xmalloc, xrealloc):
	Rewrite for new mapped malloc package use.
	* utils.c (mmalloc, mrealloc, mfree):  Stubs for configurations
	that don't want to use the mapped malloc package; pass arguments
	on to traditional malloc package functions.
	* utils.c (nomem):  Add for fatal virtual memory exhausted aborts.
	* utils.c (xmmalloc, xmrealloc, xmalloc, xrealloc):  Like mmalloc,
	mrealloc, malloc, and realloc but get fatal error if runs out
	of memory.
	* utils.c (msavestring, mstrsave):  Save a string in a specific
	mapped malloc region.
	* utils.c (print_spaces):  Use xmalloc to get the buffer.
	* xm-amix.h, xm-i386v4.h, xm-sun3os4.h, xm-sun4os4.h:  Add defines
	for MMAP_BASE_ADDRESS and MMAP_INCREMENT.
	* config/i386v4.mh:  Insignificant reorganization.

Sat Mar 14 11:44:47 1992  Fred Fish  (fnf@cygnus.com)

	* xcoffread.c:  Only enable compilation of debugging functions
	if IBM6000 is defined.  Fails to compile otherwise.

Fri Mar 13 15:51:11 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: pass MAKEINFO down on info.

Fri Mar 13 12:56:36 1992  John Gilmore  (gnu at cygnus.com)

	* mipsread.c (mipscoff_symfile_read):  Eliminate a lot of
	useless code, including an lseek to an uninitialized variable.
	Reported by Jim Williams <jimbo@wrs.com>.

Thu Mar 12 11:56:46 1992  Per Bothner  (bothner@cygnus.com)

	Merged in patches from metin@ibmpa.awdpa.ibm.com (Metin G.
	Ozisik) (dated Fri, 6 Mar 92 17:51) for the rs6000.
	* minsyms.c, symfile.c:  Changes that may be generally
	applicable, but are #ifdef IBM6000 for now.
	* rs6000-xdep.c:  Fixed typo in comment.
	* rs6000-tdep.c:  Non-substatial changes.
	* xoffread.c:  The main change here is addition of some
	debugging functions.
	* xoffexec.c: More changes.

	* xcoffread.c:  Fixed two too-few-parameters bugs.

	* solib.h, infrun.c, tm-rs6000.h:  Add a PID parameter
	to SOLIB_CREATE_INFERIOR_HOOK macro.

Sun Mar  8 21:17:48 1992  Fred Fish  (fnf@cygnus.com)

	* symfile.h:  Add prototype for iterate_over_msymbols().
	* symtab.c (cplus_mangled_symbol):  Add function.
	* symtab.c (lookup_symbol):  Call cplus_mangled_symbol via
	iterate_over_msymbols to find demangled C++ symbol.
	* xcoffexec.c (relocate_minimal_symbol): Return meaningful
	value to iterate_over_msymbols().
	* xcoffexec.c (vmap_symtab):  Ignore return from iterate_over_
	msymbols().

Fri Mar  6 21:59:34 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in: added check target.

Thu Mar  5 23:56:01 1992  John Gilmore  (gnu at cygnus.com)

	* ecoff.c:  Move to ../bfd/coff-msym.c.
	* config/mt-*mips:  Remove ecoff.o from the configuration.
	* remote.c ():  Add newline to initial +.
	(remote_resume):  Mention how to cope with signals.
	(remote_interrupt):  Add debug msg.
	(remote-wait):  Implement new 'T' reply, which includes
	status, PC, and FP all in a single short message.
	(putpkt):  Add further debugging of packet acks.
	* mipsread.c (fixup_symtab):  Also swap RFD's.
	(parse_partial_symbols):  Avoid bug on unknown symbol types.
	* Makefile.in (VERSION):  Roll to 4.4.5.
	* mips-tdep.c (heuristic_proc_start):  Avoid long delays
	for remote MIPS by limiting heuristic to 200 byte search.
	(heuristic_proc_desc):  Byte-swapping.
	(mips_print_register):  Cope with failure of
	read_relative_register_raw_bytes.  Byte-swap integers for
	printing.
	* mips-pinsn.c (print_insn):  Byte-swap instruction.

Thu Mar  5 12:32:09 1992  Stu Grossman  (grossman at cygnus.com)

	* config.sub configure.in config/mh-irix4
	gdb/configure.in gdb/mips-tdep.c gdb/mipsread.c
	gdb/procfs.c gdb/signame.h gdb/tm-irix3.h gdb/tm-mips.h
	gdb/xm-irix4.h gdb/config/mt-irix3
	gdb/config/mh-irix4 texinfo/configure.in:  Port to SGI Irix-4.x.

Wed Mar  4 11:56:42 1992  Fred Fish  (fnf@cygnus.com)

	* defs.h, utils.c:  xrealloc takes PTR as first arg.
	* defs.h:  Reword confusing comment about ANSI prototypes.
	* defs.h:  Some minor whitespace changes.
	* infrun.c (wait_for_inferior):  Compare int tmp to int 0,
	not NULL, which can be (void *).
	* tm-amix.h, tm-i386v4.h:  Add defines for setjmp/longjmp handling.
	* tm-i386v.h (SP_ARG0):  Define
	* xm-sysv4.h:  Back out of change for missing prototypes.
	* i386-tdep.c (get_longjmp_target):  Add function.

Wed Mar  4 05:46:11 1992  K. Richard Pixley  (rich@rtl.cygnus.com)

	* Makefile.in: install man page too.

Tue Mar  3 15:11:52 1992  Michael Tiemann  (tiemann@cygnus.com)

	* All GDB files that #include defs.h: Removed stdio.h.
	(defs.h): #include stdio.h.

Mon Mar  2 23:00:12 1992  Steve Chamberlain  (sac@thepub.cygnus.com)

	* gdbtypes.c (lookup_pointer_type): initialize the TYPE_LENGTH of
	a ptype to reflect the setting of TARGET_PTR_BIT.  Set the
	TYPE_FLAGS of a ptype to TYPE_FLAG_UNSIGNED.
	* tm-h8300.h, h8300-tdep.c, remote-hms.c: personal checkpoint
	* printcmd.c (print_address): if ADDR_BITS_REMOVE is defined, use
	it before printing out the hex shape of an address.

Sun Mar  1 17:41:09 1992  Per Bothner  (bothner@cygnus.com)

	* rs6000-xdep.c (frame_initial_stack_address):  Move
	code to set frame->cache_fsr into new separate function
	frame_get_cacahe_fsr.  This allows fixing a fatal error.
	* xcoffexec.c:  Turn previously suppressed error
	message back on, after cleaning up BFD.

	* breakpoint.c (breakpoint_re_set):  Removed (at least for now)
	printing of blank line, since it cases printing of an
	extra blank line.  Is this intended?  It does mess up
	gdb test suite.
	* defs.h:  Put back declarations of malloc and realloc,
	but protected by #ifndef MALLOC_INCOMPATIBLE.
	* objfiles.c:  Undo previous change:  Use malloc/realloc
	for objfile malloc/realloc fields (but add a cast).
	* xcoffexec.c:  Suppress an error message (for now).

Sat Feb 29 14:43:02 1992  Per Bothner  (bothner@cygnus.com)

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik)
	[Mail dated Fri, 21 Feb 92 13:14:54 -0800]
	* buildsym.c: Use smash_to_pointer_type() to handle forward type
	references.
	* xcoffread.c: Modifications to C_DECL storage class handling, and
	introduction of an old smash_to_pointer_type() routine.

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik)
	[Mail dated Thu, 20 Feb 92 13:57:16 -0800]
	* rs6000-xdep.c, rs6000-tdep.c, tm-rs6000.h: function_frame_info()
	parameters have been modified.

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik)
	[Mail dated Thu, 20 Feb 92 10:10:05 -0800]
	* rs6000-tdep.c: Before Feb 5 92, register_valid[] array was not used,
	and fetch_inferior_registers() always fetched all the registers
	resulting valid register values at hand all the time. Pushing a dummy
	frame did not require validating all register values first. After
	putting the above mechanism into action, we didn't have valid registers
	values always ready. Thus, all registers need to be fetched before
	pushing a dummy frame now.

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik)
	[Mail dated Thu, 13 Feb 92 16:22:44 -0800]
	* rs6000-xdep.c: frame_initial_stack_address() function to calculate
	the starting address (actual frame address) of a frame.
	* rs6000-tdep.c: modifications to function_frame_info() to see if
	function reserves a frame pointer register (alloca register)
	* tm-rs6000.h: EXTRA_FRAME_INFO, FRAME_ARGS_ADDRESS and
	FRAME_LOCALS_ADDRESS has been updated to support debugging of
	functions with alloca() calls.

Sun Mar  1 13:13:39 1992  Fred Fish  (fnf@cygnus.com)

	* xm-sysv4.h:  Provide definitions/prototypes for host environment
	functions for which no definitions or prototypes are provided in
	any currently included gdb or host environment header files.
	For SVR4, this currently includes malloc and realloc, which cannot
	be portably prototyped in any gdb include file.

Sat Feb 29 14:43:02 1992  Per Bothner  (bothner@cygnus.com)

	* buildsym.h:  Remove obsolete variable file_stabs.

	* Makefile.in:  Move place where configure merges in host-
	and target-dependent fragments later, so the latter
	can override (say) GNU_MALLOC.
	* config/mh-rs6000:  Use system malloc.  Otherwise, I
	ended up with *two* incompatible versions of malloc
	(functions in libc would call the malloc in libc).
	I assume this is a shared library problem.

	* remote.c:  Fix (presumed) typo.
	* objfiles.c:  Use xmalloc/xrealloc instead of
	malloc/realloc (since the latter are no longer declared).

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik)
	[Mail dated Thu, 6 Feb 1992 10:22:02 -0800]
	* rs6000-xdep.c: Improvements to fetch_inferior_registers() to
	handle individual registers.
	* tm-rs6000.h: Fix SAVED_PC_AFTER_CALL macro to handle pc value
	correctly in case it wasn't cached yet. (A problem showed up
	after fetching individual registers.)
	* buildsym.c: Disable type_synonym_name's type name overwriting
	in cases it is unnecesary. rs6000 portation doesn't use
	type_synonym_name, and it used to nullify type names
	* xcoffread.c: to handle g++'s typename abbreviation, fill in a
	type's name as soon as space for that type is allocated.
	* xcoffread.c: ignore a section's lineno information if it is
	not `.text'. (In rs6000 bfd portation integration, skipping over
	`.pad' sections are ignored since it was in machine independent
	part of the code. Thus, a problem of fake sections with invalid
	lineno information arised.)

	Changes from metin@ibmpa.awdpa.ibm.com (Metin G. Ozisik)
	[Mail dated Thu, 6 Feb 1992 13:26:22 -0800]
	* rs6000-tdep.c: make function_frame_info() work whether or not
	reading from a core file.
	* tm-rs6000.h: Implementation of FRAME_FIND_SAVED_REGS macro.

	* infrun.c. main.c, printcmd.c. symtab.c:
	More changes from IBM for rs6000.


Thu Feb 27 22:57:19 1992  Per Bothner  (bothner@cygnus.com)

	* rs6k-opcode.h, tm-rs6000.h, xm-rs6000.h, rs6000-tdep.c,
	rs6000-xdep.c, xcoffexec.c, xcoffread.c:
	Merge in changes (mostly from IBM) for RS6000.
	* breakpoint.c, buildsym.c, infptrace.c, stack.c, symtab.c:
	More changes from IBM for RS6000.  These are in machine-
	independent code, and probably could do with some cleaning
	up.  The most questionable of these are #ifdef IBM6000.
	* infrun.c, sparc-tdep.c: Pass a parameter (signal number)
	to single_step() (for consistency with rs6000 and i860).
	* utils.c:  Allow the 1st arg to xrealloc to be NULL
	(in which case do malloc).  This removes the need for
	some tests in xcoff code (and perhaps other places?).
	* coffread.c: Removed variables last_source_file,
	type_vector, and type_vector_length as these are now
	defined by buildsym.[ch].
	* defs.h:  Remove prototypes for malloc and realloc, since
	these should only be used to implement xmalloc and xrealloc,
	and they conflict with <stdlib.h> in AIX - where they
	return void* even when __STDC__ isn't defined.  Sigh.
	* munch:  Recognize *initialize* in data as well as text
	(AIX uses data).  Also, incorporate a patch from Garrett
	Wollman <wollman@uvm-gen.uvm.edu> to make the sed script
	much more sensible, by only trying to match the name of
	the initialize_foo function, and not the junk before it.
	
Thu Feb 27 20:07:43 1992  Stu Grossman  (grossman at cygnus.com)

	* breakpoint.c (breakpoint_re_set_one):  Don't reset breakpoint
	unless symbol table indicates that something has changed.

Thu Feb 27 11:48:47 1992  John Gilmore  (gnu at cygnus.com)

	* remote.c:  Make it work for embedded MIPS.  Increase buffer
	size, and use throughout.  Round buffer size up if too many regs.
	Support baud rate setting and try for an 8-bit path.  If
	interrupted while waiting for target, send a ^C down the wire.
	Avoid single-byte reads.
	* tm-mips.h:  Add more embedded-system registers to REGISTER_NAMES
	and NUM_REGS.
	* mips-xdep.h:  Avoid the embedded regs when on Unix.

	* mipsread.c:  Byte-swap the symbol table structures, using
	routines from ecoff.c, to read a symbol table written in any
	of the four possible byte orders.
	* configure.in (mips-big-* target):  Same as Sony News.
	* config/mt-bigmips, config/mt-littlemips:  Add ecoff.o.
	* ecoff.c:  New file for symbol swapping routines.

Thu Feb 27 09:26:38 1992  Stu Grossman  (grossman at cygnus.com)

	* breakpoint.c (all_breakpoints_info, breakpoint_1):  Add 'info
	all-breakpoints' command.
	* (get_number):  Allow users to enter negative breakpoint numbers.
	* (breakpoint_1):  Reformat display of 'info break' to show new
	fields.
	* (create_longjmp_breakpoint, breakpoint_re_set,
	breakpoint_re_set_one, enable/disable_longjmp_breakpoint),
	symfile.c  (syms_from_objfile):  Re-do
	insertion of longjmp breakpoints.  Move all code into
	breakpoint_re_set, and call that instead of
	create_longjmp_breakpoint in symfile.c.

Thu Feb 27 06:11:05 1992  John Gilmore  (gnu at cygnus.com)

	* breakpoint.h (ALL_BREAKPOINTS_SAFE):  Add.
	* breakpoint.c (breakpoint_re_set):  Use ALL_BREAKPOINTS_SAFE.
	* symtab.c (find_pc_symtab):  Handle having no objfiles.
	* infcmd.c:  Fix comment.
	* objfiles.c (free_all_objfiles):  Add.
	* symfile.h (ALL_OBJFILES, ALL_OBJFILES_SAFE):  Add.
	* symfile.c (symbol_file_command):  free all objfiles when
	specifying a new symbol file.
	(reread_symbols):  Stat the file name, don't fstat the descriptor.

Wed Feb 26 18:04:40 1992  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in, configure.in: removed traces of namesubdir,
	  -subdirs, $(subdir), $(unsubdir), some rcs triggers.  Forced
	  copyrights to '92, changed some from Cygnus to FSF.

Tue Feb 25 19:31:19 1992  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c (end_psymtab):  Delete empty psymtabs.
	* symfile.c (allocate_psymtab):  Recycle empty psymtabs.
	* symfile.h (struct objfile):  Add free_psymtabs.

Sat Feb 22 02:00:32 1992  John Gilmore  (gnu at cygnus.com)

	* Makefile.in (VERSION):  Roll to gdb-4.4.4.

	* symfile.c (symbol_file_command):  strcmp => !strcmp.
	* breakpoint.h:  Move prototypes to follow enum definition they need.
	* breakpoint.c, infrun.c:  Lint.
	* printcmd.c:  Use `enum enable' rather than `enum
	display_status'.
	* mipsread.c:  First pass at making it compile with the new
	objfile changes.  Probably seriously broken still, but it
	compiles.  FIXME.

Sat Feb 22 00:56:39 1992  Stu Grossman  (grossman at cygnus.com)

	* infrun.c, infcmd.c, breakpoint.c, main.c, symfile.c,
	breakpoint.h, tm-sun4os4.h, tm-sparc.h, sparc-tdep.c, tm-mips.h,
	mips-tdep.h, tm-sun3.h, tm-68k.h, m68k-tdep.h:  Add support for
	stepping (and nexting) through longjmp().  Also, cleanup
	breakpoint handling quite a bit by creating explicit breakpoint
	types instead of using magic breakpoint numbers.
	Makefile.in:  Update version to 4.4.3

Sat Feb 22 00:08:50 1992  John Gilmore  (gnu at cygnus.com)

	* buildsym.c, dwarfread.c, gdbtypes.c, inflow.c, main.c,
	minsyms.c, printcmd.c, remote.c, saber.suppress:  Saberlint.
	* symmisc.c, xcoffread.c:  Move debug functions to symmisc.c.

	* xm-sun3os4.h, xm-sun4os4.h:  Enable HAVE_MMAP.

	* minsyms.c (install_minimal_symbols):  Add bunches to any
	existing minsyms in the objfile.  Avoid extra mallocation
	by working directly in the obstack.  Remove ignored `mainline' parm.
	* coffread.c, dbxread.c, elfread.c, mipsread.c, solib.c, symtab.h,
	xcoffread.c:  Change all callers.
	* FIXME:  We should be able to eliminate MAINLINE from all the
	symbol readers now, with a small bit of work.

	* valops.c, value.h:  Lint.
	* remote-vx.c:  Add missing break; statement.  Bugfix by
	Michael Sclafani, <sclafani@src.dec.com>.

Fri Feb 21 17:29:54 1992  Fred Fish  (fnf at cygnus.com)

	* Makefile.in (VERSION):  Update version to 4.4.2
	* Makefile.in (SFILES_MAINDIR):  Add gdbtypes.c, state.c, objfiles.c,
	minsyms.c, mmap-alloc.c, mmap-sbrk.c
	* Makefile.in (HFILES):  Add gdbtypes.h, state.h, solib.h
	* Makefile.in (OBS):  Add gdbtypes.o, state.o, objfiles.o, minsyms.o,
	mmap-alloc.o, mmap-sbrk.o

	* altos-xdep.c:  Minor whitespace change.
	* am29k-tdep.c (examine_prologue):  Convert from misc function vector
	use to new minimal symbol table use.
	* arm-xdep.c (fetch_inferior_registers):  Document unused argument.
	* arm-xdep.c (store_inferior_registers):  Returns void.
	* blockframe.c (get_pc_function_start, find_pc_partial_function):
	Convert from misc function vector use to new minimal symbol table use.
	Remove find_pc_misc_function().  Ifdef out block_innermost_frame().
	* breakpoint.c:  Add prototypes for local functions.
	* breakpoint.c (catch_command_1):  Change to static and remove unused
	local "pc".
	* breakpoint.c (map_breakpoint_numbers):  Prototype arg "function".
	* breakpoint.h:  Change function decls to prototype form.
	* buildsym.c:  Add prototypes for local functions.
	* buildsym.c:  Moved hashname() function here from dbxread.c.
	* buildsym.c (dbx_lookup_type):  Cast args to xrealloc().
	* buildsym.c:  Remove dbx_create_type(), uses changed to alloc_type().
	* buildsym.c (dbx_alloc_type):  Change to static.
	* buildsym.c (finish_block): Add objfile parameter.
	* buildsym.c (misc):  Change symbol_obstack to objfile version.
	* buildsym.c (make_blockvector): Change to static.
	* buildsym.c (start_subfile):  Use strdup instead of obsavestring.
	* buildsym.c (compare_line_numbers): Change to static, args are const,
	cast args when used.
	* buildsym.c (start_symtab):  Inline new_object_header_files() call.
	* buildsym.c (patch_block_stabs):  Moved to this file from xcoffread
	and made static.  Add objfile parameter.
	* buildsym.c (end_symtab): Simplify code using line table size.
	Realloc the linetable on the objfile symbol_obstack and copy there.
	* buildsym.c (scan_file_globals):  Convert from misc function vector
	use to new minimal symbol use.
	* buildsym.c (define_symbol):  Add objfile parameter.  Make sure
	strings get allocated in objfile's symbol_obstack.  Convert references
	to builtin types to lookup_fundamental_type().
	* buildsym.c (read_type):  Make static, add objfile parameter, convert
	references to buildin types to lookup_fundamental_type().
	* buildsym.c (read_struct_type):  Add objfile parameter.
	* buildsym.c (read_array_type):  Make static, add objfile parameter.
	* buildsym.c (read_enum_type):  Make static, add objfile parameter.
	* buildsym.c (read_huge_number): Make static.
	* buildsym.c (read_range_type): Make static, add objfile parameter,
	convert references to buildin types to lookup_fundamental_type ().
	* buildsym.c (read_args):  Make static, add objfile parameter.
	* buildsym.h:  Convert function decl's to prototype form.
	* c-exp.y:  Add prototypes for local functions, convert uses of misc
	function vector to minimal symbol table.  Reformat all builtin type
	initializations and pass a NULL objfile to init_type() for them.
	* coffread.c:  Change context_stack ref's to coff_context_stack,
	add local function prototypes.  Cast uses of xrealloc arg 1.
	* coffread.c (coff_alloc_type):  Call alloc_type instead of  hand-
	crafting a new type.
	* coffread.c (add_symbol_to_list):  Change to coff_add_symbol_to_list.
	* coffread.c (finish_block):  Change name to coff_finish_block.
	* coffread.c (make_blockvector):  Add and use objfile parameter.
	* coffread.c (record_line):  Change name to coff_record_line.
	* coffread.c (start_symtab):  Change name to coff_start_symtab.
	* coffread.c (end_symtab):  Change name to coff_end_symtab.
	* coffread.c (record_misc_function):  Change name to record_minimal_
	symbol and change to minimal symbol table use from misc func tbl.
	* coffread.c (coff_symfile_read):  Convert from misc function vector
	use to minimal symbol table use.
	* coffread.c (hashname):  Remove; use common version in buildsym.c.
	* coffread.c (decode_base_type):  Change references to builtin types
	to calls to lookup_fundamental_type().
	* coffread.c (read_struct_type):  Change name to coff_read_struct_type.
	* coffread.c (read_enum_type):  Change name to coff_read_enum_type.
	* command.c: Add prototypes for local functions.
	* command.c (add_cmd):  Prototype the 'fun' parameter and use the
	appropriate member of the function union for that type.
	* command.c (add_abbrev_cmd):  Prototype the 'fun' parameter and
	ifdef out the function since it isn't currently used.
	* command.c (add_alias_cmd):  Pass correct function type to add_cmd.
	* command.c (add_prefix_cmd):  Prototype the 'fun' parameter.
	* command.c (add_abbrev_prefix_cmd):  Prototype the 'fun' parameter.
	* command.c (help_cmd):  Compare function pointer to NULL.
	* command.c (help_cmd_list):  Compare function pointer to NULL.
	* command.c (lookup_cmd_1):  Use correct member of function union.
	* command.c (undef_cmd_error):  Make static.
	* command.c (complete_on_cmdlist):  Use correct member of func union.
	* command.c (do_setshow_command):  Use correct member of func union.
	* command.c (shell_escape):  Convert rindex use to strrchr.
	* command.h (COMMAND_H):  Define if already included.
	* command.h (cmd_list_element struct):  Change 'function' to a union
	and prototype args.  Prototype completer function.
	* command.h:  Convert decl's to prototype form.
	* convex-xdep.c (store_inferior_registers):  Returns void.
	* copying.c:  Prototype local functions.
	* coredep.c:  Minor whitespace change.
	* cplus-dem.c:  Remove hack to use BSD equivalents of mem* and str*.
	* cplus-dem.c:  Prototype local functions.
	* dbxread.c (hashname):  Remove; moved to buildsym.c.
	* dbxread.c (free_and_init_header_files):  Make static.
	* dbxread.c:  Add prototypes for local functions.
	* dbxread.c (new_object_header_files):  Remove; inlined usages.
	* dbxread.c (xrealloc usages):  Cast args.
	* dbxread.c (record_misc_function):  Change to record_minimal_symbol
	and change usages accordingly.
	* dbxread.c (static_psymbols usages):  Change to use per-objfile copy.
	* dbxread.c (xmalloc usages):  Use per-objfile copy when appropriate.
	* dbxread.c (dbx_next_symbol_text):  Make static.
	* dbxread.c (init_psymbol_list):  Convert to use per-objfile data.
	* dbxread.c (init_bincl_list):  Add and use objfile parameter.
	* dbxread.c (free_bincl_list):  Add and use objfile parameter.
	* dbxread.c (compare_psymbols):  Remove; use common symfile.c version.
	* dbxread.c (end_psymtab):  Convert to use per-objfile data.
	* dwarfread.c (DEFUN/EXFUN):  Remove all usages.  Use PARAMS for
	prototypes.
	* dwarfread.c (record_misc_function):  Change name to record_minimal_
	symbol and use minimal symbol table throughout.
	* dwarfread.c (compare_psymbols):  Remove; use common symtab.c version.
	* dwarfread.c:  Convert all references to builtin types to use the new
	lookup_fundamental_type function.
	* dwarfread.c (read_enumeration):  Add and use objfile parameter.
	* elfread.c (DEFUN/EXFUN):  Remove all usages.  Use PARAMS for proto-
	types.
	* elfread.c (record_misc_function):  Convert to use record_minimal_
	symbol.
	* elfread.c (elf_symtab_read):  Add objfile parameter.
	* eval.c:  Add prototypes for local functions and move some decls
	around to accomodate prototypes.
	* expprint.c:  Add prototypes for local functions.  Change references
	to misc function vector to minimal symbol table.
	* findvar.c (read_memory usages):  Cast args.
	* gdbtypes.h:  New file, type info from symfile.h and symtab.h.
	* gmalloc.c:  Use NOARGS where prototypes used hardwired void.
	* gmalloc.c (BLOCKSIZE):  Constant to be shifted is unsigned.
	* gmalloc.h:  Use NOARGS where prototypes used hardwired void.
	* gould-xdep.c:  Minor whitespace change.
	* hp300ux-xdep.c (fetch_inferior_registers):  Remove unused regno var.
	* hp300ux-xdep.c (store_inferior_registers):  Returns void.
	* hp300ux-xdep.c (fetch_core_registers):  Takes unused arg reg_addr.
	* i386-stub.c: Add prototypes, change "volatile" to NORETURN.
	* i386-tdep.c: Add prototypes for local functions.
	* i386-tdep.c (codestream_fill, codestream_seek, codestream_read,
	i386_get_frame_setup, i386_skip_prologue): Explicitly declare params
	that defaulted to int.
	* i386-tdep.c (i386_follow_jump, i386_frame_find_saved_regs,
	i386_push_dummy_frame):	Returns void.
	* i386-xdep.c (i386_register_u_addr):  Declare params that default to
	int and explicitly declare return type as int.
	* i387-tdep.c:  Minor formatting changes.
	* i960-tdep.c (leafproc_return):  Convert from misc function vector
	use to minimal symbol table use.
	* infcmd.c:  Add prototypes for local functions.
	* infcmd.c (continue_command, until_next_command, until_command,
	path_info, path_command):  Make static.
	* infcmd.c (step_1, until_next_command):  Convert from misc func
	vector to minimal symbol table use.
	* inflow.c:  Add prototypes for local functions.
	* infptrace.c (store_inferior_registers):  Returns void, not int.
	* language.c (_initialize_language):  Use proper member of function
	union.
	* m2-exp.y:  Add prototypes for local functions, convert misc function
	vector uses to minimal symbol table uses.
	* m2-exp.y (make_qualname, yyerror):  Make static.
	* m2-exp.y (_initialize_m2_exp):  Call init_types with NULL objfile.
	* m68k-pinsn.c:  Add prototypes for local functions.
	* m68k-pinsn.c (print_insn):  Cast args to read_memory.
	* m68k-pinsn.c (fetch_arg):  Make parameter 'code' and int.
	* m68k-stub.c:  Add prototypes.
	* m88k-pinsn.c (sprint_address):  Convert from misc function vector
	use to minimal symbol table use.
	* m88k-xdep.c (fetch_inferior_registers):  Takes an unused parameter.
	* m88k-xdep.c (store_inferior_registers):  Returns void.
	* mach386-xdep.c (fetch_inferior_registers):  Takes an unused param.
	* mach386-xdep.c (store_inferior_registers):  Returns void.
	* mach386-xdep.c (fetch_core_registers):  Takes an unused parameter.
	* main.c:  Add prototypes for local functions.
	* main.c (return_to_top_level):  Is type NORETURN (volatile).  Cast
	longjmp() result to (NORETURN void).
	* main.c (catch_errors):  Prototype the 'func' parameter.
	* main.c (disconnect, stop_sig, do_nothin, float_handler):
	Takes an unused arg.
	* main.c (execute_command):  Call the right member of the func union.
	* main.c (command_loop_marker, symbol_completion_function,
	command_loop):  Make static.
	* main.c (command_line_input):  Make linelength unsigned, cast arg
	to command_line_input().
	* main.c (add_info, add_com):  Prototype the 'fun' parameter.
	* main.c (initialize_main):  Call right member of function union.
	* mcheck.c (NOARGS):  Change hardwired void in prototypes to NOARGS.
	* mem-break.c:  Include symtab.h
	* mips-xdep.c (fetch_inferior_registers):  Takes unused param.
	* mips-xdep.c (store_inferior_registers):  Returns void.
	* mipsread.c (mipscoff_symfile_read):  Change from misc function vector
	use to minimal symbol table use.
	* mipsread.c (symbol_obstack usages):  Convert all to use per-objfile
	version.
	* mipsread.c (make_type):  Remove, convert usages to init_type.
	* mipsread.c (_initialize_mipsread):  Call init_type with NULL objfile.
	* nindy-tdep.c (nindy_frame_chain_valid):  Convert from misc function
	vector use to minimal symbol table use.
	* parse.c:  Add prototypes for local functions.
	* parse.c (xrealloc usages):  Cast args.
	* parse.c (prefixify_expression, length_of_subexp):  Make static.
	* parser-defs.h (PARSER_DEFS_H):  Define when first included.
	* parser-defs.h:  Convert function decls to prototype form.
	* partial-stab.h:  Convert from misc function vector use to new minimal
	symbol table use.
	* partial-stab.h (global_psymbols, static_psymbols usages):  Reference
	the per-objfile copies.
	* printcmd.c:  Add prototypes for local functions.  Move some struct
	definitions around to accomodate prototypes.
	* printcmd.c (decode_format):  Make static, change args oformat and
	osize to int from char.
	* printcmd.c (print_formatted):  Change 'format' and 'size' to int.
	* printcmd.c (print_scalar_formatted):  Change arg 'format' to int.
	* printcmd.c (print_address_symbolic):  Convert from misc function
	vector use to minimal symbol table use.
	* printcmd.c (address_info):  Convert from misc function vector use
	to minimal symbol table use.
	* printcmd.c (delete_display, enable_display, disable_display_command):
	Make static.
	* procfs.c (EXFUN/DEFUN):  Remove all usages, convert to PARAMS.
	* procfs.c (fetch_core_registers):  Add unused param reg_addr.
	* pyr-xdep.c (fetch_inferior_registers):  Add unused param regno.
	* pyr-xdep.c (store_inferior_registers):  Returns void.
	* remote-mm.c (mm_load):  symbol_file_add return value unused.
	* remote-nindy.c:  Minor format change.
	* remote-vx.c (vx_load_command):  symbol_file_add result unused.
	* rs6000-xdep.c (fetch_inferior_registers):  Add unused param regno.
	* rs6000-xdep.c (store_inferior_registers):  Returns void.
	* rs6000-xdep.c (fetch_core_registers):  add unused param reg_addr
	* rs6000-xdep.c (aixcoff_relocate_symtab):  Convert from misc function
	vector use to minimal symbol table use.
	* solib.c:  Add prototypes for local functions.
	* solib.c (solib_add_common_symbols, locate_base):  Convert from misc
	function vector use to minimal symbol table use.
	* solib.c (EXFUN/DEFUN):  Remove all usages, convert to PARAMS.
	* solib.c (find_solib, shared_library_command):  Make static
	* solib.c (read_memory, write_memory usages):  Cast args.
	* solib.c (special_symbol_handling):  Add function
	* source.c:  Add prototypes for local functions.
	* source.c (select_source_symtab):  Convert to scan objfiles.
	* source.c (open_source_file):  Make static.
	* source.c (xrealloc usages):  Cast args.
	* source.c (source_line_charpos):  ifdef out, unused.
	* source.c (get_filename_and_charpos):  Make static.
	* stack.c:  Add prototypes for local functions.
	* stack.c (print_frame_info, frame_info):  Convert from misc function
	vector use to minimal symbol table use.
	* symfile.c:  Add prototypes for local functions.
	* symfile.c (compare_symbols):  Make args const PTR's.
	* symfile.c (compare_psymbols, sort_pst_symbols) add.
	* symfile.c (sort_all_symtab_syms):  Scan objfile list.
	* symfile.c (obsavestring):  Add objfile parameter.
	* symfile.c (init_misc_bunches, prim_record_misc_function,
	compare_misc_functions, discard_misc_bunches, condense_misc_bunches,
	sort_misc_function_vector, compact_misc_function_vector): Remove
	* symfile.c (symbol_file_add_digested):  Add function.
	* symfile.c (symbol_file_add):  Returns struct objfile *.
	* symfile.c (symbol_file_command):  Modify for state file use.
	* symfile.c (symfile_open):  Add parameter "dumpable".
	* symfile.c (allocate_objfile, free_objfile):  Moved to objfiles.c
	* symfile.c (load_command, add_symbol_file_command):  Make static.
	* symfile.c (fill_in_vptr_fieldno):  Moved to gdbtypes.c
	* symfile.c (rindex usages):  Converted to strrchr.
	* symfile.c (allocate_psymtab):  New
	* symfile.c (free_named_symtabs):  Ifdef out code that needs to be
	converted to minimal symbol table usage, but no obvious conversion.
	* symfile.c (free_all_symtabs):  Remove.
	* symfile.c (_initialize_symfile):  Use per-objfile info.
	* symfile.h:  Rework the objfile structure to add per-objfile data
	objects (psymbol_obstack, symbol_obstack, type_obstack,
	global_psymbols, static_psymbols, msymbols, minimal_symbol_count,
	fundamental_types, malloc, realloc, free, xmalloc, xrealloc, etc).
	Add prototypes to function declarations.
	* symm-tdep.c (symmetry_extract_return_value):  Convert from misc
	function vector usage to minimal symbol table usage.
	* symmisc.c (DEV_TTY):  Define if not defined.
	* symmisc.c:  Add local function prototypes.
	* symmisc.c (dump_objfile, dump_msymbols, dump-symtab, print_syms,
	printpsyms_command, print_objfiles, print_objfiles_command):
	Rework to use iterate_over_*
	* symtab.c:  Add prototypes for local functions.
	* symtab.c (lookup_symtab_1):  Convert to look through objfiles.
	* symtab.c (lookup_partial_symtab):  Scan through objfiles.
	* symtab.c (lookup_primitive_typename, lookup_typename, lookup_
	unsigned_typename, lookup_struct, lookup_union, lookup_enum,
	lookup_template_type, lookup_struct_elt_type, lookup_pointer_type,
	lookup_reference_type, lookup_member_type, allocate_stub_method,
	check_stub_method, create_array_type, smash_to_member_type,):
	Moved to gdbtypes.c
	* symtab.c (lookup_symbol):  Some args are const.
	* symtab.h: All type related defs and structs moved to gdbtypes.h
	* symtab.h: Convert decls to prototypes.
	* target.c (noprocess):  Make static.
	* target.h:  Change decl's to prototypes.
	* tm-sunos.h: (CLEAR_SOLIB, SOLIB_ADD, SOLIB_CREATE_INFERIOR_HOOK,
	DISABLE_UNSETTABLE_BREAK) Moved to solib.h.
	* utils.c (_initialize_utils):  Use correct member of function union.
	* valarith.c:  include gdbtypes.h
	* valops.c: include gdbtypes.h, add prototypes for local functions.
	* valops.c (value_push, value_arg_push, find_function_addr):
	Make static.
	* valops.c (value_string):  Convert from misc function vector use
	to minimal symbol table use.
	* valops.c (check_field_in):  Make arg const.
	* valprint.c:  Add prototypes for local functions.
	* valprint.c (print_string):  Make static
	* valprint.c (value_print, val_print_fields, val_print): Make arg int.
	* values.c:  Add prototypes for local functions.
	* values.c (value_headof):  Convert from misc function vector to
	minimal symbol table.
	* xcoffexec.c:  Add prototypes for local functions.
	* xcoffexec.c (exec_close, file_command, add_to_section_table):
	Make static.
	* xcoffexec.c (relocate_minimal_symbol):  Add.
	* xcoffread.c (patch_block_stabs):  Moved to buildsyms.c.
	* xcoffread.c: Add prototypes for local functions.
	* xcoffread.c (sort_syms):  Convert to scan objfiles.
	* xcoffread.c (read_xcoff_symtab):  Make static.
	* xcoffread.c (various):  Replace references to builtin types with
	calls to lookup_fundamental_type.  Replace references to symbol_obstack
	and psymbol_obstack with pointers to the per-objfile copies.
	* xcoffread.c (dump_linetable, dump_type, dump_symbol, dump_namespace,
	dump_block, dump_blockvector, dump_last_symtab, dump_symtabs):
	Make static.
	* xcoffread.c (init_stringtab):  Add objfile parameter.
	* gdbtypes.c: New file
	* minsyms.c: New file
	* mmap-alloc.c: New file
	* mmap-sbrk.c: New file
	* objfiles.c: New file
	* state.c: New file
	* state.h: New file

Fri Feb 21 17:29:54 1992  John Gilmore  (gnu at cygnus.com)

	* Check in Fred Fish's changes in these modules.  Fred
	will make ChangeLog entries for all of them.  Update VERSION
	to 4.4.2.

Thu Feb 20 18:10:17 1992  Fred Fish  (fnf at cygnus.com)

	* tm-sparc.h, tm-sysv4.h, solib.h:  Move shared lib definitions
	into solib.h.
	* sparc-pinsn.c, sparc-tdep.c, standalone.c, sun3-xdep.c,
	sun386-xdep.c, symm-xdep.c, target.c, ultra3-xdep.c, utils.c,
	value.h: Prototypes for static functions; lint.
	* gdbtypes.h:  Empty file to ease transition.

Thu Feb 20 16:43:13 1992  Fred Fish  (fnf at cygnus.com)

	* environ.h, expression.h, frame.h, gdbcmd.h, gdbcore.h,
	inferior.h, language.h, signame.h, target.h, terminal.h, 
	tm-68k.h, tm-i386v.h, tm-sparc.h, tm-sun386.h, tm-symmetry.h,
	xm-i386v.h, xm-sparc.h: Prototypes for all external functions.
	Lint.
	* core.c, exec.c, infrun.c, inftarg.c, language.c, remote.c,
	signame.c, sparc-xdep.c: Prototypes for all static functions.
	Lint.
	* core.c, eval.c, exec.c, inftarg.c, remote-adapt.c, remote-eb.c,
	remote-hms.c, remote-mm.c, remote-nindy.c, remote-vx.c, remote.c,
	target.c, target.h, valarith.c, valops.c, value.h, xcoffexec.c:
	Remove to_call_function and target_call_function, since it
	always calls the same thing (call_function_by_hand).
	* core.c, exec.c, solib.c:  Rename target_ops sections =>
	to_sections, etc.
	* infcmd.c, inflow.c, infptrace.c, infrun.c, main.c, target.c,
	target.h:  target_kill takes no args.
	* language.c (language_info):  Scaffolding to allow briefer
	messages when the current language changes.  FIXME.
	* xm-amix.h, xm-i386v4.h, xm-stratus.h: Define NORETURN to avoid
	complaints about volatile functions.
	* xm-sysv4.h (HAVE_MMAP):  Define.

Thu Feb 20 09:04:18 1992  Fred Fish  (fnf at cygnus.com)

	* defs.h:  Include ansidecl.h and PARAMS macro.  Use PARAMS
	to make prototypes for all functions declared here.
	* cplus-dem.c:  Avoid declaring xmalloc and xrealloc.
	* c-exp.y:  Rename SIGNED, OR, and AND to avoid conflict.
	* environ.c:  Include <stdio.h> before defs.h.  Minor cleanup.
	* ieee-float.h:  Use PARAMS for prototypes; make some params const.
	* ieee-float.c, valarith.c:  Include <stdio.h>.  Lint.  b*=>mem*.
	* m2-exp.y:  Remove unused CONST; Rename OR and AND.
	* utils.c:  Avoid declaring malloc and realloc.  Lint.
	(request_quit):  Accept signal-number parameter.

Mon Feb 17 07:13:27 1992  Fred Fish  (fnf at cygnus.com)

	* dwarfread.c (process_dies):  Add case to handle TAG_pointer_type
	DIE's.  Add new function read_tag_pointer_type() to read them.

	* dwarfread.c (dwarf_read_array_type, read_subroutine_type):
	When creating a new user defined type, check to see if a partial
	type already exists, and if so, bash it to fit.

Fri Feb 14 19:00:17 1992  John Gilmore  (gnu at cygnus.com)

	* coffread.c (decode_base_type):  Pass long, not union.
	Fix by Eric Valette, ev@chorus.fr.

Thu Feb 13 17:14:28 1992  Fred Fish  (fnf at cygnus.com)

	* elfread.c (elf_symtab_read):  Fix code to correctly track
	changes in bfd for absolute symbols.

Thu Feb 13 12:43:29 1992  Stu Grossman  (grossman at cygnus.com)

	* xm-vaxbsd.h:  Close off comment.

Thu Feb 13 07:45:19 1992  Fred Fish  (fnf at cygnus.com)

	* xm-sysv4.h:  Define NEED_POSIX_SETPGID.

Fri Feb  7 11:51:12 1992  Per Bothner  (bothner at cygnus.com)

	* mips-tdep.c (mips_print_registers):  Print correct register
	number for double pseudo-registers.

Fri Feb  7 07:56:05 1992  John Gilmore  (gnu at cygnus.com)

	* buildsym.c (read_struct_type):  Avoid double-bump of parse ptr
	in the op$::OPERATOR. case.  From Steven McCanne,
	<mccanne@horse.ee.lbl.gov>.

	* exec.c (set_section_name):  Pass arg to exec_files_info;
	only call it if interactive.  From Francis Kauth <fk@tv.tv.tek.com>.

Thu Feb  6 17:41:32 1992  John Gilmore  (gnu at cygnus.com)

	* main.c (print_gdb_version):  Copyright msg: only this year.
	(cd_command):  Avoid changing current_directory on error.

Thu Feb  6 15:14:01 1992  Per Bothner  (bothner at cygnus.com)

	* mipsread.c (parse_partial_symbols):  Handle dependencies
	between partial symbol tables (when not doing stabs-in-ecoff).
	(This used to be handled by parse_fdr, but parse_fdr was
	incompatible with handling stabs-in-ecoff, so the code
	was re-written to not use parse_fdr.  Unfortunately,
	the logic to handle dependencies was overlooked.)

Thu Feb  6 11:51:39 1992  Steve Chamberlain  (sac at rtl.cygnus.com)

	* coffread.c (read_enum_type): Use the size of a target int when
	describing enum.
	* defs.h: added new #define for TARGET_PTR_BIT, defaults to size
	of target int.
	* h8300-tdep.c, remote-hms.c, tm-h8300.h: too many changes to count
	* symtab.c (lookup_reference_type, lookup_ptr_type): use
	TARGET_PTR_BIT to determine size of a pointer
	* values.c (unpack_long): when unpacking a REF or a PTR don't
	assume the size of the type.

Wed Feb  5 22:29:59 1992  John Gilmore  (gnu at cygnus.com)

	* mipsread.c (parse_symbol):  Avoid clobbering enum pointer when
	looking at its members.  Improve guess between struct and union,
	only assuming union if multiple members have offsets of zero.

Tue Feb  4 18:05:44 1992  Per Bothner  (bothner at cygnus.com)

	* mipsread.c:  Use (FP0_REGNUM-32) instead of magic number 6.
	(This is just for clarity - and one day permitting us to
	 change FP0_REGNUM from 38 to 32, which would make more sense.)
	* tm-mips.h:  Added STAB_REG_TO_REGNUM macro, so that
	register numbers in stabs-in-ecoff get handled correctly.

Sat Feb  1 04:45:10 1992  Stu Grossman  (grossman at cygnus.com)

 	* xm-vax.h, xm-vaxult.h, xm-vaxbsd.h, config/mh-vaxult,
	config/mh-vaxbsd, configure.in:  Split up config stuff for Vaxen
	into BSD and Ultrix.

Sat Feb  1 04:39:41 1992  John Gilmore  (gnu at cygnus.com)

	* dbxread.c (dbx_symfile_init):  Call malloc, not xmalloc.

Sat Feb  1 04:15:41 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Increment version to 4.4.1.
	* main.c (print_gdb_version):  Update copyright notice.

Sat Feb  1 01:43:11 1992  Per Bothner  (bothner at cygnus.com)

	* mipsread.c:  Prepend "struct " to the names of structure
	types, and similarly for enums and unions.  (This used
	to be done, but got lost in the re-write to "guess" the
	difference between enum/struct/union.)
	Also, guess that a tag is an enum if the first member
	has type btNil.

Fri Jan 31 21:45:51 1992  Stu Grossman  (grossman at cygnus.com)

	* xm-vax.h:  #ifndef ultrix around #include of endian.h and
	limits.h (sigh).

Fri Jan 31 00:05:01 1992  John Gilmore  (gnu at cygnus.com)

	* Projects:  Patching executables is done.
	* Makefile.in (VERSION):  Roll to gdb-4.4.
	* README, WHATS.NEW:  Update for gdb-4.4.

	* symfile.c (reread_symbols):  Whenever we reread one object
	file's symbols, we must restart the scan, because the object_files
	chain has been permuted.

	* exec.c (exec_files_info):  Split out into print_section_info.
	Print BFD filename of each section if it's not the default one.
	* core.c (core_files_info):  Call print_section_info.

	* xm-vax.h:  Include a few system header files whose definitions
	must precede defs.h.
	* language.c, language.h:  Make some things const.
	* expression.h, main.c:  const spreads like ooze.

	* mem-break.c (break_insn, break_insn_size):  Use unsigned chars,
	since BREAKPOINT values can be >0x80.

Thu Jan 30 17:21:14 1992  Stu Grossman  (grossman at cygnus.com)

	* infrun.c, xm-i386sco.h:  SCO needs to use setpgid().

Thu Jan 30 01:04:23 1992  John Gilmore  (gnu at cygnus.com)

	* sparc-pinsn.c:  Remove kludge for preferring architectures.
	Remove #ifdef's for SORT_NEEDED.  We need to sort the table, now
	and forever.  Add `add' instruction to the set that get checked
	for a preceding `sethi' in order to print an absolute address.
	Corresponding changes in ../include/opcode/sparc.h needed
	to eliminate garbage instructions.

Wed Jan 29 19:24:34 1992  Per Bothner  (bothner at cygnus.com)

	* mipsread.c (parse_partial_symbols):  Make sure partial
	symbols are created for external symbols (as used to be
	the case).  This is a bit of a pain with the mips-coff.
	It uses a table which points to all of the external
	symbols belonging to a particular FDR or psymtab.
	Once we've generated this table, we might as well save
	it, and then use it in psymtab_to_symtab_1 to find
	the symbols to pass to parse_external().
	* symfile.c,  symfile.c:  New function start_psymtab_common
	to share the common parts of allocating a new psymtab
	for dbxread, mipsread (and later dwarfread).  Its code
	was pulled out from start_psymtab in dbxread.c.
	* dbxread.c (start_psymtab):  Use start_psymtab_common().

	* valprint.c (val_print):  If there is an error when trying
	to print a string, check to see if there really is a problem
	by reading just one character.  If that works, assume
	things are ok.

Wed Jan 29 18:58:43 1992  Stu Grossman  (grossman at cygnus.com)

	* sparc-pinsn.c (compare_opcodes):  Make it prefer v6, v7,
	cypress, v8 mnemonics in that order.

Tue Jan 28 17:32:13 1992  Per Bothner  (bothner at cygnus.com)

	* sparc-pinsn.c:  Put the qsort() back in.

Mon Jan 27 18:51:03 1992  John Gilmore  (gnu at cygnus.com)

	* findvar.c (read_register, write_register):  Handle machines
	where REGISTER_TYPE is not the same size as "int".

	Handle debug symbols in dynamically loaded (relocated) code:

	* dbxread.c (read_ofile_symtab):  Fix up N_CATCH better.  Pass
	offset to process_one_symbol.
	(process_one_symbol):  Take new offset parameter.  Add it into
	appropriate symbol types to relocate symbols to loaded addresses.
	Handle all possible symbol types, and complain() about types that
	we don't expect to see.
	* mipsread.c (psymtab_to_symtab_1):  Pass offset of zero to
	process_one_symbol (FIXME, should pass real offset).

	Misc bugfixes:

	* breakpoint.c (resolve_sal_pc):  Split out code to resolve a
	sal's PC value.
	(set_breakpoint, break_command_1, until_break_command,
	catch_command_1, breakpoint_re_set_one):  Use it.
	* symtab.h (resolve_sal_pc):  Declare.
	* infcmd.c (jump_command):  Use resolve_sal_pc.

	* source.c (list_command):  Shorten "FILE, line N" to "FILE:N".

	* putenv.c (putenv):  Avoid unportably casting pointers to unsigneds.

	* c-exp.y (yylex):  `this' and `template' are only tokens in C++.

	* xm-convex.h, xm-hp300bsd.h, xm-isi.h, xm-merlin.h, xm-news.h,
	xm-np1.h, xm-pn.h, xm-pyr.h, xm-rtbsd.h, xm-symmetry.h, xm-umax.h:
	Remove MISSING_VPRINTF declaration, and superfluous "kgdb" defines.

Mon Jan 27 15:46:21 1992  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c (process_one_symbol):  Make a first cut at handling
	symbol tables generated by Sun's acc.  (#ifdef'd out, FIXME.)

	* symtab.c (find_pc_line):  Fix stepping into and out of #included
	files.

Mon Jan 27 13:00:55 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (OPCODES):  Remove OPCODES defs and refs.  There is
	no longer any need to copy ../include/opcode/* into gdb.

Mon Jan 27 12:30:38 1992  John Gilmore  (gnu at cygnus.com)

	* ChangeLog, ChangeLog-9091:  Split ChangeLog at 1992.

Sun Jan 26 19:05:40 1992  Per Bothner  (bothner at cygnus.com)

	* valprint.c (type_print_base, type_print_method_args):
	Print C++ constructor methods without bogus "return type."

Sat Jan 25 15:57:59 1992  Fred Fish  (fnf at cygnus.com)

	* infptrace.c (child_xfer_memory):  Parameter "target" should
	be a pointer to a structure, not the entire structure.

Fri Jan 24 01:30:27 1992  Fred Fish  (fnf at cygnus.com)

	* depend:  Convert the couple of references to ansidecl.h that
	used the local gdb version to use the ../include version.

Thu Jan 23 22:24:43 1992  Fred Fish  (fnf at cygnus.com)

	* procfs.c
	(child_xfer_memory): Takes pointer to a struct, not entire struct.
	(inferior_proc_init):  Fix non-ANSI version of args.
	(attach):  Call print_sys_errmsg with correct number of args.
	(mappingflags):  Make static, does not need to be global.

	* i386-tdep.c (i386_frame_num_args):  Takes a pointer to a struct
	not the entire struct itself.

	* valops.c (value_assign):  Cast some args to modify_field() and
	{read,write}_register_bytes() correctly.

	* ansidecl.h:  Removed, is duplicate of ../include/ansidecl.h

	* Makefile.in (MALLOCSRC):  Removed reference to removed local
	copy of ansidecl.h.

	* dwarfread.c (list_in_scope):  Needs an initial value, use file
	scope.

Mon Jan 20 19:06:28 1992  Stu Grossman  (grossman at cygnus.com)

	* main.c (main):  Make option_index local to keep new getopt happy.
	main.c, solib.c, Makefile.in:  Update copyright notices.

Mon Jan 20 08:54:00 1992  Michael Tiemann  (tiemann at cygnus.com)

	* cplus-dem.c (cplus_demangle): Correctly demangle destructors.

Sat Jan 18 17:17:45 1992  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in (HFILES):  Add partial-stab.h.

Sat Jan 18 16:45:01 1992  Fred Fish  (fnf at cygnus.com)

	* config/mh-stratus, config/mt-stratus, tm-stratus.h, xm-stratus.h:
	New files for stratus.  Not complete enough to actually build
	on the Stratus machine; that awaits copyright assignment for
	i860 changes.

	* Makefile.in (USER_CFLAGS):  Add macro specifically reserved
	for getting custom flags into CFLAGS when doing makes.

	* configure.in:  Add config information for stratus.

Thu Jan 16 00:51:46 1992  Fred Fish  (fnf at cygnus.com)

	* dbxread.c (process_one_symbol):  Pass address of structure
	to complain(), rather than the whole structure.

Wed Jan 15 09:56:16 1992  Fred Fish  (fnf at cygnus.com)

	* solib.c (solib_add_common_symbols):  Only compile in when not
	using SVR4 style shared libraries.

Tue Jan 14 22:34:00 1992  Fred Fish  (fnf at cygnus.com)

	* dwarfread.c (locval):  Add offreg flag to indicate location
	values that are computed off a base register.

	* dwarfread.c (new_symbol):  Rework TAG_global_variable and
	TAG_local_variable cases to account for static variables
	within function scopes.

Tue Jan 14 12:28:52 1992  Stu Grossman  (grossman at cygnus.com)

	* inflow.c:  remove #include <sys/dir.h>.  Not necessary, and
	doesn't exist on some systems.

	* infrun.c (wait_for_inferior!!!!):  Prevent gdb from hanging when
	nexting over recursive function calls.

	* target.c (target_read_string):  Create this routine to read null
	terminated strings from the target.  It deals with running off the
	end of memory elegantly as well.  solib.c (find_solib):  Use
	target_read_string() to avoid problems with running off the end of
	memory.

	* inflow.c (child_terminal_info):  #ifdef TIOCPGRP around lines
	that reference pgrp_inferior.

Mon Jan 13 14:57:11 1992  Per Bothner  (bothner at cygnus.com)

	* tm-mips.h:  Removed BLOCK_ADDRESS_ABSOLUTE, now that
	mips-tfile has been hacked to act more "traditionally."
	* dbxread.c:  Fixed typo in comment.

Sun Jan 12 13:08:36 1992  Per Bothner  (bothner at cygnus.com)

	* mips-tdep.c (mips_skip_prologue):  Add some number of
	'sw' instructions before 'addiu' adjusts the stack.

Fri Jan 10 13:47:06 1992  Fred Fish  (fnf at cygnus.com)

	* dwarfread.c (start_symtab, end_symtab, scopecount, openscope,
	freescope, buildblock closescope, record_line, add_symbol_to_list,
	gatherblocks, make_blockvector):  Extensive changes to switch
	to generic symbol table building code in buildsym.c.  Remove
	scope tree structures and functions, symbol table building
	functions, and lots of other small changes.

	* dwarfread.c:  Add new macros GCC_PRODUCER and STREQN.  Remove
	GCC_COMPILED_FLAG_SYMBOL and GCC2_COMPILED_FLAG_SYMBOL.

Tue Jan  7 13:09:57 1992  Stu Grossman  (grossman at cygnus.com)

	* buildsym.c (cleanup_undefined_types):  Add support for enums.
	This fixes the 'GDB internal error.  cleanup_undefined_types with
	bad type' problem.

Sun Jan  5 09:47:50 1992  Stu Grossman  (grossman at cygnus.com)

	* dbxread.c:  detect gcc2 compilations.

Thu Jan  2 15:07:41 1992  John Gilmore  (gnu at cygnus.com)

	* sparc-pinsn.c:  Rename bitfields that overlap with macro names
	in ../include/opcode/sparc.h.

Wed Jan  1 04:29:00 1992  Fred Fish  (fnf at cygnus.com)

	* Makefile.in:  Change tm-svr4.h to tm-sysv4.h.  Change xm-svr4.h
	to xm-sysv4.h.  Split OPCODE_DIR into OPCODE_DIR1 and OPCODE_DIR2
	to reflect actual locations of opcode files, so TAGS target will
	be buildable.

	* i386-tdep.c:  Change an erroneous 'm68k' reference to 'i386'.

	* i386-tdep.c (supply_fpregset, fill_fpregset):  Remove m68k
	code.

	* m68k-tdep.c (supply_fpregset, fill_fpregset):  Fix array
	dereferencing to access the correct elements.

	* valops.c (value_addr):  Declare return type of external func
	value_copy().

	* xcoffread.c:  Undefine next_symbol_text before redefining it.

For older changes see ChangeLog-1991

Local Variables:
mode: indented-text
left-margin: 8
fill-column: 74
version-control: never
End:
