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.

	* 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>.

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.

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.

	* 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.
	                                                                   
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.

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.

	* 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.

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".

	* 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 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 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.

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:
