Fri Dec 31 14:33:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* nindy-share/nindy.c: Fix order of arguments to store_unsigned_integer
	(second and third arguments were reversed).
	(say): Use varargs.

Fri Dec 31 12:13:47 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* remote-mips.c: Add timeout parameter to mips_request and
	mips_receive_packet.
	(callers): pass in mips_receive_wait except mips_initialize (where
	we use it to clean up the kludge where we had been changing
	mips_receive_wait temporarily) and mips_wait (where we pass in
	-1 for no timeout).

Fri Dec 31 14:33:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stack.c (print_block_frame_locals): Also print LOC_BASEREG variables.

Fri Dec 31 06:55:38 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.c (find_methods): Call fprintf_symbol_filtered with DMGL_ANSI.

Thu Dec 30 10:16:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* values.c (unpack_long): Fix garbled error message.

	* remote-mips.c (mips_error): New function.
	* remote-mips.c: Use it instead of error() most places.
	* remote-mips.c (mips_receive_packet): New arg throw_error.
	(mips_initialize): Use it not catch_errors.
	* defs.h: Declare error_pre_print and warning_pre_print here...
	* main.c: ...not here.

	* breakpoint.c (breakpoint_chain): Make static.
	* breakpoint.c, breakpoint.h (frame_in_dummy): New function.
	* stack.c (print_frame_info): Use it.

Thu Dec 30 07:41:36 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* exec.c (add_to_section_table):  Check for SEC_ALLOC instead of
	SEC_LOAD to handle .bss segments properly.

Thu Dec 30 10:16:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior): Enable code which assumes that if
	we jump into the prologue from another function, then it was a
	subroutine call.  #if 0 AT_FUNCTION_START; the above code should
	take care of this case.

Wed Dec 29 12:32:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valprint.c (val_print_string): Change chunksize from 200
	to 8.

	* symfile.c (generic_load): If no arguments, get file name
	from get_exec_file.

	* c-exp.y: Revert Kung's change.  "..." is not a type, and the
	change caused "p (...)0" to dump core.
	* gdbtypes.c (check_stub_method): Don't pass "..." to
	parse_and_eval_type.  This should fix the bug which Kung was
	trying to fix.

	* stabsread.c (define_symbol): If we choose not to combine
	two symbols, don't just ignore the second (LOC_REGISTER) one.
	* printcmd.c (print_frame_args): If we have a LOC_ARG and a
	LOC_REGISTER, use the LOC_ARG not the LOC_REGISTER.

Tue Dec 28 15:08:00 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* solib.c (DEBUG_BASE):  Remove macro and all references.
	* solib.c (debug_base_symbols):  Add array of symbols to lookup.
	* solib.c (IGNORE_FIRST_LINK_MAP_ENTRY):  Add macro.
	* solib.c (look_for_base, locate_base):  Use debug_base_symbols.
	* solib.c (find_solib):  Use IGNORE_FIRST_LINK_MAP_ENTRY.

Tue Dec 28 12:06:57 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* c-exp.y : fix grammar to parse ellipsis (...)

Mon Dec 27 18:42:14 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* stabsread.c (read_type): fix problem when reading static member
	of a class. caused by change to allow :: inside template
	instantiated name.

Mon Dec 27 11:07:05 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbtypes.h: Expand on comments for TYPE_CODE_BITSTRING and
	TYPE_CODE_STRING a bit.

	* m68k-tdep.c (m68k_skip_prologue, m68k_find_saved_regs):
	Allow pea %fp; move.l %sp, %fp instead of link instruction to
	set up the new frame.

	* main.c (init_main): Change "set remotedebug" back to var_zinteger
	from var_boolean.

	* c-exp.y (yylex): Don't try to deal with nested types.

	* cp-valprint.c (cplus_print_value): Call check_stub_type on
	TYPE_BASECLASS (type, i) before we look at its name.

	* dbxread.c: Move default definition of GCC_COMPILED_FLAG_SYMBOL
	from here . . .
	* symtab.h: . . . to here.
	* dbxread.c (record_minimal_symbol): Move check for gcc{,2}_compiled.
	and __gnu_compiled* from here . . .
	* minsyms.c (prim_record_minimal_symbol_and_info): . . . to here.
	* minsyms.c (prim_record_minimal_symbol): Call
	prim_record_minimal_symbol_and_info rather than duplicating code.
	* minsyms.c, symtab.h (prim_record_minimal_symbol{,_and_info}),
	coffread.c (record_minimal_symbol),
	xcoffread.c (RECORD_MINIMAL_SYMBOL), callers: Add objfile parameter.

Sun Dec 26 20:44:02 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* dbxread.c (process_one_symbol): Handle stabs-in-som just like
	stabs-in-elf.
	(pastab_build_psymtabs): Likewise.

	* hppa-tdep.c: Change all comments to reference %r3 or frame
	pointer rather than %r4.
	(frame_chain, skip_prologue, dig_rp_from_stack): Handle %r3 as the
	frame pointer.

	* config/pa/tm-hppa.h (FP_REGNUM): Define as %r3.
	(FIND_FRAME_SAVED_REGS): Handle %r3 as frame pointer.
	(CALL_DUMMY): Likewise.

Sun Dec 26 16:59:39 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* exec.c (exec_file_command): If error occurs after we have opened
	exec_bfd but before we call push_target, make sure to close exec_bfd.

	* infrun.c (wait_for_inferior): Remove confusing and inaccurate
	stuff about subroutine calls, return, etc., from comment which
	says "We've wandered out of the step range.".

Sun Dec 26 09:18:10 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior): When checking whether the line has
	changed, check the symtab as well.

Sun Dec 26 09:18:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbtypes.c (force_to_range_type): Use switch statement.
	complain() not warning() if the TYPE_CODE isn't one we know how to
	deal with gracefully.  Use builtin_type_int not
	lookup_fundamental_type (the objfile we passed to
	lookup_fundamental_type was sometimes NULL).

	* valops.c (call_function_by_hand, push_word), defs.h (push_word),
	convex-xdep.c, m88k-nat.c, i386m3-nat.c, mips-tdep.c, mipsm3-nat.c,
	ns32km3-nat.c, remote-bug.c, m88k-tdep.c, remote-hms.c, remote-mips.c,
	config/gould/tm-np1.h, hppa-tdep.c (hppa_fix_call_dummy), remote-vx.c:
	Use REGISTER_SIZE, unsigned LONGEST, and
	{store,extract}_unsigned_integer, instead of sizeof
	(REGISTER_TYPE) and REGISTER_TYPE.
	* All tm.h files: Change REGISTER_TYPE to REGISTER_SIZE.
	* hppa-tdep.c (pa_print_fp_reg): Remove unused variable val.

	* Makefile.in (ALLDEPFILES): Remove i386ly-nat.c and m68kly-nat.c.
	Add lynx-nat.c.

Sat Dec 25 20:05:41 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

    * hppa-tdep.c (init_extra_frame_info): Correctly adjust the base
	of the current frame when "fromleaf" is true.  Do not adjust the
	frame base of the innermost frame if it is a leaf function.

Sat Dec 25 13:39:21 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (define_symbol): Only combine a p/r pair into a
	LOC_REGPARM if REG_STRUCT_HAS_ADDR.

Sat Dec 25 09:50:29 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* valops.c (value_struct_elt): Check for (value)-1 return from
	search_struct_method.

Sat Dec 25 09:50:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* defs.h: Move definitions of TARGET_*_BIT after include of tm.h.
	The old way (using #undef in tm.h) was ugly and asking for
	trouble, because it makes it possible for some file to use the
	wrong definition.  Move definition of HOST_CHAR_BIT after definition
	of TARGET_CHAR_BIT.
	* config/alpha/tm-alpha.h, config/h8300/tm-h8300.h,
	config/h8500/tm-h8500.h, config/z8k/tm-z8k.h: Don't undef TARGET_*_BIT
	before defining them.

	* mdebugread.c: Change the builtin_type_* in this file to
	mdebug_type_* and make them static.  Use TYPE_CODE_ERROR for
	complex and float decimal.

	* printcmd.c (disassemble_command): Call wrap_here between printing
	address and printing instruction.

Fri Dec 24 14:23:57 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (read_type): Don't fall through 'S' case (the case it
	was falling though happened to do the right thing ("break;") but that
	is hardly a good thing to assume).

Tue Dec 21 13:32:02 1993  Per Bothner  (bothner@kalessin.cygnus.com)

	* ch-exp.y (match_dollar_tokens):  Fix off-by-one bug.
	* ch-lang.c (chill_is_varying_struct), ch-lang.h:  New function.
	* ch-lang.c (chill_printstr):  Use double quotes, not single quotes.
	* ch-typeprint.c (chill_type_print_base):  Handle TYPE_CODE_BITSTRING.
	Improve printing of TYPE_CODE_STRING, TYPE_CODE_SET, and
	TYPE_CODE_STRUCT (including checking chill_is_varying_struct).
	Print TYPE_DUMMY_RANGE by printing its TYPE_TARGET_TYPE.
	Handle TYPE_CODE_ENUM.
	* ch-valprint.c (chill_val_print):  Handle TYPE_CODE_BITSTRING.
	For TYPE_CODE_STRING, never print address.  Handle VARYING strings. 
	* gdbtypes.c (force_to_range_type):  New.
	* gdbtypes.c (create_set_type):  Make work, following Chill layout.
	* gdbtypes.h (TYPE_LOW_BOUND, TYPE_HIGH_BOUND, TYPE_DUMMY_RANGE): New.
	* stabsread.c (read_type):  Distinguish string and bitstring from
	char-array and set.
	* valarith.c (value_subscript), valops.c (value_coerce_array):
	Handle STRINGs as well as ARRAYs.
	* valarith.c (value_bit_index):  Fix think.  Use new macros.


Fri Dec 17 10:45:32 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* symtab (decode_line_1): fix a bug when position char is not
	set correctly.
	* c-valprint (c_val_print): handle vtbl printing when vtbl is not
	set up yet.

Thu Dec 16 16:46:01 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mips-tdep.c (read_next_frame_reg): If SIGFRAME_REG_SIZE is not
	defined, define it as 4.

Thu Dec 16 13:08:01 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config/m68k/nm-hp300bsd.h: Correctly identify 4.3BSD vs 4.4BSD.

	* config/m68k/tm-hp300bsd.h (REMOTE_BPT_VECTOR): Define.

	* config/m68k/tm-m68k.h (REMOTE_BPT_VECTOR): Allow targets to
	override.
	(REMOTE_BREAKPOINT): Likewise.

Thu Dec 16 09:14:58 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (read_hp_function_type): Correctly handle
	pass-by-value structures > 64bits in size.
	(process_one_debug_symbol): Likewise.

Mon Dec 13 20:17:39 1993  Per Bothner  (bothner@kalessin.cygnus.com)

	Implement support for Chill POWERSETs.
	* ch-exp.y (operand_2):  Implement 'Element IN PowerSet'.
	* ch-typeprint.c (chill_type_print_base):  Handle POWERSETs.
	* ch-valprint.c (chill_val_print):  Handle TYPE_CODE_SET.
	* eval.c (evaluate_subexp):  Implement BINOP_IN.
	* expression.h (enum exp_opcode):  Added BINOP_IN.
	* gdbtypes.c (create_set_type), gdbtypes.h:  New function.
	* stabsread.c (read_type):  If 'S', create a set type.
	* valarith.c (value_bit_index, value_in), value.h:  New functions,
	for indexing in SETs.

Mon Dec 13 06:42:37 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* paread.c (pa_symfile_init): Check for the existance of stabs
	after DBX_TEXT_SECT has been initialized.

Tue Nov 23 17:29:28 1993  Steve Chamberlain  (sac@jonny.cygnus.com)

        * config/h8300/tm-h8300.h (BREAKPOINT): Insn changed to sleep.
	(DECP_PC_AFTER_BREAK): Now is 0.
	* config/h8500/tm-h8500.h (REGISTER_BYTES, REGISTER_BYTE,
	REGISTER_NAMES): update to new view.  (INIT_EXTRA_FRAME_INFO): No
	extra frame info now.
	* config/sh/sh.h (NOP): Define NOP insn.
	* config/z8k/tm-z8k.h (BIG): is now sim_z8001_mode.  
	* config/z8k/z8ksim.mt (TDEPFILES): Add remote-sim.o to list.
	* ser-go32.c: Lint. (strncasecmp): Removed, now in libiberty.
	(go32_readchar): Special handling for faster polling. (async
	structure): Volatile.
	* h8300-tdep.c (print_register_hook): Allocate and use the right
	number bytes for the raw register.
	* h8500-tdep.c (regoff, frame_find_saved_reg, examine_prologue):
	deleted. (h8500_register_size, h8500_register_virtual_type, ):
	Use new way of counting registers.
	* remote-e7000.c (echo_index): deleted. (expect): Better handling
	of user interrupts. (expect_prompt): Remove never used log file
	support. (want, want_nopc): Add support for H8/300H.
	(fetch_regs_from_dump): Treat \r and \n as whitespace.
	(e7000_drain): Send an "end" command before waiting for output to
	stop.  (e7000_wait): Cope with H8/300H, better handling of user
	interrupts.  (why_stop, expect_n, sub2_from_pc): New function.
	* remote-utils.c (gr_load_image): call fflush and QUIT more regularly.
	* utils.c (notice_quit): New function for polling for user interrupts.

Fri Dec 10 15:53:56 1993  Per Bothner  (bothner@kalessin.cygnus.com)

	* stabsread.c (read_array_type):  Allow negative array bounds,
	without interpreting that to mean "adjustable."
	* ch-valprint.c (chill_val_print):  Handle RANGE types.
	* ch-typeprint.c (chill_type_print_base):  Handle BOOL.
	Handle variant records.  Handle RANGE types.

Tue Dec  7 15:41:32 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/mips/idt.mt: Use tm-idt.h instead of tm-bigmips.h.
	* config/mips/idtl.mt: Use tm-idtl.h instead of tm-mips.h.
	* config/mips/tm-idt.h, config/mips/tm-idtl.h: New files; use
	different BREAKPOINT value for IDT.

	* mipsread.c: Include bfd.h and coff/sym.h.

Mon Dec  6 16:34:10 1993  K. Richard Pixley  (rich@cygnus.com)

	* ser-unix.c (set_tty_state): set the rest of the terminal state
	  pieces.

Mon Dec  6 12:01:37 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* configure.in: Recognize mips* for all mips targets.
	(mips*el-*-elf*, mips*-*-elf*): New targets; use idt and idtl.

	Added Irix 5 support.
	* configure.in (mips-sgi-irix5*): New host and target.  Use irix5
	for both.
	* config/mips/irix5.mh, config/mips/irix5.mt,
	config/mips/xm-irix5.h, config/mips/nm-irix5.h,
	config/mips/tm-irix5.h, irix5-nat.c: New files for Irix 5 support.
	* mdebugread.c: New file, split out of mipsread.c.  Added
	elfmdebug_build_psymtabs routine.  Added some checks on external
	symbols.  Changed code to keep ecoff_debug_info and
	ecoff_debug_swap structs in the psymtab and in global pointers
	rather than retrieving them from the bfd.  Also changed to keep
	the pending list with the psymtab rather than the objfile (each
	psymtab for a single objfile points to the same pending list).
	* mipsread.c: Bulk of file moved into mdebugread.c, leaving just
	the sym_fns.
	* Makefile.in (SFILES): Added mdebugread.c.
	(OBS): Added mdebugread.o.
	(mdebugread.o): New target.
	* symfile.h: Declare mdebug_build_psymtabs and
	elfmdebug_build_psymtabs.
	* elfread.c (struct elfinfo): Added mdebugsect field.
	(elf_locate_sections): Remember location of .mdebug section.
	(elf_symfile_read): Call elfmdebug_build_psymtabs on .mdebug
	section.
	* infrun.c (AT_FUNCTION_START): Set to 0 if not already defined.
	(wait_for_inferior): Use AT_FUNCTION_START if it is defined to see
	if PC is at the start of a function.
	* mips-tdep.c (read_next_frame_reg): Use SIGFRAME_REG_SIZE, and
	give it a default definition.
	(mips_skip_prologue): Skip instructions which initialize $gp
	register.
	(in_sigtramp): New procedure, moved in from mipsread.c.
	* config/mips/tm-mips.h: Declare in_sigtramp.

	* serial.h (serial_fdopen): Make parameter const to match
	function definition.

Fri Dec  3 14:20:43 1993  Stu Grossman  (grossman at cygnus.com)

	* config/mips/irix4.mh:  Enable ser-tcp.o.

Tue Nov 30 15:24:24 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* Makefile.in (check): Do not use subdir_do, so that
	TARGET_FLAGS_TO_PASS is used correctly.

Mon Nov 29 16:10:38 1993  Stu Grossman  (grossman at cygnus.com)

	* i386-nlmstub.c:  Undo I/O redirection changes by Tom Lord.
	These definitely won't work under Netware.

Mon Nov 29 15:34:58 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* stabsread.c(read_struct_field): Fix the check when getting to
	member functions.

Mon Nov 29 16:48:16 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	gcc -Wall -O lint:
	* mips-tdep.c (heuristic_proc_desc): Initialize reg30 to avoid
	warning.  Unnest comment.
	(init_extra_frame_info): Remove unused variable mask.
	(MASK): Fully parenthesize.
	(mips_push_dummy_frame): Remove unused variable val.
	(mips_skip_prologue): Remove unused variables f and b.

Mon Nov 29 12:23:25 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_symbol, parse_partial_symbols): Do not create
	(partial) symbols for opaque struct definitions.

Mon Nov 29 11:36:57 1993  Stu Grossman  (grossman at cygnus.com)

	* i386ly-tdep.c (i386lynx_saved_pc_after_call):  Change call_inst
	to unsigned char to avoid domain warning for some values.

Mon Nov 22 23:42:59 1993  Steve Chamberlain  (sac@jonny.cygnus.com)

	* remote-e7000.c (e7000_wait): Cope with H8/300 register dump.
	* config/h8300/h8300hms.mt: Add remote-e7000.

Mon Nov 22 11:03:45 1993  Fred Fish  (fnf@cygnus.com)

	Merged changes from kev@spuds.geg.mot.com (Kevin A. Buettner):
	* gdb/config/m88k/delta88.mh (NATDEPFILES): Added corelow.o and
	coredep.o to this list.
	* gdb/m88k-nat.c (m88k_register_u_addr):  Avoid error when passed
	the number for an M88110 extended register by just returning the
	address of r0.

Sat Nov 20 09:20:51 1993  Fred Fish  (fnf@rtl.cygnus.com)

	* go32-xdep.c (re_comp, re_exec):  Remove stubs now that gdb
	always uses it's own version of regex.

Fri Nov 19 18:23:19 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* valops.c(value_struct_elt_for_reference): enhance  search operator in
	c++.
	* symtab.c(decode_line_1): same as above.

Fri Nov 19 15:08:47 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (decode_line_1): Add comment about use of
	return_to_top_level directly instead of error.  Add comment saying
	that the '' should not be needed--that the completer should be fixed.

Fri Nov 19 11:00:33 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* symtab.c(decode_line_1): fix the inconsistency of setting
	breakpoint with '' or without them. The '' is needed when you
	want name completion.

Thu Nov 18 08:25:50 1993  Fred Fish  (fnf@cygnus.com)

	* valprint.c (val_print_string):  When looking for a null
	terminator compare current bufsize to fetchlimit to determine
	when to stop, instead of computing buffer+fetchlimit which
	may overflow for very large limits (like "unlimited").

Wed Nov 17 18:23:09 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* eval.c(evaluate_subexp): to use unified search so type conversion 
	operator works in calling method.
	* valarith.c(value_x_binop, value_x_unop): same as above.
	* valops.c(search_struct_method): same as above.

Wed Nov 17 18:47:34 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* mipsread.c: Change use of ECOFF information to correspond to
	changes in bfd/libecoff.h.
	(mipscoff_symfile_offsets): Made static.

Wed Nov 17 09:43:31 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* valops.c (typecmp): improve prototype matching when calling
	a method. Make 'p (*(ostream *) &cout) << "lll" ' to work.
	* eval.c(evalute_subexp): fix operator search problem when call
	like  p x.'operator+'(i).

Tue Nov 16 17:15:03 1993  Stu Grossman  (grossman at cygnus.com)

	* i386ly-nat.c, i386lynx-nat.c, m68kly-nat.c:  Remove.  Move
	common code into lynx-nat.c.
	* lynx-nat.c:  New module.  Contains portable code for Lynx native
	stuff (mostly ptrace related).
	* config/i386/i386lynx.mh (NATDEPFILES):  i386ly-nat.o -> lynx-nat.o
	* config/m68k/m68klynx.mh (NATDEPFILES):  i386ly-nat.o -> lynx-nat.o

	* config/nm-lynx.h, config/tm-lynx.h:  New files to contain
	non-architecture specific native and target defs.
	* config/i386/nm-i386lynx.h, config/i386/tm-i386lynx.h,
	config/m68k/nm-m68klynx.h, config/m68k/tm-m68klynx.h:  Move all
	(arch) portable stuff into ../{tm nm}-lynx.h.

Tue Nov 16 13:33:47 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (gdb_mangle_name): Only assume that the physname is
	the entire mangled name if it looks like the mangled name of a
	constructor.  Needed for testsuite to work with GCC 2.4.5.

	* a68v-nat.c: Replace with new version from Troy Rollo.  The
	version	I am replacing appears to be an old copy of sun3-nat.c.
	* dstread.c (dst_symfile_read): Replace sort_all_symtab_syms call
	with loop.

	* Makefile.in (TAGS): Depend on TAGFILES_{NO,WITH}_SRCDIR.

	* Makefile.in: (HFILES,TAGFILES): Split into _WITH_SRCDIR and
	_NO_SRCDIR versions.
	(TAGS): Only add srcdir to TAGFILES_NO_SRCDIR.
	(This is part of a long saga involving me putting srcdir on
	everything (perhaps for now-obsolete reasons, I forget), Rich
	removing the srcdir from everything, Stu putting it back some
	places for Sun make, and me just now getting around to fixing
	`make TAGS' again).

Mon Nov 15 12:29:10 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* stack.c(print_frame_info): print demangled function name
	ansi style.

Mon Nov 15 14:32:29 1993  Steve Chamberlain  (sac@jonny.cygnus.com)

    	* remote-e7000.c: New file to cope with the Hitachi E7000 ICE.
	* remote-utils.c, remote-utils.h (gr_load_image): New function to
	download to target.
	* h8300-tdep.c, h8500-tdep.c, remote-z8k.c, sh-tdep.c z8k-tdep.c
	(sim_load): delete.
	* remote-sim.c (gdbsim_load): Use gr_load_image, rather than
	sim_load.
	* config/sh/sh.mt: Add remote-e7000

Mon Nov 15 11:38:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i386/linux.mh: Remove XM_CLIBS, TERMLIB, SYSV_DEFINE, and
	REGEX.
	* config/i386/xm-linux.h: Don't include xm-i386v.h.  Define
	HOST_BYTE_ORDER ourselves.  Define HAVE_TERMIOS not HAVE_TERMIO.
	Define NEED_POSIX_SETPGID.  Include unistd.h.

Mon Nov 15 12:29:10 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* symtab.c(gdb_mangle_name): fix the problem with constructor
	name mangling.

Mon Nov 15 11:38:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbtypes.h: Add TYPE_FLAG_TARGET_STUB.
	* gdbtypes.c (check_stub_type): On TYPE_FLAG_TARGET_STUB, do
	what cleanup_undefined_types does for arrays, except we clear
	TYPE_FLAG_TARGET_STUB if we fix up the type.
	* stabsread.c (cleanup_undefined_types): Add comments about how
	doing arrays here is no longer the clean way to do it.
	(read_array_type): Set TYPE_FLAG_TARGET_STUB as well as calling
	add_undefined_type.
	* c-typeprint.c, ch-typeprint.c: Move call to check_stub_type
	outside switch so it happens for all type codes.
	* cp-valprint.c (cp_print_value_fields): Recurse to val_print,
	instead of c_val_print, so that check_stub_type gets called.

	* gdbtypes.h, gdbtypes.c, m2-lang.c, ch-lang.c, c-lang.c: Remove
	TYPE_FLAG_SIGNED.  It was inconsistently set, never checked
	(except in recursive_dump_type), and is pointless.

Mon Nov 15 00:40:38 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

        * paread.c (pa_symfile_init): Look for the $TEXT$ section rather
	than the .text section.

Sun Nov 14 00:28:13 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c: Remove #if 0'd dbx_class_complaint.  We now handle
	this (more or less) gracefully, and complain() was never a good
	way of dealing with this.

	* stabsread.c (read_type): Skip the colon when reading a
	cross-reference.  Only complain, not error_type, on unrecognized
	cross-reference types.  error_type, not dump core, if the colon is
	missing.

Fri Nov 12 16:23:08 1993  Stu Grossman  (grossman at cygnus.com)

	* config/m68k/tm-sun3.h:  Disable use of alternate breakpoint insn
	when doing remote stuff.

Fri Nov 12 16:22:39 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* c-exp.y (yylex): Call lookup_symtab not lookup_partial_symtab.

	* partial-stab.h: Ignore ':' symbol descriptors.  Same case as
	Kung's stabsread.c change.

Fri Nov 12 11:18:02 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* stabsread.c (patch_block_stabs, define_symbol, read_type): in
	g++ template instantiation, nested class can be part of the
	params, and '::' can gets into symbol or type names. This is
	to fix the problem.

	* gdbtypes.c (lookup_struct_elt_type): Handle type ref or pointer
	to struct/union case.

Fri Nov 12 10:39:31 1993  Stu Grossman  (grossman at cygnus.com)

	* coff-solib.c (coff_solib_add):  Cast result of alloca().
	* m68k-tdep.c (m68k_saved_pc_after_call):  Get rid of
	GDB_TARGET_IS_SUN3.  Use more general SYSCALL_TRAP macro.
	* config/m68k/m68klynx.mh (NATDEPFILES):  Remove exec.o (it's
	already in TDEPFILES).
	* config/m68k/tm-m68k.h (SAVED_PC_AFTER_CALL):  Use
	m68k_saved_pc_after_call.
	* Remove all Sun3 specific stuff.
	* (FIX_CALL_DUMMY):  Cast arg to bfd_putb32 to unsigned char *.
	* config/m68k/tm-m68klynx.h:  Define SYSCALL_TRAP as trap #10.
	Disable REMOTE_BREAKPOINT mechanism.
	* config/m68k/tm-sun3.h:  Get rid of GDB_TARGET_IS_SUN3.
	* Protect from multiple includion.
	* Move Sun3 specific stuff from tm-m68k.h to here.
	* Define SYSCALL_TRAP as trap #0.
	* Remove def of SAVED_PC_AFTER_CALL (now in tm-m68k.h).
	* gdbserver/low-lynx.c:  Redo all register store/fetch stuff to
	make it portable for 386 and 68k.

Fri Nov 12 09:53:26 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mips-tdep.c (init_extra_frame_info): Check to see whether the
	registers mentioned in the proc_desc have been saved.  This
	generalizes mips_in_lenient_prologue in the sense that we keep
	searching until we've found saves for all the registers, not just
	look for a "lenient prologue" pattern.
	* mips-tdep.c: #if 0 lenient prologue code.

	* mips-tdep.c (heuristic_proc_desc): Don't assume a host short
	is 16 bits.

Thu Nov 11 19:58:05 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i386/i386sol2.mh: Comment out corelow.o.

	* printcmd.c (address_info): Use filtered, not unfiltered functions.
	We should be able to deal with a QUIT here.

Thu Nov 11 15:22:20 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* printcmd.c (address_info): Use fprintf_symbol_filtered
	to print the symbol name.

	* stabsread.c (define_symbol): Handle cfront lossage for 
	struct/union/enums and typedefs.

	* partial-stab.h (case N_BINCL): Update psymtab_language
	as appropriate when changing subfiles.
	(case N_SOL): Update psymtab_language as appropriate when
	changing subfiles.  Add typedef for structs, unions, and enums
	when processing C++ files.

Thu Nov 11 13:18:47 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* README: Remove information on languages and just cite the (newly
	updated) information in doc/gdb.texinfo instead.

	* delta68-nat.c: Fix typos (add missing ");" and stuct -> struct).

Wed Nov 10 09:31:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c (process_one_symbol, N_RBRAC): Don't clear
	within_function just because local_symbols is NULL.  It appears
	that this bug has existed since the 10 Apr 89 change which started
	clearing within_function here.

	* config/m68k/tm-m68k.h: Clean up CALL_DUMMY comment.
	* config/m68k/{tm-hp300bsd.h,tm-hp300hpux.h,tm-m68k-em.h,
	tm-monitor.h,tm-sun3.h,tm-vx68.h}, config/sparc/tm-sparc.h:
	Define BELIEVE_PCC_PROMOTION.
	* dbxread.c: Remove BELIEVE_PCC_PROMOTION define.  The code which
	used this was moved to stabsread.c a long time ago.

	* dstread.c (dst_sym_fns): Update for flavours.
	* symfile.c (find_sym_fns): Add kludge for apollo like for rs/6000.
	* dstread.c (dst_symfile_offsets): Set objfile->num_sections.

	gcc -Wall lint:
	* thread.c: Include "gdbcmd.h" and <ctype.h>.
	* Makefile.in: Update dependency.
	* thread.c (thread_command): Remove unused variable p.
	* values.c (unpack_double): Use len instead of TYPE_LENGTH (type).
	* valprint.c (print_floating): Correctly check sign bit now that
	we are using unsigned arithmetic.
	* symtab.c (find_pc_line_range): Remove unused variables exact_match,
	ind, and l.

Tue Nov  9 17:42:25 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* valarith.c (value_x_binop): fix search operator in class bug
	* valarith.c (value_x_unop): fix search operator in class bug

Tue Nov  9 19:20:17 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (init.c): Add udi2go32.o to list of files that we
	should not try to search for _initialize_* functions.

	* remote-udi.c (udi_wait): Change UDIGdb_StdoutReady back to
	UDIStdoutReady.  It accidentally got changed on 24 Oct 93 when
	stdout was changed to gdb_stdout.  Likewise for UDIGetStdout,
	UDIStderrReady, and UDIGetStderr.

Tue Nov  9 12:48:06 1993  Tom Lord  (lord@cygnus.com)

	* remote-hms.c (hms_wait): fixed too many arguments to putc_unfiltered.

Tue Nov  9 12:20:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c (quit): Also call gdb_flush on standard output and error.

	* .gdbinit: Remove "source /.gdbinit".  It causes a spurious error
	if /.gdbinit doesn't exist (and I know of no convention of putting
	something in /.gdbinit).

Mon Nov  8 18:17:11 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* cp-valprint.c (cp_print_value_fields): change output from <no
	value> to <optimized out or zero length>

Mon Nov 08 17:05:30 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* Makefile.in: Change RUNTEST_FLAGS back to RUNTESTFLAGS
		       Change RUNTEST = runtest to test for existance of
			a runtest in the source tree first.

Mon Nov  8 10:42:03 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Remove unused variable GCC.  Remove "#CC=cc" line
	which doesn't really relate to anything.

	* Makefile.in (CC_FOR_TARGET): Test for existence of gcc/xgcc, not
	for existence of gcc/Makefile.

	* inflow.c (terminal_init_inferior), infptrace.c (child_resume):
	Add comments about use of Lynx PIDGET and how we will want to
	clean it up.

	* stabsread.c: Remove long_kludge_name code (it was already #if 0).
	* stabsread.c (read_one_struct_field): Clean up comments to reflect
	Kung's change of 5 Nov 93.
	* stabsread.c (read_one_struct_field): Don't give up on unknown
	visibility character, just shove it in fip->list->visibility.
	(read_baseclasses): Don't give up on unknown virtual or visibility
	characters, just assume a reasonable default, complain, and keep
	going.
	(attach_fields_to_type): Complain on unrecognized visibility.
	One result of all this is that '9' (VISIBILITY_IGNORE) can be used
	in a stab as well as being something which GDB uses internally.

Mon Nov  8 07:57:30 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: Remove h8300h, we have multilib now.

Mon Nov  8 06:11:24 1993  D. V. Henkel-Wallace  (gumby@cirdan.cygnus.com)

	* configure.in: Add unixware as a configuration alias for x86
	sysv4

	* config/i386/i386nw.mt: add i387-tdep.o, exec.o to TDEPFILES

Sun Nov  7 23:49:21 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.c (decode_line_1, decode_line_2):  Do not adjust pc by
	FUNCTION_START_OFFSET if funfirstline is not set.

Fri Nov  5 17:19:30 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* gdbtypes.h : add a field 'ignore_field_bits in cplus_specific,
	and macros to handle the bits.
	* stabsread.c (read_one_struct_field): add VISIBILITY_IGNORE, and
	for field of length 0, set this bit on.
	* cp-valprint.c (cp_print_value_fields): for VISIBILITY_IGNORE
	field, print <no value>.

Fri Nov  5 14:43:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Version 4.11.2.

Fri Nov  5 09:49:22 1993  Stu Grossman  (grossman at cygnus.com)

	* inflow.c (terminal_init_inferior): Temporarily use Lynx PIDGET
	macro to set process groups.
	* infptrace.c (child_resume): Temporarily use Lynx PIDGET to
	specify resumption of all threads.
	* infrun.c (wait_for_inferior):  Fix handling of thread-specific
	breakpoints for systems where DECR_PC_AFTER_BREAK > 0 (ie: backup
	PC by the right amount when continuing the thread).
	* thread.c (thread_apply_command):  Add the  `thread apply'
	command to apply a given GDB command to a list of threads.

Fri Nov  5 05:58:03 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Makefile.in (init.c): Don't call sed if filename is empty.

Thu Nov  4 08:27:24 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c (unknown_symchar_complaint): Make message refer to
	"symbol descriptor" not "symbol type character" for consistency
	with stabs.texinfo terminology.

	* stabsread.c (read_struct_fields): Accept either '$' or '.' as
	the character which introduces a cpp_abbrev or anonymous type.

	* c-lang.c (c_printstr): Print "" to stream (like all the other
	output from this function), not gdb_stdout.

	* dbxread.c (process_one_symbol): Do relocate 'S' symbols by
	the text offset (revert 12 Oct 93 change).

	* configure.in: Make hppa*-*-hiux* use hppahpux,
	not non-existent hppahiux.

Wed Nov  3 16:24:09 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* values.c (value_fn_field): when physical name not found, do not
	error, but return null.
	* valops.c (value_struct_elt): when name and args match does not
	mean it is the one, some times a typedef class can have the same
	member method and args. This probably will not happen with new
	version of g++, but it does happen in old g++ and cause gdb error.

Wed Nov  3 09:20:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	Merge changes for dos x udi:
	* Makefile.in (udi2go32.o): add rule to build this file
	* 29k-share/udi/udi2go32.c: new file
	* config/a29k/a29k-udi.mt: add udi2go32.o
	* 29k-share/udi/{udr.c, udip2soc.c}: #ifdef out the entire file 
	  if __GO32__ is defined.  What a hack.

Wed Nov  3 09:20:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote.c (putpkt, getpkt): Don't call interrupt_query.

	* findvar.c (value_of_register): Rename val to reg_val to avoid
	name conflict with some (e.g. tm-m68k.h) REGISTER_CONVERT_TO_VIRTUAL.

	* main.c: Add variables source_line_number, source_file_name,
	source_error, source_error_allocated, and source_pre_error.
	(command_line_input): If source_file_name set, increment
	source_line_number and set error_pre_print with them.
	(source_command): Set source_* and make a cleanup so they get
	set back.

Tue Nov  2 16:28:34 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stack.c (down_silently_command): Add comment about PR 1913.

	* breakpoint.c (insert_breakpoints, delete_breakpoint): Call
	target_terminal_ours_for_output before attempting output.

	* fork-child.c (fork_inferior): Fix comment so that it suggests
	"set shell" rather than having "set env SHELL" affect GDB's
	operation.

Tue Nov  2 15:03:08 1993  Tom Lord  (lord@rtl.cygnus.com)

	* utils.c (vfprintf_unfiltered): don't use maybe_filtered
	since it involves a fixed size buffer.

Tue Nov  2 13:42:30 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* findvar.c (value_of_register, value_from_register),
	hppa-tdep.c (pa_print_fp_reg), infcmd.c (do_registers_info),
	valops.c (value_assign):   Use REGISTER_CONVERT_TO_* only if
	REGISTER_CONVERTIBLE is defined, otherwise just copy the content.
	Pass desired type to REGISTER_CONVERT_TO_*.

	* config/m68k/tm-m68k.h, config/i960/tm-i960.h (REGISTER_CONVERT_*):
	Pass length of desired type to store/extract_floating.
	* config/i386/tm-arm.h, config/i386/tm-i386aix.h, 
	config/i386/tm-sun386.h, config/i386/tm-symmetry.h, 
	config/m88k/tm-m88k.h config/rs6000/tm-rs6000.h (REGISTER_CONVERT_*):
	Use extract_floating and store_floating with length of desired type.
	* config/m68k/tm-news.h (STORE,EXTRACT_RETURN_VALUE):  Add type
	parameter to REGISTER_CONVERT_*.

	* config/a29k/tm-a29k.h, config/convex/tm-convex.h,
	config/gould/tm-np1.h, config/gould/tm-pn.h, config/h8300/tm-h8300.h,
	config/h8500/tm-h8500.h, config/i386/tm-i386v.h,
	config/mips/tm-mips.h, config/ns32k/tm-merlin.h,
	config/ns32k/tm-umax.h, config/pa/tm-hppa.h, config/pyr/tm-pyr.h,
	config/sh/tm-sh.h, config/sparc/tm-sparc.h, config/tahoe/tm-tahoe.h,
	config/vax/tm-vax.h, config/z8k/tm-z8k.h (REGISTER_CONVERTIBLE,
	REGISTER_CONVERT_TO_RAW, REGISTER_CONVERT_TO_VIRTUAL):  Remove
	versions for which REGISTER_CONVERTIBLE is always false.
	* z8k-tdep.c (register_convert_to_virtual, register_convert_to_raw):
	Remove, no longer used.

	* alpha-tdep.c (alpha_register_convert_to_raw,
	alpha_register_convert_to_virtual):  New routines to handle
	the different raw formats in alpha floating point registers.
	* config/alpha/tm-alpha.h (REGISTER_CONVERTIBLE,
	REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW):  Use them.

Tue Nov  2 12:45:23 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* gdbserver/configure.in: Recognize *-*-lynxos* instead of
	*-*-lynx*, recognize sparc-*-lynxos*.
	* gdbserver/Makefile.in (install, install_only): Add.
	* gdbserver/gdbserver.1: New file, man page for gdbserver.

Tue Nov  2 03:01:01 1993  Jeff Law  (law@snake.cs.utah.edu)

	 * hpread.c: Include <time.h> and <sys/types.h>.  Change include
	 of "libhppa.h" to "som.h".
	 (BYTES_IN_WORD): Define.
	 (hppa_sym_fns): "hppa" is 4 characters, not 5.
	
Mon Nov  1 09:40:21 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c, symtab.h, source.c: Change find_line_pc_range to take
	a struct symtab_and_line argument, rather than a symtab and a line.
	Re-write it to be based on the address rather than bogusly adding
	one to the line number and hoping that has something to do with the
	end of the line.

	* config/m88k/m88k.mh (NATDEPFILES): Remove exec.o.

	* paread.c (pa_symtab_read): Change comments to say ignoring
	labels really should be handled by the assembler/compiler.

	* Makefile.in: Add -O to CXXFLAGS.

	* TODO: Expand comments on fast watchpoints.

Sun Oct 31 19:45:06 1993  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* paread.c (pa_symtab_read): Also filter out local symbols
	starting with "L$".

Sun Oct 31 09:28:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symfile.h (sym_fns), symfile.c (find_sym_fns), xcoffread.c,
	coffread.c, dbxread.c, elfread.c, mipsread.c, nlmread.c, paread.c:
	Change from using bfd target name to using the flavour.

	* objfiles.h, infcmd.c, symfile.c: Add comments about how various
	objfiles get created and when we should blow them away.

Sat Oct 30 08:32:53 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symfile.c (reread_symbols): When re-reading symbols, do all the
	right operations ourself, rather than calling symbol_file_command.
	If we re-read something, call clear_symtab_users not just
	breakpoint_re_set.
	* objfiles.h, objfiles.c (build_objfile_section_table): No longer
	static.
	* symfile.c (clear_symtab_users): Call clear_pc_function_cache.
	* coffread.c, dbxread.c, elfread.c, mipsread.c, nlmread.c, paread.c
	(*_symfile_offsets): Set objfile->num_sections.
	* remote.c (remote_wait), symfile.c (syms_from_objfile):
	Don't muck with objfile->num_sections now that all the symbol
	readers set it.
	* elfread.c: Clean up obsolete comment about handling only DWARF.
	* paread.c: Remove comment about how we should use an "ordinary"
	file format with an hppa suffix.  There is nothing ordinary about SOM.

	* config/i386/{i386m3.mh,i386mk.mh}, config/mips/mipsm3.mh,
	config/ns32k/ns32km3.mh: Change MMALLOC_LIB to MMALLOC.
	* TODO: Update Mach stuff.

Fri Oct 29 16:30:36 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	LynxOS support:
	* configure.in: Change *-*-lynx* to *-*-lynxos*, add
	sparc-*-lynxos*.
	* Makefile.in (ALLDEPFILES): Add m68kly-nat.c, sparcly-nat.c.
	Rename i386lynx-nat.[co] to i386ly-nat.[co].
	(ALLCONFIG): Add config/{m68k,sparc}/{m68k,sparc}lynx.m[ht].
	(m68kly-nat.o, sparcly-nat.o): Add rules.
	* i386ly-tdep.c: Cosmetics.
	* i386lynx-nat.c: Removed.
	* i386ly-nat.c: New file, was i386lynx-nat.c.
	* m68kly-nat.c: New file.
	* sparcly-nat.c: New file.
	* config/xm-lynx.h: New file, cpu-independent host info.
	* config/i386/i386lynx.mh: Changes for consistency.
	* config/i386/i386lynx.mt: Ditto.
	* config/i386/tm-i386lynx.h: Ditto.
	* config/i386/nm-i386lynx.h: Ditto.
	* config/i386/xm-i386lynx.h: Include config/xm-lynx.h.
	* config/m68k/m68klynx.mh, config/m68k/m68klynx.mt,
	config/m68k/tm-m68klynx.h, config/m68k/nm-m68klynx.h,
	config/m68k/xm-m68klynx.h: New files, M68K LynxOS support.
	* config/sparc/sparclynx.mh, config/sparc/sparclynx.mt,
	config/sparc/tm-sparclynx.h, config/sparc/nm-sparclynx.h,
	config/sparc/xm-sparclynx.h: New files, Sparc LynxOS support.

Fri Oct 29 08:11:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* defs.h, findvar.c (extract_floating, store_floating): New functions.
	* Move SWAP_TARGET_AND_HOST from defs.h to findvar.c because it is
	now used only by extract_floating and store_floating.
	* valprint.c (print_floating): Use unsigned arithmetic.  Use
	extract_unsigned_integer instead of SWAP_TARGET_AND_HOST.
	Change sizeof (float) to 4 and sizeof (double) to 8 (those are always
	the relevant sizes for this code, which is in #ifdef IEEE_FLOAT).
	* values.c (unpack_long, unpack_double, value_from_double),
	valarith.c (value_binop), stabsread.c (define_symbol):
	Use extract_floating and store_floating instead of
	SWAP_TARGET_AND_HOST.
	* config/m68k/tm-m68k.h, config/i960/tm-i960.h (REGISTER_CONVERT_*):
	Use extract_floating and store_floating.
	* config/m88k/tm-m88k.h: Add comments (it should be doing the same).
	* i386-tdep.c (i386_extract_return_value),
	* remote-nindy.c (nindy_store_registers): Use store_floating.

Fri Oct 29 09:31:38 1993  Steve Chamberlain  (sac@rtl.cygnus.com)

	* remote-sim.c (gdbsim_store_register):  Change var name so
	it compiles with non-ANSI compilers.

Fri Oct 29 08:11:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Add idea for "disassemble" with source.

Fri Oct 29 00:41:01 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.11.1 after release and cvs
	tagging.

Thu Oct 28 09:14:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Add section on Mach.  Stop calling it a "bug list".
	Remove John's name and email address.  Remove item on "always"
	("hook-stop" takes care of this).  Remove item on executables with
	no symbols (this works on some machines, at least).  Remove item
	about calling error() during symbol reading (I think all the important
	ones have been cleaned up).  Revise items about signals and remote
	systems.  Remove section on ^Z requiring several continues to make
	it go (this now works.  Perhaps the item is based on confusion over
	programs (like GDB itself) which catch SIGTSTP and then re-send
	themselves the signal.  PR 2575 might contain relevant info).

Thu Oct 28 16:55:34 1993  Fred Fish  (fnf@cygnus.com)

	* NEWS:  Note improvements in C++ support, preliminary thread
	implementation, and LynxOS native and target support for 386.

Thu Oct 28 16:55:34 1993  Fred Fish  (fnf@cygnus.com)

	* README:  Add note from Peter Schauer about OSF/1 shared
	libraries.  Add note from Pace Willisson about configuring on BSDI
	BSD/386 release 1.0.  Update gdb references to gdb 4.11.

Thu Oct 28 09:14:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* NEWS: Add notes about Alpha and "set remotedebug" for UDI.

	* valops.c (value_assign): Change bitfield code to use a buffer of
	the correct size, rather than an int.

Wed Oct 27 13:43:07 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i386/{i386m3.mt,i386m3.mh},
	config/mips/{mipsm3.mt,mipsm3.mh},
	config/ns32k/{ns32km3.mt,ns32km3.mh}: Use correct names for TM_FILE
	and XM_FILE.  Replace host files *mach3-xdep.o with native
	files *m3-nat.o.  Replace host file os-mach3.o with native
	file m3-nat.o.

	* remote-udi.c: Remove LOG_FILE stuff; superceded by "set remotedebug".
	* remote-mon.c: Remove commented out "set remotedebug" command.
	* remote-nindy.c: Clean up comment about wanting alternative to
	options specified on the GDB command line.

	* fork-child.c (fork_inferior): Set inferior_pid before calling
	init_trace_fun.  Move the code which gets us through the shell
	to new function startup_inferior.
	* inferior.h: Declare startup_inferior.
	* procfs.c (procfs_init_inferior), inftarg.c (ptrace_him):
	Call startup_inferior.
	* m3-nat.c (m3_trace_him): Call intercept_exec_calls.
	* config/nm-m3.h: Don't define STARTUP_INFERIOR.
	* config/i386/tm-i386m3.h, config/ns32k/tm-ns32k.h,
	config/mips/tm-mipsm3.h: Don't define START_INFERIOR_TRAPS_EXPECTED.

	* m68k-stub.c: Change vector 13 from SIGFPE to SIGBUS.

Tue Oct 26 22:05:03 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* mips-tdep.c (mips_pop_frame): If proc_desc is NULL, don't dump core.

Tue Oct 26 15:07:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	gcc -Wall lint:
	* nlmread.c: Include stabsread.h.
	* Makefile.in: Update dependencies.

	* remote.c: Change PBUFSIZ back to 400.  John's 28 Feb 1992 change
	to increase it broke the ability to write large chunks of memory
	with m68k-stub and i386-stub.  Now we only use more than 400 on
	machines where we need that much to write the registers.
	* remote.c (remote_write_bytes): Eliminate possible abort().  The
	check for when to abort was off by a few bytes and besides which,
	it is handled by MAXBUFBYTES, which the caller uses.
	* m68k-stub.c: Add comments about trap #1 and trap #8 instructions.

Tue Oct 26 08:36:07 1993  Doug Evans  (dje@canuck.cygnus.com)

	* remote-sim.h (SIM_ADDR): New type (same as CORE_ADDR).
	(sim_set_pc): Update prototype.
	(sim_read, sim_write): Ditto, and use unsigned char *buf.
	(sim_fetch_register, sim_store_register): Use unsigned char *buf.
	(sim_info): Pass printf function as argument, add verbose argument.
	(sim_stop_reason): Renamed from sim_stop_signal, fix prototype.
	* remote-sim.c (gdbsim_wait): Update call to sim_stop_reason.
	(gdbsim_files_info): Update call to sim_info.

Tue Oct 26 10:41:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valops.c (value_assign): Call reinit_frame_cache when assigning
	to a register.

Mon Oct 25 11:08:59 1993  Stu Grossman  (grossman at cygnus.com)

	* infrun.c (wait_for_inferior):  Fix PC out of objfile bounds
	check to just use stop_func_name == 0.
	* remote-udi.c (store_register):  Invalidate NPC/PC_REGNUM after
	changing PC.

Mon Oct 25 14:57:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/{low-lynx.c,low-sparc.c,low-sun3.c}, standalone.c,
	m3-nat.c, i386m3-nat.c, mipsm3-nat.c, ns32km3-nat.c: bcopy -> memcpy.

	gcc -Wall lint:
	* breakpoint.c: Include thread.h.
	* coffread.c: Include stabsread.h.
	* Makefile.in: Update dependencies.
	* breakpoint.c (mention): Add bp_call_dummy to switch.
	* symmisc.c (dump_symtab): Use %d not %ld for line number.

Sun Oct 24 18:29:32 1993  Tom Lord  (lord@rtl.cygnus.com)

	* every non-obsolete file except utils.c:
	  Change the stream argument to _filtered to GDB_FILE *.
	  Change all references to stdout/stderr to gdb_stdout/gdb_stderr.
	  Replace all calls to stdio output functions with
	    calls to corresponding _unfiltered functions.
	  Replaced calls to fopen for output to gdb_fopen.
	  Added sufficient goo to utils.c and defs.h to make the above
	  work.
	  
	  The net effect is that stdio output functions are only directly
	  used in utils.c.  Elsewhere, the _unfiltered and _filtered 
	  functions and GDB_FILE type are used.

	  In the near future, GDB_FILE will stop being equivalant to 
	  FILE.

	  The semantics of some commands has changed in a very subtle way:
	  called in the right context, they may cause new occurences of 
	  prompt_for_continue() behavior.

	  Please respect this change by not reintroducing stdio output 
	  dependencies in the main body of gdb code.  All output from
	  commands should go to a GDB_FILE.

Sun Oct 24 20:16:38 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* parse.c, parser-defs.h (write_exp_msymbol):  New function to write
	the appropriate expression for a minimal symbol.  Taken from c-exp.y
	and m2-exp.y but handles mst_file_*.
	* c-exp.y, m2-exp.y:  Use it.

Sun Oct 24 09:31:05 1993  Fred Fish  (fnf@lisa.cygnus.com)

	* elfread.c (elf_symtab_read):  Use bfd convention that both
	initialized and uninitialized data sections have the SEC_ALLOC
	flag bit set, but only initialized sections have SEC_LOAD set.
	SEC_DATA is ignored since it only gets set for initialized 
	data.

Sat Oct 23 14:48:18 1993  Doug Evans  (dje@canuck.cygnus.com)

	* remote-sim.h (sim_stop): New enum.
	(sim_stop_signal): Change prototype, result is enum sim_stop.
	* remote-sim.c (gdbsim_wait): Update call to sim_stop_signal.

Fri Oct 22 07:49:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (define_symbol): Skip the whole thing about "pcc
	promotion" on little-endian machines.

	* remote-vx.c (vx_wait): Rename pid parameter to pid_to_wait_for.
	Some compilers (legitimately) don't like variables in the
	function's outermost block whose name is the the same as the name of
	a parameter.

	Merge Apollo patches from Troy Rollo (troy@cbme.unsw.edu.au):
	* dst.h, dstread.c, config/m68k/{apollo68b.mt,tm-apollo68b.h}:
	New files.
	* config/m68k/nm-apollo68b.h: Add more defines.
	* configure.in: Recognize apollo target, not just host.

	* configure.in: Add * to end of all OS names.

Fri Oct 22 06:14:01 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (ALLPARAM):  Add config/m88k/xm-delta88v4.h

Thu Oct 21 12:23:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (init.c): Generate using the source, not munch.  This
	cleans up all kinds of hassles (which nm to use in munch, etc).  The
	new formatting conventions (mostly already followed) are that
	the name of the _initialize_* routines must start in column zero,
	and must not be inside #if.
	* munch: Removed.
	* Makefile.in: Remove references to munch.
	* serial.c, remote.c, infptrace.c, maint.c, convex-tdep.c,
	alpha-tdep.c, hp300ux-nat.c, hppab-nat.c, osfsolib.c, remote-es.c,
	procfs.c, remote-udi.c, ser-go32.c, ultra3-xdep.c, sh-tdep.c,
	i960-tdep.c, hppa-tdep.c, h8500-tdep.c, dpx2-nat.c, delta68-nat.c,
	z8k-tdep.c: Make sure the above conventions are followed.  Make
	sure they are all declared as returning void.  Clean up
	miscellaneous comments and such.

	* sh-tdep.c (sim_load): Add function.

Thu Oct 21 15:58:48 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* remote-mips.c (mips_wait): add pid argument.

Thu Oct 21 12:23:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (c-exp.tab.o): Remove notice about shift/reduce conflicts
	which no longer occur.

	gcc -Wall lint:
	* findvar.c (symbol_read_needs_frame), corelow.c (ignore),
	inflow.c (gdb_has_a_terminal): Make sure to return a value.
	* regex.h: Declare re_set_syntax.
	* printcmd.c: Include valprint.h.
	* infcmd.c, exec.c, maint.c, core.c: Include language.h.
	* maint.c: Include expression.h.
	* infrun.c, fork-child.c, corelow.c, inflow.c: Include thread.h.
	* inftarg.c: Include command.h.
	* coredep.c: Include value.h.
	* c-exp.y, m2-exp.y, ch-exp.y: Include bfd.h, symfile.h and objfiles.h.
	* ch-typeprint.c: Include typeprint.h.
	* ch-valprint.c: Include c-lang.h.
	* nlmread.c: Include buildsym.h.
	* environ.c: Include gdbcore.h.  Only include defs.h once.
	(set_in_environ): Cast const char * to char * when passing to
	set_gnutarget.
	* Makefile.in: Update dependencies to reflect all these new includes.
	Remove unused variables:
	* printcmd.c (printf_command): args_to_vprintf.
	* coffread.c (coff_symfile_init): strsection.
	Move variables to within the #ifdefs where they are used:
	* symtab.c (gdb_mangle_name): opname.
	* inftarg.c (child_attach): pid and exec_file.
	* inftarg.c (child_detach): siggnal.
	* objfiles.c (allocate_objfile): mapto, md, and fd.
	* objfiles.c (free_objfile): mmfd.
	* infrun.c (wait_for_inferior): Include BPSTAT_WHAT_LAST in switch.
	* infrun.c (wait_for_inferior): Remove unused same_pid label.
	* inferior.h: Declare set_sigint_trap and clear_sigint_trap.
	* parser-defs.h: Declare write_exp_elt_block.
	* stabsread.h: Declare elfstab_offset_sections and
	coffstab_build_psymtabs.

Thu Oct 21 12:05:08 1993  Ken Raeburn  (raeburn@cygnus.com)

	Patch from Jeff Law:
	* paread.c: Fix references to "hppa" that should now be "som".

Thu Oct 21 12:23:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (decode_line_1): Don't use SYMBOL_LINE for functions.

Thu Oct 21 02:59:07 1993  Stu Grossman  (grossman at cygnus.com)

	* remote-udi.c (udi_store_registers, store_register):  Use
	UDI29KPC address space when modifying PC.  It seems that you can't
	modify the PC directly (at least in the isstip simulator).

Wed Oct 20 11:35:43 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.h: Put remote_debug declaration back here.  Add baud_rate.
	* remote.c, remote-udi.c, remote-utils.h: Let target.h take care of
	declaring these.  Those random externs all over are error prone.
	* Move "set remotebaud" from remote-utils.c to main.c to it applies
	to remote.c as well.

	* xcoffread.c (xcoff_symfile_read), coffread.c (coff_symfile_read):
	Sort symtabs for this objfile only, not for all objfiles.
	* symfile.c, symfile.h (sort_all_symtab_syms): Remove; no longer used.

	* mipsread.c (parse_symbol): In third-eye, a function has a block
	within it which represents the whole function.  Create only one
	GDB block for both.

Wed Oct 20 17:47:42 1993  Stu Grossman  (grossman at cygnus.com)

	* main.c:  Make baud_rate and remote_debug be global variables,
	remove #include "remote-utils.h".  This makes it possible to build
	GDB without remote-utils.c.  Also, move setting of remote_debug
	into main, so that all remote*.c files can use it (not just the
	serial line ones).  And, make baud_rate be an int.
	* remote-udi.c:  Change kiodebug to remote_debug.
	* remote-utils.c:  Move setting of baud rate and debug into main.c.
	* remote-utils.h:  Redefine sr_{get set}_debug and sr_{get set}_baud
	to use baud_rate and remote_debug globals for compatibility.
	* remote.c:  Use remote_debug and baud_rate globals directly,
	instead of sr_ functions, so that we don't need to load
	remote-utils.c.
	* config/a29k/a29k-udi.mt:  Define REMOTE_O as null so that we don't
	get the default remote* modules.

Wed Oct 20 11:35:43 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (define_symbol): When combining a LOC_ARG and a
	LOC_REGISTER, use the type from the LOC_REGISTER, not from the
	LOC_ARG.

Wed Oct 20 14:34:38 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/i386/xm-go32.h: define some signals if they aren't
	  already defined.

Wed Oct 20 11:35:43 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (INTERNAL_LDFLAGS): New macro.  The new part is
	that we use CFLAGS and PROFILE_CFLAGS to link.
	(gdb, rapp, kdb): Use INTERNAL_LDFLAGS instead of
	LDFLAGS and/or GLOBAL_CFLAGS.

Wed Oct 20 09:29:55 1993  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Add $(srcdir) to all refs to 29k-share
	directories.

Tue Oct 19 17:23:34 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* Makefile.in (ALLCONFIG):  Add config/i386/{i386m3.mh, i386m3.mt,
	i386/i386mk.mh i386/i386mk.mt}, config/mips/{mipsm3.mh,
	mipsm3.mt}, config/ns32k/{ns32km3.mh, ns32m3.mt}
	* Makefile.in (remote_utils_h):  Add remote-sim.h
	* Makefile.in (NONSRC):  Add i386-nlmstub.c
	* Makefile.in (HFILES):  Add coff-solib.h

Tue Oct 19 14:15:40 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* values.c (value_virtual_fn_field): Fix the offset calculation
	when calling virtual functions. (gdb.t22/virtfunc.exp).
	* eval.c (evaluate_subexp): same as above.

Tue Oct 19 10:43:16 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/rs6000/rs6000.mh (TERMCAP): Define to -lcurses.

	* Makefile.in: Define CXXFLAGS.

Tue Oct 19 09:28:52 1993  Stu Grossman  (grossman@cygnus.com)

	* sparclite/Makefile.in:  Fixup so that this works with Sun make
	and VPATH.

Tue Oct 19 10:43:16 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.h (struct bpstat_what): Don't use bitfields.

	* typeprint.c: Add "class CLASS-NAME" to docstring for ptype.

Tue Oct 19 06:17:10 1993  Fred Fish  (fnf@cirdan.cygnus.com)

	* Makefile.in (ALLPARAM):  Add config/m88k/{nm-delta88v4.h,
	tm-delta88v4.h, xm-dgux.h}.
	* Makefile.in (ALLCONFIG):  Add config/m88k/{delta88v4.mh,
	delta88v4.mt}.

	* README:  Remove comment about SunOS 5.x programs leaving
	coredumps.  Info from Sun is that this was not in customer
	releases.

Mon Oct 18 10:28:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hppa-tdep.c (restore_pc_queue): Call target_terminal_ours after
	done stepping the inferior.

	* c-exp.y: Remove never-used (because of shift/reduce conflicts)
	rules for pointers to members.
	* Makefile.in: Remove notice about expected shift/reduce conflicts.

	* buildsym.c (finish_block): If we pop the context stack and it is
	not empty, complain () instead of abort ().

Sun Oct 17 19:42:31 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* parse.c, parser-defs.h (follow_types): New function.
	* c-exp.y (ptype : typebase abs_decl): Use it.
	* c-exp.y (ptype): Add support for type qualifiers after the
	typebase.  The typebase rule already has support for them before
	the typebase.
	* Makefile.in: Change the expected number of shift/reduce
	conflicts to 6.  This is OK--the 2 new conflicts are basically the
	same as one of the old ones.

Sun Oct 17 13:04:49 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.10.3.

Sun Oct 17 09:18:57 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior): Clean up comments which were at
	the top of the file, making them more concise and moving them with
	the code (Sorry, Randy, but these stream-of-consciousness comments
	really have to go).  Switch the order of the "&&", which makes
	things clearer and turns out to be an improvement with respect to
	side effects and speed.

Sun Oct 17 02:06:01 1993  Stu Grossman  (grossman at cygnus.com)

	* procfs.c:  Handle process exits more elegantly by trapping on
	entry to _exit.  Also, cleanup procinfo list when process dies of
	it's own accord (as opposed to being killed).

Sat Oct 16 20:47:30 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m88k/xm-dgux.h: Define NO_PTRACE_H.

	* corelow.c (add_to_thread_list): Need a cast to go from PTR to
	asection *.

	* infrun.c: Add comment about signals.

	* fork-child.c (fork_inferior): Remove CREATE_INFERIOR_HOOK again.
	Stu reinstated it (accidently I assume).

Sat Oct 16 15:27:10 1993  Stu Grossman  (grossman at cygnus.com)

	* procfs.c (procfs_wait):  Losing Unixware can't do poll on /proc
	files.  Use PIOCWSTOP instead.
	* corelow.c (add_to_thread_list):  Fix arg to match prototype.

	* procfs.c (procfs_set_sproc_trap):  Don't use this if sproc
	isn't available.
	* (procfs_notice_signals):  Fix prototype.

Fri Oct 15 22:46:07 1993  Stu Grossman  (grossman at cygnus.com)

	* breakpoint.c (breakpoint_thread_match break_command_1):
	Thread-specific breakpoint support.
	* breakpoint.h (struct breakpoint):  Add thread id field.
	* fork-child.c (fork_inferior):  Move call to init_thread_list()
	back a bit so that init_trace_fun can do thread functions.
	* hppa-tdep.c (restore_pc_queue):  Add pid to call to target_wait.
	* hppab-nat.c (child_resume):  Handle default pid.
	* hppah-nat.c (child_resume):  Handle default pid.
	* i386lynx-nat.c (child_wait):  New arg pid.
	* inflow.c (kill_command):  Reset thread list.
	* infptrace.c (child_resume):  Handle default pid.
	* infrun.c:  Thread-specific breakpoint support.
	* inftarg.c (child_wait):  Add pid arg.
	* osfsolib.c (solib_create_inferior_hook):  Add pid to call to
	target_resume.
	* procfs.c:  Multi-thread support.
	* remote-bug.c (bug_wait):  Add pid arg.
	* remote-hms.c (hms_wait):  Add pid arg.
	* remote-mips.c (mips_wait):  Add pid arg.
	* remote-mon.c (monitor_wait):  Add pid arg.
	* remote-nindy.c (nindy_wait):  Add pid arg.
	* remote-sim.c (gdbsim_wait):  Add pid arg.
	* remote-udi.c (udi_wait):  Add pid arg.
	* remote-vx.c (vx_wait):  Add pid arg.
	* remote-z8k.c (sim_wait):  Add pid arg.
	* remote.c (remote_wait):  Add pid arg.
	* solib.c (solib_create_inferior_hook):  Add pid to call to
	target_resume.
	* target.h (struct target_ops):  Add pid arg to to_wait and
	to_notice_signals.
	* thread.c (valid_thread_id):  New func to validate thread #s.
	* (pid_to_thread_id):  New func to do the obvious.
	* thread.h:  Prototypes for above.

	* coff-solib.c (coff_solib_add):  Use nameoffset field to locate
	filename.

Fri Oct 15 21:29:40 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* h8300-tdep.c, h8500-tdep.c: Define sim_load only, but not
	sim_kill, sim_open, or sim_set_args.

	* stack.c (print_stack_frame): Put catch_errors around
	print_frame_info so (for example) error printing source doesn't
	cause auto-displays to get skipped in normal_stop.

	* findvar.c (value_from_register): When preparing to cast a value
	from REGISTER_VIRTUAL_TYPE to type, copy the REGISTER_VIRTUAL_SIZE;
	the old code didn't copy the whole thing.
	* valops.c (value_assign): Add comment.

Fri Oct 15 12:57:30 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (upgrade_type):  Replace bitsize sanity checks and
	complaint by a comment explaining why they were useless. 

Fri Oct 15 14:30:30 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Move comments on bypassing call dummy breakpoint from stack.c
	to breakpoint.h.

Fri Oct 15 11:52:56 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.c (lookup_partial_symtab):  If filename is not found and
	contains no slashes, try again and compare without leading path
	components.
	* symtab.c (lookup_symtab_1):  Replace open coded version of
	lookup_partial_symtab with a function call.

Thu Oct 14 20:34:15 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* fork-child.c (fork_inferior), remote-eb.c (eb_create_inferior),
	remote-mon.c (monitor_create_inferior), remote-nindy.c
	(nindy_create_inferior), remote-st.c (st2000_create_inferior),
	remote-vx.c (vx_create_inferior): Remove CREATE_INFERIOR_HOOK; it
	is replaced by init_trace_fun.
	* config/convex/xm-convex.h, convex-xdep.c: Add comments explaining
	how to do without CREATE_INFERIOR_HOOK for whoever fixes the Convex
	port.

	* Makefile.in: Add Mach files to ALLDEPFILES, etc.
	* m3-nat.c: Clean up more hair--message(), cprocs.
	* configure.in: Recognize Mach targets and hosts.
	* config/ns32k/tm-umax.h: Add some #ifndef's so tm-ns32km3.h can
	include this file.
	* Mach headers in config/*/tm-*.h: Fix includes to match correct
	locations of files.

Thu Oct 14 21:35:55 1993  Rob Savoye  (rob@darkstar.cygnus.com)

	* remote-mon.c (general_open): Set dev_name. Minor tweaking to get
	it working again.
	* config/m68k/tm-monitor.h: Remove floating point register names
	as there aren't any on any of the monitors that use this code.

Wed Oct 13 11:47:23 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* inflow.c: Pass pointer to process group, not process group itself,
	to TIOCSPGRP ioctl.

	* inflow.c (terminal_ours_1): Don't print warning on failure to
	set process group.

	* printcmd.c (printf_command): Instead of using makeva* and
	calling vprintf, just make the appropriate calls to printf.
	* printcmd.c, config/pa/xm-pa.h, config/mips/xm-makeva.h,
	config/alpha/xm-alpha.h, config/m88k/xm-m88k.h: Remove all
	traces of makeva*.  My apologies to everyone (including me!)
	who spent so much time getting it to work on various machines,
	but look at the bright side, at least you won't have to do it
	again in the future.

	* printcmd.c (printf_command): Make a cleanup for val_args (fixes
	a memory leak).

Tue Oct 12 22:54:41 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/xm-mips.h: Remove comment about HAVE_SGTTY vs. usleep.

Tue Oct 12 12:01:29 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* configure.in: only configure gdbserver for native environments

Tue Oct 12 08:59:15 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (read_type): Treat a negative type number at the start
	of a type as a type reference, not as a definition of a type with
	"50=" omitted.  This makes things work on the RS/6000 again (the
	14 Sep 1993 change broke it).

	* inflow.c: Use 0 (standard input) not scb->fd.
	(terminal_ours_1): If printing warning, don't claim it happened in
	terminal_inferior.

	* blockframe.c (get_prev_frame_info): Don't error() if there are no
	frames; just return NULL.

	* xcoffsolib.h, xcoffexec.c: Undo the part of Fred's bfd->abfd
	change which involved structure elements.  It was unnecessary and
	was not consistently done.

	* stabsread.h, stabsread.c, dbxread.c (common_block*, copy_pending):
	Move common block handling from dbxread.c to stabsread.c.
	Use the name from the BCOMM instead of the ECOMM.
	Allocate things on the symbol_obstack.
	* xcoffread.c (process_xcoff_symbol): Process C_BCOMM, C_ECOMM,
	and C_ECOML.  On unrecognized storage classes, go ahead and call
	define_symbol (after the complaint).

	* dbxread.c (process_one_symbol): Don't relocate 'S' symbols by
	the text offset.

Tue Oct 12 12:33:09 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* osfsolib.c (solib_create_inferior_hook):  Reset stop_soon_quietly
	after shared library symbol reading to get rid of warning from
	heuristic_proc_start.

Tue Oct 12 12:01:29 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* remote-sim.c: fix unterminated character string

Tue Oct 12 08:59:15 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c: Fix comment about gcc 2.3.3 stab for long long int.

Mon Oct 11 14:27:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m3-nat.c, config/nm-m3.h: Add a target_ops struct and other
	various things to try to get this to work.

	* symtab.h: Fix comments re headers, sharing blockvectors, etc.

Mon Oct 11 11:46:06 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* config/i960/vxworks960.mt (REMOTE_O): add dcache.o and remote-utils.o

Mon Oct 11 02:48:57 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_partial_symbols):  Do not add undefined
	symbols to the partial symbol table.
	* alpha-tdep.c (init_extra_frame_info):  Remove kludge for gcc,
	gcc has to be compatible with the native tools.
	* alpha-tdep.c (alpha_push_arguments):  Rename NUM_ARG_REGS to
	ALPHA_NUM_ARG_REGS and move its definition to tm-alpha.h.
	* config/alpha/tm-alpha.h (FRAME_ARGS_ADDRESS):  Change it to the
	way the native tools define it, update comment.

Fri Oct  8 15:54:06 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* osfsolib.c, remote-sim.c, remote.c, solib.c, xcoffexec.c, 
	xcoffsolib.h:  Use 'abfd' for bfd variables instead of 'bfd'.
	Sun cc doesn't like variable names that match their typedef'd type.

Fri Oct  8 14:56:21 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* inflow.c: Remove unused includes of sys/param.h and sys/types.h.

	* inflow.c, ser-unix.c, ser-go32.c, ser-tcp.c, serial.h,
	terminal.h, fork-child.c, main.c, utils.c: Move all the process
	group stuff back to inflow.c and terminal.h; that's a better place
	for it and fixes problems with trying to get/set the process group
	of a tty we're doing remote debugging on.
	* terminal.h: Skip the redefines and includes if HAVE_TERMIOS.

	* findvar.c, value.h (symbol_read_needs_frame): New function.
	* c-exp.y, m2-exp.y: Call it instead of having our own switch on
	the symbol's class.
	* valops.c (value_of_variable): Use symbol_read_needs_frame to
	decide whether we care about finding a frame.

Fri Oct  8 02:34:21 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* blockframe.c (get_frame_block):  Do not adjust pc if the frame
	function was interrupted by a signal.

Thu Oct  7 19:20:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/h8300/tm-h8300.h: Don't define sr_get_debug.
	* remote-sim.c: Include remote-utils.h.
	* target.h: Add comment about target_has_execution.

Thu Oct  7 16:14:19 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* h8300-tdep.c (sim_load, sim_kill, sim_open, sim_set_args):
	New functions.
	* infrun.c (normal_stop): Don't try and set the pc in the current
	frame coredump if there isn't one.
	* remote-sim.c (gdbsim_store_register): Don't
	SWAP_TARGET_AND_HOST, sim_store_register takes bytes in raw order.
	(gdbsim_wait): Set status with WSETSTOP.
	* config/h8300/tm-h8300.h (sr_get_debug): Define

Thu Oct  7 12:56:57 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	New Mach stuff:
	* config/i386/i386mach.c: Explain this is for the old (probably
	non-functional and/or obsolete) Mach stuff.
	* m3-nat.c, config/nm-m3.h,
	i386m3-nat.c, mipsm3-nat.c, ns32km3-nat.c,
	config/i386/{i386m3.mh,i386m3.mt,tm-i386m3.h,xm-i386m3.h},
	config/i386/{i386mk.mh,i386mk.mt,tm-i386mk.h,xm-i386mk.h},
	config/mips/{mipsm3.mh,mipsm3.mt,tm-mipsm3.h,xm-mipsm3.h},
	config/ns32k/{ns32km3.mh,ns32km3.mt,tm-ns32km3.h,xm-ns32km3.h}:
	New files.

	* blockframe.c (find_pc_partial_function): If we call
	PSYMTAB_TO_SYMTAB, call target_terminal_ours_for_output first.
	This is needed now that wait_for_inferior passes in endaddr.
	* infrun.c: Move call to target_terminal_inferior from proceed
	to resume.

Thu Oct  7 09:22:04 1993  Stu Grossman  (grossman at cygnus.com)

	* blockframe.c (find_pc_partial_function):  Fix handling for PCs
	beyond the end of the last function in an objfile.
	* coff-solib.c (coff_solib_add):  Use BFD to get fields from .lib
	section.
	* infrun.c (wait_for_inferior):  Modify test for subroutine entry
	to include pc out of bounds of the previous function.
	* remote.c (remote_wait):  Use strtoul for parsing 'N' message.
	Add code to relocate symfile_objfile->sections.

Thu Oct  7 06:22:43 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/sparc/sun4os4.mh: Add comment saying why we don't use
	-lresolv.

Thu Oct  7 09:29:11 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* breakpoint.c, breakpoint.h (breakpoint_init_inferior):  New function
	that clears the `inserted' flag for all breakpoints and deletes
	any breakpoints which should go away between runs of programs.
	* inflow.c (generic_mourn_inferior), infrun.c (init_wait_for_inferior),
	remote-es.c (es1800_load), comments in exec.c and corelow.c:
	Use it instead of mark_breakpoints_out.
	* breakpoint.c (mark_breakpoints_out):  Update comment, tm-rs6000.h
	uses it in a completely different context.
	* breakpoint.c (breakpoint_re_set_one):  Add bp_call_dummy case.

Thu Oct  7 09:29:11 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* Makefile.in (REGEX, REGEX1):  Always use our own version of
	regex.c to be consistent across hosts.
	* source.c (_initialize_source):  Initialize regex to use grep
	style syntax as an approximation to POSIX basic regex syntax.

Wed Oct  6 12:43:47 1993  Jeffrey A Law  (law@snake.cs.utah.edu)
			  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hppa-tdep.c (frame_chain): Rework so that it correctly
	handles boundaries where code with a frame pointer calls code
	without a frame pointer.
	(dig_fp_from_stack): New function.

Wed Oct  6 12:43:47 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (delete_breakpoint): Don't insert a disabled breakpoint.

	* README: Add Alpha notes from Schauer.

Tue Oct  5 15:26:04 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (install, uninstall): Remove $$n.1 stuff; I don't
	understand what it is trying to do, but I suspect it's not doing
	it.

	* config/ns32k/merlin.mh: Add comment about M_INSTALL.
	* config/m88k/{delta88.mh,delta88v4.mh}: Remove M_INSTALL and
	M_UNINSTALL; it tries to install a non-existent file gdb.z.
	* Makefile.in: Remove M_INSTALL stuff; the above were the only uses.

	* stabsread.c (read_range_type): Remove comment which recommends
	distinguishing float from complex by the name.

Tue Oct  5 12:17:40 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
			  Jim Kingdon  (kingdon@cygnus.com)
			  Stu Grossman  (grossman@cygnus.com)

	Changes to support alpha OSF/1 in native mode.
	* alpha-nat.c, alpha-tdep.c, config/alpha/alpha-osf1.mt,
	  config/alpha/nm-alpha.h, config/alpha/tm-alpha.h, osfsolib.c:
	New files.
	* Makefile.in:  Add new files and dependencies.
	* configure.in:  Add alpha target.
	* config/alpha/alpha-osf1.mh (NATDEPFILES):  Add osfsolib.o
	* config/alpha/alpha-osf1.mh (MH_CFLAGS):  Remove, we can handle
	shared libraries now.
	* config/alpha/xm-alpha.h:  Cleanup, get MAKEVA_* defines right.

	* defs.h (CORE_ADDR):  Make its type overridable via CORE_ADDR_TYPE,
	provide `unsigned int' default.
	* breakpoint.c (breakpoint_auto_delete):  Delete only if we really
	stopped for the breakpoint.
	* stabsread.c, stabsread.h (define_symbol):  Change valu parameter
	to a CORE_ADDR.
	* stabsread.c (read_range_type):  Handle the case where the lower
	bound overflows and the upper doesn't and the range is legal.
	* infrun.c (resume):  Do not step a breakpoint instruction if
	CANNOT_STEP_BREAKPOINT is defined.

	* inferior.h (CALL_DUMMY_LOCATION):  New variant AT_ENTRY_POINT.
	Now that we have the bp_call_dummy breakpoint the call dummy code
	is no longer needed. PUSH_DUMMY_FRAME, PUSH_ARGUMENTS and
	FIX_CALL_DUMMY can be used to set up everything for the dummy.
	The breakpoint for the dummy is set at the entry point and thats it.
	* blockframe.c (inside_entry_file, inside_entry_func):  Do not stop
	backtraces if pc is in the call dummy at the entry point.
	* infcmd.c (run_stack_dummy):  Handle AT_ENTRY_POINT case. Use
	the expected breakpoint pc when setting up the frame for
	set_momentary_breakpoint.
	* symfile.c (entry_point_address):  New function for AT_ENTRY_POINT
	support.
	* valops.c (call_function_by_hand):  Handle AT_ENTRY_POINT case.

Tue Oct  5 11:37:02 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Recognize hppa*-*-hiux* (currently synonym for hpux).
	Change other hppa host entries to use -*- not -hp-.

Mon Oct  4 19:16:14 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* i386-nlmstub.c: New file; debugging stub for i386 NetWare.  Must
	be compiled with NetWare header files and turned into an NLM with
	nlmconv.

Mon Oct  4 11:02:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* minsyms.c (lookup_minimal_symbol_by_pc): Don't use mst_abs symbols.

	* dbxread.c (process_one_symbol): Make n_opt_found static.

	* Rename i386lynx-tdep.c to i386ly-tdep.c for 14 character file names.
	* Makefile.in, config/i386/i386lynx.mt: Change accordingly.

	* values.c (record_latest_value): Fetch lazy values and set VALUE_LVAL
	to not_lval.

Sun Oct  3 15:54:51 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* objfiles.h (objfile): New slot sym_stab_info, use by most
	stab-reading formats.
	* gdb-stabs.h (DBX_SYMFILE_INFO): Access sym_stab_info instead of
	sym_private.
	* coffread.c (coff_symfile_init): Alloc struct for sym_stab_info.
	* dbxread.c, elfread.c, paread.c: Change sym_private references to
	sym_stab_info references.

Sat Oct  2 19:28:35 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mipsread.c, objfiles.c, utils.c: Use PTR not void *.  RISC/OS
	4.02 lacks void *.
	* elfread.c: Use void * not PTR inside PARAMS.

	* config/mips/news-mips.mh: Remove coredep.o; mips-nat.o does it.
	* config/mips/news-mips.mh: Define NAT_FILE not NM_FILE.
	* config/mips/nm-news-mips.h: Include mips/nm-mips.h not nm-mips.h.

Sat Oct  2 16:05:22 1993  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in, coff-solib.c, coff-solib.h, i386lynx.mt,
	tm-i386lynx.h:  Add support for SVR3 COFF shared libraries.

Sat Oct  2 15:50:41 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m88k-nat.c (store_inferior_registers): When writing all registers,
	don't try to write EXIP_REGNUM or ENIP_REGNUM (not needed for this
	case, and they cause trouble).

	* TODO: Don't suggest doing fast watchpoints by stepping a line
	at a time.  That would be really hairy and still not fast enough.
	Do suggest debug registers and page table diddling.

Fri Oct  1 14:54:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (do_examine): Make meaning of 'h', 'w', and 'g' not
	depend on builtin_type_*.  Instead, it is always 2, 4, and 8 bytes
	like the documentation says.
	* printcmd.c (decode_format) [CC_HAS_LONG_LONG]: Remove 'l' as
	synonym for 'g'.  This was never documented, it shouldn't depend on
	CC_HAS_LONG_LONG, and I don't see what's wrong with 'g'.

Fri Oct  1 10:06:35 1993  Kung Hsu  (kung@cirdan.cygnus.com)

	* symtab.c: fix a bug in testsuite (virtfunc.exp)

Thu Sep 30 11:30:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m88k-nat.c (fill_gregset): Fix typo (R_SFIP -> R_FIP).

	* c-typeprint.c (c_type_print_base, TYPE_FN_FIELD_STUB code):
	If demangled name lacks a colon, don't dump core.

	* blockframe.c (find_pc_partial_function): If pst->readin is
	set, don't try to get symbols from pst.

	* inflow.c (generic_mourn_inferior): Call reinit_frame_cache
	instead	of doing it ourself.
	* blockframe.c (reinit_frame_cache): Use code which was in
	generic_mourn_inferior so we can use this function even when
	we have switched targets.
	* corelow.c (core_detach): Call reinit_frame_cache.
	* target.c (target_detach): Don't call generic_mourn_inferior
	(revert yesterday's change, now handled by core_detach).
	* objfiles.c (free_objfile): Detach any core file if we call
	SOLIB_CLEAR.  #include target.h.

	* fork-child.c (fork_inferior): Don't call target_terminal_init
	and target_terminal_inferior until we are sure that the inferior
	has called gdb_setpgid.  This fixes PR 2900 (Schauer tracked it
	down and was able to reliably reproduce it by putting a sleep()
	before the gdb_setpgid()).

Thu Sep 30 12:00:49 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* c-exp.y, m2-exp.y:  Change type of address for msymbol to
	builtin_type_long.
	* infptrace.c (fetch_register, store_inferior_register,
	child_xfer_memory):  Use PTRACE_XFER_TYPE for the type of ptrace
	transfers. Provide an `int' default for PTRACE_XFER_TYPE.

Thu Sep 30 11:30:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* defs.h (TARGET_*_BIT): Don't use host information (sizeof) in
	picking defaults.

	* cp-valprint.c (cp_is_vtbl_ptr_type): Continue to accept old form.

Thu Sep 30 11:25:55 1993  Kung Hsu  (kung@cygnus.com)

	* cp-valprint.c (cp_is_vtbl_ptr_type):
	change vtable field name to __vtbl (pr2695).

	* symtab.c (gdb_mangle_name): fix a bug, to get mangled name right.

Wed Sep 29 18:34:22 1993  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Add deps for i386lynx-nat.o and i386lynx-tdep.o to
	keep non-gnu makes happy.

Wed Sep 29 17:20:54 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (read_hpux_symtab): When a K_END is found for a
	K_MODULE, clear the have_module and have_name flags.

Wed Sep 29 10:52:19 1993  Kung Hsu  (kung@cygnus.com)

	* c-valprint.c: to fix virtual table print bug (pr2695).

Wed Sep 29 10:52:19 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* target.c (target_detach): Call generic_mourn_inferior.
	* inflow.c (generic_mourn_inferior): Call flush_cached_frames.

Tue Sep 28 23:08:59 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c, coffread.c, elfread.c: A few changes to comments.

Tue Sep 28 18:39:37 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* configure.in: Rename ...-lynx* to ...-lynxos*.
	Add m68*-*-lynxos* configuration.
	* dbxread.c (coffstab_build_psymtabs): New function,
	interfaces coffread.c to dbxread functions.
	* coffread.c (coff_symfile_info):  Expand to include
	dbx_symfile_info slots.
	(coff_symfile_init): Init coff_symfile_info struct.
	(coff_locate_sections): New functions, finds the stab and stabstr
	sections.
	(coff_symfile_read): Call coffstab_build_psymtabs if a stab
	section is present.
	(coff_section_offsets): Replace fake version with real offsets.

Tue Sep 28 18:00:50 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infcmd.c (run_stack_dummy): Set the frame in the bp_call_dummy
	breakpoint.

Tue Sep 28 17:53:26 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/nm-sysv4.h: Include solib.h.  Define SVR4_SHARED_LIBS.
	* config/tm-sysv4.h: Don't include solib.h.
	* config/xm-sysv4.h: Don't define SVR4_SHARED_LIBS.
	* config/i386/i386v4.mt (TDEPFILES): Move solib.o from here...
	* config/i386/i386v4.mh (NATDEPFILES): ...to here.
	* config/i386/nm-i386v4.h: Include nm-sysv4.h.
	* config/m68k/amix.mt (TDEPFILES): Move solib.o from here...
	* config/m68k/amix.mh (NATDEPFILES): ...to here.

Tue Sep 28 09:45:38 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symmisc.c (print_symbol): Use %02x not %2x for LOC_CONST_BYTES.

	Clean up problems with targets and hosts that have 64 bit longs
	and pointers and 32 bit ints.
	* breakpoint.c, buildsym.c, c-lang.c, c-valprint.c, ch-lang.c,
	ch-valprint.c, core.c, cp-valprint.c, dbxread.c, exec.c,
	expprint.c, gdbtypes.c, infcmd.c, language.c, language.h,
	m2-lang.c, maint.c, mips-tdep.c, mipsread.c, partial-stab.h,
	printcmd.c, remote-vx.c, solib.c, source.c, stack.c, symfile.c,
	symmisc.c, symtab.c, valops.c, valprint.c, xcoffexec.c:
	Change all printf formats from %x to %lx if outputting an address.
	Change la_*_format to use long format.
	local_hex_string, local_hex_string_custom now take an unsigned long
	argument, change all callers.
	* coffread.c (read_coff_symtab):  Remove superfluous cast for
	complaint output.
	* dbxread.c (end_psymtab):  Cast MSYMBOL_INFO to long, not int.
	* findvar.c, value.h (write_register):  Change val to LONGEST.
	* gdbtypes.h (struct type):  Change `bitsize' to long as
	TYPE_FIELD_STATIC_PHYSNAME uses this field as a pointer.
	* inferior.h (struct inferior_status):  Change type of stop_pc to
	CORE_ADDR.
	* language.h (local_octal_string, local_octal_string_custom):
	Remove prototype, the functions are neither defined nor used.
	* mipsread.c (parse_symbol):  Use temporary variable for bitsize as
	f->bitsize is a long now.
	* objfiles.c (add_to_objfile_sections, build_objfile_section_table):
	Use unsigned long casts instead of int for abusing sections_end
	pointer as integer.
	* stack.c (parse_frame_specification):  Change type of `args' to
	CORE_ADDR for SETUP_ARBITRARY_FRAME.

	* printcmd.c (make_vasize):  Allow redefinition via MAKEVA_SIZE.
	* mipsread.c (parse_type):  Alpha cc now supports the t->continued
	bit, update algorithm to match the way the compiler uses it.

Tue Sep 28 12:05:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c (fprintfi_filtered): Fix comments.

Mon Sep 27 18:10:08 1993  Stu Grossman  (grossman at cygnus.com)

	* coffread.c (read_coff_symtab):  Don't call getfilename if there
	are no auxents.

Mon Sep 27 10:22:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (find_pc_line): Fix comments.

	* remote-udi.c (udi_mourn): Don't pop target.

Fri Sep 24 17:25:41 1993  Stu Grossman  (grossman at cygnus.com)

	* corelow.c:  Add multi thread/process support for core files with
	.reg/XXX pseudo-sections.
	* i386lynx-nat.c thread.h thread.c:  Remove unnecessary core file
	support.

Thu Sep 23 10:49:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-udi.c (download): Skip zero length sections.

	* valops.c (search_struct_method, value_struct_elt):
	Use (value)-1, not -1, for error.

	* infcmd.c (step_1), infrun.c (wait_for_inferior): Add comments
	about SHIFT_INST_REGS.

	* exec.c (exec_file_command): Set text_end based on all code readonly
	sections, not just ".text".

	* defs.h, infcmd.c, config/z8k/tm-z8k.h, config/m88k/tm-m88k.h,
	config/sh/tm-sh.h, config/h8300/tm-h8300.h, config/h8500/tm-h8500.h,
	z8k-tdep.c: Remove all references to ADDR_BITS_SET.
	* config/m88k/tm-m88k.h: Define TARGET_WRITE_PC.

	* config/m88k/tm-m88k.h, m88k-tdep.c: Add call function stuff.

Thu Sep 23 00:13:06 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/tm-mips.h (STORE_STRUCT_RETURN):  Define as noop as
	the pushing of the struct return address is already handled in
	mips_push_arguments.
	* mips-tdep.c (reinit_frame_cache_sfunc):  Fix typo in prototype
	declaration.
	* mipsread.c (parse_symbol, parse_type, upgrade_type):  Add more
	sanity checks for corrupt symbol entries to avoid core dumps
	reported by benson@odi.com. Obviously Ultrix 4.3A cc now has
	the same problems as the OSF/1 alpha cc.
	* mipsread.c (parse_lines):  Iterate over the range of the compressed
	line number entries, the old iteration sometimes failed to stop
	and wrote past the end of the LINETABLE. Add sanity check to avoid
	the same problem in case the line number info is corrupt.
	* mipsread.c (parse_procedure):  Adjust pdr for alpha __sigtramp.
	* mipsread.c (parse_external, parse_partial_symbols):  Ignore stNil
	symbols that are produced for statics in .o files and stLocal symbols
	that are produced for every section in OSF/1 dynamically linked
	 executables.
	* mipsread.c (psymtab_to_symtab_1):  Put out `undefined symbols'
	warning only under `verbose on' as there are many undefined symbols
	in a dynamically linked executable.

Wed Sep 22 10:28:06 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i960/nindy960.mt: Don't define REMOTE_O; REMOTE_O was
	intended only for VxWorks.  Remove dcache.o from TDEPFILES now
	that we pick it up from the default REMOTE_O.

	* breakpoint.c (bpstat_what): Initialize retval.call_dummy and
	retval.step_resume.

	* mips-tdep.c (mips_frame_chain): If frame size zero, return zero.
	* rs6000-tdep.c: Add comment about framelessness.

	* remote-nindy.c: Declare ninMemGet and ninMemPut.

Wed Sep 22 08:02:57 1993  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Add i386lynx-tdep to the right places.
	(TARDIRS):  Add gdbserver.

	* exec.c (print_section_info):  Print entry point.
	* i386lynx-nat.c (i386lynx_saved_pc_after_call):  Move into
	i386lynx-tdep.c.  Add core file support.
	* i386lynx-tdep.c:  New module for Lynx/386 target dependant code.
	* maint.c:  Add `maint info sections' command to print info about all
	sections that BFD knows about for exec and core files.
	* sparc-tdep.c (sparc_push_dummy_frame):  Update stack pointer
	before putting frame on the stack.  Consolidate writes to reduce
	traffic for remote debugging.
	* config/i386/i386lynx.mh (NATDEPFILES):  Remove exec.o.
	* config/i386/i386lynx.mt (TDEPFILES):  Add exec.o, i386lynx-tdep.o.
	* config/i386/nm-i386lynx.h:  Add target_pid_to_str().
	* config/i386/tm-i386lynx.h:  Remove target_pid_to_str().
	* sparclite/Makefile.in:  Add deps to keep Sun make happy.

Tue Sep 21 17:48:14 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.h, breakpoint.c (bpstat_stop_status): Add new argument
	not_a_breakpoint.
	* infrun.c (wait_for_inferior): Pass it.  Also consolidate the
	test of whether we are stepping into a CURRENTLY_STEPPING macro.

Tue Sep 21 17:22:34 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* breakpoint.c (bpstat_stop_status),
	  infcmd.c (step_1),
	  infrun.c (wait_for_inferior): collapse SHIFT_INST_REGS ifdef
	  and insert macro.

	* m88k-tdep.c: include ieee-float.h.  new global target_is_m88110.
	  new const struct ext_format_m88110 for float format.
	  (pic_prologue_code): add braces.
	  (next_insn): remove unused variable buf.
	  (frame_find_saved_regs): remove unused variables next_addr,
	  saved_regs, regnum.
	  (frame_locals_address): remove unused variables frame, ap.
	  (frame_args_address): remove unused variables frame, ap.
	  (push_parameters): add some breaks and a default case.

	* remote-bug.c: remove redundant includes of value.h, target.h,
	  serial.h.
	  (bug_open): corrected typo, sr_multi_scan -> gr_multi_scan.
	  (bug_fetch_register): special case sfip register for m88110.
	  remove flag bit masking of pc registers.  This should be handled
	  by the ADDR_BITS_* macros.
	  (bug_store_register): special case sfip register for m88110.
	  Corrected sprint format for extended registers.

	* config/m88k/tm-m88k.h: white space and comment changes.  include
	  ieee-float.h. expanded to cope with m88110 extended registers.
	  (R0_REGNUM, XFP_REGNUM, X0_REGNUM): new macros.
	  (SHIFT_INST_REGS): becomes a real macro.

Tue Sep 21 17:48:14 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (breakpoint_1): Support bp_call_dummy.

Tue Sep 21 17:06:19 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* elfread.c (record_minimal_symbol_and_info): Guess the section to
	use from the type.
	* objfiles.c: Include gdb-stabs.h for SECT_* macros.
	(objfile_relocate): Relocate textlow and texthigh in psymtabs.
	Relocate partial symbols.  Check that minimal SYMBOL_SECTION is
	nonnegative before using it.
	* symtab.h: Adjust section field comment.

	* remote.c (interrupt_query): New function.
	(remote_interrupt_twice): Call interrupt_query.
	(putpkt, getpkt): If quit_flag is set, call interrupt_query.
	(remote_wait): Don't bother with objfile_relocate if the addresses
	haven't changed.
	(remote_fetch_registers): If we see a packet that doesn't start
	with a hex character, fetch a new one.

Tue Sep 21 11:44:00 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote.c, remote-utils.c: Use SERIAL_FLUSH_INPUT after opening it.

	* printcmd.c (print_scalar_formatted): When truncating value we are
	going to print as unsigned, handle it generally for any length
	less than sizeof (LONGEST), rather than special-casing sizeof (char),
	sizeof (short), and sizeof (long).  Clarify comment on what this
	is for.

	* symfile.c (deduce_language_from_filename): Accept .cxx for C++.
	* buildsym.c (start_subfile): Use deduce_language_from_filename
	rather than checking for .C or .cc ourself.

Mon Sep 20 14:53:11 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* defs.h: Declare argument of re_comp as const char *.

	* remote.c, remote-mips.c: Use sr_get_debug not remote_debug.

	* README: Say using bfd from another release doesn't generally work.

Sat Sep 18 10:13:18 1993  Jim Kingdon  (kingdon@poseidon.cygnus.com)

	* mipsread.c (parse_type): Don't complain() if we guessed struct
	and it was a union, or vice versa.

	* defs.h (make_cleanup): Change PTR to void * when inside PARAMS.

	Some of the following is in #ifdef CALL_DUMMY_BREAKPOINT_OFFSET.
	* breakpoint.h (enum bptype): Add bp_call_dummy.
	(struct bpstat_what): Add call_dummy field.
	* infrun.c (wait_for_inferior): Deal with it.
	* breakpoint.c (bpstat_what): Deal with call dummy breakpoint.
	* infcmd.c (run_stack_dummy): Set the call dummy breakpoint.
	* config/sparc/tm-sparc.h: Define CALL_DUMMY_BREAKPOINT_OFFSET.

	* remote-sim.h: New file.
	* remote-sim.c: Add remote debug feature.  Rename stuff to distinguish
	interface to simulator from gdb-specific stuff.  Other changes.
	* remote-sp64sim.c: Renamed to remote-sim.c.
	Use sr_get_debug instead of our own sim_verbose/simif_snoop.
	Use gnutarget in call to bfd_openr.
	Rename simif_* to gdbsim_*.
	* config/sparc/sp64sim.mt: Change remote-sp64sim.c to remote-sim.c.

Fri Sep 17 04:41:17 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* findvar.c (extract_signed_integer):  Cast *p to LONGEST before doing
	the xor and subtract.  Otherwise it will not sign extend if the type
	of LONGEST is larger than int.
	* cp-valprint.c (cp_print_class_method):  Inhibit core dump if
	domain is an undefined cross reference.
	* valops.c (call_function_by_hand):  Set real_pc to correct
	value if CALL_DUMMY_LOCATION != ON_STACK.

Thu Sep 16 20:37:06 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* config/a29k/tm-a29k.h (FRAME_CHAIN): If rsize is zero, return zero.

Thu Sep 16 13:16:22 1993  Stu Grossman  (grossman at cygnus.com)

	* infrun.c (wait_for_inferior):  Allow user to single step within
	a stack dummy.

Thu Sep 16 12:34:01 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* dbxread.c (copy_pending): Deal with END NULL.
	(process_one_symbol): Add comments about what common_block NULL means.

Wed Sep 15 14:50:26 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* remote-udi.c, remote-adapt.c, remote-mm.c: Move processor_type
	to tm-a29k.h and a29k-tdep.c and make it an enum.
	* a29k-tdep.c (a29k_get_processor_type): New function.  Fix many
	aspects of how we detected the processor type.
	* remote-udi.c, remote-adapt.c, remote-mm.c (*_open): Call it
	rather than figuring out the type ourselves.

Thu Sep 16 12:12:59 1993  Stu Grossman  (grossman at cygnus.com)

	* sparc-stub.c (_trap_low):  Do restore/save sequence after
	setting sp to ensure that we load the previous window from the
	right place on the stack.

Thu Sep 16 00:36:32 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c:  Many changes for alpha ecoff format:
	Correct sizeof(int) == sizeof(long) assumptions.
	Replace stParsed hack by putting the parsed types on the pending chain.
	Replace mips specific ecoff mapping by ECOFF_REG_TO_REGNUM macro,
	provide default for cross debugging.
	Swapping the symbol back is no longer needed as the symbol is not
	modified anymore.
	Add new alpha basic types, handle btTypedef, handle stStaticProc
	external symbols .
	Update and clean up cross_ref for alpha cc cross ref variations.
	Allocate types on the type_obstack to inhibit storage leaks.
	* config/mips/tm-mips.h (ECOFF_REG_TO_REGNUM):  Define.
	* gdbtypes.c (recursive_dump_type):  Dump TYPE_TAG_NAME if it is set.

Tue Sep 14 09:12:17 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* stabsread.c (read_type): Process "s" (size) type attribute.
	If type is defined to another type, copy the type.

Tue Sep 14 18:37:17 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* config/i386/i386v4.mh (NATDEPFILES): Move exec.o from here...
	* config/i386/i386v4.mt (TDEPFILES): ...to here.

Tue Sep 14 12:21:49 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in (remote_utils_h): add serial.h and target.h.
	  (main.o, remote-es.o, remote-nindy.o, remote.o): remove target.h
	  (already in remote_utils_h).
	  (remote-utils.o): new rule.

	* remote-utils.h: include serial.h.

	* serial.h: ifdef protect from multiple inclusion.

	* remote.c, remote-nindy.c, remote-mon.c, remote-es.c: include
	  remote-utils.h.

	* remote.c (remote_open), remote-nindy.c (nindy_open,
	  nindy_files_info), remote-mon.c (general_open), remote-es.c
	  (es1800_open): use remote-utils facilities for baud rate.

Tue Sep 14 09:12:17 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* paread.c, coffread.c, elfread.c, dwarfread.c:
	Include <time.h> and <sys/types.h> before libbfd.h.

	* paread.c: Define BYTES_IN_WORD before including aout/aout64.h.

	* Makefile.in (a29k-tdep.o): Depend on $(defs_h).
	* config/a29k/tm-a29k.h (SAVED_PC_AFTER_CALL): Use gr122 not lr0
	if this	is a transparent procedure.

Mon Sep 13 16:06:43 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* remote.c: Define remote_debug to 0 and #if 0 baud_rate.  Temporary
	hack so this file compiles again.

	* remote-utils.c (gr_multi_scan): Cast return value from alloca.
	(gr_multi_scan): #if 0 never-reached return(-1).

	* remote-udi.c (udi_wait): Return inferior_pid not 0.

Mon Sep 13 14:14:35 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	Collect some remote things into remote-utils.
	* remote-utils.[ch]: new files of functions collected from several
	  different remote targets.
	* Makefile.in (REMOTE_O): add remote-utils.o.
	  (dcache_h, remote_utils_h): new macros.
	  (HFILES): add $(remote_utils_h).
	  (ALLDEPFILES): add $(remote_utils_h).
	  (dcache.o): new rule.
	  (main.o, remote-bug.o): also depend on $(remote_utils_h).
	* target.h (remote_debug): extern moved to remote-utils.h.
	* target.c (find_default_run_target, find_core_target): initialize
	  runable.
	  (remote_debug): moved to remote-utils.c.
	  (_initialize_targets): move declaration of user variable
	  remotedebug to remote-utils.c.
	* remote-bug.c: include remote-utils.h rather than dcache.h.
	  (bug_close, bug_write, bug_write_cr, desc, bug_dcache, timeout,
	  dev_name, check_open, is_open, readchar, readchar_nofail,
	  pollchar, expect, expect_prompt, get_hex_digit, get_hex_byte,
	  get_hex_word, bug_kill, bug_detach, bug_create_inferior,
	  multi-scan, bug_prepare_to_store, bug_fetch_word,
	  bug_store_word, bug_files_info, bug_mourn, bug_com, bug_device,
	  bug_speed): removed and replaced with facilities from
	  remote-utils.[ch].
	  (bug_read_inferior_memory): renamed to bug_read_memory.
	  (bug_write_inferior_memory): renamed to bug_write_memory.
	  (bug_xfer_inferior_memory): renamed to bug_xfer_memory.
	  (get_word): comment out this unused function for now.
	  (bug_settings, cpu_check_strings): new statics.
	  (bug_open): rewritten to use gr_open.
	  (_initialize_remote_bug): remove declarations of commands bug,
	  device, speed.
	* main.c: include remote-utils.h.
	  (baud_rate): removed to remote-utils.c.
	  (main): handle baud rate settings using new facilities from
	  remote-utils.
	* defs.h (baud_rate): removed extern.

	m88110 support via bug-197 monitor.
	* remote-bug.c (get_reg_name, bug_fetch_register,
	  bug_store_register): added m88110 extended register support.
	  (wait_strings): added bug-197 prompt.
	  (bug_wait): cope with bug-197 prompt.
	  (start_load): cope with either bug-197 or bug-187 prompt.

Mon Sep 13 12:53:09 1993  Jim Kingdon  (kingdon@cirdan.cygnus.com)

	* inferior.h, infrun.c, thread.c, infcmd.c: Remove all uses of
	pc_changed.  If it was ever set to a non-zero value, it was before
	GDB 2.8.  It doesn't seem to have any useful function.

	* defs.h: Don't define NORETURN (see comment).

Sat Sep 11 10:46:09 1993  Jim Kingdon  (kingdon@poseidon.cygnus.com)

	* m88k-nat.c (fill_gregset): Set r31 and sfip.

Thu Sep  9 10:18:29 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-udi.c (udi_wait, case UDIStdinNeeded): Use a loop calling
	getchar() (terminated only on '\n') instead of scanf.  Send the
	'\n' which terminates it to the remote system.

	More gcc lint:
	* exec.c (ignore): Return 0.
	* stack.c (return_command): Fetch lazy value directly, not via
	VALUE_CONTENTS, to avoid "value computed is not used".
	* inflow.c (new_tty): Move osigttou inside #if.

	* remote.c (remote_fetch_registers): If remote reply is short, just
	note that fact and keep going (reading extra registers as all bits 0).
	(remote_store_registers): Send number of registers that were found
	by remote_fetch_registers.
	* m68k-tdep.c, config/m68k/tm-m68k.h, config/m68k/tm-*.h: Remove
	HAVE_68881.  Define CANNOT_STORE_REGISTER if ptrace() can't write
	floating registers.
	* config/m68k/{tm-m68k-nofp.h,m68k-nofp.mt,tm-m68k-fp.h,m68k-fp.mt}:
	Remove, replaced by {tm-m68k-em.h,m68k-em.mt}.
	* Makefile.in, configure.in: Change accordingly.

Thu Sep  9 04:59:03 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (cross_ref):  Allow SGI extended symbol types as cross
	reference targets.
	* symmisc.c (print_symbol):  Use TYPE_TAG_NAME not TYPE_NAME to avoid
	printing of identities.

Wed Sep  8 19:18:27 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (breakpoint_1): Deal with step resume breakpoint.

Wed Sep  8 13:01:10 1993  K. Richard Pixley  (rich@cygnus.com)

	Gcc lint.
	* config/m88k/tm-m88k.h (frame_find_saved_regs): prototype.
	* config/h8300/tm-h8300.h (NUM_REGS): rewrite to avoid nested comment.
	* blockframe.c (get_prev_frame_info): initialize address.
	* breakpoint.c (bpstat_copy): initialize retval.
	  (bpstat_stop_status): initialize value_is_zero.
	  (bpstat_what): initialize bs_class.
	  (breakpoint_1, mention): add do-nothing case for bp_step_resume.
	  (break_command_1): initialize cond_end, addr_end, &
	  canonical_strings_chain.
	  (enable_breakpoint): initialize save_selected_frame.
	* buildsym.c (end_symtab): initialize symtab & linetablesize.
	* c-exp.y (parse_number): initialize i.
	* c-typeprint.c (c_type_print_varspec_prefix): include
	  TYPE_CODE_BITSTRING in switch statements and do nothing.
	* c-valprint.c (c_val_print): removed unused variable c.
	* ch-valprint.c (chill_val_print): removed unused variable eltlen.
	* cp-valprint.c (cp_print_class_method): initialize f & j.
	* eval.c (evaluate_subexp): initialize pc2, arg1, arg2.
	* expprint.c (print_subexp): initialize myprec, assoc, & tempstr.
	* findvar.c (value_from_register): initialize first_addr.
	* gdbtypes.c (lookup_struct_elt_type): localize use of temporary
	  variable typename.
	* infcmd.c (run_stack_dummy): return zero rather than simple
	  return.
	* infrun.c (wait_for_inferior): initialize stop_sp, prologue_pc.
	  remove symtab, appears unused.
	  (restore_selected_frame): return 1.
	* mipsread.c (psymtab_to_symtab_1): initialize first_off.
	  (fixup_sigtramp): initialize b0.
	* printcmd.c (do_examine): initialize val_type.
	  (print_frame_args): initialize b.
	* ser-tcp.c (tcp_restore): comment out declaration.  Appears
	  unused.
	* ser-unix.c (hardwire_restore): comment out declaration.  Appears
	  unused.
	  (hardwire_send_break): moved variable status into ifdef
	  HAVE_SGTTY.
	  (wait_for): moved variable numfds into ifdef HAVE_SGTTY.
	* serial.h: comment change only.
	* stabsread.c (rs6000_builtin_type): initialize rettype.
	  (read_range_type): initialize nbits.
	* stack.c (print_frame_info): remove unused variable numargs.
	  (parse_frame_specification): remove unused variables arg1, arg2,
	  arg3.
	  (return_command): initialize return_value.
	* symfile.c (cashier_psymtab): initialize pprev.
	* symtab.c (find_pc_psymbol): initialize best.
	  (lookup_symbol): initialize s.
	  (make_symbol_completion_list): initialize quote_pos.
	* thread.c: include command.h.
	  (thread_info): static declaration removed; unused.
	  (info_threads_command): fix == vs = typo.
	* typeprint.c (whatis_exp): initialize old_chain.
	* valprint.c (val_print_string): remove unused variable
	  first_addr_err.  Initialize old_chain.
	  (_initialize_valprint): white space comment change.
	* values.c (show_values): rewrite if statement to avoid empty
	  body.
	  (vb_match): remove unused variable fieldtype_target_type.

Wed Sep  8 10:21:33 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (mipsread.o): Depend on $(bfd_h).

Tue Sep  7 13:06:44 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/Makefile.in (TAGS): config files are in
	$(srcdir)/../config, not $(srcdir)/config.

	* config/pa/tm-hppa.h: Declare target_read_pc and target_write_pc.
	(STORE_RETURN_VALUE): Pass the correct offset of the return
	register to write_register_bytes.
	* hppa-tdep.c: Use target_write_pc if PCOQ_TAIL_REGNUM was not saved.

Tue Sep  7 14:30:34 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* remote.c (remote_wait): Don't call error.  Instead, call warning
	inside a loop.  User can ^C to get out.

	* config/m68k/tm-m68k.h (FIX_CALL_DUMMY): Changed name of swapping
	routine to match BFD name change.
	* config/z8k/tm-z8k.h (FIX_CALL_DUMMY): Likewise.

Mon Sep  6 15:01:57 1993  Jeffrey Wheat  (cassidy@cygnus.com)

	* elfread.c: change elf32_symbol_type to elf_symbol_type

Mon Sep  6 15:43:25 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* remote.c (remote_wait): Added 'W' and 'N' responses.

Fri Sep  3 08:57:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c, utils.c: Add comments about immediate_quit.

	* elfread.c (elf_symtab_read): Don't add symbols starting with ".L"
	to minimal symbols.

	* target.c (pop_target): Don't try to deal with the stack becoming
	empty.  Shouldn't happen and the code that tried was broken.

	* dcache.c: Cast return value from xmalloc.

	* remote.c: Move setting of immediate_quit from remote_open to
	remote_start_dummy and set it back to zero when done.

Thu Sep  2 00:07:36 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* m88k-tdep.c: Remove a bunch of unused #includes.

	* language.h: Add comment about current_language.

	* mips-tdep.c (_initialize_mips_tdep): Change heuristic-fence-post
	from var_uinteger to var_zinteger.

	* configure.in: Fix typo (delta88r4 -> delta88v4).

	* config/m88k/xm-delta88.h: Don't include sys/siginfo.h.  It was
	to make this work on SVR4 before SVR4 had its own configuration,
	and it breaks SVR3.

	* config/m88k/tm-delta88v4.h: Define FRAME_CHAIN_VALID_ALTERNATE.

	* config/m88k/delta88v4.h (NATDEPFILES): Remove infptrace.o inftarg.o.

	* config/m88k/xm-dgux.h: Renamed from config/m88k/xm-m88k.h.
	* config/m88k/m88k.mh: Use xm-dgux.h.
	* config/m88k/xm-m88k.h: New file, with HOST_BYTE_ORDER,
	MAKEVA_END and MAKEVA_ARG.
	* config/m88k/xm-*.h: Include m88k/xm-m88k.h.
	* printcmd.c: Remove __INT_VARARGS_H code; now in xm-m88k.h.

Wed Sep  1 19:31:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-udi.c (udi_wait): Call `warning' not `error'.

	* symtab.c (COMPLETION_LIST_ADD_SYMBOL): If the symbol has a
	demangling, don't put the mangled form in the completion list.

	* symtab.c, symfile.c, c-exp.y, ch-exp.y, m2-exp.y, buildsym.c,
	symfile.h, stabsread.c, minsyms.c, solib.c, nlmread.c, dwarfread.c
	partial-stab.h, symmisc.c, gdbtypes.c: Lint.  Remove (or put
	inside #if) unused variables and labels.  Fix unclosed comment.
	Deal with enumeration values unhandled in switch statements.  Make
	sure non-void functions return values.  Include appropriate
	headers.
	* dbxread.c (elfstab_build_psymtabs): Don't check for unsigned
	value < 0.

Wed Sep  1 14:36:00 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* i960-tdep.c, ns32k-pinsn.c, remote-adapt.c, xcoffread.c:
	  index -> strchr.

Wed Sep  1 11:35:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote.c: Add comment explaining why dcache is disabled.
	(remote_fetch_word, remote_store_word): Make static and #if 0.
	They are not called from anywhere.

Wed Sep  1 14:41:28 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* arm-tdep.c, convex-tdep.c, convex-xdep.c, dbxread.c,
	  h8300-tdep.c, h8500-tdep.c, i960-pinsn.c, i960-tdep.c,
	  infptrace.c, m88k-tdep.c, mips-tdep.c, regex.c, remote-vx.c,
	  rs6000-tdep.c, xcoffexec.c, xcoffread.c, z8k-tdep.c,
	  config/arm/tm-arm.h, config/convex/tm-convex.h,
	  config/gould/tm-np1.h, config/gould/tm-pn.h,
	  config/m68k/tm-isi.h, config/ns32k/tm-umax.h,
	  config/pa/tm-hppa.h, config/pyr/tm-pyr.h,
	  config/rs6000/tm-rs6000.h, config/tahoe/tm-tahoe.h,
	  config/vax/tm-vax.h:  bzero -> memset.

	* regex.c: bcmp -> memcmp.

Wed Sep  1 11:35:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (find_pc_line, find_line_common),
	symtab.h (struct linetable), xcoffread.c (arrange_linetable):
	Revise comments re linetable sorting.
	* buildsym.c (compare_line_numbers): Sort by pc, not by line.
	* coffread.c: Tell end_symtab to sort the line table.

	* coffread.c: Re-work a lot of the coff-specific stuff to use stuff
	in buildsym.c.  This includes coff_finish_block, coff_context_stack,
	coff_local_symbols, coff_file_symbols, coff_global_symbols,
	coff_end_symtab and coff_add_symbol_to_list.
	(read_enum_type): Deal with it now that we have a "struct pending"
	not a "struct coff_pending".

	* buildsym.c (end_symtab): Don't realloc subfile->linetable.

Wed Sep  1 13:12:43 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* a68v-nat.c, altos-xdep.c, convex-tdep.c, convex-xdep.c,
	  findvar.c, hppab-nat.c, hppah-nat.c, i386mach-nat.c,
	  irix4-nat.c, m68k-tdep.c, m88k-tdep.c, mipsread.c, regex.c,
	  remote-bug.c, remote-hms.c, rs6000-nat.c, rs6000-tdep.c,
	  sparc-nat.c, stabsread.c, sun3-nat.c, sun386-nat.c, symfile.c,
	  umax-xdep.c, xcoffread.c, 29k-share/udi/udip2soc.c,
	  29k-share/udi/udr.c, config/a29k/tm-a29k.h, config/arm/tm-arm.h,
	  config/convex/tm-convex.h, config/gould/tm-np1.h,
	  config/gould/tm-pn.h, config/h8300/tm-h8300.h,
	  config/h8500/tm-h8500.h, config/i386/tm-i386aix.h,
	  config/i386/tm-sun386.h, config/i386/tm-symmetry.h,
	  config/i960/tm-i960.h, config/m68k/tm-news.h,
	  config/m88k/tm-m88k.h, config/mips/tm-mips.h,
	  config/ns32k/tm-merlin.h, config/ns32k/tm-umax.h,
	  config/pa/tm-hppa.h, config/pyr/tm-pyr.h,
	  config/rs6000/tm-rs6000.h, config/sh/tm-sh.h,
	  config/tahoe/tm-tahoe.h, config/vax/tm-vax.h,
	  config/z8k/tm-z8k.h, nindy-share/nindy.c: bcopy -> memcpy.

Wed Sep  1 05:05:53 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_partial_symbols):  Use language from FDR if it
	is unambigous.  Patch from ptf@delcam.co.uk (Paul Flinders).
	* mipsread.c (ecoff_symfile_info):  New struct to hold the global
	pending_list.
	* mipsread.c (mipscoff_symfile_init, parse_partial_symbols):
	Allocate the global pending list and link it to the objfile.
	* mipsread.c (is_pending_symbol, add_pending):  Use global pending
	list from objfile. Allocate pending list entries from the
	psymbol_obstack.
	* mipsread.c (free_pending):  Remove. The pending list is now
	freed when the psymbol_obstack is freed.
	* mipsread.c (psymtab_to_symtab1):  Remove pending list allocation,
	the global pending list is used now.
	* mipsread.c (parse_partial_symbols):  Skip only the first
	file indirect entry when building the dependency list.

Tue Aug 31 15:01:27 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	Break dcache code out of remote.c.
	* dcache.h: white space changes only.
	* dcache.c: add user settable variable to set whether data caching
	  is in use.
	* remote.c: include dcache.h. removed data caching code which is
	  now in dcache.c.  Compile in data caching again.  (data caching
	  is currently off by default.)
	  (remote_read_bytes, remote_write_bytes): change second arg to
	  unsigned char.
	  (remote_dcache): new static variable.
	* Makefile.in (REMOTE_O): add dcache.o.
	* config/m88k/m88k.mt (TDEPFILES): removed dcache.o.

	Break dcache code out of remote-nindy.c.
	* remote-nindy.c: removed dcache code.  Changed callers to use new
	  conventions.  include dcache.h.
	  (nindy_dcache): new static variable.
	* config/i960/nindy960.mt (TDEPFILES): added dcache.o.

	Break dcache code out of remote-bug.c into dcache.[hc].
	* Makefile.in (dcache_h): new macro.
	  (HFILES): added $(dcache_h).
	  (ALLDEPFILES): added dcache.c.
	  (dcache.o): new rule.
	  (remote-bug.o): now depends on $(dcache_h).
	* remote-bug.c: include dcache.h. remove externs for insque and
	  remque, add extern for bcopy.  Prototype bug_close,
	  bug_clear_breakpoints, bug_write_cr.  dcache code moved to
	  dcache.[hc].  Changed dcache calling convention to include an
	  initial DCACHE argument.
	  (bug_dcache): new static variable.
	  (bug_read_inferior_memory): change second arg to
	  unsigned char.
	* dcache.[ch]: new files.
	* config/m88k/m88k.mt (TDEPFILES): add dcache.o.

Tue Aug 31 10:33:13 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* c-typeprint.c (c_print_type_base): Treat show = 0 just like
	show < 0.  The only case where we had been distinguishing is that
	show = 0 used to print "struct  " or "enum  " instead of
	"struct {...}" or "enum {...}" which seems clearly wrong.

Mon Aug 30 17:51:32 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* configure.in: recognize m88110 as an m88k.

Mon Aug 30 16:07:59 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valops.c (call_function_by_hand): If we discard cleanups, call
	bpstat_clear (&inf_status.stop_bpstat).

Mon Aug 30 12:47:46 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* stabsread.h, dbxread.c (end_psymtab):  Return NULL if the psymtab
	was empty and thrown away.
	* mipsread.c (parse_partial_symbols):  Do not add empty psymtabs to
	dependency list, skip self dependencies.
	* mipsread.c (parse_fdr):  Removed, obsolete.
	* mipsread.c (parse_lines):  Check for cbLine being zero, not
	cbLineOffset.
	* mipsread.c (struct symloc):  Add pst_language.
	* mipsread.c (parse_partial_symbols): Set up proper language for
	header files, save it in pst_language for psymtab_to_symtab_1.
	* mipsread.c (psymtab_to_symtab_1):  Use pst_language.

Mon Aug 30 10:48:06 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Fix typo m88*-motorola-svr4* -> sysv4*.

Fri Aug 27 17:09:19 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* paread.c: Include som.h instead of libhppa.h.  (From Utah.)

Fri Aug 27 09:30:40 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* symmisc.c (dump_symtab): Use catch_errors around print_symbol.
	Change calling sequence of print_symbol to fit catch_errors.

	* mips-tdep.c: Call reinit_frame_cache every time the user does
	"set heuristic-fence-post".

	* gdbserver/low-sun3.c: New file.
	* gdbserver/Makefile.in, config/m68k/sun3.mh: Change accordingly.

	* Rename files for 14-character limits:
	gdbserver/remote-gutils.c -> gdbserver/utils.c
	gdbserver/remote-inflow.c -> gdbserver/low-lynx.c
	gdbserver/remote-inflow-sparc.c -> gdbserver/low-sparc.c
	gdbserver/remote-server.c -> gdbserver/server.c
	remote-monitor.c -> remote-mon.c
	* Makefile.in, gdbserver/Makefile.in, gdbserver/configure.in,
	config/m68k/monitor.mt,	config/i386/i386lynx.mh,
	config/sparc/sun4os4.mh: Change accordingly.
	* gdbserver/Makefile.in: Remove more junk inherited from gdb Makefile.

Thu Aug 26 14:32:51 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infcmd.c, inferior.h (run_stack_dummy): If we stop somewhere
	besides the dummy, return 1 rather than calling error().
	Let caller print the error message.  Remove name argument.
	* valops.c (call_function_by_hand): Deal with changes to calling
	sequence of run_stack_dummy.  Discard restore_inferior_status cleanup
	if run_stack_dummy returns 1.

	* Version 4.10.2.

	* config/mips/tm-mips.h (EXTRACT_STRUCT_VALUE_ADDRESS):
	Get struct return address from v0, not a0.

	* infrun.c (restore_inferior_status): Use catch_errors when
	restoring selected frame.

Wed Aug 25 21:52:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (save_inferior_status, restore_inferior_status):
	Save and restore the registers too.
	* inferior.h (struct inferior_status): Add "registers".

Tue Aug 24 00:36:17 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c (end_psymtab): Clean up comment.

	* frame.h, symtab.h, findvar.c (read_var_value):  Change basereg
	support to use LOC_BASEREG rather than SYMBOL_BASEREG_VALID.
	* dwarfread.c: Use LOC_BASEREG where appropriate.
	* Various: Support LOC_BASEREG and LOC_BASEREG_ARG.

	* coffread.c (init_lineno, init_stringtab): Don't check whether
	xmalloc returned NULL.

	* config/vax/xm-vaxult.h: Define NO_PTRACE_H.

	* target.c, target.h: Add "set remotedebug" command.
	* remote-bug.c, remote.c, remote-mips.c: Remove "set remotedebug" and
	"set m88ksnoop" options and use generic "set remotedebug" instead.
	* NEWS: Describe this change.

Mon Aug 23 20:26:22 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* buildsym.h: Remove declaration of dbxread.c functions.
	* stabsread.h: Group together dbxread.c functions.
	Move elfstab_build_psymtabs here from symfile.h.
	Declare pastab_build_psymtabs.
	* elfread.c, paread.c: Include stabsread.h (for stabsread_new_init
	declaration, etc).

Mon Aug 23 17:16:23 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* remote-bug.c: rename quiet to bug88k_snoop.
	  (double_scan, multi_scan): generalize double_scan into a scan
	  for multiple patterns.  Rename to multi_scan.
	  (bug_wait, bug_write_inferior_memory): adapt to use the new
	  multi_scan in order to catch and represent target bus errors.
	  (bug_scan): currently unused, so comment out.
	  (bug_quiet): removed.  Replaced with a standard user settable boolean.

	* m88k-tdep.c: remove include of sys/dir.h.  Appears unnecessary
	  and isn't available on solaris.

Mon Aug 23 14:56:42 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m88k/{delta88v4.mt,delta88v4.mh}: New files
	* config/m88k/delta88.mh: Fix comment.
	* config/m88k/tm-delta88.h: Remove unused BCS define.
	* config/m88k/{tm-delta88v4.h,xm-delta88v4.h,nm-delta88v4.h}:
	New files.
	* configure.in: Recognize m88*-motorola-sysv4*.
	* m88k-nat.c: Always include sys/types.h; don't depend on USG.

Mon Aug 23 12:57:42 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_symbol, parse_type, cross_ref):  Pass name of
	symbol as an argument and use it in complaints.
	* symmisc.c (dump_psymtab):  Dump filenames of dependencies.

Mon Aug 23 1993  Sean Fagan  (sef@cygnus.com)
		 and Jim Kingdon  (kingdon@cygnus.com)

	Add NetBSD support:
	* configure.in: Recognize netbsd.

Sun Aug 22 22:50:32 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (get_textlow): Don't go past a K_END when looking for a
	K_FUNCTION.  Avoids losing on source files with no functions. 

Fri Aug 20 14:01:39 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-nindy.c: Remove unused include of sys/ioctl.h.

	* frame.h, symtab.h: Revise comments regarding baseregs.

Fri Aug 20 15:07:05 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_partial_symbols, psymtab_to_symtab_1):
	Set language for psymtab and symtab.
	* mipsread.c (new_symbol):  Set language and initialize demangled
	name for symbol.
	* symmisc.c (print_symbol):  Use SYMBOL_SOURCE_NAME when printing
	the symbol type.
	* symtab.c (decode_line_1):  Inhibit coredumps with cfront executables.

Fri Aug 20 14:01:39 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Move KERNEL_U_ADDR from xm-hp300bsd.h to nm-hp300bsd.h and make
	it conditionalized on 4.3 vs. 4.4.
	* config/m68k/nm-hp300bsd.h: Move REGISTER_U_ADDR out of 4.3 and
	4.4 sections; it was identical and now works for 4.4.

	* mips-tdep.c (is_delayed): Use INSN*BRANCH* not ANY_DELAY.

	* printcmd.c (MAKEVA_END): Update this version to use "aligner".

Thu Aug 19 22:08:09 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/vax/tm-vax.h (BELIEVE_PCC_PROMOTION):  Define.
	* mipsread.c (parse_symbol, parse_type, cross_ref):  Handle corrupt
	file indirect entries with complaints instead of core dumps. Remove
	complaint for stTypedef within aggregates.

Thu Aug 19 17:58:39 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* coffread.c (process_coff_symbol): Ignore tagnames like .0fake.

	* coffread.c (coff_read_enum_type): #if 0 out code which changes
	enum {FALSE, TRUE} into boolean.

	* config/m68k/delta68.m{t,h}: Use nm-delta68.h, etc. not
	non-existent files nm-delta.h, etc.
	* config/m68k/tm-delta68.h: Define CANNOT_STORE_REGISTER.
	* delta68-nat.c: Add "[0]" in offsetof argument.
	* delta68-nat.c (_initialize_kernel_u_addr): Don't try to set up
	nl with initializer, just assign to it.  Check n_scnum field on
	return. 

Wed Aug 18 21:42:52 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (read_hpux_symtab): Call SET_NAMESTRING for K_MODULE
	debug symbols.

Wed Aug 18 12:03:00 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (print_address), values.c (value_as_pointer): Don't
	use ADDR_BITS_REMOVE.
	* defs.h: Try to clarify comment about ADDR_BITS_REMOVE.

	* blockframe.c (block_innermost_frame): Uncomment.
	Return NULL if passed NULL.
	* frame.h: Declare it.
	* expression.h (union exp_element): Add field block.
	* parse.c (write_exp_elt_block): New function.
	* expression.h (OP_VAR_VALUE): Now takes additional struct block *.
	* *-exp.y: Write block for OP_VAR_VALUE.
	* eval.c, expprint.c, parse.c: Deal with block for OP_VAR_VALUE.
	* valops.c, value.h (value_of_variable), callers:
	Add second argument, for block.

	* main.c (gdb_readline): If we read some characters followed by EOF,
	return them rather than returning NULL.

Tue Aug 17 11:14:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mips-tdep.c: Remove unused #ifndef NUMERIC_REG_NAMES and add comment.

Tue Aug 17 15:10:04 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* config/m88k/tm-m88k.h: Fix typo in comment.
	  (FP_REGNUM): define in terms of SP_REGNUM
	  rather than by absolute number.  Also clearly comment that this
	  is a convenient lie in order to decrease future confusion.
	  (ACTUAL_FP_REGNUM): new macro for FP.
	  (FRAME_CHAIN_VALID): removed.  Standard default works fine.
	* m88k-tdep.c (frame_chain_valid): redundant, so removed.
	  (NEXT_PROLOGUE_INSN): removed unused fourth arg, fixed all
	  callers.
	  (read_next_frame_reg): declare static.
	  (examine_prologue): removed unused variabel insn2, rename insn1
	  to insn, rewrote comment about finding fp, sp, etc. set frame_fp
	  based on ACTUAL_FP_REGNUM rather than FP_REGNUM which is
	  actually a scammed alias for SP_REGNUM on m88k. 

	* frame.h: fixed typo in comment.

Tue Aug 17 11:14:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* 29k-share/udi/udiphcfg.h: Always include udiphunix.h not udiphdos.h.

	* complaints.c (complain): fflush (stdout) after output.

Tue Aug 17 01:43:55 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* blockframe.c, frame.h (sigtramp_saved_pc):  New routine to fetch
	the saved pc from sigcontext on the stack for BSD signal handling.
	* config/i386/tm-i386bsd.h (SIGTRAMP_START, SIGTRAMP_END, FRAME_CHAIN,
	FRAMELESS_FUNCTION_INVOCATION, FRAME_SAVED_PC, SIGCONTEXT_PC_OFFSET):
	Define to make backtracing through sigtramp work.
	* config/vax/tm-vax.h (SIGTRAMP_START, SIGTRAMP_END, TARGET_UPAGES,
	FRAME_SAVED_PC, SIGCONTEXT_PC_OFFSET):  Ditto.

Mon Aug 16 13:52:14 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (cd_command): If current_directory on entry is "/", then
	don't append an extra slash.
	Don't assume that /../.. means /.

	* target.c (target_xfer_memory): Clear errno before calling
	to_xfer_memory.

	* stack.c (frame_info, print_frame_info): Add comment about using
	the starting source line number on a line boundary if backtracing
	through sigtramp.

Mon Aug 16 09:52:33 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Add U Utah contribution notice.  Add TODO list.
	(hp_type_lookup): Use TYPE_NAME and TYPE_TAG_NAME.
	(process_one_debug_symbol): Likewise.

Mon Aug 16 02:56:01 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* blockframe.c (create_new_frame, get_prev_frame_info):
	Use the function name when calling IN_SIGTRAMP.
	* config/m68k/tm-m68k.h (SIG_PC_FP_OFFSET, SIG_SP_FP_OFFSET):
	Define for correct handling of bachtraces through _sigtramp.
	* m68k-tdep.c (m68k_find_saved_regs):  Adjust saved sp for fake
	sigtramp frames.
	* mipsread.c (parse_type):  Handle corrupt TIR info with complaint
	instead of core dump.
	* mipsread.c (parse_partial_symbols):  Put static symbols into the
	mimimal symbol table, use proper mst_types for all minimal symbols.
	* stack.c (frame_info, print_frame_info):  Use the starting source
	line number on a line boundary if backtracing through sigtramp.

Fri Aug 13 14:37:05 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* remote-bug.c: include gdbcmd.h.
	  (sleep, remque, insque): forward decls added.
	  (bug_fetch_registers, bug_store_registers): forward decls
	  removed.
	  (bug_read_inferior_memory, bug_write_inferior_memory): forward
	  decls added.
	  (srec_frame, srec_max_retries, srec_bytes, srec_echo_pace,
	  srec_sleep, srec_noise): new static variables for user settable
	  options.  Mostly these are for debugging and tuning.  I don't
	  expect them to stay user settable options for long.
	  (timeout): change default to 4 seconds.
	  (check_open): declare funtion static, force return value.
	  (readchar_nofail): if timeout, then say so if not being quiet.
	  (pollchar, double_scan, bug_scan, bug_srec_write_cr,
	  start_load): new functions.
	  (bug_wait): rewritten to use double scan.
	  (expect): while (1) -> for (;;)
	  (get_hex_digit): rewrite if condition to avoid gcc complaints.
	  (bug_load, bug_create_inferior, bug_open, bug_store_register):
	  removed unused variables.
	  (bug_load): replaced DELTA macro with user settable srec_frame
	  variable.  Other minor lint.
	  (find_end_of_word, is_baudrate_right, set_rate, not_bug_wait,
	  gethex, timed_read, translate_addr, bug_before_main_loop):
	  unsused and removed.
	  (bug_resume): add missing first arg, pid.
	  (get_reg_name): use ip rather than cr04.
	  (bug_write, bug_write_cr, but_clear_breakpoints, bug_quiet):
	  declare type, args, and explicitly return.
	  (bug_store_register): straighten out the ip vs cr04 confusion.
	  (bug_write_inferior_memory): rewrite to cope with errors while
	  downloading s-records.
	  (bug_read_inferior_memory): declare static.
	  (bug_clear_breakpoints): expect nobr before prompt.
	  (_initialize_remote_bug): add initializations for srec-bytes,
	  srec-max-retries, srec-frame, srec-noise, srec-sleep,
	  srec-echo-pace.

	* Makefile.in (remote-bug.o): new rule.
	  (ALLDEPFILES): added remote-bug.c

	* remote-hms.c (hms_wait): use -1 for timeout's which means block
	  forever rather than 99999.

	* ser-unix.c (get_tty_state): if a descriptor is not a tty, then
	  simply save encode this fact as the process group and return
	  success rather than an error.
	  (set_tty_state): if process group is -1, do not reset the
	  process group.
	  (hardwire_reachar): comment change.

	* serial.h: comment change.

	* config/m88k/tm-m88k.h: comment change to remove embedded
	  comment.
	  (SKIP_PROLOGUE): skip_prologue returns a value which is expected
	  to reset the pc argument.  So reset it.

Fri Aug 13 10:15:24 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.10.1 after release and cvs
	tagging.

Thu Aug 12 20:40:14 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/Makefile.in: Use GDBSERVER_LIBS and
	GDBSERVER_DEPFILES.  Also remove much (but not all that could be
	removed) crud inherited from gdb Makefile.in.
	* config/i386/i386lynx.mh, config/sparc/sun4os4.mh: Define GDBSERVER_*.
	* gdbserver/README: Say it works on Sun and change configuration
	instructions slightly.

Wed Aug 11 18:56:59 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* config/i386/i386v4.mh: use -lsocket and -lnsl, for remote
	targets that use BSD style network connections

Wed Aug 11 17:54:24 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-{monitor,bug}.c: Make bug_ops not static (forward declaration
	of statics doesn't work with SunOS4 /bin/cc).
	Rename the occurrence in remote-monitor.c to monitor_bug_ops.

Tue Aug 10 13:07:14 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* blockframe.c (find_pc_partial_function),
	mips-tdep.c (find_proc_desc): Deal with "pathological" case.

Tue Aug 10 14:50:30 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c (wrap_here): Allow indent to be NULL.
	(fputs_filtered): Don't check for null wrap_indent (wrap_here now
	guarantees that it isn't, and anyway we were only checking one out
	of the two places we dereferenced it).

	* objfiles.h (struct objfile): Clean up comments for
	{obj,sym}_private to clarify what they are private to.

Mon Aug  9 16:45:00 1993  Stan Shebs  (shebs@rtl.cygnus.com)

	* stabsread.c, buildsym.c (hashname): Moved function to
	  buildsym.c, as suggested in the sources.

Mon Aug  9 09:53:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-udi.c: Make udi_ops extern rather than trying forward
	declaration of a static variable.

	* hppab-nat.c: Define ptrace to call_ptrace and pass the 5th arg
	there, rather than using an ANSI C specific macro.

	* 29k-share/udi/udr.c: Include fcntl.h not sys/fcntl.h.  Also put
	sys/types.h near the top (just on general principles).

	* environ.c (set_in_environ): Remove G960BASE and G960BIN; they are
	no longer used.

	* gdbcore.h: New variable gnutarget.
	* core.c: Add commands to set and show it.
	* Callers to bfd_*open*: Pass gnutarget instead of NULL as target.
	* environ.c (set_in_environ): For GNUTARGET, use set_gnutarget not
	putenv.

	* symtab.c (decode_line_1): Give error on unmatched single quote.

Sun Aug  8 13:59:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* ser-unix.c (hardwire_send_break) [HAVE_SGTTY]: Use select not usleep.

	* remote.c: Add comments about 'd', 'r', and unrecognized requests.

	* inflow.c (terminal_init_inferior): Don't muck with tty state if
	gdb_has_a_terminal() is false.

Sun Aug  8 10:07:47 1993  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (record_minimal_symbol):  Remove prototype and
	function.
	* dwarfread.c (add_partial_symbol):  Remove code to add minimal
	symbols and remove comment about limitations.  Experiments show
	that now that gdb handles the ELF symtab better for creating
	minimal symbols, that no additional information is added by
	examining the DWARF information, and in fact, given the
	limitations, the DWARF code was actually making things worse.

Sat Aug  7 10:59:03 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* elfread.c (elf_symtab_read):  Properly sort out the bss symbols
	from the data symbols and give them the correct minimal_symbol_type.
	Add file static symbols to the minimal symbol table, not just
	global symbols.  Add absolute symbols as well (like _edata, _end).
	Redo stabs-in-elf special symbol handling now that file static
	symbols are entered into the into the minimal symbol table.
	* dwarfread.c (add_partial_symbol):  Add comment about limitations
	of DWARF symbols for distinquishing data from bss when adding
	minimal symbols.  Add file local symbols to minimal symbols.

Thu Aug  5 08:58:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* ser-go32.c: Define job_control variable.

Thu Aug  5 15:56:13 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* configure.in: z8k-coff is the same as z8k-sim

Thu Aug  5 08:58:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* 29k-share/udi/udip2soc.c: Include sys/types.h before sys/file.h.

	* config/i386/tm-i386bsd.h (NUM_REGS):  There are only 10, not 11.

	* inflow.c: Put all uses of F_GETFL and F_SETFL in #ifdef F_GETFL.

	* 29k-share/udi/udip2soc.c: Include fcntl.h not sys/fcntl.h.

Wed Aug  4 18:32:12 1993  Fred Fish  (fnf@cygnus.com)

	* inflow.c (pass_signal):  Signal handlers take one int arg;
	supply an unused one to make it type compatible as an arg to
	signal().

Tue Aug  3 18:34:14 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/mips/tm-mips.h: Include bfd.h before coff/sym.h.

Tue Aug  3 15:34:57 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (ALLCONFIG):  Add config/i386/i386nw.mt,
	config/m68k/delta68.mh, config/m68k/delta68.mt,
	config/m68k/dpx2.mh, config/m68k/dpx2.mt, config/mips/riscos.mh,
	config/mips/news-mips.mh.
	* Makefile.in (ALLPARAM):  Add config/i386/nm-symmetry.h,
	config/i386/tm-i386nw.h, config/m68k/nm-delta68.h,
	config/m68k/tm-delta68.h, config/m68k/xm-delta68.h,
	config/m68k/nm-dpx2.h, config/m68k/tm-dpx2.h,
	config/m68k/xm-dpx2.h, config/mips/xm-makeva.h.
	* Makefile.in (ALLDEPFILES):  Add dpx2-nat.c.

Tue Aug  3 12:02:09 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c: Updated for BFD ECOFF changes.  Now gets the
	swapping routines and external structure sizes via the
	ecoff_backend information.  No longer includes coff/mips.h.

Tue Aug  3 10:58:04 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (SFILES): Add thread.c

Tue Aug  3 10:21:58 1993  Doug Evans  (dje@canuck.cygnus.com)

	* remote-sp64sim.c (simif_create_inferior): Add FIXME regarding
	sim_set_args return code.

Mon Aug  2 16:35:31 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in (VERSION): bumped to 4.9.4.

	* remote-monitor.c: updated copyright.
	  (bug_ops, monitor_desc): now static.
	  (monitor_desc): in several places, check and/or set to NULL.

	* remote-hms.c (hms_files_info): Add the appropriate items where
	  missing in the printf call.

	* remote-bug.c: new file for m88k bug support.

	* config/m88k/m88k.mt (TDEPFILES): added remote-bug.o.

Mon Aug  2 14:22:09 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* h8300-tdep.c:  Use new variable h8300hmode.

Mon Aug  2 12:06:00 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valops.c (typecmp): If we are passing a non-reference to a function
	which takes a reference, pass the address.
	(value_arg_coerce): Don't use COERCE_ENUM; we don't want to dereference
	references here.

	* thread.c (thread_switch): Define as static.
	(add_thread): Cast return value from xmalloc.

	* gdbtypes.c (fill_in_vptr_fieldno): Call check_stub_type.
	* gdbtypes.{c,h}: Improve comments on vptr_fieldno.

Mon Aug  2 11:58:52 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* README:  Elaborate on gdb C++ support and cfront support.

Mon Aug  2 11:30:57 1993  Stu Grossman  (grossman at cygnus.com)

	* i386lynx-nat.c, thread.c, thread.h:  Update copyrights.

Mon Aug  2 12:06:00 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (ALLDEPFILES): Add i386lynx-nat.c.

Mon Aug  2 08:42:50 1993  Stu Grossman  (grossman at cygnus.com)

	* gdbserver/remote-inflow.c (create_inferior):  Fix comments, and
	error msg.  Setup seperate process group for child.
	* (write_inferior_memory):  Sleep for 1 second and retry on ptrace
	failure.

Sun Aug  1 22:58:18 1993  Stu Grossman  (grossman at cygnus.com)

	* config/i386/i386lynx.mh (NATDEPFILES):  Drop coredep (for now).
	* config/i386/nm-i386bsd.h:  Protect from multiple inclusion.
	* config/i386/nm-i386lynx.h:  Lotsa new host porting stuff.
	* config/i386/tm-i386lynx.h:  Define SAVED_PC_AFTER_CALL and
	target_pid_to_str.

	* Makefile.in (CLIBS):  Reorder to make Lynx ld happy.
	* (HFILES):  New file thread.h.
	* (OBS):  New file thread.c.
	* configure.in:  Host config for Lynx/386.
	* fork-child.c (fork_inferior):  Call init_thread_list().
	* infrun.c (resume):  Add pid to invocation of target_resume().
	* (wait_for_inferior): Pay attention to pid from target_wait().
	Multi-threading code now uses this to determine what to do.
	* inftarg.c (child_wait):  Conditionalize based on CHILD_WAIT macro.
	Use target_pid_to_str() macro throughout when printing pid.
	* inferior.h (child_resume):  Add pid to prototype.
	* hppab-nat.c hppah-nat.c infptrace.c (child_resume):  Pass in pid as
	argument, instead of using inferior_pid.
	* procfs.c (procfs_resume):  Pass in pid as argument.  Ignored for
	now.  Use target_pid_to_str() macro throughout for printing process id.
	* remote-adapt.c (adapt_resume):  Pass in pid as argument.
	* remote-eb.c (eb_resume):  Pass in pid as argument.
	* remote-es.c (es1800_resume):  Pass in pid as argument.
	* remote-hms.c (hms_resume):  Pass in pid as argument.
	* remote-mips.c (mips_resume):  Pass in pid as argument.
	* remote-mm.c (mm_resume):  Pass in pid as argument.
	* remote-monitor.c (monitor_resume):  Pass in pid as argument.
	* remote-nindy.c (nindy_resume):  Pass in pid as argument.
	* remote-sa.sparc.c (remote_resume):  Pass in pid as argument.
	* remote-sim.c (rem_resume):  Pass in pid as argument.
	* remote-sp64sim.c (simif_resume):  Pass in pid as argument.
	* remote-st.c (st2000_resume):  Pass in pid as argument.
	* remote-udi.c (udi_resume):  Pass in pid as argument.
	* remote-vx.c (vx_resume):  Pass in pid as argument.
	* remote-z8k.c (rem_resume):  Pass in pid as argument.
	* remote.c (remote_resume):  Pass in pid as argument.
	* solib.c (solid_create_inferior_hook):  Pass inferior_pid to
	target_resume().
	* target.c (normal_pid_to_str):  New routine to print out process
	ID normally.
	* target.h (struct target_ops):  Add pid to prototype at
	to_resume().  (target_resume):  Add pid argument.
	* (target_pid_to_str):  Default definition for normal type pids.
	* thread.h, thread.c:  New modules for multi thread/process control.

Sun Aug  1 13:02:42 1993  John Gilmore  (gnu@cygnus.com)

	* README:  Say that bug-gdb is also the place to send requests
	for help with GDB.

Sun Aug  1 09:42:13 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (make-proto-gdb-1):  Use -f opt on rm of Makefile.
	* h8500-tdep.c:  Add parens around a few macro args.

Fri Jul 30 15:43:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* TODO: Remove items about unix-to-unix/rapp debugging (now we
	have gdbserver), moving xm files to subdirectory, ptype yylval,
	and file-local symbols.

	* gdbtypes.h: Improve comments about C++ methods.

Fri Jul 30 14:16:32 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* c-exp.y:  Add missing 5th arg for one call to lookup_symbol, cast
	NULL in all other calls to correct pointer types.

Fri Jul 30 15:43:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	From Jeffrey Law:
	* tm-hppa.h (TARGET_WRITE_PC): Define.
	* hppa-tdep.c (hppa_fix_call_dummy): If in a syscall,
	then return the address of the dummy itself rather than
	the address of $$dyncall.
	(target_write_pc): New function to store a new PC.

Fri Jul 30 12:51:27 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
			  and Jim Kingdon (kingdon@cygnus.com)

	* breakpoint.c (breakpoint_re_set_one):  Always reparse breakpoint
	conditions, they might contain symbol table references.

Fri Jul 30 12:51:27 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_symbol):  Handle opaque struct definitions and
	type naming for stTypedef symbols.

Fri Jul 30 14:44:21 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* c-exp.y (yylex): Detect C++ nested types.

Fri Jul 30 11:07:37 1993  Doug Evans  (dje@canuck.cygnus.com)

	* sp64-tdep.c (sparc64_frame_chain, sparc64_frame_saved_pc): Deleted.
	(dump_ccreg, sparc_print_register_hook): New fns.
	* remote-sim.h: New file.
	* remote-sp64sim.h (sim_*): External fns.  (simif_*): Internal fns.

	* config/sparc/sp64.mt: New file.
	* config/sparc/tm-sp64.h (FRAME_CHAIN, FRAME_SAVED_PC): Deleted.
	(PRINT_REGISTER_HOOK): Call new fn sparc_print_register_hook.

Fri Jul 30 10:15:01 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* Makefile.in (ALLCONFIG):  Add config/i386/ptx.mh

Fri Jul 30 08:58:01 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	From J. Law:
	* infcmd.c (read_pc): Remove PA specific code.
	* tm-hppa.h (TARGET_READ_PC): Define.
	* hppa-tdep.c (target_read_pc): New function.

	* symtab.c (gdb_mangle_name): Deal with it if type lacks a name.

Fri Jul 30 07:36:53 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* NEWS:  Add note that DEC alpha support is host only, not native.
	* README:  Emphasize that C++ support works best with GNU C++ and
	stabs debugging format.
	* delta68-nat.c:  Add missing FSF copyright.

Fri Jul 30 08:58:01 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* paread.c (pa_symtab_read): Put file-local symbols in minimal symbols.
	* hppa-tdep.c (frame_chain_valid): Check that our function has the
	same address as _start, not that it must be the same symbol.

Fri Jul 30 00:18:40 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* Makefile.in (ALLDEPFILES):  Add delta68-nat.c
	* Makefile.in (delta68-nat.o):  Add dependency.

Thu Jul 29 12:09:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* value.h (COERCE_ENUM): Use COERCE_REF to coerce refs; value_ind
	was adequate in gdb 3.5 but not now.

	* valops.c (typecmp): An array in t2 matches a pointer in t1.

	* valops.c (typecmp): When comparing type1& to type2, compare
	type1 and type2 as leniently as if we were comparing type1 to
	type2.

	* cp-valprint.c (cplus_print_value): Don't dump core if the
	baseclass doesn't have a name.
	* values.c (vb_match): New function, which finds the virtual
	base class pointer even if the types are nameless.
	(baseclass_{addr,offset}): Use it.

	* hppa-tdep.c: Make "maintenance print unwind" command from old
	"unwind" command.

	* remote-udi.c: Remove udi_timer, call to siginterrupt, and associated
	obsolete junk which apparently had been copied from the
	pre-serial.h remote.c, but which is no longer used.

Thu Jul 29 12:36:20 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* Makefile.in (NONSRC):  Need 29k-share/README, not
	29k-share/udi/README.

Thu Jul 29 12:09:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* paread.c (pa_symfile_init): If error reading string table, don't
	use errno in cases where it hasn't been set.

	* ser-unix.c (gdb_setpgid): Pass our pid, not 0, to setpgid.

	* remote-monitor.c (_initialize_monitor): Comment out use of
	connect_command, since connect_command itself is commented out.

	* remote-monitor.c (generic_open): Parse arguments the same way
	as remote.c.

	* hppa-tdep.c (pc_in_linker_stub): Fix unclosed comments.

Wed Jul 28 13:19:34 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/xm-mips.h: Define HAVE_TERMIOS.

	* dbxread.c (record_minimal_symbol): Don't put gcc_compiled or
	__gnu_compiled* symbols into the minimal symbols.

Wed Jul 28 08:26:58 1993  Ian Lance Taylor  (ian@cygnus.com)

	* remote-mips.c (_initialize_remote_mips): Added "timeout" and
	"retransmit-timeout" variables to set mips_receive_wait and
	mips_retransmit_wait, respectively.

Wed Jul 28 03:58:58 1993  (pes@regent.e-technik.tu-muenchen.de)

	* symmisc.c (dump_msymbols):  Handle new mst_file_* types.

Tue Jul 27 12:07:38 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote-udi.c: Remove old comment about download not implemented.

	* serial.h, ser-{unix,go32,tcp}.c: Add flush_input and send_break.
	* nindy-share/*, remote-nindy.c: Extensive hacking to make it
	conform to GDB conventions like using memcpy not bcopy, serial.h,
	etc.  This is to make it host on Solaris, AIX, etc.
	* Makefile.in: Reflect removed nindy-share files.
	* config/i960/nindy960.mt (TDEPFILES): Remove ttybreak.o.

	* stack.c (print_frame_info): Revise comment about `pathological'
	case (there was a wrong FIXME about text labels; also asm() can
	trigger this as well as versions of ar which truncate .o names).

	* buildsym.c (start_subfile): If a .c file includes a .C file, set
	the language of both of them to C++.

	* config/sparc/xm-sun4os4.h: Define MEM_FNS_DECLARED and include
	<memory.h>.
	Include <malloc.h> rather than declaring malloc functions ourself.

	* ser-unix.c (set_tty_state): Don't ignore errors setting process
	group.
	* inflow.c (terminal_inferior): If attach_flag set, ignore errors
	from set_tty_state.

	* fork-child.c (fork_inferior): Only quote exec file if needed.

	* mipsread.c (parse_symbol): Remove 21 Jul 93 change with
	stTypedef inside an stBlock.

Tue Jul 27 12:36:49 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* breakpoint.c (breakpoint_1):  Walk the breakpoint chain to decide if
	we have breakpoints or watchpoints as we might have to ignore internal
	breakpoints.

	Fix gdb core dumps after `file newfile' commands.
	* symtab.h, symfile.c (clear_symtab_users):  New routine which
	unconditionally clears symtab users. clear_symtab_users_once
	commented out as it was a noop anyway.
	* objfiles.c (free_objfile):  Don't call clear_symtab_users_once.
	* objfiles.c (free_all_objfiles), symfile.c (new_symfile_objfile),
	xcoffexec.c (exec_close):  Call clear_symtab_users if necessary.
	* symfile.c (syms_from_objfile):  Install cleanups for errors during
	symbol reading.
	* coffread.c, dbxread.c, mipsread.c, xcoffread.c (*_symfile_read):
	Lint cleanup code, call do_cleanups explicitly.
	* symfile.c (symbol_file_add):  Call new_symfile_objfile and
	reinit_frame_cache _after_ the new symbols are read in.

Tue Jul 27 01:57:01 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_type):  Do not set tag name for compiler
	generated fake tag names.

Mon Jul 26 17:31:49 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* config/m88k/m88k.mt (TDEPFILES): add exec.o.

Mon Jul 26 13:17:36 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hppa-tdep.c: Remove all uses of use_unwind and `set use_unwind'
	command.  Now we use unwind info by default if we can find it.

	* config/sparc: Move VARIABLES_INSIDE_BLOCK and SUN_FIXED_LBRAC_BUG
	to tm-sparc.h so they are shared between Solaris and SunOS4.
	* dbxread.c (process_one_symbol): Deal with SunOS4 acc N_STSYM and
	N_GSYM functions.

	* config/pa/tm-hppa.h (REGISTER_NAMES): Use "fr" rather than "fp"
	for floating point registers.

	* mipsread.c (parse_symbol): Put stStaticProc symbols in minimal
	symbols as mst_file_text.

	* hppa-tdep.c (pc_in_linker_stub): Return 0 if can't read memory.

	* stabsread.c (rs6000_builtin_type): Make logical types be
	TYPE_CODE_BOOL.

Sun Jul 25 23:41:48 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.{c,h} (struct breakpoint): Replace symtab field with
	source_file field.

Fri Jul 23 09:57:25 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* remote.c: Don't error() on errors xferring memory.
	* target.h: Clean up comments about *xfer_memory.

	* exec.c, corelow.c (target_ops struct): Don't allow
	{insert,remove}_breakpoints to be defaulted to
	memory_{insert_remove}_breakpoint.

	* demangle.c: Make it so `help set dem' tells you how to get the
	list of demangling styles.

Thu Jul 22 15:41:09 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* Makefile.in: Use REMOTE_O macro not remote.o.
	* config/i960/{nindy960,vxworks960}: Don't use remote.o.

Thu Jul 22 12:43:25 1993  Ian Lance Taylor  (ian@cygnus.com)

	* coredep.c: If NEED_SYS_CORE_H defined, include <sys/core.h>
	(can't include it in nm-*.h file because it causes conflicts with
	a.out symbol definitions).
	* hp300ux-nat.c (fetch_core_registers): Commented out; obsolete.
	* config/m68k/hp300hpux.mh (NATDEPFILES): Added coredep.o and
	corelow.o.
	* config/m68k/nm-hp300hpux.h (NEED_SYS_CORE_H): Defined.
	(REGISTER_U_ADDR): Defined.
	* config/m68k/xm-hp300hpux.h (HAVE_TERMIOS): Define instead of
	HAVE_TERMIO.
	* config/pa/xm-hppah.h: Likewise.

Wed Jul 21 11:37:30 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* mipsread.c (parse_symbol): when stTypedef and friends occur within
	an stBlock, skip over the fields of the inner one.

	* mips-tdep.c (init_extra_frame_info): If in lenient prologue, call
	heuristic_proc_desc rather than just assuming registers not saved.

	* Makefile.in (regex.o): Add dependency.

	* hppa{b,h}-nat.c: Warning, not error, if can't access registers.

	* config/pa/hppa{b,h}.h: Define ATTACH_DETACH.

Wed Jul 21 03:07:30 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/xm-makeva.h:  New file implements va_list alignment
	restrictions for mips hosts.
	* config/mips/{xm-irix3.h, xm-mips.h, xm-news-mips.h, xm-riscos.h}:
	Use it.

Wed Jul 21 00:11:05 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tdep.c (init_extra_frame_info):  Do not check for
	mips_in_lenient_prologue if it is a dummy frame.
	* mipsread.c (fixup_sigtramp):  Initialize pdr.adr, it is used by
	mips_in_lenient_prologue.

Tue Jul 20 14:14:59 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (read_hp_array_type): Handle "char foo[]".

Tue Jul 20 12:53:47 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* mips-tdep.c (heuristic_proc_start): First time we print the
	warning, elaborate.
	(_initialize_mips_tdep): Improve docstring for `set heur'.

	* config/rs6000/tm-rs6000.h: Remove call to insert_step_breakpoint.

	* symtab.c (find_line_symtab): New function, to deal with multiple
	symtabs with the same name.
	(find_line_pc{,_range}): Use it.
	(find_pc_symtab): Add comment about overlapping symtabs.

Mon Jul 19 21:29:14 1993  Fred Fish  (fnf@deneb.cygnus.com)

	* Makefile.in (SFILES):  Add nlmread.c.
	* Makefile.in (OBS):  Add nlmread.o.
	* Makefile.in (nlmread.o):  Add new target.
	* configure.in (i[34]86-*-netware):  New configuration.
	* nlmread.c, config/i386/{i386nw.mt, tm-i386nw.h}:  New files
	for NLM/NetWare support.

Mon Jul 19 11:48:57 1993  Jim Kingdon  (kingdon@deneb.cygnus.com)

	* symtab.h (enum minimal_symbol_type): Add mst_file_*.
	* partial-stab.h [DBXREAD_ONLY]: Record statics in miminal symbols.
	* dbxread.c (record_minimal_symbol): Deal with statics.
	* minsyms.c (lookup_minimal_symbol): Prefer externals to statics.

	* config/i386/xm-i386sco.h: Define HAVE_TERMIOS.

	* printcmd.c, config/pa/xm-pa.h, config/alpha/xm-alpha.h: Make it so
	arg_bytes field of makeva_list is always aligned.
	* config/pa/xm-pa.h: Make arglist_address a char *.

	* ser-unix.c: Don't try to use job control with termio.

Sun Jul 18 23:11:28 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
			  and Jim Kingdon (kingdon@cygnus.com)

	Make breakpoint_re_set_one work with overloaded member functions,
	`b 123' and `b foo' if foo is a static function.
	* symtab.c (decode_line_1, decode_line_2):  New argument `canonical'
	to return canonical line specs if requested by the caller.
	* breakpoint.c, source.c, symtab.c, symtab.h:  Change prototypes and
	callers accordingly.
	* symtab.c (build_canonical_line_spec):  New helper function which
	constructs the canonical line spec.
	* breakpoint.c (break_command_1):  Use canonical line spec instead
	of command string as addr_string if necessary.
	* source.c (line_info):  Fix storage leak.

Sun Jul 18 15:22:45 1993  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* infptrace.c: Split out define of PT_KILL; Sequent defines PT_KILL
	but not the others.
	* symm-tdep.c: Remove exec_file_command.
	[_SEQUENT_] (ptx_coff_regno_to_gdb, register_addr): New functions.
	A few miscellaneous cleanups.
	* symm-nat.c: Renamed from symm-xdep.c.
	* All symmetry dependent files: Many changes.

	* mips-tdep.c (mips_skip_prologue): New argument lenient.
	Use read_memory_nobpt.
	(is_delayed, mips_in_lenient_prologue): New functions.
	(init_extra_frame_info): If in the prologue, don't use saved registers.
	* config/mips/tm-mips.h: Declare mips_skip_prologue.

	* partial-stab.h (N_SO): Add the text offset to valu before, not after,
	passing it to END_PSYMTAB.

Fri Jul 16 18:48:52 1993  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* symtab.c (find_pc_symtab): Call warning, not printf directly.

	* solib.c (solib_add): Use x{re,m}alloc, not {re,m}alloc.

Fri Jul 16 09:56:42 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c: No longer need to undefine ZMAGIC.

Thu Jul 15 18:03:37 1993  Ian Lance Taylor  (ian@tweedledumb.cygnus.com)

	* m88k-pinsn.c: Moved code into opcodes/m88k-dis.c.
	(print_insn): Now just calls print_insn_m88k.

Thu Jul 15 14:54:05 1993  Doug Evans  (dje@canuck.cygnus.com)

	* h8300-tdep.c (examine_prologue): Make prototype match definition.

Thu Jul 15 08:34:49 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* NEWS: Mention that remote.c now has a `load' operation.

	* hppa-tdep.c (pc_in_linker_stub): New function.
	(find_proc_framesize): Return 0 for linker stubs.
	(rp_saved): Tell the caller where rp is saved.
	(frame_chain_valid): Return 1 for linker stubs.
	(frame_saved_pc): Use return value from rp_saved.

	* stack.c (print_frame_info): When checking PC_IN_CALL_DUMMY,
	pass the sp relative to the frame in question, not the sp in the
	innermost frame.

Wed Jul 14 17:37:03 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mipsread.c (parse_procedure): Take as argument the symtab to look
	the name up in.  Look it up with mylookup_symbol, not lookup_symbol.
	(psymtab_to_symtab_1): For stabs, pass the symtab to parse_procedure.

	* mipsread.c (mylookup_symbol): Use strcmp, not STREQ, as we have
	already checked the first characters.

	Changes from Jeffrey Law:
	* printcmd.c (makeva_list): Use MAKEVA_EXTRA_INFO to define
	machine dependent fields in the makeva_list structure.
	(makeva_size): Allocate extra space to handle gaps made by
	alignment restrictions.
	* config/pa/xm-pa.h (MAKEVA_EXTRA_INFO): Define.
	(MAKEVA_START): Initialize arglist_address field.
	(MAKEVA_ARG): Always store arguments on natural alignment 
	boundaries.  Set arglist_address to the address right after
	the args.  
	(MAKEVA_END): Simply return the value stored in arglist_address.

Wed Jul 14 13:51:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* ch-valprint.c (chill_val_print, case TYPE_CODE_STRING): Print
	address, not addr.

	* hppah-nat.c (store_inferior_registers): Don't print i in cases
	where we aren't using it.

	* a29k-tdep.c (get_saved_register): Fix typo.

Wed Jul 14 09:45:52 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: Recognize h8300h (variant of h8300).

Wed Jul 14 09:45:52 1993  Doug Evans  (dje@canuck.cygnus.com)

	* configure.in: Recognize sparc64-*-*.

Tue Jul 13 14:03:48 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (define_symbol): Make the caddr_t hack apply to `function
	returning foo' as well as `pointer to foo'.

	* remote.c [REMOTE_BREAKPOINT]: Use for breakpoint insn if defined.
	* config/m68k/tm-m68k.h: Define it.
	* mem-break.c, breakpoint.c: Improve comments.

Tue Jul 13 13:35:31 1993  Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)

	* config/m68k/tm-dpx2.h: Replace "tm-68k.h" with "m68k/tm-m68k.h".
	* config/m68k/xm-dpx2.h: Define HAVE_TERMIOS not HAVE_TERMIO.

Tue Jul 13 11:50:38 1993  Doug Evans  (dje@canuck.cygnus.com)

	* gdbcore.h (read_memory_integer, read_memory_unsigned_integer):
	Make prototype match definition.

Tue Jul 13 11:15:15 1993  Fred Fish  (fnf@cygnus.com)

	* elfread.c:  Remove notice about file still being under
	construction.
	* Makefile.in (ultra3-xdep.o, umax-xdep.o):  Add missing ')'.

Mon Jul 12 17:46:35 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* a29k-tdep.c (read_register_stack): Make val static.

Mon Jul 12 14:10:48 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/h8300/tm-h8300.h (REGISTER_CONVERTIBLE): Change value to 0.
	(REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW): Move def'n to
	usual spot.

Mon Jul 12 11:29:44 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* c-valprint.c (c_val_print): Fix thinko with unspecified length
	arrays.

	* hppa-tdep.c (find_proc_framesize): If there is a frame pointer,
	use it.

Sun Jul 11 19:35:05 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* symtab.c (decode_line_1): Use end of block to figure out whether
	val.end is in the same function, not minimal symbols.

	* source.c (line_info): Add a few more wrap_here's.

	* i386-tdep.c (i386_follow_jump): Do byteswapping where needed and
	don't make assumptions about sizes of host data types.

	* blockframe.c, symtab.h (find_pc_partial_function): New arg endaddr.
	* infrun.c, breakpoint.c, printcmd.c: Change callers.
	* printcmd.c (containing_function_bounds): Remove.
	* printcmd.c (disassemble_command): Use find_pc_partial_function,
	not containing_function_bounds.
	* infcmd.c (step_1): Use find_pc_partial_function rather than
	trying to roll our own.  Move check for a pc between SIGTRAMP_START and
	SIGTRAMP_END in find_pc_partial_function, not step_1.

	* sparc-tdep.c (sparc_frame_chain, frame_saved_pc):
	Keep unswapped value in array of char, not REGISTER_TYPE.
	Use REGISTER_RAW_SIZE not sizeof (REGISTER_TYPE).
	(sparc_extract_struct_value_address): Use TARGET_PTR_BIT not
	sizeof (CORE_ADDR).

Thu Jul  1 15:50:05 1993  Frederic Pierresteguy (F.Pierresteguy@frcl.bull.fr)

	* configure.in (m68*-bull-sysv*): added support for Bull dpx2.
	* config/m68k/{t,x,n}m-dpx2.h, dpx2-nat.c: New files.
	* config/m68k/dpx2.m{h,t}: New files.

Thu Jul  1 15:46:10 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Run through gnu-indent.

Sun Jul 11 12:32:08 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/sparc/tm-sparc.h (PRINT_REGISTER_HOOK): Fix typo, add
	more parens around macro arg.

Sat Jul 10 09:54:17 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c: Remove step_resume_{duplicate,shadow}.  Replace
	step_resume_break_address with step_resume_breakpoint (now local
	to wait_for_inferior).
	({insert,remove}_step_breakpoint): Remove.
	(wait_for_inferior): Set step resume break with
	set_momentary_breakpoint.  Test hitting it with bpstat_stop_status
	and bpstat_what	(stop_step_resume_break removed).
	* breakpoint.{h,c}, infrun.c: Return value from bpstat_what now struct
	which includes previous return value as main_action, and a step_resume
	bit.
	* breakpoint.c (delete_breakpoint): If breakpoint was inserted, and
	there is another breakpoint there, insert it.
	* infrun.c (wait_for_inferior): Rearrange the spaghetti a bit.  Use
	a few more gotos.
	Various: Clean up and add comments.

	* infrun.c [TDESC]: Remove remaining tdesc code (see ChangeLog
	for Wed Nov 13 16:45:13 1991).

Fri Jul  9 12:36:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* values.c, value.h (modify_field), callers: Make fieldval a LONGEST.

	* h8300-tdep.c (NEXT_PROLOGUE_INSN): Make pword1 an INSN_WORD *
	not short *.

	* findvar.c, defs.h
	({extract,store}_{signed_integer,unsigned_integer,address}):
	New routines to replace SWAP_TARGET_AND_HOST.
	All over: All uses of SWAP_TARGET_AND_HOST on integers replaced.

	* config/sparc/tm-sparc.h: Add comment suggesting that removing
	ins and locals from the registers array might clean things up.

	* utils.c: Clean up comments about wrap buffer and wrap_here.
	* printcmd.c (printf_command): Call wrap_here before vprintf.

	* mipsread.c (cross_ref): Set the name to unknown for "struct *" case.
	Patch from ptf@delcam.co.uk (Paul Flinders).

	* a29k-tdep.c, findvar.c (get_saved_register): Fix byteswapping sins.

Fri Jul  9 09:47:02 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* defs.h, remote-eb.c (TM_FILE_OVERRIDE):  Remove it.
	* mips-tdep.c (init_extra_frame_info):  Set proper fci->frame if pc
	is at the start of the dummy code.

Thu Jul  8 14:48:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* sparc-tdep.c (sparc_push_dummy_frame): Skip all the do_save_insn
	stuff, just write the sp and fp.
	(sparc_pop_frame): Skip the do_restore_insn; we already restore
	the sp with the other out registers.

	* hppa-tdep.c (hppa_push_arguments): Allocate enough space for
	arguments.

	* hppa-tdep.c: Change _initialize_hppab_tdep to _initialize_hppa_tdep.

Thu Jul  8 14:47:00 1993  Doug Evans  (dje@canuck.cygnus.com)

	* sparc-tdep.c (sparc_frame_chain): Handle sizeof (CORE_ADDR)
	!= sizeof (REGISTER_TYPE).
	(frame_saved_pc): Ditto.

Thu Jul  8 08:22:05 1993  Doug Evans  (dje@canuck.cygnus.com)

	* config/h8300/tm-h8300.h: (REGISTER_TYPES): Adjust for h8/300h.
	(REGISTER_RAW_SIZE): Ditto.
	(REGISTER_VIRTUAL_TYPE): Use builtin_type_unsigned_long for regs
	on the h8/300h (ints may still be 16 bits).
	(EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE,
	EXTRACT_STRUCT_VALUE_ADDRESS): Add FIXME's for h8/300h.  Some
	thought needed here.

	* h8300-tdep.c (print_insn): Call print_insn_h8300h if h8/300h.
	(examine_prologue): reg_save_depth is 4 if h8/300h.

	* findvar.c (read_register): Provide some support for 64 bit regs.
	(write_register): Ditto.

Wed Jul  7 14:30:00 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/nm-riscos.h: machine/machparam.h is always the right
	place to look for BSD43_NBPG, not machine/vmparam.h

	* infcmd.c (run_stack_dummy): New argument name.
	Change error message in (another) attempt to make it comprehensible.
	* valops.c (call_function_by_hand): Pass name to run_stack_dummy.
	* symtab.h: Declare demangle and asm_demangle since macros use them.

	* eval.c (evaluate_subexp): Add comment about calling a member
	function of a variable in a register.

	* expression.h: Clean up comment about string in STRUCT_STRUCT etc.

	* config/{rs6000/tm-rs6000.h,sparc/tm-sparc.h,pyr/tm-pyr.h},
	inferior.h (PC_IN_CALL_DUMMY) [ON_STACK]: Add comments about stack
	frame tops and bottoms.

	* frame.h, blockframe.c, stack.c, a29k-tdep.c,
	config/gould/tmp-{pn,np1}.h,
	config/{sparc/tm-sparc.h,pyr/tm-pyr.h,vax/tm-vax.h}: Remove field
	next_frame from struct frame_info.  It has no purpose beyond
	->next->frame and is an artifact from GDB 2.8.

Tue Jul  6 11:51:18 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in: Remove gdb before creating a new one.
	Update init.c atomically.

	* Makefile.in (ALLPARAM): Add config/{alpha/xm-alpha.h,pa/xm-pa.h}.
	(ALLCONFIG): Add config/alpha/alpha-osf1.mh.

	* infcmd.c (_initialize_infcmd): In docstring for "continue",
	describe argument as setting ignore count.

Sun Jul  4 15:04:47 1993  Doug Evans  (dje@cygnus.com)

	* h8300-tdep.c (examine_prologue): Fix call to
	read_memory_unsigned_integer.

Fri Jul  2 18:22:54 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/{x,n}m-irix{3,4}.h: Make some definitions here
	rather than including xm-bigmips.h.

	* eval.c (evaluate_subexp): Improve error messages for OP_TYPE and
	default cases.

	* Makefile.in (distclean): Remove y.tab.h.

Fri Jul  2 14:55:48 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* exec.c (exec_file_command):  Remove Mar 28 hack as BFD handles
	file updates properly now.
	* mipsread.c (mips_coff_new_init):  Force reevaluation of sigtramp
	addresses if switching to a new symbol file.
	* dbxread.c (process_one_symbol):  Avoid dereferencing NULL
	symbols that might be returned from define_symbol.

Fri Jul  2 13:33:12 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	New target macros for getting at the pc, sp and fp.
	* infcmd.c (read_pc, write_pc):  Modify to use new macros.
	(read_sp, write_sp, read_fp, write_fp): New functions.
	* blockframe.c (reinit_frame_cache, get_prev_frame_info):
	Use new functions.
	* breakpoint.c (bpstat_alloc): ditto.
	* infrun.c (wait_for_inferior): ditto.
	* stack.c (print_frame_info): ditto.
	* valops (call_function_by_hand): ditto.
	* corelow.c (core_open): ditto.
	* h8500-tdep.c: (target_read_sp, target_write_sp, target_read_pc,
	target_write_pc, target_read_fp, target_write_fp): New functions.
	* inferior.h (read_sp, write_sp, read_fp, write_fp): Prototypes.

	* config/alpha/xm-alpha.h: Add MAKEVA_END.
	* config/h8500/tm-h8500.h: Define new macros.

Fri Jul  2 13:51:04 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (mipos-*-riscos*): New host and target; use riscos.
	* config/mips/nm-riscos.h: If BSD43_NBPG is not defined by
	vmparam.h, include machparam.h.
	(KERNEL_U_ADDR): Define to be BSD43_UADDR.

Fri Jul  2 13:39:48 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* c-exp.y (yylex): Give error if unmatched single quote.

	* configure.in, config/m68k/*delta68*, delta68-nat.c: New port.

	* Remove unused STACK_END_ADDR in the following files (in other
	files it is used for something): tm-mips.h, tm-sun2.h, tm-news.h,
	tm-a29k, tm-i386v.h, tm-hppa.h, tm-nindy960.h, tm-amix.h,
	tm-hp300hpux.h, tm-isi.h.

Thu Jul  1 09:51:27 1993  Jim Kingdon  (kingdon@cygnus.com)

	* config/mips/nm-riscos.h: Define NBPG and UPAGES.
	config/mips/xm-riscos.h: Include <sys/types.h>.

	* ser-unix.c (hardwire_noflush_set_tty_state): Use an assignment,
	not an initializer, to copy the structure.

	* gdbtypes.h (struct type): Add field tag_name.
	* gdbtypes.c (type_name_no_tag), c-typeprint.c (c_type_print_base):
	Use it.
	* {coff,dwarf,mips,stabs}read.c: Set it.

	* xm-sysv4.h: Undefine HAVE_TERMIO.

	* config/mips/nm-riscos.h: Remove unmatched #endif.
	Define FETCH_INFERIOR_REGISTERS.
	* config/mips/riscos.mh: Don't include coredep.o; mips-nat.o is enough.
	Fix misspelling of NAT_FILE.
	* mips-nat.c (fetch_core_registers): If KERNEL_U_ADDR is not defined,
	we can still process "modern" core files.

	* ser-unix.c (hardwire_print_tty_state) [HAVE_TERMIOS]: Don't
	print c_line.
	(_initialize_ser_hardwire): Just check whether _POSIX_JOB_CONTROL
	is defined; don't care what it is defined to.

Wed Jun 30 20:06:46 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/vax/xm-vaxult2.h: Define FD_SET and FD_ZERO.

Tue Jun 29 11:02:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* inftarg.c: Remove unused include of terminal.h.
	* signals.h: Don't undefine signals anymore.
	* main.c: Use job_control from serial.h.
	* fork-child.c (fork_inferior): Use gdb_setpgid.
	* serial.h, ser-unix.c, ser-go32.c: Provide gdb_setpgid.
	* utils.c (quit): Use current_target->to_terminal_ours to figure
	out whether we care about lack of job control, rather than __GO32__.
	* utils.c: Include serial.h not terminal.h
	(quit): Use job_control not TIOCGPGRP.
	* terminal.h: Don't undefine TIOCGPGRP.
	* serial.h, ser-unix.c, ser-go32.c, ser-tcp.c: Add SERIAL_FLUSH_OUTPUT.
	* utils.c (quit): Use it.
	* serial.h: Add SERIAL_UN_FDOPEN.
	* utils.c (quit): Use it.
	* ser-unix.c: Add process group to ttystate.
	[HAVE_SGTTY]: Add tchars, ltchars, and lmode to ttystate.
	* inflow.c: Include serial.h not terminal.h.
	Use serial.h stuff to replace most of the maze of #ifdef's.
	* inflow.c, main.c, inferior.h: make gdb_has_a_terminal a function.
	* serial.h: Document SERIAL_SET_TTY_STATE as being immediate.
	* ser-unix.c: Use TIOCSETN not TIOCSETP so it is true.
	* serial.h, ser-unix.c, ser-go32.c, ser-tcp.c:
	Add SERIAL_PRINT_TTY_STATE, SERIAL_NOFLUSH_SET_TTY_STATE, and
	SERIAL_SET_PROCESS_GROUP.
	* inflow.c: Use them.
	* config/xm-svr4.h, config/rs6000/xm-rs6000.h, config/sparc/sun4os4.h:
	Define HAVE_TERMIOS.
	* Various: Remove all use of TIOC*_BROKEN.

Wed Jun 30 12:20:51 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/m68k/tm-sun3.h (BELIEVE_PCC_PROMOTION_TYPE): Define.

Tue Jun 29 13:44:41 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* target.h (target_detach):  Turn macro into function.
	* target.c (target_detach):  Define it, do deferred register stores
	before calling the real target function.

Tue Jun 29 13:15:42 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
			  and Jim Kingdon (kingdon@cygnus.com)

	* symtab.h (BLOCK_SHOULD_SORT):  Do not sort blocks corresponding to
	a function to avoid printing of function arguments in wrong order
	due to sorting.
	* symfile.c (compare_symbols):  Remove code for sorting arguments
	as blocks containing arguments are no longer sorted.
	* symtab.c (lookup_block_symbol):  Update comment accordingly.

Tue Jun 29 11:02:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/pa/tm-hppa.h: Remove unused ARGS_GROW_DOC.
	(REG_STRUCT_HAS_ADDR): Add comment.

	* infrun.c (wait_for_inferior): Use find_pc_line not find_pc_symtab
	to check whether there is line number information.

Tue Jun 29 08:29:17 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* remote-udi.c: Fix docstring so that it compiles.

	* remote-mips.c, remote-nindy.c: move bfd.h before symfile.h
	(for file_ptr).

Tue Jun 29 09:11:27 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c (process_one_symbol): If we find a LOC_BLOCK where we
	don't expect it, change it to LOC_STATIC so at least we don't coredump.

	* c-typeprint.c (c_type_print_base): Don't error() on invalid type.

	* symtab.h: Add comments about line numbers.
	* source.c (identify_source_line): Fix off by one bug with line.

Mon Jun 28 19:00:21 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Do not include libhppax.  Instead include libhppa.h
	and hpux-symtab.h.  Misc indention fixes.
	(find_unwind_entry): Add PARAM prototype.
	(read_hpux_symtab): More fixes for names and sizes of structs,
	unions, enums, typedefs, and tagdefs.
	(read_hp_enum_type, read_hp_struct_type): Likewise.
	(read_hp_set_type, read_hp_subrange_type): Likewise.
	(hp_type_lookup, process_one_debug_symbol): Likewise.
	(process_one_debug_symbol): Search forward from the K_FUNCTION for
	the first K_BEGIN when setting the line number associated with a
	function.  Avoid unnecessary calls to savestring.
	(hp_alloc_type): Initialize TYPE_CPLUS_SPECIFIC here.  Remove
	most cases where we set it elsewhere.
	(hppa_sym_fns): Use "hppa" instead of hppax since hpread.c and
	paread.c use the same BFD backend now.  All references changed.
	(hpux_symfile_init): Allocate space to hold the debugging section
	contents on the symbol obstack.

Mon Jun 28 10:09:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (makeva*): New interface, for making a va_list.
	(printf_command): Use it.
	* config/m88k/xm-delta88.h: Remove VPRINTF define, not needed.
	* config/pa/xm-pa.h: New file.
	* config/pa/xm-hppa{b,h}.h: Include it.

	* xcoffread.c: Remove obsolete NO_TYPEDEFS comment.

Sun Jun 27 08:54:55 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* valprint.c (val_print_type_code_int):  Fix off by one error with
	eliminating leading zeroes for large little endian integers.

Sun Jun 27 08:58:56 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/riscos.mh (CC): Use -systype sysv.

	* ser-unix.c: Move #include of <sys/time.h> to HAVE_SGTTY section.

	* Makefile.in (ALLPARAM): Add config/mips/{x,n}-{news-mips,riscos}.h.

Fri Jun 25 11:22:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m68k/tm-m68k.h: Remove obsolete comment about duplicating
	CALL_DUMMY between different 68k machines.

Fri Jun 25 17:02:45 1993  Stu Grossman  (grossman at cygnus.com)

	* gdbserver/Makefile.in:  Add dependancies on server.h.
	* gdbserver/remote-gutils.c:  Remove lots of unused functions and
	variables.
	* gdbserver/remote-inflow.c:  Remove lots of unused variables and
	#includes.  Also, use PTRACE_* symbols instead of constants. 
	(mywait):  Surround calls to wait() with enable/disable_async_io()
	so that we can be interrupted from GDB while waiting for the
	child.  Also, handle child exit more gracefully.
	* gdbserver/remote-server.c:  Remove lots of unused variables.
	Move all extern defs into server.h.  Redo main loop so that
	failure from getpkt() causes communications to be re-established.
	Fix 'k' command so that it restarts the child.
	* gdbserver/remote-utils.c:  Remove lots of unloved vars and
	subrs.  Move many extern decls into server.h.  (remote_open):  For
	tcp, seperate usage of proto fd from connected fd.  Close proto
	fd after getting connection.  (putpkt/getpkt):  Pay attention to
	errors when reading/writing.  Report these to the caller.  New
	routines input_interrupt/enable_async_io/disable_async_io to make
	it possible to get an I/O interrupt when data arrives from the
	comm link.
	* serial.h:  New file to contain common defs for all remote files.

Fri Jun 25 17:02:45 1993  Stu Grossman  (grossman at cygnus.com)

	* remote.c:  Add arg names to prototypes, in a modest effort at
	clarification.  Also add prototypes for some new functions.
	* (remote_wait):  Better error reporting for 'T' responses.
	* ser-go32.c (strncasecmp):  Make str1 & str2 be const.
	* (dos_async_init):  Make usage message reflect requested port #.
	* ser-tcp.c (tcp_open):  Terminate hostname properly to prevent
	random hostname lookup failures.  Add nicer message for unknown
	host error.  (wait_for):  Wake up in case of exceptions.  Also,
	restart select() if we got EINTR.
	* ser-unix.c (wait_for):  Restart select() if we got EINTR.
	* serial.c: (serial_close):  Clean up code.

Fri Jun 25 11:22:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m68k/tm-m68k.h: Remove obsolete comment about duplicating
	CALL_DUMMY between different 68k machines.

Fri Jun 25 11:22:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (*.tab.c): Use ./c-exp.tab.c not just c-exp.tab.c.
	Make comment explaining this comprehensible.
	(TAGFILES): Include ALLDEPFILES.
	(ALLDEPFILES): udi2soc.c and udr.c are in 29k-share/udi, not
	29k-share/udi/udi.
	(update-alldeps): Remove; obsolete.

	* remote.c: Move comments regarding packets to top of file with the
	rest of the protocol comments.
	Fix incorrect description of 'T' response.

	* README (Reporting Bugs): Refer people to the GDB manual.

	* c-valprint.c (c_val_print): Handle TYPE_CODE_BOOLEAN.
	* stabsread.c: Type -16 is 4 bytes.

	* remote-udi.c: Improve docstring.

Fri Jun 25 11:16:31 1993  Fred Fish  (fnf@cygnus.com)

	* elfread.c (elf_symfile_read):  Call bfd_elf_find_section, not
	bfd_elf32_find_section, to track bfd changes.

Fri Jun 25 11:22:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/riscos.mh (REGEX{,1}, MUNCH_DEFINE, MH_CFLAGS): Define.
	* config/mips/xm-riscos.h: Define USG.

Thu Jun 24 14:52:45 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (filename_completer): Don't complete to files ending in ~.

	* NEWS: Mention filename completion and "info line" enhancements.

	* main.c (symbol_completion_function): On "info t foo", return NULL,
	don't error().

	* main.c (symbol_completion_function): Don't use readline word
	breaking.  Use new calling convention for c->completer and
	complete_on_cmdlist.
	* command.h (struct command): Change arguments; now the text passed
	to completer does not have any word breaking done.  New arg word.
	* symtab.{c,h} (make_symbol_completion_list): Do word breaking.  Take
	word argument.
	* {main.c,gdbcmd.h} ({filename,noop}_completer): Take word argument.
	* command.{c,h} (complete_on_cmdlist): Take word argument.

	* command.c (lookup_cmd_1): Doc fix.

Thu Jun 24 13:26:04 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* Makefile.in (OP_INCLUDE): define.
	  (OPCODE_CFLAGS): use OP_INCLUDE.

	* config/i386/ncr3000.mh, config/i386/i386v4.mh,
	config/i386/i386sol2.mh, config/m68k/hp300hpux.mh,
	config/m68k/amix.mh, config/mips/irix[34].mh,
	config/m88k/delta88.mh, config/sparc/sun4sol2.mh (ALLOCA,
	ALLOCA1): macros removed.

	* config/mips/decstation.mh, config/rs6000/rs6000.mh
	(MMALLOC_LIB): renamed to MMALLOC.

Wed Jun 23 00:25:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* partial-stab.h: Consolidate case statements for N_LSYM and N_FUN.
	* dbxread.c: Change comment regarding acc.

Wed Jun 23 16:33:36 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Document a few functions, misc cleanups.  Update
	copyright to reflect the first "release" of this file.
	(struct hpux_symfile_info): Delete unneeded fields.  Keep pointers
	to the contents of the debug sections rather than offsets within
	the file itself.  Corresponding changes to the accessor macros.
	(sl_symbol_size, slt_symbuf): Delete unneeded global variables.
	(slt_symbuf_start, slt_symbuf_end, lntt_symbuf): Likewise.
	(lntt_symbuf_start, lntt_symbuf_end, gntt_symbuf): Likewise.
	(gntt_symbuf_start, gntt_symbuf_end): Likewise.
	(fill_slt_symbuf, fill_lntt_symbuf): Delete unneeded functions.
	(fill_gntt_symbuf): Likewise.
	(get_lntt, get_gntt, get_slt): Simplify.
	(hpux_symfile_init): Read and store the contents of the debugging
	sections.  Do error checking on memory allocation and BFD calls.
	(read_hpux_symtab): Delete KERNELDEBUG crud.  Ignore debug symbols
	which are not needed for building partial symbol tables.  Handle
	K_CONST, K_TYPEDEF, and K_TAGDEF just like K_SVAR and K_DVAR.
	(read_ofile_symtab): Delete useless processing_gcc_compilation stuff.
	(read_hp_struct_type): Initialize TYPE_CPLUS_SPECIFIC.
	(read_hp_set_type, read_hp_array_type): Likewise.
	(read_hp_subrange_type, hp_type_lookup): Likewise.

Wed Jun 23 15:04:54 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	Makefile overhaul dropping autodepend features.
	* Makefile.in: many comment changes.  forced consistent use of $()
	  for makefile variables references.  dropped leading ./ in file
	  references.  Drop $(srcdir)/ prefix on all dependencies.
	  Inserted contents of alldeps.mak and depend.
	  (INCLUDE_CFLAGS): defined as new macro for getting libiberty's
	  include directory into the compilation line.
	  (GDB_CFLAGS): new macro to take up the semantic previously held
	  by INCLUDE_CFLAGS.
	  (LIBIBERTY): dropped ancient subdir macro.  I last removed this
	  macro in feb of '92.  How does it keep coming back?
	  (MMALLOC_LIB): renamed to MMALLOC.
	  (BFD_SRC_DIR): renamed to BFD_SRC.
	  (BFD_OBJ_DIR): renamed to BFD_DIR.
	  (BFD_LIB): renamed to BFD.
	  (BFD_INCLUDES): renamed to BFD_CFLAGS.
	  (READLINE_DIR): now represents object directory.
	  (RL_LIB): renamed to READLINE.
	  (READLINE_SRC, READLINE_CFLAGS, OPCODES, OPCODES_CFLAGS): new
	  macros.
	  (INTERNAL_CFLAGS): added GDB_CFLAGS, OPCODES_CFLAGS,
	  READLINE_CFLAGS, BFD_CFLAGS.  Dropped USER_CFLAGS.
	  (LDFLAGS): removed default assignment.
	  (TEXIDIR, INCLUDE_DEP, MMALLOC_DIR, MMALLOC_DEP, BFD_DEP,
	  READLINE_DEP, LIBIBERTY_DIR, TESTS, depend, STAGESTUFF): unused, so removed.
	  (ALLOCA1, ALLOCA): removed all references.  alloca is now in
	  libiberty.
	  (VERSION): unilaterally and arbitrarily bumped to 4.9.3.
	  (SFILES, NONSRC, HFILES, ALLDEPFILES, ALLPARAM, ALLCONFIG):
	  removed all $(srcdir) prefixes.
	  (getopt_h, ieee-float_h, bfd_h, wait_h, dis-asm_h): new macros
	  for potential dependencies.  commented out by default.
	  (readline_headers, udiheaders): convenient abbreviations.
	  (gdbcore_h, frame_h, symtab_h, gdbtypes_h, expression_h,
	  value_h, breakpoint_h, command_h, gdbcmd_h, defs_h, inferior_h):
	  new macros used for header file dependencies.
	  (install-info, clean-info): collapse into the info rule.
	  (install): now depends on all.
	  (install-only): new target for installing without depending on
	  all.
	  (uninstall): new target.
	  (config-check, config-check-hosts, config-check-targets): added
	  fixme comments.
	  (ch-exp.tab.c, m2-exp.tab.c): added artificial dependencies in
	  order to force parallel makes into keeping these rules separate.
	* configure.in: omit cat'ing depend file onto generated Makefile.
	* alldeps.mak, depend: removed.

	* inferior.h: remove redundant include of symtab.h which is
	included in value.h via breakpoint.h.

	* alloca.c: removed.  alloca is now in libiberty.

	* config/m88k/delta88.mh, config/ns32k/merlin.mh (M_UNINSTALL):
	new macro to undo what M_INSTALL does.

Wed Jun 23 00:25:58 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/ns32k/{merlin.mh,xm-merlin.h}: Be consistent about name
	of gdb-sh.

	* dbxread.c (copy_pending): Change name and function of begi argument
	to endi, since that is what the caller needs.

	* Makefile.in (TAGFILES): Don't include YYFILES.

	* Makefile.in (HFILES): Include monitor.h.

	* Makefile.in: Include text that used to be in alldeps.mak.
	Remove config/mips/{bigmips.mh,xm-bigmips} from it.
	* Makefile.in, configure.in: Remove all traces of alldeps.mak.

	* main.c (main): Print help message on stdout not stderr
	per standards.texi.
	New option --version per standards.texi.
	In help message, show long options with "--" not "-".
	Don't try to print help message or version until after we have
	called initialize_all_files.

Tue Jun 22 11:03:13 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Delete useless #if 1 statements.
	(hp_type_translate): Use T_LONG, T_UNS_LONG, and T_DOUBLE instead
	of magic integers.  Fix handling for T_UNS_INT.  Abort if the type
	passed in is not an "immediate" type.
	(read_hp_enum_type): Properly compute the size of the type.
	(read_hp_array_type): Likewise.
	(hp_type_lookup): Prefix the names of structs, unions and enums
	with "struct", "union", and "enum" as appropriate.

Tue Jun 22 03:15:38 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* solib.c (solib_add_common_symbols): Don't call lookup_minimal_symbol.
	(solib_add): Call special_symbol_handling once, not once per library.

	* procfs.c (procfs_resume): Don't pass a SIGTSTP whose action
	is SIG_DFL.

	* procfs.c (procfs_resume): Skip the unnecessary PRSVADDR on all
	systems, not just Solaris.

	* stabsread.c: Include <ctype.h>.

Mon Jun 21 16:09:46 1993  Jim Kingdon  (kingdon@cygnus.com)

	* fork-child.c (fork_inferior): Quote exec_file so it can contain
	funky characters.

Mon Jun 21 16:56:47 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (INCLUDE_CFLAGS):  Add BFD_INCLUDES for now, since
	bfd.h is included by target.h, which most of gdb includes.
	* depend:  Hand remove BFD_INCLUDES from ${CC} lines, now that
	it's in INCLUDE_CFLAGS.

Mon Jun 21 16:09:46 1993  Jim Kingdon  (kingdon@cygnus.com)

	* config/i386/*aix*, i386aix-nat.c: New files.
	* configure.in: Use them.
	* alldeps.mak: List them.
	* coffread.c (decode_base_type): Deal with anonymous enum type.
	* i387-tdep.c (print_387_status_word): Add comment re "top".
	* i386-tdep.c [I386_AIX_TARGET] (i386_extract_return_value): New func.
	* dbxread.c: Use SEEK_SET and SEEK_CUR, not L_*.  Define them if and
	only if not defined by a header file.
	* mipsread.c: Don't define L_SET or L_INCR.

Mon Jun 21 15:10:07 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (BFD_INCLUDES):  Bfd.h is now back in bfd build dir.
	* depend:  Hand updated to match.

Mon Jun 21 10:13:42 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c: Include "demangle.h".
	(process_one_debug_symbol): Set the SYMBOL_LANGUAGE and
	SYMBOL_INIT_DEMANGLED_NAME for the current symbol.  Adjust
	SYMBOL_VALUE for local variables in the stack by the size of the
	current function's stack (found in unwind descriptor).  Keep
	better track of the current unwind descriptor. 

Sun Jun 20 13:11:11 1993  Jim Kingdon  (kingdon@cygnus.com)

	* stabsread.c (read_struct_fields): Don't call read_cpp_abbrev on $_.
	(read_cpp_abbrev): Don't complain specially for $_.  Also return 0 if
	we don't recognize the abbrev.

Sun Jun 20 00:24:41 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* solib.c (solib_add_common_symbols): Add comment about performance.

Fri Jun 18 12:37:36 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/mips/{{x,n}m-riscos.h,riscos.mh}: New files.
	* configure.in (mips-*-sysv*): Use riscos for host, bigmips for target.

	* config/mips/{{x,n}m-news-mips.h,news-mips.mh}: New files.
	* config/mips/{bigmips.mh,xm-bigmips.h}: Remove.
	* configure.in (mips-sony-*): Use news-mips for host.

	* buildsym.h: Doc fix for processing_acc_compilation.

Thu Jun 17 19:57:08 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (print_formatted): Don't use tab in wrap_here arg.

Thu Jun 17 17:29:30 1993  Jim Kingdon  (kingdon@lisa.cygnus.com)

	* Makefile.in (INTERNAL_CFLAGS): Include ../include as well as
	${srcdir}/../include.

	* config/m88k/xm-delta88.h: Comment out unused defines which conflict
	with system headers.
	* printcmd.c (printf_command): Cast second arg to vprintf to PTR.
	Use VPRINTF macro if defined.
	* config/m88k/xm-delta88.h: Define VPRINTF.  Include <sys/siginfo.h>.
	Define TIOC{GETC,GLTC}_BROKEN.
	* m88k-nat.c: Uncomment include of <sys/ptrace.h>.
	* main.c: Rename initialize_{main,cmd_lists,history} to init_* to
	make things easier on munch (apparently this matters on
	the delta88 with svr3).

Thu Jun 17 16:53:56 1993  david d `zoo' zuhn (zoo@cygnus.com)
	
	* Makefile.in: canonicalize install.sh; for use within
	this directory (and subdirs)

Tue Jun 15 17:01:23 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: remove parentdir support; use INSTALL_XFORM

Thu Jun 17 15:08:35 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* configure.in (alpha-*-osf*), config/alpha/alpha-osf.mh: New
	host.
	* sh-tdep.c (frame_find_saved_regs): Use NUM_REGS rather than hard
	wired (and wrong) constant.
	* values.c (unpack_long): Add case to unpack when target object is
	sizeof(int).
	* config/sh/tm-sh.h (REGISTER_NAMES): Know about the news ones the
	simulator defines.

Wed Jun 16 16:08:18 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* NEWS: tracking user visible changes starting with
	vxworks-timeout.

	* remote-vx.c (_initialize_vx): rename user settable option from
	rpcTimeout to vxworks-timeout.

Wed Jun 16 14:34:10 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (hp_type_translate): Fix promotion bugs from
	char to short and short to int.

Wed Jun 16 12:21:49 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (depend):  More makefile diddling.
	* alldeps.mak, depend:  Update to latest automatically built
	versions.

	* Makefile.in (depend):  Bfd.h keeps moving, keep up with it.
	* alldeps.mak, depend:  Update to latest automatically built
	versions.

Tue Jun 15 12:26:05 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* remote-vx.c: include gdbcmd.h for setlist.
	  (_initialize_vx): make rpcTimeout user settable.

Mon Jun 14 09:23:51 1993  Jim Kingdon  (kingdon@cygnus.com)

	* main.c, gdbcmd.h: Add function filename_completer.
	* main.c, symfile.c, source.c, exec.c, core.c: Use it for
	"directory", "source", "cd", "symbol-file" "add-symbol-file",
	"load", "file", "exec-file", "core-file" commands.
	(But '/' is a word break, limiting usefulness; see comments).

	* source.c (mod_path): Warning not error if can't find directory.

	* isi-xdep.c: New file.
	* config/m68k/isi.mh (XDEPFILES): Add isi-xdep.o

Sun Jun 13 09:17:48 1993  Jim Kingdon  (kingdon@cygnus.com)

	* config/m68k/xm-news.h: Include <sys/param.h>.

	* m88k-tdep.c (IEEE_isNAN): Remove.
	config/m88k/tm-m88k.h (INVALID_FLOAT): Return 0.  This was the same
	broken isNAN as on the mips.

	* valprint.c (_initialize_valprint): Use c->function.sfunc not just
	c->function.

	* dbxread.c (process_one_symbol): If SUN_FIXED_LBRAC_BUG is not
	defined, don't worry about Sun's silly LBRAC bug.
	* config/m68k/tm-sun3.h: Define SUN_FIXED_LBRAC_BUG to 0.

	* dbxread.c (process_one_symbol): If there's a symbol before an
	N_SO, don't error().
	(case N_BCOMM): complain () not error ().

	* defs.h, main.c (catch_errors): Add return_mask arg.
	stack.c (print_frame_info): Pass RETURN_MASK_ERROR.
	other callers: Pass RETURN_MASK_ALL.
	(return_to_top_level), callers: Add return_reason arg.
	* utils.c (quit):
	Use return_to_top_level (RETURN_QUIT) instead of error ().
	* main.c (main), tm-nindy960.h (ADDITIONAL_OPTION_HANDLER):
	Use SET_TOP_LEVEL not setjmp (to_top_level).
	* remote-nindy.c: Use catch_errors not setjmp (to_top_level).

Sat Jun 12 14:40:54 1993  Jim Kingdon  (kingdon@cygnus.com)

	* solib.c (solib_create_inferior_hook) [SVR4_SHARED_LIBS]:
	Don't try to get the debug base yet.

	* dbxread.c (process_one_symbol): Set n_opt_found based on whether
	a non-gcc N_OPT symbol is found.  Make SUN_FIXED_LBRAC_BUG a macro
	which returns 0 or 1 to say whether to do it.
	* config/sparc/sun4{sol2,os4}.h
	(SUN_FIXED_LBRAC_BUG,VARIABLES_INSIDE_BLOCK): Use n_opt_found so
	the right thing happens for both acc and SunOS4 /bin/cc.

	* valprint.c (print_hex_chars): Use local_hex_format_{pre,suf}fix.
	* printcmd.c (print_scalar_formatted): Use val_print_type_code_int.

	* mips-tdep.c: Remove isa_NAN; it assumed sizeof(host int) == 4 and
	probably contained byte-order sins too.
	config/mips/tm-mips.h (INVALID_FLOAT): Define to 0 like most machines.
	The IEEE_FLOAT code in print_floating takes care of it.

Sat Jun 12 14:47:04 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.9.2.
	* c-valprint.c (c_val_print):  For array of chars printed with
	string syntax, don't print the address of the array.  From
	bothner@cygnus.com.
	* c-exp.y (yylex): Recognize '.' as indicating a floating point
	number regardless of the radix.  From wilson@cygnus.com.
	* valprint.c (set_input_radix_1, set_output_radix_1):  New
	prototypes and functions that do the actual radix setting work.
	* valprint.c (set_radix, set_output_radix, set_input_radix):
	Rewrite to use set_input_radix_1 and set_output_radix_1.
	* valprint.c (initialize_valprint):  Enable commands to
	independently set and show input and output radices.
	* valprint.c (show_radix):  New prototype and function that
	handles separate input and output radices.

Fri Jun 11 18:39:38 1993  Ken Raeburn  (raeburn@cygnus.com)

	Patches from Jeff Law, law@cs.utah.edu:
	* hppa-pinsn.c: Now uses disassembler from opcode library,
	this contains only the stub function print_insn.

Fri Jun 11 15:19:59 1993  K. Richard Pixley  (rich@cygnus.com)

	* main.c (main): back to two periods for elipse.
	  (print_gdb_version): revised format for configuration info.

Fri Jun 11 10:24:35 1993  Fred Fish  (fnf@cygnus.com)

	* defs.h (INT_MAX):  Cast unsigned shift result to int.

Fri Jun 11 10:17:41 1993  Jim Kingdon  (kingdon@cygnus.com)

	* dbxread.c (process_one_symbol): Rather than having
	BLOCK_ADDRESS_FUNCTION_RELATIVE a macro, make it a variable which
	is true if we are doing stabs-in-elf, false otherwise.
	config/sparc/tm-sun4sol2.h: Don't define it.

Fri Jun 11 13:33:40 1993  Ian Lance Taylor  (ian@cygnus.com)

	* remote-mips.c (mips_send_packet): Don't print garbage character
	in debugging info.
	(mips_request): Don't check that remote pid is 0, because
	sometimes it isn't.
	(mips_fetch_registers): Pass a pointer to SWAP_TARGET_AND_HOST,
	not an integer.

Fri Jun 11 10:17:41 1993  Jim Kingdon  (kingdon@cygnus.com)

	* stack.c (print_frame_info): Use catch_errors around print_frame_args.

	* Makefile.in (install): Don't depend on gdb.

	* Rename remote-es1800.c to remote-es.c
	and remote-st2000.c to remote-st.c for 14-char filenames.
	config/m68k/{es1800,st2000}: Use the new names.

	* mips-tdep.c (isa_NAN): Don't return true on -0.

Fri Jun 11 10:24:35 1993  Fred Fish  (fnf@cygnus.com)

	* defs.h (INT_MAX):  Cast unsigned shift result to int.

Thu Jun 10 13:26:41 1993  Fred Fish  (fnf@cygnus.com)

	* elfread.c (elf_symtab_read):  Add bfd section address to bfd
	symbols, now that they are section relative.
	* solib.c (bfd_lookup_symbol):  Ditto.

Thu Jun 10 11:27:34 1993  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (read_hp_function_type): Adjust SYMBOL_VALUE for
	arguments in the stack by the size of the current function's stack
	(found in the unwind descriptor).
	(process_one_debug_symbol): Likewise.  Keep track of the current
	function's unwind descriptor.

Thu Jun 10 10:56:56 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Makefile.in (depend): Add bfd -I's for paread.c and xcoffexec.c
	depend: Updated accordingly.

Wed Jun  9 16:08:44 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Makefile.in (*.tab.c): Use mv for atomic update.

	* Makefile.in ({dist,real}clean): Also remove nm.h.
	(realclean): Also remove ${TESTS}, y.output, yacc.{acts,tmp}.
	(distclean): Don't rebuild *.tab.c or TAGS.

Wed Jun  9 12:56:58 1993  K. Richard Pixley  (rich@cygnus.com)

	* Makefile.in (version.c): add host and target names to version.c.
	* main.c (main): print three periods for the elipse.
	  (print_gdb_version): also print configuration.

	* udi/udiids.h, udi/udip2soc.c, udi/udiphcfg.h, udi/udiphunix.h,
	  udi/udiproc.h, udi/udipt29k.h, udi/udiptcfg.h, udi/udisoc.h,
	  udi/udr.c: Change AMD copyrights to FSF copyleft '93.

	* remote-eb.c (get_hex_regs, eb_fetch_registers), remote-adapt.c
	  (get_hex_regs, adapt_fetch_registers): cast args to
	  supply_register to avoid gcc warning.

	* config/a29k/a29k.mt (TDEPFILES): drop minimon support.  It
	  doesn't compile on solaris and is now obsolete.

	* config/sparc/sun4os4.mh (XM_CLIBS): remove -lresolv.  This
	  breaks stock sunos installations.

Wed Jun  9 06:14:33 1993  Jim Kingdon  (kingdon@cygnus.com)

	* m68k-stub.c: Add comment about frame cache.

	* target.h (target_store_registers): Doc fix re error handling.

	* findvar.c (write_register): Call SWAP_TARGET_AND_HOST regardless
	of register_valid[regno].

Tue Jun  8 14:42:10 1993  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* symtab.h, dwarfread.c: Doc fix re dependencies.

Tue Jun  8 17:54:09 1993  Rob Savoye  (rob@rtl.cygnus.com)

	* serial.c (serial_close): If scb is NULL, don't try to close
	it. 
	* configure.in: Add support for rom68k and bug boot monitors.

Tue Jun  8 17:39:12 1993  Steve Chamberlain  (sac@phydeaux.cygnus.com)

	* coffread.c (init_stringtab): Fix bug where sizeof(long) != 4.
	* gdbcore.h, core.c (read_memory_unsigned_integer): New function.
	* findvar.c (read_register, write_register): Fix thinko where
	sizeof(host long) != sizeof(target int).
	* h8300-tdep.c: Use new read_memory_unsigned_integer call.
	* sh-tdep.c (_initialize_sh_tdep): Add memory_size command.

Tue Jun  8 14:42:10 1993  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* Move config/m68k/tm-m68k.h (FRAME_FIND_SAVED_REGS) to
	m68k-tdep.c (m68k_find_saved_regs).  Don't duplicate code between
	68881 and non-68881 cases.  Check for a pair of movel instructions.

Tue Jun  8 14:52:55 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	First cut at sparc-vxworks targetting.
	* config/sparc/tm-vxsparc.h, config/sparc/vxsparc.mt: new files.
	* configure.in: sparc-vxworks gdb_target now vxsparc.

	* remote-eb.c, remote.c: symfile.h requires bfd.h so include it.

Tue Jun  8 14:42:10 1993  Jim Kingdon  (kingdon@rtl.cygnus.com)

	* config/m68k/xm-news.h: add "extern int errno".

Tue Jun  8 13:45:07 1993  K. Richard Pixley  (rich@sendai.cygnus.com)

	* remove-vx.c (vx_read_register, vx_write_register): collapse
	  ifdef I80960 else (assumes) m68k into parameterizable macros
	  VX_NUM_REGS and VX_SIZE_FPREGS.
	* config/m68k/tm-vx68.h, config/i960/tm-vx960.h (VX_NUM_REGS,
	  VX_SIZE_FPREGS): new definitions.

Tue Jun  8 11:08:29 1993  Jim Kingdon  (kingdon@cygnus.com)

	* symfile.{c,h} (generic_load): New function.
	remote{,-nindy,-eb,-mips}.c: Use it.

Mon Jun  7 20:07:30 1993  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (depend):  More sed gubbish to deal with
	../bfd/bfd.h being generated during the build.
	* depend:  Re-done with corrected makefile.

Mon Jun  7 16:32:05 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (BFD_SRC_DIR):  Renamed def and usages from BFD_DIR.
	* Makefile.in (BFD_OBJ_DIR):  New definition for the bfd build
	directory to find automatically generated header files and library.
	* Makefile.in (BFD_LIB):  Use BFD_OBJ_DIR.
	* Makefile.in (LINTFLAGS):  Include BFD_OBJ_DIR.
	* Makefile.in (saber_gdb):  Include BFD_OBJ_DIR.
	* Makefile.in (depend):  Include BFD_OBJ_DIR in gcc args.
	* Makefile.in (paread.o, xcoffexec.o):  Remove, now in depend.
	* depend, alldeps.mak:  Rebuild after Makefile.in changes.

Fri Jun  4 10:18:51 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: change lynx support to CPU-*-lynxos*

	* Makefile.in (subdir_do): change test from existence of directory
	to existence of Makefile (the directory may exist but not be configured)

Thu Jun  3 01:18:51 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* config/sparc/xm-sun4sol2.h: define MEM_FNS_DECLARED

Fri Jun  4 10:43:33 1993  Ian Lance Taylor  (ian@cygnus.com)

	* configure.in (mips-idt-ecoffl*): New target; use idtl.
	(mips-idt-ecoff*): Added trailing '*'.
	* config/mips/idtl.mt: New file; like idt.mt, but little endian.

Thu Jun  3 17:36:56 1993  Stu Grossman  (grossman@cygnus.com)

	* ser-go32.c:  Clean up lots of compilation nits.

Thu Jun  3 14:44:57 1993  Stu Grossman  (grossman@cygnus.com)

	* Patches from Jeffrey Law <law@cs.utah.edu>.
	* hppab-nat.c: Eliminate unnecessary ifdefs for
	FETCH_INFERIOR_REGISTERS, CANNOT_FETCH_REGISTER, and
	CANNOT_STORE_REGISTER.
	(fetch_register): Delete code to handle CANNOT_FETCH_REGISTER.
	* hppa-pinsn.c: Support 'I', 'J', and 'K' in output
	templates for 1.1 FP computational instructions.

Thu Jun  3 03:34:49 1993  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in:  Remove ser-tcp.[co].  (Use XDEPFILES instead.)
	* alldeps.mak, depend:  Rebuild to account for ser-tcp.
	* config/sparc/sun4os4.mh:  Add ser-tcp to XDEPFILES.
	* gdbserver/Makefile.in (gdbserver):  Use -lbsd.
	* gdbserver/remote-inflow{-sparc}.c (create_inferior):  Don't use a
	shell when running the child, as args have been expanded by the
	time we get here.  Simplify calling convention.
	* gdbserver/remote-server.c (main):  Use new calling convention
	for create_inferior, remove defunct code for coalescing argv.
	Remove extra calls to mywait(), as we no longer have to wade
	through a shell.

	* target.c (target_read_memory_partial):  Don't deref errnoptr
	when checking for null pointer.

Wed Jun  2 19:58:46 1993  John Gilmore  (gnu@cygnus.com)

	* remote-es1800.c:  Fix typo.

Tue Jun  1 21:22:39 1993  Fred Fish  (fnf@cygnus.com)

	* target.c (target_read_memory_partial):  Like target_read_memory,
	but does partial reads, such as reads that bump into the end of
	the address space.
	* target.h (target_read_memory_partial):  Add prototype.
	* valprint.c (PRINT_MAX_DEFAULT):  New define, initial value 200.
	* valprint.c (val_print_string):  Complete rewrite to fix bug with
	bumping into end of memory, avoiding unnecessarily long reads, and
	fixing bug when print_max is set to 0 (unlimited print length).
	* valprint.c (_initialize_valprint):  Use PRINT_MAX_DEFAULT to
	initialize print_max.

Tue Jun  1 18:11:35 1993  Rob Savoye  (rob at darkstar.cygnus.com)

	* configure.in: Add support for rom68k and bug boot monitors.

Mon May 31 10:37:04 1993  Jim Kingdon  (kingdon@cygnus.com)

	* printcmd.c (print_scalar_formatted): Print integers bigger than
	LONGEST in hex no matter how big, and no matter what the format
	and size.

	* stabsread.c (read_type): Skip type attributes if present.

	* stabsread.c (read_huge_number): Don't accept '0' + radix as part
	of number, just through '0' + radix - 1.

Sun May 30 15:35:21 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (SER_HARDWIRE):  Temporarily comment out ser-tcp.o.

	* {dbxread.c, dwarfread.c} (read_ofile_symtab):  Rewrite to take
	single parameter, the pointer to the partial symtab, rather than
	a bunch of args that are derived from the partial symtab.  Change
	prototypes and callers to match.

	* dbxread.c (read_ofile_symtab):  Remove "#if 1" around code to
	set demangling style automatically.
	* defs.h (CPLUS_MARKER):  Clarify comment that this is only for
	GNU C++, not C++ in general.
	* symtab.h (general_symbol_info):  Simplify by eliminating one
	structure level for the language dependent info.

Sat May 29 15:59:29 1993  Fred Fish  (fnf@cygnus.com)

	* c-typeprint.c (c_type_print_base):  Avoid dereferencing NULL
	names for TYPE_CODE_STRUCT and TYPE_CODE_UNION types.
	TYPE_CODE_ENUM was already testing for this.

Fri May 28 17:18:05 1993  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in:  Add new file ser-tcp.c.
	* defs.h (memcmp):  Add decl for memcmp to #ifndef MEM_FNS_DECLARED.
	* findvar.c (write_register):  See if we are writing back the same
	value that's already in the register.  If so, don't bother.
	* remote.c (putpkt, getpkt):  Improve handling of communication
	problems.
	* ser-go32.c:  Prototype it to death.  Update serial_ops and add
	dummy routines where appropriate.
	* ser-tcp.c:  New module to implement serial I/O via TCP
	connections.
	* ser-unix.c:  Clean up getting/setting of tty state.  Get rid of
	SERIAL_RESTORE, add SERIAL_{GET|SET}_TTY_STATE interfaces.
	* serial.c:  Add start of support for connect command.
	(serial_open):  Distinguish between tcp and local devices.
	* serial.h (struct serial_ops):  Get rid of restore, add
	get_tty_state and set_tty_state.  Define protoypes and macros for
	this mess.
	* gdbserver/remote-utils.c:  Add tcp support.  (readchar):  Do
	some real buffering.  Handle error conditions gracefully.
	* gdbserver/remote-inflow-sparc.c:  Update to remote-inflow.c
	(Lynx), remove lots of cruft.

Fri May 28 17:24:51 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* printcmd.c (print_address_symbolic): turn this into an assigment
	instead of an initialization (many compilers don't accept
	structure initialization). 

Thu May 27 16:56:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (read_xcoff_symtab): If several program csects in one
	source file, give them all the name of the source file, rather than
	the 2nd and subsequent ones having NULL names.

Thu May 27 06:16:56 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* printcmd.c (print_address_symbolic):  Append source filename and
	linenumber of the symbol if print symbol-filename is on.
	(initialize_printcmd):  `set print symbol-filename'.

Wed May 26 13:46:16 1993  Stu Grossman  (grossman@cygnus.com)

	* configure.in:  Add config for Lynx target.  Configure gdbserver
	only for Lynx.  Re-do selective configuration of sparclite.

	* gdbserver/{remote-gutils.c remote-server.c Makefile.in
	configure.in remote-inflow.c remote-utils.c}:  New files to
	support GDB remote server.  Currently only works for Lynx.

Wed May 26 10:28:14 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c (define_symbol, case 't'): Only set the name if it
	is not a pointer type.

	* stabsread.c (define_symbol): Clean up logic; move the read_type
	calls to inside the switch statement (this improves the error
	handling).

	* mipsread.c (parse_symbol, parse_partial_symbols): Deal with Fortran
	common blocks.

Tue May 25 20:44:24 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (print_formatted, case 'i'): Pass a tab to wrap_here.

	* source.c (line_info): Change "pc" to "address" in messages and
	use print_address for addresses.

	* source.c (line_info): If we don't find a symtab, print more useful
	output, including the symbolic address.

	* source.c (line_info): If --fullname, display the source.
	(identify_source_line), callers: Take pc as argument, rather than
	assuming innermost frame (emacs doesn't use this, so no one ever
	noticed).
	* symtab.h: Declare frame_file_full_name.
	* main.c: Don't.

Tue May 25 15:30:43 1993  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* breakpoint.c (catch_command_1): Fix typo in error msg.

Tue May 25 16:05:55 1993  Ken Raeburn  (raeburn@cambridge.cygnus.com)

	* elfread.c (elf_symfile_read): Update ELF structure and routine
	names to specify 32-bit versions.
	(elf_symtab_read): Retrieve size field directly from symbol,
	instead of using old kludge.

	* mips-pinsn.c (print_insn): Cast address to bfd_vma before
	calling opcodes library.
	* z8k-tdep.c (print_insn): Likewise.

Tue May 25 13:06:28 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* stabsread.c: Remove all uses of error().  Make error_type and
	read_type_number static.
	(define_symbol): Don't try to deal with a missing symbol
	descriptor which isn't followed by digit, '(', or '-'.
	* stabsread.h: Don't declare read_type_number here.
	* gdbtypes.h: Don't declare error_type here.
	* xcoffread.c: Remove NO_TYPEDEFS code.

Tue May 25 09:33:16 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips-tdep.c: Removed #include of many header files, and #define
	of MIPSMAGIC; no longer used.

Tue May 25 09:36:13 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Many places: replace "the inferior" in messages with "the program"
	or "the program being debugged".
	* inflow.c (try_writing_regs): Remove; it's been #if 0'd forever
	and I'm getting sick of maintaining it.

	* config/i386/linux.mh: Don't use \ newline; the awk scripts don't
	support it.

	* config/i386/go32.mh: Define SER_HARDWIRE.
	* Makefile.in: Define SER_HARDWIRE.
	(DEPFILES): Use it.
	(alldeps.mak): Add SER_HARDWIRE.
	Remove all references to ser-hardwire.{c,o}.
	* configure.in: Remove all ser_hardwire and gdb_serial_driver stuff.

Mon May 24 23:50:05 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sparc-nat.c (store_inferior_registers):  Fill in all members of
	inferior_fp_registers by reading them from the inferior before
	modifying and writing them back.
	Fixes unexplainable inferior FP exceptions after calls to the inferior
	or setting of floating point registers.
	* mips-tdep.c (mips_skip_prologue):  Skip move of argument register
	to register which is generated by gcc-2.4.

Tue May 25 00:42:39 1993  Ken Raeburn  (raeburn@cygnus.com)

	* hppa-pinsn.c: Define OLD_TABLE before including opcode/hppa.h.

Mon May 24 13:55:14 1993  Stu Grossman  (grossman@cygnus.com)

	* config/i386/{i386lynx.mh i386lynx.mt nm-i386lynx.h tm-i386lynx.h
	xm-i386lynx.h}:  New configuration for Lynx.

Mon May 24 10:01:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mipsread.c (parse_symbol): Deal with scVar and scVarRegister.
	* symtab.h: Comment that LOC_REGPARM_ADDR can be call by reference.

	* c-typeprint.c (c_type_print_base): Don't print typedef'd names
	as struct, union, or enum tags.

Mon May 24 01:10:01 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symmisc.c (dump_msymbols): Avoid gdb coredump with stripped
	executable.

Sat May 22 10:03:09 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior),
	infcmd.c (program_info, signal_command):  Use symbolic signal names.

	* inftarg.c (child_wait): Deal with EINTR and include message from
	strerror if printing an error message.

	* main.c (command_line_input): Use STOP_SIGNAL not SIGTSTP.

	* stabsread.c: Remove most uses of lookup_fundamental_type.
	(define_symbol): Use read_type for type of enum constant,
	not just read_type_number.  Also don't call error().
	(define_symbol): For unrecognized constant type, one complaint (the
	one from error_type) is	enough.  Don't make our own in addition.
	(define_symbol): Don't treat an N_FUN 'R' as a prototype.
	* gdbtypes.h: Doc fixes.

Sat May 22 03:33:07 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Fix stack unwinding through _sigtramp on Irix. These patches are from
	Paul Flinders <ptf@delcam.co.uk>.
	* mipsread.c (fixup_sigtramp): Find _sigtramp on Irix even when the
	executable uses sigvec.
	* mips-tdep.c (read_next_frame_reg): Allow tm-file to override
	sigcontext offsets.
	* config/mips/tm-irix3.h: Add sigcontext offsets for Irix.

Sat May 22 00:39:01 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* infrun.c (wait_for_inferior): Clear stop_signal if it should not
	be passed to the inferior to make "handle <signal> nopass nostop" work.

Sat May 22 00:21:41 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/tm-irix3.h: Clean up, use tm-bigmips.h and redefine
	the necessary bits.
	* findvar.c (value_from_register): Fix uninitialized first_addr
	which caused problems with assignment of doubles to register variables
	on some targets.
	* mipsread.c: Remove TM_FILE_OVERRIDE, include tm.h and provide the
	missing mips definitions if necessary.

	Fix handling of double register variables for mips targets and big
	endian hosts. These patches are from Paul Flinders <ptf@delcam.co.uk>.
	* config/mips/tm-mips.h: Increase MAX_REGISTER_{RAW,VIRTUAL}_SIZE to
	  8 bytes for doubles.
	* config/mips/tm-mips.h (REGISTER_CONVERT_TO_TYPE): New macro for
	  conversion of type held in multiple registers to host format.
	* config/mips/tm-mips.h (REGISTER_CONVERT_FROM_TYPE): New macro,
	  companion to REGISTER_CONVERT_TO_TYPE.
	* config/mips/tm-mips.h (EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE):
	  Convert to function calls.
	* config/mips/tm-mips.h (FIX_CALL_DUMMY): New code for big endian
	  mips targets.
	* mips-tdep.c (mips_print_register): Raw buffer now needs just
	  MAX_REGISTER_RAW_SIZE bytes.
	* mips-tdep.c (mips_print_register): Use REGISTER_CONVERT_TO_TYPE
	  (if defined) for doubles.
	* mips-tdep.c: (mips_extract_return_value, mips_store_return_value):
	  New functions, take care of REGISTER_CONVERT_TO/FROM_TYPE.
	* valops.c (value_assign): Use REGISTER_CONVERT_TO_TYPE if
	  defined.
	* findvar.c (value_from_register): Use REGISTER_CONVERT_TO_TYPE if
	  defined.

Fri May 21 09:04:25 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* configure.in: Add i[34]86-*-isc*.

	* stabsread.c: Make sure all complain() pass the address of the struct.

	* xcoffread.c: Make sure all struct complaints are static not auto.

	* Makefile.in: Add rule for xcoffexec.o like that for paread.o.

	* xcoffread.c (process_xcoff_symbol, case C_LSYM): Use define_symbol.

Wed May 19 12:33:59 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/i386/linux.mh: Re-enable coredumps now that they should work.

Wed May 19 15:44:20 1993  K. Richard Pixley  (rich@cygnus.com)

	* config/m68k/tm-m68k.h (FRAME_CHAIN): add missing close paren.

Wed May 19 15:33:57 1993  Stu Grossman  (grossman@cygnus.com)

	* config/pa/nm-hppab.h:  Comment PTRACE_ARG3_TYPE.

Wed May 19 12:33:59 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (INSTALLED_LIBS): New variable.

Tue May 18 14:08:50 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* main.c (quit_command): In the "quit anyway?" message, tell the user
	whether we are planning to detach or kill the program.

	* config/vax/vaxbsd.mh: Add "NAT_FILE= nm-vax.h".
	* config/vax/xm-vaxbsd.h: Use <sys/param.h> not <machine/limits.h>

	* infcmd.c (read_pc): Doc fix.

	* printcmd.c (print_address_symbolic): Use %u not %d for offset.

	* blockframe.c (get_prev_frame_info): If pc in sigtramp, set
	signal_handler_caller.
	* tm-68k.h (FRAME_{CHAIN,SAVED_PC}): Deal with sigtramp.
	* tm-hp300bsd.h: Define SIGTRAMP_{START,END} not IN_SIGTRAMP.
	* inferior.h (IN_SIGTRAMP): Definition moved from infrun.c.
	Use SIGTRAMP_START if defined.
	* infcmd.c (step_1): Use SIGTRAMP_{START,END} if needed.
	* infrun.c (wait_for_inferior): Check IN_SIGTRAMP before SKIP_PROLOGUE.

	* infptrace.c: Remove unused KERNEL_U_ADDR_HPUX code.

	* infcmd.c (step_1): Fix poorly worded error message.

	* config/{i386/linux.mh,m68k/isi.mh} (NATDEPFILES):
	Comment out corelow.c because core dumps are broken on these machines.

	* Makefile.in (depend):  Put "${srcdir}" in generated dependencies
	if srcdir is not ".".
	Also put in -I${BFD_DIR} or -I${READLINE_DIR} for files which need it.
	(INCLUDE_CFLAGS):  Remove BFD_DIR and READLINE_DIR.
	* depend:  Update to latest automatically built version.

Tue May 18 08:10:45 1993  Fred Fish  (fnf@cygnus.com)

	* ChangeLog, ChangeLog-92:  Split ChangeLog at 1993.
	* Makefile.in (NONSRC):  Add ChangeLog-92

Tue May 18 08:03:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* findvar.c ({read,write}_register): Use REGISTER_RAW_SIZE
	not typo RAW_REGISTER_SIZE.

	* frame.h, inferior.h: Doc fixes.

Mon May 17 15:43:03 1993  Stu Grossman  (grossman@cygnus.com)

	* findvar.c (write_register):  Add sanity check for register size.
	(read_register):  Fixup sanity check for register size to be
	consistent with write_register().

Mon May 17 07:36:20 1993  Ian Lance Taylor  (ian@cygnus.com)

	* sparclite/Makefile.in: Add dummy info, install and install-info
	targets.

Thu May 13 07:30:22 1993  Ian Lance Taylor  (ian@cygnus.com)

	* remote-nindy.c: Removed declaration of coffstrip.
	* nindy-share/nindy.c: #if 0 coffstrip routine; no longer used.

Wed May 12 00:35:19 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.9.1 after release and cvs
	tagging.

	* Makefile.in (VERSION):  GDB 4.9 release.

Tue May 11 08:04:41 1993  Fred Fish  (fnf@cygnus.com)

	* README:  Update known bugs to include the Solaris bug that
	leaves core dumps in the current directory when restarting the
	inferior with "run".  Expand on the testsuite information.

	* Makefile.in (VERSION):  Bump to 4.8.96 for what should hopefully
	be the last 4.9 prerelease test archive.

Mon May 10 22:13:23 1993  Jim Kingdon  (kingdon@cygnus.com)

	* config/m68k/xm-hp300bsd.h: Include <sys/param.h> to avoid INT_MAX
	redefined warnings.

Mon May 10 20:00:43 1993  Fred Fish  (fnf@cygnus.com)

	* README, NEWS:  Update for gdb 4.9 release.

Mon May 10 19:38:34 1993  John Gilmore  (gnu@cygnus.com)

	* ch-exp.y (MAX, MIN):  Rename to MAX_TOKEN, MIN_TOKEN.
	* target.c (MIN):  #undef before defining.

Mon May 10 16:03:03 1993  Jim Kingdon  (kingdon@cygnus.com)

        Patch from Jeffrey Law:
        * gdb/config/pa/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.

Mon May 10 15:28:27 1993  Ian Lance Taylor  (ian@cygnus.com)

	* hppa-tdep.c (hppa_push_arguments): Allocate correct amount of
	memory.

Mon May 10 13:14:46 1993  Fred Fish  (fnf@cygnus.com)

	* ch-exp.y (start):  Apply work-around to avoid bison warning.

Sun May  9 07:25:02 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (BISON):  Remove double quotes around BISON
	definition when bison is used.

	* configure.in (hppa*-hp-bsd):  Change to hppa*-hp-bsd*
	* configure.in (hppa*-hp-hpux):  Change to hppa*-hp-hpux*
	* configure.in (m68*-hp-bsd):  Change to m68*-hp-bsd*
	* configure.in (m68*-hp-hpux):  Change to m68*-hp-hpux*
	* configure.in (hppa*-*-bsd):  Change to hppa*-*-bsd*
	* configure.in (hppa*-*-hpux):  Change to hppa*-*-hpux*
	* configure.in (m68*-hp-bsd):  Change to m68*-hp-bsd*
	* configure.in (m68*-hp-hpux):  Change to m68*-hp-hpux*

	* Makefile.in (VERSION):  Bump to 4.8.6.

Sat May  8 12:36:03 1993  Fred Fish  (fnf@cygnus.com)

	* config/pa/xm-hppah.h (MALLOC_INCOMPATIBLE):  Define it, and
	include declarations for malloc/realloc/free.  Both malloc and
	realloc return 'void *' for non-ANSI compilations.

Sat May  8 01:39:30 1993  (pes@regent.e-technik.tu-muenchen.de)

	* coffread.c (read_coff_symtab): Don't fclose stream as it is no
	longer opened twice.

Thu May  6 21:08:55 1993  Jim Kingdon  (kingdon@cygnus.com)

	* solib.c (clear_solib): Don't close bfd if it is NULL.

Thu May  6 20:55:35 1993  Fred Fish  (fnf@cygnus.com)

	* core.c (dis_asm_read_memory):  Cast second arg of
	target_read_memory to "char *".
	* breakpoint.c (watchpoint_check):  Change arg type from PTR to
	"char *", to match other functions called by catch_errors().

Thu May  6 15:47:45 1993  Stu Grossman  (grossman@cygnus.com)

	* More patches from Jeffrey Law (law@cs.utah.edu).
	* gdb/config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.
	* gdb/config/pa/tm-hppah.h (millicode_start, millicode_end):
	Delete unnecessary declarations.

Thu May  6 15:15:46 1993  Stu Grossman  (grossman@cygnus.com)

	* ser-unix.c (wait_for):  Use VTIME to do timeouts instead of
	poll() for termio{s}.

Thu May  6 10:03:41 1993  Jim Kingdon  (kingdon@cygnus.com)

	* i386-tdep.c (i386_frame_num_args): Always return -1.

Wed May  5 15:16:33 1993  Stu Grossman  (grossman@cygnus.com)

        * Patches from Jeffrey Law <law@cs.utah.edu>.
	* gdb/hppa-tdep.c: Declare frame_saved_pc.
	(frameless_function_invocation): New function.
	(frame_saved_pc, init_extra_frame_info): Use 
	frameless_function_invocation.
	* gdb/config/pa/tm-hppa.h (SAVED_PC_AFTER_CALL): Use saved_pc_after
	call instead of just grabbing the value currently in %r2.
	(FRAMELESS_FUNCTION_INVOCATION): Use frameless_function_invocation.
	* gdb/config/pa/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private
	definition and use the common one in tm-hppa.h.
	* gdb/hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
	use unwind descriptors to determine if the frame chain is valid.
	* gdb/hppa-tdep.c (find_dummy_frame_regs):  Rework so that
	it does not assume %r4 is the frame pointer.
	* gdb/hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm,
	and ssm instructions.
	* gdb/hppa-tdep.c (extract_5r_store, extract_5R_store): New
	helper functions for print_insn.
	* gdb/hppa-tdep.c (gcc_p, hpux_cc_p): Delete unused functions.
	* gdb/config/pa/tm-hppa.h (ABOUT_TO_RETURN): Handle a return
	which nullifies the following instruction.

Tue May  4 12:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* infptrace.c [FIVE_ARG_PTRACE]: Define ptrace to call_ptrace and
	pass the 5th arg there, rather than using an ANSI C-specific macro.

	* Makefile.in (depend): Don't include ${CC} command for *.tab.c.

Tue May  4 19:33:12 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump to 4.8.5
	* Makefile.in (INCLUDE_CFLAGS):  Add BFD_DIR and READLINE_DIR
	directories to include search path.
	* Makefile.in (CLIBS, CDEPS, ADD_FILES, ADD_DEPS):  Clean up
	whitespace.
	* Makefile.in (depend):  For gcc -MM line, use INTERNAL_CFLAGS
	* Makefile.in (main.o, dbxread.o, coffread.o, mipsread.o,
	elfread.o, dwarfread.o, stabsread.o, xcoffread.o, xcoffexec.o,
	xdr_ld.o, xdr_rdb.o, nindy.o, Onindy.o, ttybreak.o, ttyflush.o,
	udr.o, udip2soc.o):  Remove explicit rules, use the ones that
	are automatically generated in "depend".
	* Makefile.in (paread.o):  Document why a dependency doesn't get
	automatically generated in "depend" and leave this explicit rule
	in for now (FIXME).
	* depend:  Update to latest automatically generated version.

Tue May  4 12:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c: Doc fix.

	* Makefile.in (depend): Include $(CC) command in generated output.

Mon May  3 22:51:05 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (NONSRC):  Remove ${srcdir}/putenv.c.
	* Makefile.in (SFILES):  Add ${srcdir}/putenv.c.
	* depend:  Update to latest automatically built version.

Mon May  3 19:20:20 1993  Stu Grossman  (grossman@cygnus.com)

	* sparclite/Makefile.in:  Create default target that does nothing
	in order to force user to build by hand.

	* sparclite/Makefile:  Remove.  It's not necessary anymore.

	* ser-unix.c (wait_for):  New routine to handle read timeouts,
	etc.  Uses poll() if HAVE_TERMIO[S] is defined, select() otherwise.

Mon May  3 13:52:08 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips-pinsn.c (print_insn): Return value.

Sun May  2 11:43:57 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (SFILES):  Remove ser-hardwire.c; it is a link made
	at configuration time and doesn't belong in the distribution archive.

	* Makefile.in (NONSRC):  Add 29k-share/README.
	* Makefile.in (HFILES):  Add 29k-share/udi/udiids.h.

	* defs.h (UINT_MAX, LONG_MAX, INT_MAX, INT_MIN):  Replace hex
	constants with slightly more portable definitions (still depends
	on 2's complement arithmetic though).
	* config/i386/nm-linux.h:  Define NO_SYS_REG_H for no <sys/reg.h>.
	* i386v-nat.c (sys/reg.h):  Conditionalize include on
	NO_SYS_REG_H.  Linux doesn't have <sys/reg.h>.
	* ser-unix.c (termio.h):  Include <termio.h> like other files that
	include termio.h, not <sys/termio.h> which may not exist (on
	linux for example).

Sat May  1 16:05:24 1993  Fred Fish  (fnf@cygnus.com)

	* valprint.c (print_longest):  Change format parameter from a
	'char' to an 'int'.  We can't have 'char' parameters with the
	current coding style, where we mix prototypes with pre-ANSI
	style declarations.
	* value.h (print_longest):  Change format parameter in prototype
	from a 'char' to an 'int'.	

Sat May  1 02:47:20 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/tm-mips.h (STAB_REG_TO_REGNUM): Match it with the gcc
	definition.
	* config/mips/tm-irix3.h (STAB_REG_TO_REGNUM): Add.
	* irix4-nat.c (fill_fpregset): Fix bug with indexing into fpregsetp.

Fri Apr 30 17:45:32 1993  Stu Grossman  (grossman@cygnus.com)

        * The following patches are from Jeffrey Law <law@cs.utah.edu>.
	* config/pa/hppabsd.mh:  Add more files to NATDEPFILES.
	* config/pa/xm-hppa[bh].h: Define FIVE_ARG_PTRACE.
	* hppab-nat.c: Delete WANT_NATIVE_TARGET ifdefs.
	ptrace needs 5 arguments, #define ptrace to always
	pass zero as the 5th argument.

Fri Apr 30 15:54:13 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* configure.in: Match z8k-*-sim for z8000.
	* config/h8500/tm-h8500.h, h8500-tdep.c: Lint.
	* remote-hms.c: Update to use new serial protocol.

Fri Apr 30 16:50:38 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* mips-tdep.c: remove include of sys/dir.h.  Doesn't seem
	  necessary and Solaris doesn't have it.

	* Makefile.in (clean-info, install, install-info, info, dvi,
	  check, all): do not echo recursion lines.

	* 29k-share/udip2soc.c (UDIConnect): replace union wait with int.

	* config/sparc/sun4sol2.mh (XM_CLIBS): add -lsocket which is
	  required target ports which use sockets (like a29k-udi).

	* remote-udi.c (udi_wait): Use SIGURG, as Solaris doesn't have SIGLOST.

Fri Apr 30 11:05:42 1993  Jim Kingdon  (kingdon@cygnus.com)

	* ser-unix.c [USE_{TERMIO,ALARM}_TIMEOUT]: New code to deal with
	systems lacking select().

	* Makefile.in (TAGS): Doc fix.  Deal with empty DEPFILES.

Fri Apr 30 10:06:46 1993  Fred Fish  (fnf@cygnus.com)

	* alldeps.mak, depend:  Update with latest automatically built
	versions.

Thu Apr 29 12:03:23 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (SFILES):  Add ser-unix.c and ser-go32.c.

	* Makefile.in (make-proto-testsuite.dir):  New target to make
	prototype testsuite tree.

	* Makefile.in (VERSION):  Bump to 4.8.4.

Thu Apr 29 08:46:22 1993  Jim Kingdon  (kingdon@cygnus.com)

	* stabsread.c (define_symbol): If unrecognized constant type,
	complain() not error().

Thu Apr 29 00:03:59 1993  Fred Fish  (fnf@cygnus.com)

	* infptrace.c:  Add missing close paren to test for
	FIVE_ARG_PTRACE defined.

	* defs.h (CC_HAS_LONG_LONG):  Set up to define CC_HAS_LONG_LONG
	when compiling with gcc, but disable it for now.  See comment.
	* defs.h (LONGEST):  Define as either "long" or "long long"
	based on CC_HAS_LONG_LONG.
	* defs.h (longest_to_int):  Use CC_HAS_LONG_LONG to control
	how longest_to_int is defined.
	* c-valprint.c (c_val_print):  Call print_longest.
	* expprint.c (dump_expression):  Use PRINTF_HAS_LONG_LONG
	instead of LONG_LONG.
	* {printcmd.c, gdbtypes.h} (LONG_LONG):  Replace usages with
	CC_HAS_LONG_LONG.
	* printcmd.c (print_scalar_formatted):  Call print_longest
	and let it figure out what to do for PRINTF_HAS_LONG_LONG.
	* typeprint.c (print_type_scalar):  Call print_longest and let
	it figure out what to do for PRINTF_HAS_LONG_LONG.
	* valprint.c (val_print_type_code_int):  Call print_longest
	and let it figure out what to do for PRINTF_HAS_LONG_LONG.
	* stabsread.c (LONG_LONG):  Replace usages with CC_HAS_LONG_LONG.
	* value.h (struct value):  Replace usage of LONG_LONG with
	CC_HAS_LONG_LONG.
	* value.h (print_longest):  Add prototype.
	* values.c (LONG_LONG):  Replace usages with CC_HAS_LONG_LONG.
	* values.c (unpack_double):  Collapse code that was unnecessarily
	dependent on CC_HAS_LONG_LONG.  Use LONGEST instead of direct types.
	* values.c (value_from_longest):  Remove dependency on
	CC_HAS_LONG_LONG and just use LONGEST.
	* solib.c (solib_map_sections):  Use bfd_get_filename
	to access filename field.
	* solib.c (clear_solib):  Save filename and free it later, after
	bfd_close, since bfd_close may reference it.  Use bfd_get_filename
	to access the field.
	* config/convex/xm-convex.h (LONG_LONG):  Replace with
	CC_HAS_LONG_LONG.  Add define for PRINTF_HAS_LONG_LONG.
	* doc/gdbint.texinfo (LONG_LONG):  Replace with CC_HAS_LONG_LONG.
	Add PRINTF_HAS_LONG_LONG references.

Wed Apr 28 06:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* inflow.c (kill_command), infcmd.c (attach_command),
	remote.c (remote_interrupt_twice): In messages for the user, call it
	"the program" or "the program being debugged" not "the inferior".

	* hp300ux-nat.c: Cast second arg to supply_register calls.
	(_initialize_kernel_u_addr, getpagesize): New functions.
	(store_inferior_register_1): Change arg name from value to val.
	(fetch_core_registers): Make arg core_reg_size unsigned.
	Pass 5 args to ptrace.
	* config/m68k/xm-hp300hpux.h: Define FIVE_ARG_PTRACE.
	Remove KERNEL_U_ADDR stuff.
	* infptrace.c [FIVE_ARG_PTRACE]: Pass 5th arg to ptrace.
	* config/m68k/hp300hpux.m{t,h}:
	Move exec.o from NATDEPFILES to TDEPFILES
	* config/m68k/hp300hpux.mt: Mention GAS requirement.  Remove
	hp-include stuff.  Add m68k-tdep.o to TDEPFILES.

Wed Apr 28 13:27:54 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* ch-exp.y (yylex): Don't STREQ with simplename if it is NULL.

Wed Apr 28 06:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* config/sparc/xm-sun4os4.h [__STDC__]: Don't use MALLOC_INCOMPATIBLE.

Wed Apr 28 11:39:18 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* doc/gdb.texinfo: make node "Shell Commands" unconditional;
	describe `set demangle-style arm' (not cfront); 
	mention can type `q' to discard output, when gdb pages

Wed Apr 28 11:32:39 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* valops.c (search_struct_field): Fix gdb core dump with incomplete
	stabs info.

Wed Apr 28 06:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* remote.c: Change timeout to 2.
	(remote_open): Use unpush_target not remote_close.
	(remote_resume): If siggnal != 0, give warning not error().
	(remote_wait, remote_interrupt, remote_interrupt_twice):
	If we get two interrupts, let the user get out if they want.
	(remote_{kill,mourn}): New functions.
	i386-stub.c (handle_exception, case 'k'): Don't BREAKPOINT.

Wed Apr 28 09:20:55 1993  Ian Lance Taylor  (ian@rtl.cygnus.com)

	* config/sparc/sun4sol2.mh (XM_CLIBS): Define to be -lnsl.

Wed Apr 28 06:11:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Remote targets (mourn): Call unpush_target.

	* config/sparc/xm-sun4os4.h: Declare free() to return int.
	Remove twisted use of PARAMS.

	* config/rs6000/xm-rs6000.h: Don't define MALLOC_INCOMPATIBLE now
	that ansidecl.h assumes ANSI on AIX.

Tue Apr 27 10:01:33 1993  Jim Kingdon  (kingdon@cygnus.com)

	* README: Move most stuff about hacking GDB to doc/gdbint.texinfo.
	(Known bugs): Remove AIX bugs, revise SPARC struct bug description.

Tue Apr 27 13:44:19 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* expprint.c (print_subexp): Fix bug with OP_SCOPE operator output.

Tue Apr 27 10:01:33 1993  Jim Kingdon  (kingdon@cygnus.com)

	* remote-vx.c (net_connect): Allow numeric IP address for host.

Mon Apr 26 17:59:38 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* config/sh/sh.mt, config/sh/tm-sh.h, sh-tdep.c: New files.

Mon Apr 26 07:13:32 1993  Jim Kingdon  (kingdon@cygnus.com)

	* rs6000-tdep.c (branch_dest): Deal with stepping through system call.

	* symtab.h, xcoffread.c: Revise linetable sorting comments.

Sun Apr 25 02:32:16 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* valops.c (value_cast): A cast might also change the object
	representation in C++.
	* dbxread.c (end_psymtab): Copy subpst read_symtab function from pst
	to get the proper read_symtab function when called from mipsread.c.
	* mipsread.c (mipscoff_psymtab_to_symtab, psymtab_to_symtab_1):
	Set cur_bfd in psymtab_to_symtab_1 as CURBFD(pst) is invalid
	for dummy psymtabs, inhibit processing of dummy psymtabs.

Sat Apr 24 19:59:54 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Changes from (or inspired by) AMD:
	* remote-udi.c (udi_attach): Assignments to Space and Offset were
	switched, fix it.
	(udi_wait): Make error message (UDIGetStdout) match error.
	(udi_wait): Handle UDIStdinNeeded.
	* command.c [CANT_FORK]: Use system().
	* utils.c (prompt_for_continue): Allow quit with 'q'.

	* solib.c (solib_add): Don't call special_symbol_handling if there
	were errors in symbol_add_stub.  Also set so->from_tty before
	calling symbol_add_stub.

Fri Apr 23 16:17:00 1993  Stu Grossman  (grossman@cygnus.com)

	* Merge in HPPA/BSD patches from Utah:
	* defs.h:  Add const to 2nd arg of psignal prototype.
	* hppah-tdep.c:  Renamed to hppa-tdep.c 'cuz it's common code with
	BSD now.
	* hppab-core.c:  Deleted.  No longer useful.
	* hppab-nat.c:  #include more files.  Use PT_WUREGS, not
	PT_WRITE_U.
	* hppab-tdep.c:  Deleted.  Supplanted by hppa-tdep.c.
	* config/pa/hppabsd.mh (NATDEPFILES):  Remove hppab-core.o.
	* config/pa/hppabsd.mt (TDEPFILES):  hppab-tdep.o => hppa-tdep.o
	* config/pa/hppahpux.mt (TDEPFILES):  hppab-tdep.o => hppa-tdep.o
	* config/pa/xm-hppab.h:  #define SET_STACK_LIMIT_HUGE.

Fri Apr 23 10:34:02 1993  Stu Grossman  (grossman@cygnus.com)

        * Fix two bugs found by deja-gnu.  One is the incorrect reporting
	of the PC being in a stack dummy when looking at a core file
	without symbols.  The other is the incorrect passing of char
	arguments during expression evaluation (ie: p foo('a','b') would
	mess up the passing of it's args because it wasn't coercing the
	char's to ints).
	* hppah-tdep.c:  Rename global functions to have consistent hppa_
	prefix.  Make more functions static.  Drop hp_ prefix from static
	functions.  (hppa_push_arguments):  Call value_arg_coerce to cast
	char to int args if necessary.  (hppa_fix_call_dummy):  Create
	this routine from FIX_CALL_DUMMY macro in tm-hppa.h.
	* inferior.h (PC_IN_CALL_DUMMY):  Check for frame_address being
	valid (ie: != 0) before doing comparison against PC.
	* valops.c (call_function_by_hand):  Adjust call to FIX_CALL_DUMMY
	to reflect new arguments.
	* config/pa/tm-hppa.h (POP_FRAME, PUSH_ARGUMENTS):  Use new hppa_
	prefix for func	name.  (FIX_CALL_DUMMY):  Move code into
	hppah-tdep.c.

	* testsuite/gdb.t16/gdbme.c, testsuite/gdb.t17/gdbme.c:  Add calls
	to malloc() so that we can test GDB eval of dynamically created
	arrays (like char strings in `print "foo"').

Fri Apr 23 01:28:14 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* printcmd.c (print_address_symbolic): Search symtabs as well as the
	minimal symbols for a nearby symbol.

Thu Apr 22 19:44:21 1993  John Gilmore  (gnu@cacophony.cygnus.com)

	* coffread.c:  Comment changes around minimal symbol recording.

Thu Apr 22 16:24:36 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* command.c: comment changes only.

	* mips-tdep.c (heuristic_fence_post): new static variable.
	  (heuristic_proc_start): use heuristic_fence_post, print better
	  warnings, but only if not stop_soon_quietly.
	  (_initialize_mips_tdep): add_set_cmd for heuristic-fence-post. 

Thu Apr 22 14:50:05 1993  Jim Kingdon  (kingdon@cygnus.com)

	* symtab.h: Fix LOC_REF_ARG comment.

Wed Apr 22 20:21:30 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
			  and Jim Kingdon (kingdon@cygnus.com)

	* stabsread.c (define_symbol): Combine a 'p', 'r' arg pair to a
	LOC_REGPARM symbol.
	* config/sparc/tm-sparc.h (REG_STRUCT_HAS_ADDR): Revise comments.
	symfile.c (compare_symbols): Don't check first character; STRCMP
	does that.

	* stabsread.c (define_symbol): Generate a LOC_REGPARM_ADDR for
	structures that are passed by address in a register.
	* symtab.h (enum address_class): Add LOC_REGPARM_ADDR.
	* findvar.c (read_var_value),
	printcmd.c (address_info, print_frame_args),
	stack.c (print_frame_arg_vars), symmisc.c (print_{,partial_}symbol),
	* symtab.c (lookup_block_symbol): Deal with it.

Thu Apr 22 09:07:24 1993  Jim Kingdon  (kingdon@cygnus.com)

	* objfiles.h (obj_section), objfiles.c (build_objfile_section_table):
	Add objfile field.
	* objfiles.c (find_pc_section): Return a struct obj_section *.
	* sparc-tdep.c (in_solib_trampoline): Deal with find_pc_section return.
	* symfile.c (syms_from_objfile) [IBM6000_TARGET]:
	Don't use obj_section hack.
	* xcoffexec (vmap_symtab): Relocate obj_sections.
	* printcmd.c (containing_function_bounds): Use find_pc_section.

	* symtab.h: Clean up SYMBOL_VALUE comments.

Wed Apr 21 14:29:57 1993  Jim Kingdon  (kingdon@cygnus.com)

	* stack.c (print_frame_arg_vars), printcmd.c (print_frame_args):
	Expand comments about LOC_ARG/LOC_LOCAL pairs.

	* coffread.c (read_coff_symtab): Use rewind before fseek.

Wed Apr 21 14:24:19 1993  Per Bothner  (bothner@cygnus.com)

	* ch-exp.y:  Removed unused structure_primitive_value and FIXME_23.
	* Makefile.in:  Add $(YFLAGS) when using $(YACC).
	* Makefile.in:  Remove message to expect conflicts and unused
	rules in ch-exp.y, since there no longer are any such.

Wed Apr 21 13:27:50 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* stabs.texinfo: fixed bad xrefs (un-initialized statics)

Tue Apr 20 08:55:11 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffexec.c (xcoff_relocate_core): If no exec file, error()
	rather than dumping core.

	* Makefile.in: Add ${srcdir}/ to all source files.
	(alldeps.mak): Add "${srcdir}/" to files when generating alldeps.mak.
	(TAGS): Deal with srcdir and new config directory scheme.
	createtags: Remove.
	Makefile.in (NONSRC): Remove createtags.
	alldeps.mak: Updated.

	* rs6000-tdep.c: Delete unused function print_frame.

	* frame.h (struct frame_info): Doc fix for next_frame.
	New field signal_handler_caller.
	blockframe.c (create_new_frame, get_prev_frame_info),
	config/rs6000/tm-rs6000.h (INIT_EXTRA_FRAME_INFO): Set it (needs
	INIT_FRAME_PC_FIRST).
	stack.c (print_frame_info), rs6000-tdep.c (rs6000_frame_chain):
	Check it.

Mon Apr 19 22:52:33 1993  Stu Grossman  (grossman@cygnus.com)

	* irix4-nat.c (fetch_core_registers):  Special version of this for
	Irix 4.x, which stores regs a bit differently from other /proc
	based systems.
	* procfs.c, core-svr4.c:  Move fetch_core_registers from procfs.c
	to new file core-svr4.c.
	* config/i386/i386sol2.mh, config/i386/i386v4.mh, config/m68k/amix.mh,
	config/i386/ncr3000.mh, config/sparc/sun4sol2.mh:  Add core-svr4.o
	to NATDEPFILES.
	* config/mips/irix4.mh:  Add corelow.o to NATDEPFILES.

Mon Apr 19 11:13:34 1993  Jim Kingdon  (kingdon@cygnus.com)

	* i387-tdep.c: Remove unused #includes.

	* configure.in: Match i[34]86-*-sysv3.2 not i[34]86-*-sysv32.

	* config/i386/nm-i386v.h: Define NO_PTRACE_H.

Sun Apr 18 10:39:35 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c: Nuke NO_DEFINE_SYMBOL code.  There is no going back.

	* stabsread.c (define_symbol): 'R' is synonym for 'P', not 'r'.
	xcoffread.c (process_xcoff_symbol, case C_RPSYM):
	Don't muck with SYMBOL_CLASS.

Fri Apr 16 17:38:33 1993  Stu Grossman  (grossman@cygnus.com)

	* munch:  Don't use head command.  It doesn't exist everywhere.

Fri Apr 16 15:07:57 1993  Fred Fish  (fnf@cygnus.com)

	* inflow.c (new_tty):  Remove spurious 'o' character at end
	of #endif line.

Fri Apr 16 12:27:11 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tdep.c (mips_skip_prologue): Always skip the typical prologue
	instructions and nothing more.
	* mipsread.c (add_line): Add comment why we have to combine line number
	entries for the same line number.

Fri Apr 16 09:42:03 1993  Jim Kingdon  (kingdon@cygnus.com)

	* symtab.{c,h}: Doc fixes (remove symseg references, last relevant
	in gdb 2.8!).

Thu Apr 15 21:16:58 1993  Fred Fish  (fnf@cygnus.com)

	* depend, alldeps.mak:  Update, now that gcc -MM bug is fixed.

Thu Apr 15 12:38:39 1993  Jim Kingdon  (kingdon@cygnus.com)

	* source.c (select_source_symtab): Clean up comment.  Also, if
	we have a current_source_symtab, and s is NULL, return without
	doing anything.
	xcoffread.c (xcoff_symfile_read): Don't call select_source_symtab.
	breakpoint.c (breakpoint_re_set): Don't call select_source_symtab.

Thu Apr 15 02:37:48 1993  John Gilmore  (gnu@cacophony.cygnus.com)

	* dbxread.c (unknown_symchar_complaint):  Add new complaint.
	* stabsread.h:  Declare it.
	* partial-stab.h:  Use it.

	* utils.c (malloc_botch):  Don't forward-declare if NO_MMALLOC.

Wed Apr 14 17:12:51 1993  Jim Kingdon  (kingdon@cygnus.com)

	* stack.c (print_frame_info): Print specially if dummy frame.

	* breakpoint.c: Add comments regarding within_scope future direction.

	* Version 4.8.3.

	* xcoffread.c (record_include_{begin,end}): Change fatal to complain.

Wed Apr 14 14:03:18 1993  Per Bothner  (bothner@cygnus.com)

	* ch-exp.y:  Fix thinko that broke parsing of FALSE.

Wed Apr 14 12:49:29 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* stabsread.c (read_member_functions): Initialize domain for stubbed
	member functions to avoid gdb core dumps when printing pointers
	to member functions.
	* cp-valprint.c (cp_print_class_method): Check for stubbed member
	functions.

Tue Apr 13 08:28:26 1993  Jim Kingdon  (kingdon@cygnus.com)

	* expprint.c (print_subexp): If opcode not found in op_print_tab,
	stop with an error().
	eval.c (evaluate_subexp): Change error message.

	* objfiles.c (build_objfile_section_table): Cast return value
	from obstack_finish.

Mon Apr 12 10:53:50 1993  Jim Kingdon  (kingdon@cygnus.com)

	* config/rs6000/tm-rs6000.h, rs6000-tdep.c: Move FRAME_CHAIN
	to rs6000_frame_chain and deal with it if we're in a signal handler.
	(FRAME_SAVED_PC): Use rs6000_frame_chain.

	* breakpoint.c (within_scope): New function.
	(enable_breakpoint, watchpoint_check): Use it.

	* source.c (openp): Handle "exec-file ./ls" correctly.

	* breakpoint.c (breakpoint_1): Use wrap_here before "at".

Sat Apr 10 01:32:43 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* ch-exp.y:  Clean up lexing of identifiers and
	reserved words.  (E.g. don't recognize FALSEXXX as the
	keyword FALSE followed by the identifier XXX.)
	Also, convert identifiers to lower case.

Fri Apr  9 15:53:19 1993  Stu Grossman  (grossman@cygnus.com)

	* remote-mips.c, remote-monitor.c, remote-st2000.c:  Convert to
	new serial interface.

Fri Apr  9 15:01:12 1993  Stu Grossman  (grossman@cygnus.com)

	* remote.c (remote_open):  Use SERIAL_OPEN instead of serial_open.
	(putpkt, getpkt):  Use new return codes for SERIAL_READCHAR.
	* ser-go32.c:  Return -1 on most failures, 0 on most successes,
	and use new return codes for go32_readchar().
	* ser-unix.c:  Ditto.  Also, move error handling up to caller for
	SERIAL_SETBAUDRATE().
	* serial.c (serial_open):  Internal call, not SERIAL_OPEN to get
	to specific routine.
	(serial_close):  New routine to wrap around device close routine.
	serial.h:  Clean & document return values more clearly.

Fri Apr  9 10:20:55 1993  Jim Kingdon  (kingdon@cygnus.com)

	* rs6000-pinsn.c (print_operand): Deal with no operand instructions.

	* rs6000-pinsn.c (print_operand, case LI): Print condition register
	operand in decimal rather than wrong textual versions.

	* printcmd.c (_initialize_printcmd): Clean up docstring for "x"
	(mention 't', remove false thing about 'g' only good with 'f').

	* breakpoint.h: move "struct breakpoint" and friends to top of
	file so that bpstat_find_breakpoint prototype works.

	* solib.c (struct so_list): Add bfd field.
	(solib_map_sections): Leave bfd open and scratch_pathname allocated.
	Put the bfd in bfd field of the so_list.
	(clear_solib): Free bfd name and close_bfd on the bfd.

Fri Apr  9 00:45:41 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* valarith.c (value_subscript):  Add COERCE_REF.
	* ch-exp.y (operand_5):  We can generalize the 2nd operand
	of a string repetition ot 'literal' without ambiguity.

Thu Apr  8 10:15:10 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.h (struct bpstat): Remove momentary field.
	Remove bpstat_momentary_breakpoint.  This was always kludgy
	and is no longer used.

	* breakpoint.h: Add enum bpstat_what.
	breakpoint.h (struct bpstat), breakpoint.c (bpstat_stop_status):
	stop and print fields of bpstat now per-breakpoint, not just
	one for the whole chain.
	breakpoint.{c,h} (bpstat_what): New function.
	breakpoint.h: Remove bpstat_stop and bpstat_should_print.
	infrun.c: Replace switch (stop_bpstat->breakpoint_at->type)
	with call to bpstat_what.
	README: Remove watchpoint/breakpoint bug from known bugs.

	* breakpoint.h: Prototype bpstat_find_breakpoint.

Thu Apr  8 16:01:21 1993  Fred Fish  (fnf@cygnus.com)

	* symtab.c (find_methods, gdb_mangle_name):  Note that functions
	are g++ specific.
	* symtab.h (VTBL_FNADDR_OFFSET, OPNAME_PREFIX_P, VTBL_PREFIX_P,
	DESTRUCTOR_PREFIX_P):  Note that macros are g++ specific.

Thu Apr  8 12:45:32 1993  Ian Lance Taylor  (ian@cygnus.com)

	* i960-pinsn.c (tabent): Copied struct definition from
	opcodes/i960-dis.c.

Thu Apr  8 10:34:37 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.h (DESTRUCTOR_PREFIX_P): New macro to check if physname
	is a C++ destructor.
	* symtab.c (gdb_mangle_name): Use it.
	* symtab.c (find_methods): Do not add destructors to choice list
	for constructors.
	* symtab.c (decode_line_1): Make breakpoints on destructors work
	for gcc-2.x again.

Wed Apr  7 18:43:09 1993  Stu Grossman  (grossman@cygnus.com)

	* ser-go32.c:  Make it use serial port name.
	* go32-xdep.c:  Put in def for strlwr, needed by dir.o in go32 libc.

	* infcmd.c (read_pc):  Make sure that we read PC_REGNUM when not
	in a system call!

Wed Apr  7 15:52:11 1993  Stu Grossman  (grossman@cygnus.com)

	* configure.in:  Only configure sparclite subdir when target_cpu
	is sparclite.

Wed Apr  7 10:11:22 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c (struct coff_symbol): Change c_sclass to unsigned char.
	Remove FIXME comment regarding this.

	* symfile.h: Change NULL->'\0' in comment (that wasn't a typo).

	* xcoffread.c (read_xcoff_symtab): Use E_SYMNMLEN.

Tue Apr  6 22:30:58 1993  K. Richard Pixley  (rich@cygnus.com)

	Add section table to objfile struct.  Use it for find_pc_section.
	* objfiles.c (add_to_objfile_sections,
	  build_objfile_section_table, find_pc_section): new functions.
	  (allocate_objfile): build section table.
	* objfiles.h (struct obj_section): new structure.
	  (struct objfile): add section table.
	  (find_pc_section): new prototype.
	* solib.[ch] (find_pc_section_from_so_list): removed.
	* sparc-tdep.c: include objfiles.h for find_pc_section.  include
	  symfile.h for objfiles.h.
	  (in_solib_trampoline): adjusted for new find_pc_section
	  prototype.  Removed BAD_RICH_HACK ifdefs.
	* symfile.c (syms_from_objfile): offset objfile sections.
	  (find_pc_section): removed.  Also removed BAD_RICH_HACK ifdefs.
	* symfile.h (find_pc_section): prototype removed.  Also fixed
	  comment typo NUL -> NULL.
	* target.[ch] (find_pc_section_from_targets): removed.
	* config/sparc/tm-sun4sol2.h (BAD_RICHH_HACK): removed.

Tue Apr  6 21:41:13 1993  Stu Grossman  (grossman@cygnus.com)

	* ser-go32.c:  Format.  (go32_open):  Use proper return value.

	* configure.in:  Undo conditional configdirs hack for sparclite.

Tue Apr  6 17:07:37 1993  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* symtab.c (list_symbols): When call break_command, pass both
	filename and function name not just function name.

Tue Apr  6 15:00:09 1993  Fred Fish  (fnf@cygnus.com)

	(Changes and new files to make "none" a full fledged configuration)
	* config/none/{nm-none.h, tm-none.h, xm-none.h}:  New files.
	Currently only tm-none.h has any meaningful contents.
	* config/none/none.mh (NAT_FILE):  Use nm-none.h
	* config/none/none.mh (XM_FILE):  Use xm-none.h
	* config/none/none.mt (TM_FILE):  Use tm-none.h
	* Makefile.in (depend):  Remove comment about parse errors in
	valops.c, it now parses correctly and generates a correct depend
	line.  Remove line that touches xm.h, tm.h, and nm.h; they are
	now linked to config/none/{xm-none.h, tm-none.h, nm-none.h}.

Tue Apr  6 09:54:29 1993  Jim Kingdon  (kingdon@cygnus.com)

	* values.c (USE_STRUCT_RETURN): Only use gcc wierdness for gcc1.

	* xcoffread.c (read_xcoff_symtab): Deal correctly with symbols of
	exactly 8 characters.

Tue Apr  6 10:31:26 1993  Stu Grossman  (grossman@cygnus.com)

	* configure.in:  Sparclite uses sparc config dir.  Also has it's
	own tm- & .mt files now.  Also add sparclite to configdirs.
	* go32-xdep.c:  Dummy routines for sigsetmask & strlwr.
	* config/i386/go32.mh:  Nullify def of TERMCAP.
	* config/i386/xm-go32.h:  Get rid of redef of EIO.
	* config/sparc/{sparclite.mh tm-sparclite.h}:  New sparclite
	specific configs.  Very similar to sun4os4, but without solib.
	* sparclite/{Makefile.in configure.in}:  First cut at making this
	dir configgable.

Tue Apr  6 03:10:44 1993  Stu Grossman  (grossman@cygnus.com)

	* ser-go32.c:  First cut at adapting to new serial interface.

Mon Apr  5 22:29:43 1993  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (SFILES OBS):  Add serial.[co] & ser-hardwire.[co].
	These implement a new serial line interface for talking to remote
	targets.
	* configure.in:  Link ser-hardwire.c to ser-unix.c for all hosts,
	EXCEPT go32, which gets ser-go32.c.
	* remote.c:  Use new serial interface.  More remote-xxx's to be
	converted later.
	* ser-bsd.c, ser-termios.c:  Removed.
	* serial.c:  New.  Implements common operations for all serial
	types.
	* ser-unix.c:  New.  Unix specific serial operations for various
	flavors of Unix (Posix, SysV, BSD).
	* serial.h:  Generic serial interface defs.
	* config/i386/go32.mh, config/i386/i386bsd.h,
	config/m68k/apollo68b.mh, config/sparc/sun4os4.mh:  Remove
	ser-bsd.o from XDEPFILES.  All the magic is now handled in
	configure.in.

Mon Apr  5 20:48:54 1993  Stu Grossman  (grossman@cygnus.com)

	* config/h8500/tm-h8500.h:  Clean up brain damage found by GCC.

Fri Apr  2 08:23:14 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c (xcoff_symfile_offsets): Use 0 not addr for offsets.

	* rs6000-tdep.c (frameless_function_invocation): Don't even think
	about framelessness except on the innermost frame.

	* xcoffexec.c: Call fatal() not abort().

	* stabsread.c (patch_block_stabs): If stab & no symbol, make
	a LOC_OPTIMIZED_OUT symbol.
	symtab.h (enum address_class): Add LOC_OPTIMIZED_OUT.
	findvar.c (read_var_value), printcmd.c (address_info),
	symmisc.c (print_{,partial_}symbol), c-exp.y (variable),
	m2-exp.y (yylex): Deal with it.
	ch-exp.y (yylex): Deal with it.

Thu Apr  1 18:43:02 1993  Stu Grossman  (grossman@cygnus.com)

	* findvar.c (value_from_register):  H8500 specific, check to see
	if we are looking at short pointer.  If so, skip crock.
	* h8500-tdep.c (h8500_frame_chain):  Mask down value from
	read_memory_integer() to avoid getting messed up by sign extension.

Thu Apr  1 16:44:41 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* sparc-tdep.c (in_solib_trampoline), symfile.c (find_pc_section):
	  ifdef protect using BAD_RICH_HACK.  This should be removed soon.
	* config/sparc/tm-sun4sol2.h (BAD_RICH_HACK): define.

Thu Apr  1 09:01:38 1993  Jim Kingdon  (kingdon@cygnus.com)

	* i960-pinsn.c, a29k-pinsn.c: Much abridged, just use libopcodes.a.

	* core.c (dis_asm_print_address): New function.

	* core.c (dis_asm_read_memory): Reinstate 4th arg.  The prototype
	has been fixed.

Thu Apr  1 09:34:43 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* breakpoint.c (bpstat_print, bpstat_stop_status): Change to walk the
	entire breakpoint chain and print only the first entry that needs to
	be printed and needs to be stopped for. Fixes problems with printing
	of multiple breakpoints with different conditions.
	* breakpoint.c (print_it_done): Renamed from print_it_noop as it
	effectively stops printing of the breakpoint chain.
	* breakpoint.c (print_it_noop): New routine to print nothing
	for this breakpoint entry and dont stop printing.
	* breakpoint.c (breakpoint_re_set_one): mention the reevaluated
	watchpoint only if it is enabled.
	* mipsread.c (parse_procedure): Correct incorrect setjmp procedure
	descriptor from the library to make backtraces through setjmp work.
	* mipsread.c (fixup_sigtramp): Correct pcreg and fregoffset for
	sigtramp.
	* mips-tdep.c (read_next_frame_reg): Provide correct values for
	all registers saved within sigtramp, cleanup.

Wed Mar 31 12:52:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* sparc-pinsn.c: Much abridged, just calls version in libopcodes.a.

Wed Mar 31 21:23:41 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* core.c (dis_asm_read_memory): drop fourth arg which conflicts
	  with prototype in ../include/dis-asm.h.

Wed Mar 31 12:52:12 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* core.c (dis_asm_{read_memory,memory_error}): New functions.
	m68k-pinsn.c, h8500-tdep.c, i386-pinsn.c, mips-pinsn.c, z8k-tdep.c:
	Use read_memory_func interface to disassembler.

Tue Mar 30 15:46:14 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	Teach sparc solaris to next over shared library functions.
	* solib.[hc] (find_pc_section_from_so_list): new function and
	  prototype.
	* sparc-tdep.c (in_solib_trampoline): new function.
	* symfile.[hc] (find_pc_section): new function and prototypes.
	* target.[hc] (find_pc_section_from_targets): new function and
	  prototypes.
	* config/sparc/tm-sun4sol2.h (IN_SOLIB_TRAMPOLINE): redefine to
	  in_solib_trampoline.

Tue Mar 30 08:06:24 1993  Jim Kingdon  (kingdon@cygnus.com)

	* infrun.c (wait_for_inferior): Revise comment.

	* command.c (do_setshow_command): Use %u with var_{u,z}integer.

	* command.{c,h}: New var_type var_integer.
	main.c: Use it for history_size.

	* rs6000-tdep.c, xcoffexec.c, config/rs6000/xm-rs6000.h, breakpoint.c:
	Lint and byte-order fixups.

	* breakpoint.c (print_it_normal): Return 0 after hitting watchpoint.

	* breakpoint.h (bpstat): New field print_it.
	breakpoint.c (bpstat_print): Use it.
	(print_it_normal): New function (from old bpstat_print code).
	(bpstat_{alloc,stop_status}): Set print_it field.

	* breakpoint.c (bpstat_stop_status): Use catch_errors when
	evaluating watchpoint condition, via new function watchpoint_check.
	Also stop if watchpoint disabled due to leaving its block.

	* findvar.c [REG_STRUCT_HAS_ADDR]: Add comment.

Tue Mar 30 00:14:38 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-pinsn.c: Add missing include of dis-asm.h.

Mon Mar 29 15:03:25 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (clean, distclean, realclean):  Recursively apply
	to subdirs first, rather than last.  This avoids, for example,
	Makefile being removed in a parent directory before the recursive
	make is run.

	* alldeps.mak, depend:  Update for below changes.

	* config/m68k/tm-m68k.h:  Renamed from config/m68k/tm-68k.h.
	* m68k/{tm-3b1.h, tm-altos.h, tm-amix.h, tm-es1800.h,
	tm-hp300bsd.h, tm-hp300hpux.h, tm-isi.h, tm-news.h, tm-os68k.h,
	tm-st2000.h, tm-sun2.h, tm-sun3.h, tm-vx68.h}:  Include tm-m68k.h
	instead of tm-68k.h.
	* Makefile.in (HFILES):  tm-68k.h renamed to tm-m68k.h.
	* README, a29k-pinsn.c, m68k-pinsn.c, m68k-stub.c, remote-vx.c,
	m68k/{altos.mh, altos.mt, apollo68b.mh, nm-apollo68b.h,
	nm-hp300bsd.h, config/m68k/xm-apollo68b.h}:  Map '68k' to 'm68k'.
	* a29k/tm-a29k.h, doc/gdbint.texinfo:  Account for renaming of
	tm-68k.h to tm-m68k.h.
	* m68k/m68k-fp.mt (TM_FILE):  tm-68k-fp.h renamed to tm-m68k-fp.h.
	* m68k/m68k-nofp.mt (TM_FILE):  tm-68k-nofp.h renamed to
	tm-m68k-nofp.h.

	* config/a29k/tm-a29k.h:  Renamed from config/a29k/tm-29k.h.
	* a29k-pinsn.c:  Renamed from am29k-pinsn.c.
	* a29k-tdep.c:  Renamed from am29k-tdep.c.
	* remote-eb.c, config/a29k/tm-ultra3.h:  Include renamed tm-a29k.h.
	* remote-monitor.c, remote-st2000.c, config/a29k/{nm-ultra3.h,
	tm-a29k.h, xm-ultra3.h}, config/romp/rtbsd.mh, doc/gdbinv-s.texi,
	testsuite/gdb.t15/funcargs.exp, testsuite/gdb.t17/callfuncs.exp:
	Map '29k' to 'a29k'.
	* config/a29k/{a29k-kern.mt, a29k-udi.mt, a29k.mt, ultra3.mt}
	(TDEPFILES):  Use renamed a29k-pinsn.o and a29k-tdep.o.
	* config/a29k/{a29k-udi.mt, a29k.mt} (TM_FILE):  Use renamed
	tm-a29k.h.
	* config/a29k/a29k-udi.mt (MT_CFLAGS):  Remove TARGET_AM29K
	define that does not appear anywhere else in the gdb source tree.
	* doc/gdbinit.texinfo:  Document renaming of tm-29k.h to tm-a29k.h.

Mon Mar 29 13:55:29 1993  Jim Kingdon  (kingdon@cygnus.com)

	* breakpoint.c: Add comments regarding breakpoint_re_set.

	* xcoffread.c (sort_syms, compare_symbols): Remove.
	(xcoff_symfile_read): Use sort_all_symtab_syms from symfile.c
	not our own sort_syms (it is identical).

	* xcoffread.c: Nuke NAMES_HAVE_DOT define (not used).

Sun Mar 28 11:24:37 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* breakpoint.c (breakpoint_re_set_one): Fix storage leak.
	* breakpoint.c (enable_breakpoint): Don't enable watchpoint if it
	went out of scope.
	* exec.c (exec_close): Fix storage leak.
	* exec.c (exec_file_command): Make sure that bfd doesn't realign the
	output sections when patching an executable.
	* mips-nat.c (store_inferior_registers): Use REGISTER_PTRACE_ADDR
	when writing all registers.
	* mips-tdep.c (mips_push_dummy_frame): Save floating point registers
	at the right offset in the dummy frame.
	* mipsread.c (psymtab_to_symtab_1): Do not complain for stProc,
	stStaticProc and stEnd symbols as they are generated by gcc-2.x.
	* mipsread.c (mipscoff_new_init): Initialize stabsread and buildsym.

Fri Mar 26 15:25:05 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (TARFILES):  Avoid trailing backslash.

Fri Mar 26 11:29:30 1993  Jim Kingdon  (kingdon@cygnus.com)

	* breakpoint.{c,h}: Add exp_string to struct breakpoint and use
	it in breakpoint_re_set.
	* breakpoint.c (watch_command, enable_breakpoint): Fetch lazy values.

	* rs6000-tdep.c (single_step): Misc cleanups (CORE_ADDR not int,
	don't use sizeof(int) for target stuff, etc).

Thu Mar 25 15:03:53 1993  Fred Fish  (fnf@cygnus.com)

	* alldeps.mak, configure.in, i860-break.h, i860-opcode.h,
	i860-pinsn.c, i860-tdep.c, config/i860/*:  Remove incomplete i860
	support that can't be integrated anyway due to lack of clear
	authorship.

Thu Mar 25 12:26:50 1993  Stu Grossman  (grossman@cygnus.com)

	* findvar.c (read_register, write_register):  Make these capable
	of reading/writing registers that are shorter than REGISTER_TYPE.
	* (value_from_register):  Install H8500 specific code to return
	proper value when register is being used as a pointer.
	* h8500-tdep.c:  Remove extra defines of NUM_REGS.
	(h8500_skip_prologue):  Use correct lengths for LINK instructions.
	(FRAME_CHAIN):  Change name to h8500_frame_chain.  Rewrite code to
	chain frames properly by combining frame pointer with T reg.
	(init_extra_frame_info):  Delete.  It's now a macro.
	(frame_args_address):  Don't add PTR_SIZE.  Stack args are already
	offset by the correct amount off of the frame pointer.
	(register_byte):  Delete.  It's now a macro.
	(register_raw_size, register_virtual_size):  Delete.  Replaced by
	common routine h8500_register_size, cuz there's no difference
	between the raw & virtual sizes on this machine.
	(register_convert_to_raw, register_convert_to_virtual):  Delete,
	cuz there's no difference between the raw & virtual forms.
	Replaced by memcpy in tm file.
	(register_virtual_type):  Rename to h8500_register_virtual_type.
	Get rid of pointer pseudo-regs, use _REGNUM with all reg names.
	(_initialize_h8500_tdep):  Get rid of crock to ensure that GDB &
	emulator have same reg offsets.  This is all handled in the
	simulator code now.
	(h8500_trapped_internalvar):  New routine to detect references to
	convenience vars acting as pointer pseudo-regs.
	(h8500_value_trapped_internalvar):  Conjure up value of pointer
	pseudo-regs.
	(h8500_set_trapped_internalvar):  Convert set value in real
	register references.
	infcmd.c (read_pc, write_pc):  Add h8500 specific code to handle
	code segment register.
	infrun.c (proceed):  Simplify.  Call write_pc instead of doing it
	by hand.
	(wait_for_inferior):  Add h8500 specific code to add stack segment
	when reading SP register.
	remote-sim.c (fetch_register):  Spacing.
	tm-h8500.h:  #define GDB_TARGET_IS_H8500 to make it easier to
	detect cruft.  Redo all register manipulation stuff.  Get rid of
	pointer pseudo-regs.  (INIT_EXTRA_FRAME_INFO):  Adds stack segment
	to frame pointer.  (IS_TRAPPED_INTERNALVAL,
	VALUE_OF_TRAPPED_INTERNALVAR, SET_TRAPPED_INTERNALVAR):  Use these
	to create internal vars for pointer pseudo-regs.

Thu Mar 25 10:10:28 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in:  Numerous small changes to macro definitions
	and rules for building gdb distribution tree.  Many macros
	eliminated or merged, and rules simplified.
	* alldeps.mak:  Update.
	* depend:  Update.

Wed Mar 24 13:52:29 1993  david d `zoo' zuhn  (zoo at poseidon.cygnus.com)

	* Makefile.in: recurse through SUBDIRS for dvi target too

Wed Mar 24 08:48:30 1993  Jim Kingdon  (kingdon@cygnus.com)

	* Clean up xcoff relocation.
	objfiles.h (struct objfiles): Add section_offsets, num_sections.
	symfile.c (syms_from_objfile), xcoffread.c (xcoff_symfile_offsets):
	Set them.
	symtab.h (struct general_symbol_info): Add section field.
	minsyms.c (prim_record_minimal_symbol{,_and_info}): Set it.
	xcoffread.c: Set section for symbols and msymbols.
	(struct symtab): Add block_line_section field.
	buildsym.c (end_symtab): Set it.
	(end_symtab and callers): Add section parameter.
	objfiles.c (objfile_relocate): New funciton.
	xcoffexec.c (vmap_symtab): Use it.
	xcoffsolib.h (struct vmap): Remove unused fields.
	config/rs6000/tm-rs6000.h, stack.c, xcoffexec.c: Remove
	CORE_NEEDS_RELOCATION, symtab_relocated.
	config/rs6000/tm-rs6000.h: Remove use of loadinfotext.
	rs6000-tdep.c: Make loadinfotext static.
	breakpoint.c (fixup_breakpoints): Doc fix.
	symtab.h (struct symtab), config/rs6000/tm-rs6000.h, buildsym.c
	(end_symtab): primary field replaces nonreloc.

Tue Mar 23 00:10:53 1993  John Gilmore  (gnu@cygnus.com)

	* symtab.h (struct linetable_entry):  Remove confusing comment.

Tue Mar 23 00:01:23 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: add installcheck target

Mon Mar 22 16:17:58 1993  Fred Fish  (fnf@cygnus.com)

	* config/{a29k, arm, convex, gould, h8300, i386, i860, i960, m68k,
	m88k, mips, none, ns32k, pa, pyr, romp, rs6000, sparc, tahoe, vax,
	z8k}:  New directories to hold cpu specific configuration files.
	Naming follows gcc convention.
	* config/{*.mt, *.mh}:  All target and host makefile fragment
	config files moved to an appropriate config/<cpu> subdirectory.
	* nm-*, xm-*, tm-*:  All native, host, and target files, which
	get linked to nm.h, xm.h, and tm.h respectively by configure,
	moved to appropriate config/<cpu> subdirectory.
	* nm-sysv4.h, xm-sysv4.h, tm-sysv4.h, tm-sunos.h, nm-trash.h:
	Native, host, and target files that are common across more than
	one cpu architecture and included by one of the configured
	native, host, or target files, get moved to config directory.
	* Makefile.in (INCLUDE_CFLAGS):  Add -I${srcdir}/config to
	pick up native, host, or target include files moved to one of
	the config subdirectories, and that are included by other files.
	* Makefile.in (alldeps.mak):  Modify to account for new config
	directory structure.
	* alldeps.mak, depend:  Update for new config directory structure.
	* config/*/[ntx]m-*.h:  Modify all files that include other
	[ntx]m-*.h files to use path relative to gdb/config.  I.E.
	"a29k/tm-ultra3.h" includes "a29k/tm-29k.h" rather than just
	"tm-29k.h".
	* remote-eb.c (tm-29k.h):  Include a29k/tm-29k.h.
	* mipsread.c (tm-mips.h):  Include mips/tm-mips.h.
	* i860-pinsn.c (tm-i860.h):  Include i860/tm-i860.h.
	* configure.in:  Default gdb_host_cpu to host_cpu, and remap
	the ones where the default is not unique or different than the
	config subdirectory name.  Similarly, handle gdb_target_cpu.
	Modify configure.in as appropriate to make use of gdb_host_cpu
	and gdb_target_cpu to find makefile fragments and make links.

Mon Mar 22 12:36:24 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c (compare_blocks): Sort blocks with the same start
	address by decreasing ending address.

Mon Mar 22 20:36:04 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mipsread.c (parse_procedure): Save cur_fdr accross call to
	lookup_symbol as it might get clobbered by the call.

	* mipsread.c (parse_partial_symbols): Use ADD_PSYMBOL_ADDR_TO_LIST.
	The previous code did not initialize the language field for the psymtab
	entry.

Sat Mar 20 00:33:39 1993  John Gilmore  (gnu@cygnus.com)

	* c-exp.y (parse_number):  Avoid shift warning.
	* serial.h (struct ttystate):  Declare empty one on DOS.

Fri Mar 19 12:59:50 1993  Stu Grossman  (grossman@cygnus.com)

	* xm-sun4os4.h:  Return type of free() should be void, not int.

	* vx-share/vxWorks.h:  Remove #def of NULL.

Fri Mar 19 11:28:18 1993  Jim Kingdon  (kingdon@cygnus.com)

	* tm-rs6000.h: Nuke no-op STAB_REG_TO_REGNUM.

Fri Mar 19 07:40:09 1993  Steve Chamberlain  (sac@cygnus.com)

	* z8k-tdep.c (print_insn): Include the new dis-asm header file.

Thu Mar 18 14:26:57 1993  Per Bothner  (bothner@rtl.cygnus.com)

	* ieee-float.c: Moved to ../libiberty.
	* ieee-float.h: Moved to ../include.
	* Makefile.in:  Update accordingly.
	* i386-pinsn.c (print_insn), m68k-pinsn.c (print_insn):
	Convert to stubs that call disassemblers in ../opcodes/*-dis.c.
	* m68k-tdep.c:  Removed definition of ext_format ext_format_68881;
	it is now in ../opcodes/m68881-ext.c.
	* mips-tdep.c (mips_skip_prologue):  Try to skip more of the
	prologue (some callers _do_ care).
	* mips-pinsn.c (print_insn), z8k-tdep.c (print_insn):  Convert to
	new interface of ../opcodes/*-dis.c. 
	* ch-exp.y:  Add #include <ctype.h>.

Thu Mar 18 11:57:49 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffexec.c (exec_close): Don't close exec_bfd twice.

	* xcoffread.c (enter_line_range): endaddr is exclusive, not inclusive.

Wed Mar 17 09:46:31 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c (arrange_linetable): Use x{m,re}alloc not {m,re}alloc.

Wed Mar 17 11:28:11 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* z8k-tdep.c (extract_return_value, write_return_value,
	store_struct_return): New functions from macros in tm-z8k.h.
	
Wed Mar 17 11:23:06 1993  Fred Fish  (fnf@cygnus.com)

	* valops.c (value_arg_coerce):  Apply temporary patch to
	fix problem with coercion of array and function types when
	passed as arguments to C functions, pending a more complete
	review of when and how coercion should be done, depending
	upon context and language.

Wed Mar 17 09:46:31 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c (MIN_TBTABSIZ): Change to 12.

	* xcoffread.c (xcoff_symfile_read): Only read stringtab and
	debugsec if there are a non-zero number of symbols.

Tue Mar 16 18:08:45 1993  John Gilmore  (gnu@cygnus.com)

	* command.c (show_user):  Avoid fprintf_filtered botch (AGAIN!).

Tue Mar 16 15:18:17 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffexec.c (add_vmap): Wrap symbol read in catch_errors.

	* xcoffread.c (read_symbol_lineno): Look to end of symbols for .bf,
	not just 50 symbols.
	(symtbl_num_syms): New variable.
	(read_xcoff_symtab): Set it.
	(read_symbol_nvalue): Check for bad symno.
	(read_symbol_{lineno,nvalue}, callers): Don't pass symtable; it's
	always symtbl.

Tue Mar 16 10:09:05 1993  Stu Grossman  (grossman@cygnus.com)

	* config/rs6000.mh:  Get rid of -Dfd_set=int crock.
	This is defined in defs.h if necessary.
	* vx-share/vxWorks.h:  Remove #defs of min and max.
	* vx-share/xdr_ld.c, vx-share/xdr_ptrace.c,
	vx-share/xdr_rdb.c:  include defs.h.

Fri Mar 12 09:33:23 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffread.c (retrieve_tracebackinfo): Move assignment out
	of while condition.

	* xcoffread.c (enter_line_range): complain() on bad endoffset.
	xcoffread.c: Doc fixes.

Tue Mar  9 09:56:12 1993  Jim Kingdon  (kingdon@cygnus.com)

	* tm-rs6000.h (CORE_NEEDS_RELOCATION): Just call xcoff_relocate_core.
	xcoffexec.c (xcoff_relocate_core): New function.
	(text_adjustment): Removed.
	(add_vmap): Return the vmap.
	rs6000-tdep.c (add_text_to_loadinfo): No longer static.

Fri Mar  5 05:22:46 1993  Jim Kingdon  (kingdon@cygnus.com)

	* xcoffsolib.h: Add objfile member to struct vmap.
	xcoff{exec,solib}.c: Use it, not lookup_objfile_bfd.
	xcoffexec.c (add_vmap): Allocate objfiles here.

Sun Mar 14 02:54:15 1993  John Gilmore  (gnu@cygnus.com)

	Support 68000 series without floating point.

	* configure.in (m68000-*-{aout,elf,coff}):  New configs.
	* tm-68k-nofp.h:  New file, lacks 68881 support.
	* config/m68k-nofp.mt:  New file.

Sun Mar 14 02:30:08 1993  John Gilmore  (gnu@cygnus.com)

	Remove a few remaining underscore/no-underscore remnants from
	config files.

	* config/{m68k-un.mt, sparc-un.mt}:  Remove.
	* config/m68k-noun.mt: Rename to m68k-fp.mt.
	* config/sparc-noun.mt: Rename to sparc-em.mt.
	* tm-68k-noun.h, tm-spc-noun.h:  Remove.
	* tm-68k-un.h:  Rename to tm-68k-fp.h.
	* tm-spc-un.h:  Rename to tm-spc-em.h.
	* tm-sun4sol2.h: Cleanup.
	* configure.in (m68k-*, sparc-* targets):  Corresponding changes.

Sat Mar 13 14:58:22 1993  John Gilmore  (gnu@cygnus.com)

	* symmisc.c (std_in, std_out, std_err):  Move initializations
	to runtime code, in case they aren't constant.

Fri Mar 12 16:23:54 1993  K. Richard Pixley  (rich@cygnus.com)

	* symtab.c (find_pc_symtab): some object file formats, notably
	  mips, have holes in the address ranges of symtabs.  Change
	  this algorithm from first hit to tightest fit.

	* mips-tdep.c (heuristic_proc_start): if we walk the pc into the
	  fence post without finding the enclosing function, then print a
	  warning.

Thu Mar 11 09:33:01 1993  Fred Fish  (fnf@cygnus.com)

	* utils.c (fputs_demangled, fprint_symbol):  Remove.
	* utils.c (fprintf_symbol_filtered):  New function which combines
	the functionality of fputs_demangled and fprint_symbol.  Uses a
	caller provided language parameter to select the appropriate 
	demangler, and caller provided args to pass to the demangler.
	* defs.h (enum language):  Move further up in file so enum can
	be used in prototypes.
	* defs.h (fputs_demangled, fprint_symbol):  Remove prototypes.
	* defs.h (fprintf_symbol_filtered):  Add prototype.
	* c-typeprint.c (cp_type_print_method_args):  Replace calls to
	fputs_demangled with call to fprintf_symbol_filtered.
	* cp-valprint.c (demangle.h):  Include
	* cp-valprint.c (cp_print_value_fields):  Replace calls to
	fprint_symbol with calls to fprintf_symbol_filtered.
	* printcmd.c (print_frame_args):  Replace call to fprint_symbol
	with call to fprintf_symbol_filtered.
	* stack.c (print_frame_info):  Remove obsolete code so we don't
	have to update fputs_demangled usage in it.
	* stack.c (print_frame_info, frame_info):  Add language variable
	to pass to fprintf_symbol_demangled and initialize it from the
	symbol's language.  Replace calls to fputs_demangled with calls
	to fprintf_symbol_filtered.
	* symtab.c (find_methods):  Replace call to fputs_demangled with
	call to fprintf_symbol_filtered.
	* ch-valprint.c (demangle.h):  Include.
	* ch-valprint.c (chill_print_value_fields):  Replace call to
	fprint_symbol with call to new fprintf_symbol_filtered.

Wed Mar 10 17:37:11 1993  Fred Fish  (fnf@cygnus.com)

	* Makefile.in (VERSION):  Bump version to 4.8.2.

	* main.c (source_command):  Require an explicit pathname of file
	to source, since previous behavior of defaulting to gdb init file
	was troublesome and undocumented.
	* printcmd.c (disassemble_command):  Add missing '{}' pair to
	else with two statements.  Bug reported by Stephane Tsacas
	<slt@isoft.fr>.
	* symtab.c (find_pc_line):  Don't complain about zero length or
	negative length line numbers for the moment, since we may not own
	the terminal when called, such as when single stepping.  (FIXME)
	* language.h (CAST_IS_CONVERSION):  True if current language is
	C++ as well as C.  Fix from Peter Schauer.
	* environ.c (get_in_environ, set_in_environ, unset_in_environ):
	Use STREQN macro rather than bare '!strncmp()'.
	* environ.c (unset_in_environ):  Avoid use of memcpy on
	overlapping memory regions, as suggested by Paul Eggert
	<eggert@twinsun.com>.
	* c-exp.y (%union struct):  Remove unused ulval as suggested
	by Paul Eggert <eggert@twinsun.com>.

Mon Mar  8 19:03:06 1993  Fred Fish  (fnf@cygnus.com)

	* main.c (gdbinit):  Make static.
	* main.c (inhibit_gdbinit):  Move to file scope.
	* main.c (main):  Remove local inhibit_gdbinit.
	* main.c (source_command):  Don't source '.gdbinit' file by
	default if gdb has been told to ignore it.

Sun Mar  7 21:58:53 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in (MAKEOVERRIDES): Define to be empty for GNU Make
	3.63.

Fri Mar  5 17:39:45 1993  John Gilmore  (gnu@cacophony.cygnus.com)

	* printcmd.c (print_address_symbolic):  Only print if offset
	is shorter than max_symbolic_offset.
	(initialize_printcmd):  `set print max-symbolic-offset'.

	* am29k-tdep.c (TAGWORD_ZERO_MASK):  New #define.
	(examine_tag):  Use it.
	(read_register_stack):  Only look in the local registers for a
	memory address if it's between rfb and rsp; go to memory otherwise.
	(initialize_29k):  Fix call_scratch_address doc.  Remove reginv_com.
	(reginv_com):  Remove ancient kludge command.

Fri Mar  5 17:16:26 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* tm-irix3.h (ZERO_REGNUM): copy this macro from tm-mips.h so that
	  irix4 will again compile.

	* tm-mips.h (GDB_TARGET_IS_MIPS): no longer used, now removed.

	* configure.in: accept mips-sgi-irix4* for irix4.

Fri Mar  5 07:49:48 1993  Steve Chamberlain  (sac@lisa.cygnus.com)

	* z8k-tdep.c (print_register_hook): Lint.

Thu Mar  4 17:42:03 1993  John Gilmore  (gnu@cygnus.com)

	Lint fixes from Paul Eggert (eggert@twinsun.com):

	* command.c (do_setshow_command):  var_uintegers are unsigned.
	* sparc-tdep.c (save_insn_opcodes, restore_insn_opcodes): 
	unsigned, since they use hex values with the high bit set.

Thu Mar  4 08:22:55 1993  Fred Fish  (fnf@cygnus.com)

	Fixes submitted by Karl Berry (karl@nermal.hq.ileaf.com):
	* m88k-pinsn.c (sprint_address):  Use SYMBOL_NAME macro to
	access symbol name.  
	* m88k-nat-c (SXIP_OFFSET, SNIP_OFFSET, SFIP_OFFSET):  Enclose
	macro definitions in parenthesis.

	* dbxread.c (dbx_symfile_init):  Catch the case where there is
	no string table, but the only way we find out is by reading zero
	bytes from EOF.

Wed Mar  3 15:51:28 1993  Fred Fish  (fnf@cygnus.com)

	* dbxread.c (dbx_symfile_init):  Make size of the string table
	size field a define (DBX_STRINGTAB_SIZE_SIZE).  Ensure that the
	offset to the string table is nonzero and handle the nonexistant
	string table case, should it occur.  Ensure that the string table
	size read from the file is reasonable, with a minimum lower bound
	of DBX_STRINGTAB_SIZE_SIZE instead of zero.

Wed Mar  3 07:23:03 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Makefile.in: Changes to build testsuite correctly.
	(FLAGS_TO_PASS): Added CXX and CXXFLAGS.
	(CC_FOR_TARGET, CXX, CXX_FOR_TARGET): New variables.
	(TARGET_FLAGS_TO_PASS): New variable.
	(SUBDIRS): Added testsuite.
	(all): Build testsuite using TARGET_FLAGS_TO_PASS, so that
	testsuite is compiled with CC_FOR_TARGET rather than CC.

Tue Mar  2 17:57:56 1993  Fred Fish  (fnf@cygnus.com)

	* dbxread.c (dbx_symfile_init):  Fix for nonexistant string table,
	reported by mycroft@gnu.ai.mit.edu.

	(Ultrix 2.2 support from Michael Rendell <michael@mercury.cs.mun.ca>)
	* configure.in (vax-*-ultrix2*):  New triplet.
	* config/vaxult2.mh:  New file.
	* xm-vaxult2.h:  New file.

	* c-exp.y (parse_number):  Change high_bit to unsigned.
	* demangle.c:  Change all references to cfront to ARM, since the
	actual algorithm is the one specified in the Annotated Reference
	Manual.  This was confusing users into thinking that full cfront
	support was implemented.
	* dwarfread.c (CFRONT_PRODUCER):  Remove, was never really used.
	* eval.c (evaluate_subexp):  For STRUCTOP_PTR pass the arg type
	directly to lookup_struct_elt_type, which will do the
	dereferencing itself.
	* gdbtypes.c (lookup_struct_elt_type):  Expand comments.  Fix
	NULL dereferencing bug for unnamed structs, comment out
	questionable code.
	
Mon Mar  1 17:54:41 1993  John Gilmore  (gnu@cygnus.com)

	* coffread.c (process_coff_symbol):  Change PCC argument correction
	so that it only happens on big-endian targets; so that it only
	happens if the short or char argument is aligned on an int
	boundary; and so that it changes the location, rather than the
	type, of the argument.  These changes tend to parallel similar
	(old) changes in stabsread.c.

	* coffread.c (coff_read_enum_type):  Use the specified size for
	enums, don't assume that they are int-sized.

	* c-valprint.c (c_val_print):  Don't assume enums are the same as
	ints.

	* coredep.c:  Handle NO_PTRACE_H in coredep.c.  Fix by Michael
	Rendell, <michael@mercury.cs.mun.ca>.

Mon Mar  1 09:25:57 1993  Fred Fish  (fnf@cygnus.com)

	* language.h (local_decimal_format_custom):  Add prototype.
	* language.c (local_decimal_format_custom):  Add function, bug
	reported by Robert R. Henry (rrh@tera.com).

Fri Feb 26 18:33:18 1993  John Gilmore  (gnu@cacophony.cygnus.com)

	* xcoffexec.c (vmap_ldinfo):  Fix "/" for '/' typo, reported
	by Josef Leherbauer, joe@takeFive.co.at.

Wed Feb 24 19:17:11 1993  John Gilmore  (gnu@cacophony.cygnus.com)

	* symfile.c (syms_from_objfile), tm-29k.h, tm-3b1.h, tm-68k-un.h,
	tm-altos.h, tm-arm.h, tm-convex.h, tm-es1800.h, tm-h8300.h,
	tm-hp300bsd.h, tm-hp300hpux.h, tm-hppa.h, tm-i386bsd.h,
	tm-i386v.h, tm-i960.h, tm-irix3.h, tm-isi.h, tm-linux.h,
	tm-m88k.h, tm-merlin.h, tm-mips.h, tm-news.h, tm-np1.h, tm-pn.h,
	tm-pyr.h, tm-rs6000.h, tm-spc-un.h, tm-sun386.h, tm-sunos.h,
	tm-symmetry.h, tm-sysv4.h, tm-tahoe.h, tm-umax.h, tm-vax.h,
	tm-vx68.h, tm-z8k.h:  Remove remnants of NAMES_HAVE_UNDERSCORE.

Wed Feb 24 07:41:15 1993  Fred Fish  (fnf@cygnus.com)

	* symtab.h (SYMBOL_INIT_DEMANGLED_NAME):  Initialize contents
	of demangled name fields to NULL if no demangling exists for
	a symbol.  SYMBOL_INIT_LANGUAGE_SPECIFIC does this for new
	symbols if their language is known at the time they are created,
	but sometimes the language is not known until later.

	* ch-typeprint.c (chill_print_type_base):  Name changed to
	chill_type_print_base to match pattern for C and C++ names.
	* ch-typeprint.c (chill_print_type):  Change "char" to "CHAR"
	to be consistent with other usages.
	* ch-typeprint.c (chill_type_print_base):  Add support for
	printing Chill STRUCT types.
	* ch-valprint.c:  Include values.h.
	* ch-valprint.c (chill_print_value_fields):  New function and
	prototype for printing Chill STRUCT values.
	* ch-valprint.c (chill_val_print):  Fix call to val_print_string
	that was being called with two args instead of three.
	* ch-valprint.c (chill_val_print):  Call chill_print_value_fields
	to print Chill STRUCT values.

Tue Feb 23 18:58:11 1993  Mike Werner  (mtw@poseidon.cygnus.com)

	* configure.in: added testsuite to configdirs.

Tue Feb 23 11:46:11 1993  Mike Stump  (mrs@cygnus.com)

	* doc/stabs.texi: The `this' pointer is now known by the name
	`this' instead of `$t'.

Tue Feb 23 11:21:33 1993  Fred Fish  (fnf@cygnus.com)

	* dwarfread.c (read_tag_string_type):  Rewrite to allow forward
	references of TAG_string_type DIEs in user defined types.
	* ch-lang.c (chill_create_fundamental_type):  Track compiler
	change that now emits debugging info with the type long for Chill
	longs.

Mon Feb 22 15:21:54 1993  Ian Lance Taylor  (ian@cygnus.com)

	* remote-mips.c: New file; implements MIPS remote debugging
	protocol.
	* config/idt.mt: New file; uses remote-mips.c
	* configure.in (mips-idt-ecoff): New target; uses idt.mt.

	* mips-tdep.c (mips_fpu): New variable; controls use of MIPS
	floating point coprocessor.
	(mips_push_dummy_frame): If not mips_fpu, don't save floating
	point registers.
	(mips_pop_frame): If not mips_fpu, don't restore floating point
	registers.
	(_initialize_mips_tdep): New function; let the user reset mips_fpu
	variable.
	* tm-mips.h (EXTRACT_RETURN_VALUE, STORE_RETURN_VALUE): If not
	mips_fpu, don't use fp0 as floating point return register.
	(FIX_CALL_DUMMY): If not mips_fpu, don't save floating point
	registers.

Mon Feb 22 07:54:03 1993  Mike Werner  (mtw@poseidon.cygnus.com)

        * gdb/testsuite: made modifications to testcases, etc., to allow
        them to work properly  given the reorganization of deja-gnu and the
        relocation of the testcases from deja-gnu to a "tool" subdirectory.

Sun Feb 21 10:55:55 1993  Mike Werner  (mtw@poseidon.cygnus.com)

	* gdb/testsuite: Initial creation of gdb/testsuite.
	Migrated dejagnu testcases and support files for testing nm to
	gdb/testsuite from deja-gnu.  These files were moved "as is"
	with no modifications.	This migration is part of a major overhaul
	of dejagnu.  The modifications to these testcases, etc., which
	will allow them to work with the new version of dejagnu will be
	made in a future update.

Fri Feb 19 18:36:55 1993  John Gilmore  (gnu@cygnus.com)

	* NEWS:  Add reminders for next release.

Fri Feb 19 10:01:39 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c (parse_lines): Correct check for files compiled with
	-g1.

Fri Feb 19 05:56:15 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  4.8.1 to distinguish local versions.

Fri Feb 19 01:32:58 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  GDB-4.8 release!
	* README, NEWS:  Update for release.

Thu Feb 18 22:44:40 1993  Stu Grossman  (grossman@cygnus.com)

	* am29k-pinsn.c (print_insn):  Minor nits with const.
	* am29k-tdep.c:  More minor nits with arg types for
	supply_register, NULL vs. 0, read_register_gen, & reginv_com.

Thu Feb 18 22:38:03 1993  John Gilmore  (gnu@cygnus.com)

	* gcc.patch:  Update for a different GCC (G++) bug.
	* main.c (print_gdb_version):  Update copyright year to 1993.
	* nm-hp300bsd.h:  Decide whether this is BSD 4.3 or 4.4,
	conditionalize this file on it.  FIXME, right way is to split
	these into two config files.  
	(ATTACH_DETACH):  Define for BSD 4.4
	(PTRACE_ARG_TYPE):  caddr_t for BSD 4.4, unset for 4.3.
	(U_REGS_OFFSET):  Revise for 4.4.
	(REGISTER_U_ADDR):  Separate for 4.4, but it doesn't work yet.
	* xm-hp300bsd.h:  Move definitions of UINT_MAX, INT_MAX, INT_MIN,
	LONG_MAX into this file to avoid cpp "redefinition" warnings.

Thu Feb 18 16:13:28 1993  K. Richard Pixley  (rich@rtl.cygnus.com)

	* nm-hp300bsd.h (PTRACE_ARG3_TYPE): FSF's hp300's have int* not
	  caddr_t.

Thu Feb 18 04:10:06 1993  John Gilmore  (gnu@cygnus.com)

	* c-lang.c (c_printstr):  Bugfix for length==0 case.

	* c-lang.c (c_printstr):  If a C string ends in a null, don't
	print the null.

Thu Feb 18 02:39:21 1993  Stu Grossman  (grossman at cygnus.com)

	* defs.h (STRCMP):  Make it work for unsigned chars.

Thu Feb 18 01:56:06 1993  John Gilmore  (gnu@cygnus.com)

	* nm-hp300bsd.h (ATTACH_DETACH, PTRACE_ATTACH, PTRACE_DETACH): define.
	* config/hp300bsd.mh (REGEX, REGEX1):  Define.
	* m68k-pinsn.c (BREAK_UP_BIG_DECL, AND_OTHER_PART):  #if __GNUC__,
	define to kludge the large opcode table into two smaller tables,
	since GCC take exponential space to build the table.  Lint.
	(NOPCODES):  Remove, use "numopcodes" from opcode/m68k.h instead.

Wed Feb 17 19:24:40 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  Roll to 4.7.9.
	* xm-hp300bsd.h:  Define PSIGNAL_IN_SIGNAL_H and put a compatible
	definition here, to handle both BSD 4.3 and 4.4 systems.
	* mipsread.c (ZMAGIC):  #undef to avoid duplicate define.
	* remote.c (alarm):  Move declaration to global level, before 
	first reference to it.
	* tm-i386bsd.h (NUM_REGS):  There are only eleven, not twelve.
	* dbxread.c (process_one_symbol):  Cast to unsigned char, not int.

Wed Feb 17 13:40:29 1993  K. Richard Pixley  (rich@cygnus.com)

	* remote.c (readchar): forward declare alarm which otherwise looks
	  like an undeclared variable to gcc.

	* dbxread.c (process_one_symbol): cast enum value N_SO into int
	  when comparing against an int.  Avoids superfluous warning from
	  vax ultrix 4.2 cc.

	* inflow.c (set_sigint_trap): add cast to assignment from signal.
	  Avoids superfluous warnings from some systems and/or compilers
	  (like vax ultrix 4.2.)

	* language.c (struct op_print unk_op_print_tab): use the enum
	  values rather naked zeros as initializers.  Avoids warnings from
	  ultrix type compilers.

Tue Feb 16 00:53:20 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (VERSION):  Roll to 4.7.6.
	(SFILES_SUBDIR):  Add 29k-share/udi_soc.
	(SFILES_SUBSUBDIR):  Move 29k-share/udi files to this macro.
	(alldeps.mak):  Make ALLDEPFILES_SUBSUBDIR for files in sub sub dirs.
	(ALLDEPFILES_SUBSUBDIR):  Depend on this for deeper dep files.
	(HFILES):  Remove all nm-* except nm-trash.h.  Add ns32k-opcode.h.
	(depend):  Fix bug where nm-files in config files weren't noticed.
	(make-proto-gdb-1):  Avoid changing directories while building new
	prototype.  Build SFILES_SUBSUBDIR with longer symlinks.

Mon Feb 15 20:48:09 1993  John Gilmore  (gnu@cygnus.com)

	* remote.c:  Improve error recovery.  Allow user to break out
	of initial connection attempt with INTERRUPT.  Treat a timeout
	while waiting for remote packet like a retry, unless the remote
	side is actively running user code.  Fix a few long printf_filtered's.

	* xcoffread.c (read_xcoff_symtab):  Don't use null symbol name for
	trampoline symbols.

	* buildsym.c (start_subfile):  Allow null file name.

Fri Feb 12 15:46:49 1993  K. Richard Pixley  (rich@cygnus.com)

	* xcoffread.c (process_xcoff_symbol, read_symbol_lineno): complain
	  expects a pointer to complaint rather than a complaint
	  structure.
	  (process_linenos): free the previously allocated subfile name,
	  then allocate the new one from the heap.

Fri Feb 12 08:06:05 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* h8300-tdep.c, tm-h8300.h: turn off some experimental features

Thu Feb 11 00:59:07 1993  John Gilmore  (gnu@cygnus.com)

	* stabsread.c (dbx_lookup_type):  Handle negative type numbers.
	Previously, would bogusly index off the bottom of type_vector.
	(rs6000_builtin_type):  Accept type number as argument.
	(read_type, case '-'):  Handle negatives like any other type number.

	* symfile.c (deduce_language_from_filename):  Handle null name.

	* mips-tdep.c (isa_NAN):  Fix byte order dependency.
	Reported by Nobuyuki Hikichi <hikichi@sra.co.jp>,
	fixed by sato@sm.sony.co.jp.

	* xcoffread.c (parmsym):  Don't use an initializer to set up
	this struct symbol.  Set it up in initialize_xcoffread.
	(read_xcoff_symtab, xcoff_symfile_read):  Surround code that only
	works on real rs/6000 target with #ifndef FAKING_RS6000.

Wed Feb 10 23:42:37 1993  John Gilmore  (gnu@cygnus.com)

	* stabsread.c (rs6000_builtin_type):  Move function from
	xcoffread.c:builtin_type.
	* xcoffread.c (builtin_type):  Move to stabsread.  Remove
	IBM6000_HOST dependency.  Move misplaced comments.
	(various):  Change printf's to complaints.
	(patch_block_stabs, process_xcoff_symbol case C_DECL):  Add
	objfile argument to read_type calls under #if 0.
	(process_xcoff_symbol case C_RSYM):  Fix typo in #ifdef.
	* xcoffexec.c (map_vmap):  Don't allocate an objfile for the exec_file.
	* Makefile.in:  xcoffread.o is not built by default.
	* xm-rs6000.h (IBM6000_HOST):  Remove.
	* config/rs6000.mh (NATDEPFILES): xcoffread.o is native only.
	* doc/gdbint.texinfo:  Eliminate IBM6000_HOST, document
	IBM6000_TARGET.

Wed Feb 10 18:31:20 1993  Stu Grossman  (grossman at cygnus.com)

	* findvar.c (read_var_value):  If REG_STRUCT_HAS_ADDR, then set
	VALUE_LVAL to be lval_memory so that we don't try to modify wild
	register numbers when user tries to modify elements in structs
	passed as arguments.
	* inflow.c (child_terminal_info):  Move banner outside of system
	specific #ifdefs.
	* tm-hppa.h (REG_STRUCT_HAS_ADDR):  Define this for HPPA, which
	passes struct/union arguments by address.

Wed Feb 10 15:34:46 1993  Ian Lance Taylor  (ian@cygnus.com)

	* Based on patch from Kean Johnston <maw@netcom.com>:
	* nm-i386sco4.h: New file.  Like nm-i386sco.h, but define
	ATTACH_DETACH, PTRACE_ATTACH and PTRACE_DETACH.
	* config/i386sco4.mh (NAT_FILE): Use nm-i386sco4.h.

Tue Feb  9 20:07:18 1993  John Gilmore  (gnu@cygnus.com)

	* remote-udi.c (FREEZE_MODE):  Fix && for & typo.  Found and
	fixed by Lynn D. Shumaker, shumaker@saifr00.cfsat.honeywell.com.

Tue Feb  9 08:18:07 1993  Ian Lance Taylor  (ian@cygnus.com)

	* config/i386sco4.mh (MUNCH_DEFINE): Pass -p to nm to avoid bug in
	cc debugging output.

Tue Feb  9 00:19:28 1993  John Gilmore  (gnu@cygnus.com)

	* stabsread.c (define_symbol):  Complain about unrecognized names
	that begin with CPLUS_MARKER (often '$'), but don't die.  Fix
	suggested by gb@cs.purdue.edu (Gerald Baumgartner).
	(read_cpp_abbrev):  Don't use the class name as part of the
	vtable pointer member name (_vptr$) in $vf abbrevs or unrecognized
	abbrevs.  Inspired by Mike Tiemann.
	(read_tilde_fields):  Comment.  Remove ancient dead code.
	Remove erroneous but non-dead code.  Simplify.  Add complaints.
	(in general):  Remove extraneous (parentheses) in return
	statements.

Fri Feb  5 14:01:22 1993  John Gilmore  (gnu@cygnus.com)

	* coffread.c (coff_lookup_type):  Fix fencepost error reported
	by Art Berggreen, <arg@opal.acc.com>.

	Fix long file name bug reported on SCO Open Desktop 2.0 by Ulf Lunde
	<Ulf.Lunde@kvatro.no> and Dag H. Wanvik <Dag.H.Wanvik@kvatro.no>:
	  
	* coffread.c (getfilename):  Eliminate COFF_NO_LONG_FILE_NAMES
	test, which is apparently left over from when we used native
	include files and couldn't depend on the member names being there.
	* tm-3b1.h, tm-altos.h, tm-i386v.h:  Don't set it.

Thu Feb  4 12:23:15 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c: Major overhaul to use new BFD symbol table reading
	routines.  Now swaps information as it is needed, rather than
	swapping everything when the file is read.

Thu Feb  4 01:52:36 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in (TARDIRS):  Add sparclite demo dir.
	(*.tab.c):  Change dependency on Makefile to depend on
	Makefile.in, otherwise it always rebuilds after configuring.
	Force output *.tab.c file into current directory even in "make"
	versions that rewrite dependent file names used in command lines.

	* TODO:  Remove some things we did.
	* am29k-opcode.h, convx-opcode:  Remove; now in ../include/opcode.
	* os68k-xdep.c:  Remove; useless file (os68k is a target only).
	* convex-pinsn.c:  Use ../include/opcode/convex.h.  Add CONST.
	* symtab.h:  Eliminate unnamed unions and structs.

Wed Feb  3 14:48:08 1993  John Gilmore  (gnu@cygnus.com)

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

Tue Feb  2 20:47:42 1993  John Gilmore  (gnu@cygnus.com)

	* breakpoint.c (breakpoint_re_set_one):  Handle watchpoints when
	re-evaluating symbol pointers.

Tue Feb  2 16:10:31 1993  Fred Fish  (fnf@cygnus.com)

	* c-exp.y (lcurly, rcurly):  New nonterminals.
	* c-exp.y (exp):  Use lcurly and rcurly for arrays and UNOP_MEMVAL
	constructs.
	* parse.c (free_funcalls):  Moved prototype from parser-defs.h,
	made function static.
	* parse.c (struct funcall):  Moved struct def from parser-defs.h.
	* parse.c (funcall_chain):  Moved from parser-defs.h, made static.
	* parse.c (start_arglist):  
	* parser-defs.h (free_funcalls):  Moved prototype to parse.c.
	* parser-defs.h (struct funcall):  Moved struct def to parse.c.
	* parser-defs.h (funcall_chain):  Moved to parse.c.
	* printcmd.c (print_frame_nameless_args): Fix prototype.
	* tm-mips.h (setup_arbitrary_frame):  Fix prototype.
	* tm-sparc.h (setup_arbitrary_frame):  Fix prototype.
	* valops.c (typecmp):  Moved prototype from values.h.
	* value.h (typecmp):  Moved prototype to valops.c, made static.
	* ch-exp.y (yylex):  Change way control sequences are disabled.
	
Tue Feb  2 16:11:43 1993  John Gilmore  (gnu@cygnus.com)

	* tm-mips.h, tm-sparc.h:  Fix thinko in SETUP_ARBITRARY_FRAME.

Tue Feb  2 15:30:33 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c (upgrade_type): Build array types correctly, using
	create_range_type and create_array_type.

Tue Feb  2 00:19:08 1993  John Gilmore  (gnu@cygnus.com)

	* remote-nindy.c:  Cleanup.

	* infrun.c (wait_for_inferior):  When rolling back the PC after
	a breakpoint, call write_pc so that NPC gets rolled back as well
	(for the 29K).

	* blockframe.c (inside_entry_file, inside_main_func,
	inside_entry_func):  PC of zero is always "bottom of stack".

	* printcmd.c (print_frame_args, print_frame_nameless_args):
	Let print_frame_nameless_args decide whether there are any,
	laying groundwork for possibly later printing 29K args for
	functions where we have tag words but no symbols.	

Mon Feb  1 18:09:58 1993  Roland H. Pesch  (pesch@fowanton.cygnus.com)

	* Makefile.in: fix GDB doc targets for new doc subdir structure

Mon Feb  1 17:56:47 1993  John Gilmore  (gnu@cygnus.com)

	* stack.c (parse_frame_specification):  Parse as many arguments
	as there are (up to MAXARGS).  Pass all of them in argc, argv
	format to SETUP_ARBITRARY_FRAME.  Put the burden of checking how
	many there were, onto SETUP_ARBITRARY_FRAME.
	* tm-mips.h, tm-sparc.h:  Corresponding changes.
	* mips-tdep.c, sparc-tdep.c:  Ditto.

Mon Feb  1 17:19:37 1993  John Gilmore  (gnu@cygnus.com)

	* hp300ux-nat.c:  Update copyrights.
	* mipsread.c (parse_partial_symbols):  Complain about block
	indexes that go backwards.  Fix from Peter Schauer.
	* symfile.c (syms_from_objfile, symbol_file_add):  Allow a
	symbol-file that has no linkage symbols to be read.
	* tm-rs6000.h, xm-rs6000.h: (SIGWINCH_HANDLER and friends):  Move
	from tm- file to xm-file, since they're host dependent.
	* valarith.c (value_binop):  Typo.

Mon Feb  1 16:16:59 1993  Stu Grossman  (grossman at cygnus.com)

	* sparclite/aload.c:  Add copyleft.
	* sparclite/crt0.s:  Add comment at beginning.

Mon Feb  1 14:36:11 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* remote-z8k.c, z8k-tdep.c: support for the Z8001 and Z8002.
	* parse.c (std_regs): Only declare if NO_STD_REGS is defined.

Sun Jan 31 04:32:48 1993  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* values.c (value_headof): Fix typo in which VTBL and ARG were
	being confused for one another.

	* valops.c (typecmp): Now static.

	* gdbtypes.c (fill_in_vptr_fieldno): Don't ignore the first
	baseclass--we don't always inherit its virtual function table
	pointer.

	* eval.c (evaluate_subexp): In OP_FUNCALL case, adjust `this'
	pointer correctly in case value_struct_elt moves it around.

	* valops.c (typecmp): Now static.  Also, now groks references
	better.

	* gdbtypes.c (lookup_struct_elt_type): Pass NOERR instead of
	zero on recursive call.  If NAME is the name of TYPE, return TYPE.

Sat Jan 30 19:55:52 1993  John Gilmore  (gnu@cygnus.com)

	* hppah-nat.c:  Eliminate <sys/user.h> and other unnecessary stuff,
	to avoid "too much defining" error from native C compiler (!).

	* Makefile.in (HFILES):  Add typeprint.h.
	* typeprint.[ch]:  Update copyrights.

Thu Jan 28 19:09:02 1993  John Gilmore  (gnu@cygnus.com)

	* Makefile.in:  Update to match doc/ subdir changes.

	* config/hp300hpux.mh:  No cross-host file needed, just native.
	* config/go32.mh:  Remove nonexistent "native" support.

	M88K fixes reported by Carl Greco, <cgreco@Creighton.Edu>:
	* tm-m88k.h (REGISTER_CONVERT_TO_RAW):  Fix typo.
	* m88k-tdep.c (next_insn):  Lint, cleanup.
	(store_parm_word):  Lint.

	* README:  Fix typo (reported by karl@hq.ileaf.com).

Wed Jan 27 21:34:21 1993  Fred Fish  (fnf@cygnus.com)

	* expression.h (BINOP_CONCAT): Document use for self concatenation
	an integral number of times.
	* language.c (binop_type_check):  Extend BINOP_CONCAT for self
	concatenation case.
	* valarith.c (value_concat):  Rewrite to support self
	concatenation an integral number of times.
	* Makefile.in (ch-exp.tab.c):  Change "expect" message.
	* ch-exp.y (FIXME's):  Make all FIXME tokens distinct, to
	eliminate hundreds of spurious shift/reduce and reduce/reduce
	conflicts that mask the 5 real ones.
	* ch-exp.y (STRING, CONSTANT, SC):  Remove unused tokens.
	* ch-exp.y (integer_literal_expression):  Remove production,
	no longer used.

Thu Jan 21 09:58:36 1993  Fred Fish  (fnf@cygnus.com)

	* eval.c (evaluate_subexp):  Fix OP_ARRAY, remove code that
	implied that "no side effects" was nonfunctional.
	* eval.c (evaluate_subexp):  Add BINOP_CONCAT case to deal with
	character string and bitstring concatenation.
	* expprint.c (dump_expression):  Add case for BINOP_CONCAT.
	* expression.h (exp_opcode):  Add BINOP_CONCAT.
	* gdbtypes.h (type_code):  Add TYPE_CODE_BITSTRING.
	* language.c (string_type):  Add function to determine if a type
	is a string type.
	* language.c (binop_type_check):  Add case for BINOP_CONCAT.
	* valarith.c (value_concat):  New function to concatenate two
	values, such as character strings or bitstrings.
	* valops.c (value_string):  Remove error stub and implement
	function body.
	* value.h (value_concat):  Add prototype.
	* ch-exp.y (operand_3):  Add actions for SLASH_SLASH (//).
	* ch-exp.y (yylex):  Recognize SLASH_SLASH.
	* ch-lang.c (chill_op_print_tab):  Add SLASH_SLASH (//) as
	BINOP_CONCAT.

Tue Jan 19 14:26:15 1993  Fred Fish  (fnf@cygnus.com)

	* c-exp.y (exp):  Add production to support direct creation
	of array constants using the obvious syntax.
	* c-valprint.c (c_val_print):  Set printed string length.
	* dwarfread.c (read_tag_string_type):  New prototype and
	function that handles TAG_string_type DIEs.
	* dwarfread.c (process_dies):  Add case for TAG_string_type
	that calls new read_tag_string_type function.
	* expprint.c (print_subexp):  Add support for OP_ARRAY.
	* gdbtypes.c (create_range_type, create_array_type):  Inherit
	objfile from the index type.
	* ch-typeprint.c (chill_print_type):  Add case for
	TYPE_CODE_STRING.
	* ch-valprint.c (chill_val_print):  Fix case for
	TYPE_CODE_STRING.

Mon Jan 18 11:58:45 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mipsread.c (CODE_MASK, MIPS_IS_STAB, MIPS_MARK_STAB,
	MIPS_UNMARK_STAB, STABS_SYMBOLS): Removed; now in
	include/coff/mips.h.

Fri Jan 15 20:26:50 1993  Fred Fish  (fnf@cygnus.com)

	* c-exp.y (exp:STRING):  Convert C strings into array-of-char
	constants with an explicit null byte terminator.  OP_STRING is
	now used for real string types.
	* c-lang.c (builtin_type_*):  Move declarations to lang.c since
	they are used by all languages.
	* c-lang.c (_initialize_c_language):  Move initializations of 
	builtin_type_* to lang.c.
	* c-typeprint.c (c_type_print_varspec_prefix,
	c_type_print_varspec_suffix):  TYPE_CODE_PASCAL_ARRAY renamed
	to TYPE_CODE_STRING.
	* c-valprint.c (c_val_print):  Change the way character arrays
	are printed as strings to be consistent with the way strings
	are printed when pointer-to-char types are dereferenced.
	Remove test of print_max before calling val_print_string, which
	now does it's own test.
	* eval.c (evaluate_subexp):  Add case for OP_ARRAY.
	* expprint.c (print_subexp, dump_expression):  Add case for OP_ARRAY.
	* expression.h (enum exp_opcode):  Add OP_ARRAY and document.
	* gdbtypes.c (builtin_type_*):  Add declarations moved from
	c-lang.c.
	* gdbtypes.c (create_string_type):  New function to create real
	string types.
	* gdbtypes.c (recursive_dump_type):  TYPE_CODE_PASCAL_ARRAY
	renamed to TYPE_CODE_STRING.
	* gdbtypes.c (_initialize_gdbtypes):  Add initializations of
	builtin_type_* types moved from c-lang.c.
	* gdbtypes.h (enum type_code):  TYPE_CODE_PASCAL_ARRAY renamed
	to TYPE_CODE_STRING.
	* gdbtypes.h (builtin_type_string):  Add extern declaration.
	* gdbtypes.h (create_string_type):  Add prototype.
	* m2-lang.c (m2_create_fundamental_type):  TYPE_CODE_PASCAL_ARRAY
	renamed to TYPE_CODE_STRING.
	* m88k-tdep.c (pushed_size):  TYPE_CODE_PASCAL_ARRAY renamed to
	TYPE_CODE_STRING.
	* mipsread.c (_initialize_mipsread):  TYPE_CODE_PASCAL_ARRAY
	renamed to TYPE_CODE_STRING.
	* parse.c (length_of_subexp, prefixify_subexp):  Add case for
	OP_ARRAY.
	* printcmd.c (print_formatted):  Recognize TYPE_CODE_STRING.
	* typeprint.c (print_type_scalar):  TYPE_CODE_PASCAL_ARRAY renamed
	to TYPE_CODE_STRING.
	* valops.c (allocate_space_in_inferior):  New function and
	prototype, using code ripped out of value_string.
	* valops.c (value_string):  Rewritten to use new function
	allocate_space_in_inferior, but temporarily disabled until some
	other support is in place.
	* valops.c (value_array):  New function to create array constants.
	* valprint.c (val_print_string):  Add comment to document use, 
	complete rewrite to fix several small buglets.
	* value.h (value_array):  Add prototype.
	* value.h (val_print_string):  Change prototype to match rewrite.
	* ch-valprint.c (chill_val_print):  Add case for TYPE_CODE_STRING.
	* ch-exp.y (match_character_literal):  Disable recognition of 
	control sequence form of character literals and document why.

Thu Jan 14 15:48:12 1993  Stu Grossman  (grossman at cygnus.com)

	* nindy-share/nindy.c:  Add comments to #endif's to clarify
	grouping.

	* hppa-pinsn.c (print_insn):  Use read_memory_integer, instead of
	read_memory to get byte order right.
	* hppah-tdep.c (find_unwind_info):  Don't read in unwind info
	anymore.  This is done in paread.c now.  We expect unwind info
	to hang off of objfiles, and search all of the objfiles when until
	we find a match.
	* (skip_trampoline_code):  Cast arg to target_read_memory.
	* objfiles.h (struct objfile):  Add new field obj_private to hold
	per object file private data (unwind info in this case).
	* paread.c (read_unwind_info):  New routine to read unwind info
	for the objfile.  This data is hung off of obj_private.
	* tm-hppa.h:  Define struct obj_unwind_info, to hold pointers to
	the unwind info for this objfile.  Also define OBJ_UNWIND_INFO to
	make this easier to access.

Wed Jan 13 20:49:59 1993  Fred Fish  (fnf@cygnus.com)

	* c-valprint.c (cp_print_class_member):  Add extern decl.
	* c-valprint.c (c_val_print):  Extract code for printing methods
	and move it to cp_print_class_method in cp-valprint.c.
	* c-valprint.c (c_val_print):  Extract code to print strings and
	move it to val_print_string in valprint.c.
	* cp-valprint.c (cp_print_class_method):  New function using
	code extracted from c_val_print.
	* valprint.c (val_print_string):  New function using code
	extracted from c_val_print.
	* value.h (val_print_string):  Add prototype.
	* ch-exp.y (CHARACTER_STRING_LITERAL):  Set correct token type.
	* ch-exp.y (literal):  Add action for CHARACTER_STRING_LITERAL.
	* ch-exp.y (tempbuf, tempbufsize, tempbufindex, GROWBY_MIN_SIZE,
	CHECKBUF, growbuf_by_size):  New variables, macros, and support
	functions for implementing a dynamically expandable temp buffer.
	* ch-exp.y (match_string_literal):  New lexer function.
	* ch-exp.y (match_bitstring_literal):  Dynamic buffer code
	removed and replaced with new CHECKBUF macro.
	* ch-exp.y (yylex):  Call match_string_literal when appropriate.
	* ch-valprint.c (ch_val_print):  Add code for TYPE_CODE_PTR.

Sat Jan  9 19:59:33 1993  Stu Grossman  (grossman at cygnus.com)

	* Makefile.in:  Add info for paread.o.
	* config/hppahpux.mh:  Add paread.o to NATDEPFILES.

	* blockframe.c (frameless_look_for_prologue):  Correct the
	comment.
	* gdbtypes.h, gdbtypes.c:  Use const in decl of
	cplus_struct_default, now that pa-gas assembler has been fixed.
	* hppah-nat.c:  Formatting.
	* hppah-tdep.c:  Remove lots of useless externs for variables we
	don't use.
	* (find_unwind_entry):  Speed up by using binary search, and a one
	entry cache.
	* (rp_saved):  New routine to see what unwind info says about RP
	being saved on the stack frame.
	* (frame_saved_pc):  Look for prologue to see if we need to
	examine the stack for the saved RP or not.
	* (init_extra_frame_info):  Check for prologue, instead of
	framesize to determine if we are frameless or not.
	* (frame_chain_valid):  Stop backtraces when we run into _start.
	* (push_dummy_frame):  Reformat to make more readable.
	* (find_dummy_frame_regs):  ditto.
	* (hp_pop_frame):  ditto.
	* (hp_restore_pc_queue):  small cleanup.
	* (hp_push_arguments):  ditto.
	* (pa_do_registers_info):  ditto.
	* (skip_prologue):  New routine created from SKIP_PROLOGUE macro.
	* tm-hppa.h:  Move contents of SKIP_PROLOGUE into hppah-tdep.c.
	* Define FRAME_CHAIN_VALID.
	* Turn on BELIEVE_PCC_PROMOTION so that we can access char args
	passed to functions.

	* paread.c (pa_symtab_read):  Use new bfd conventions for
	accessing linker symbol table.
	* (pa_symfile_init):  Access embedded STAB info via BFD section
	mechanism and related macros.


Sat Jan  9 19:31:43 1993  Stu Grossman  (grossman at cygnus.com)

	* sparc-stub.c:  Use a seperate stack for our traps.
	* Handle recursive traps.
	* Remove all trap init code.  This needs to be done by the
	environment.
	* (set_mem_fault_trap):  Call exceptionHandler() to setup this
	trap.
	* (handle_exception):  See if we are at breakinst, if so, then
	advance PC sp that users can just step out of breakpoint().
	* (case 'G'):  Don't let GDB hack CWP.  Also, copy saved regs to
	new place if SP has changed.
	* (case 's'):  Get rid of this, we can't do it yet.
	* (case 't'):  New command to test any old random feature.
	* (case 'r'):  New command to reset the system.
	* (breakpoint):  Add label to breakpoint trap instruction so that
	handle_exception() can detect where we are and get past the
	breakpoint trivially.

Thu Jan  7 13:33:06 1993  Ian Lance Taylor  (ian@cygnus.com)

	* mips-pinsn.c: Actual work now done by opcodes/mips-dis.c.

Thu Jan  7 09:21:51 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* configure.in: recognise all sparclite variants

Wed Jan  6 10:14:51 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* symfile.c: If O_BINARY isn't defined, set it to 0, call openp for
	binary files oring in the right bit.

	* main.c, source.c, state.c, symmisc.c: use macros defined in
	fopen-{bin|both} when fopening files.

Wed Jan  6 08:19:11 1993  Fred Fish  (fnf@cygnus.com)

	* defs.h (HOST_CHAR_BIT):  New macro, defaults to either CHAR_BIT
	from a configuration file (typically including <limits.h>), or to
	TARGET_CHAR_BIT if CHAR_BIT is not defined.
	* eval.c (evaluate_subexp):  Use new BYTES_TO_EXP_ELEM macro.
	* eval.c (evaluate_subexp):  Add case for OP_BITSTRING.
	* expprint.c (print_subexp):  Use new BYTES_TO_EXP_ELEM macro.
	* exppritn.c (print_subexp, dump_expression):  Add case for
	OP_BITSTRING.
	* expression.h (OP_BITSTRING):  New expression element type for
	packed bitstrings.
	* expression.h (EXP_ELEM_TO_BYTES, BYTES_TO_EXP_ELEM):  New
	macros to convert between number of expression elements and bytes
	to store that many elements.
	* i960-tdep.c (leafproc_return):  Use new macros to access
	minimal symbol name and address fields.
	* m88k-pinsn.c (sprint_address):  Use new macros to access
	minimal symbol name and address fields.
	* nindy-tdep.c (nindy_frame_chain_valid):  Use new macro to access
	minimal symbol address field.
	* parse.c (write_exp_elt, write_exp_string, prefixify_expression,
	parse_exp_1):  Use new EXP_ELEM_TO_BYTES macro.
	* parse.c (write_exp_string, length_of_subexp, prefixify_expression):
	Use new BYTES_TO_EXP_ELEM macro.
	* parse.c (write_exp_bitstring):  New function to write packed
	bitstrings into the expression element vector.
	* parse.c (length_of_subexp, prefixify_subexp):  Add case for
	OP_BITSTRING.
	* parser-defs.h (struct stoken):  Document that it is used for
	OP_BITSTRING as well as OP_STRING.
	* parser-defs.h (write_exp_bitstring):  Add prototype.
	* ch-exp.y (BIT_STRING_LITERAL):  Change token type to sval.
	* ch-exp.y (NUM, PRED, SUCC, ABS, CARD, MAX, MIN, SIZE, UPPER,
	LOWER, LENGTH):  New tokens for keywords.
	* ch-exp.y (chill_value_built_in_routine_call, mode_argument, 
	upper_lower_argument, length_argument, array_mode_name,
	string_mode_name, variant_structure_mode_name):  New non-terminals
	and productions.
	* ch-exp.y (literal):  Useful production for BIT_STRING_LITERAL.
	* ch-exp.y (match_bitstring_literal):  New lexer support function
	to recognize bitstring literals.
	* ch-exp.y (tokentab6):  New token table for 6 character keywords.
	* ch-exp.y (tokentab5):  Add LOWER, UPPER.
	* ch-exp.y (tokentab4):  Add PRED, SUCC, CARD, SIZE.
	* ch-exp.y (tokentab3):  Add NUM, ABS, MIN, MAX.
	* ch-exp.y (yylex):  Check tokentab6.
	* ch-exp.y (yylex):  Call match_bitstring_literal.

Mon Jan  4 16:54:18 1993  Fred Fish  (fnf@cygnus.com)

	* xcoffexec.c (vmap_symtab):  Use new macros to access minimal
	symbol name and value fields.

	* c-exp.y (yylex):  Make static, to match prototype and other
	<lang>-exp.y files.

	* expression.h (exp_opcode):  Add BINOP_MOD.
	* eval.c (evaluate_subexp):  Handle new BINOP_MOD.
	* expprint.c (dump_expression):  Handle new BINOP_MOD.
	* language.c (binop_type_check):  Handle new BINOP_MOD.
	* main.c (float_handler):  Re-enable float handler when hit.
	* valarith.c (language.h):  Include, need current_language.
	* valarith.c (TRUNCATION_TOWARDS_ZERO):  Define default macro
	for integer divide truncates towards zero for negative results.
	* valarith.c (value_x_binop):  Handle BINOP_MOD if seen.
	* valarith.c (value_binop):  Allow arithmetic operations on
	TYPE_CODE_CHAR variables.  Add case to handle new BINOP_MOD.
	* ch-exp.y (operand_4):  Add useful actions for MOD and REM.
	* ch-exp.y (tokentab3):  Add MOD and REM.
	* ch-exp.y (yylex):  Set innermost_block for symbols found
	in local scopes.  Return LOCATION_NAME for local symbols.
	* ch-lang.c (chill_op_print_tab):  Fix MOD entry to use
	BINOP_MOD instead of BINOP_REM.  Add REM entry, using BINOP_REM.

Mon Jan  4 07:35:31 1993  Steve Chamberlain  (sac@wahini.cygnus.com)

	* command.c (shell_escape, make_command, _initialize_command):
	don't create or use fork if CANT_FORK is defined.
	* serial.h, ser-go32.c: now compiles, but "the obvious problems of
	code written for the IBM PC" remain.
	* xm-go32.h: define CANT_FORK

Sun Jan  3 14:24:56 1993  Steve Chamberlain  (sac@thepub.cygnus.com)

	* remote-sim.c: first attempt at general simulator interface
	* remote-hms.c: whitespace
	* h8300-tdep.c: (h8300_skip_prologue, examine_prologue):
	understand new stack layout. (print_register_hook): print ccr
	register in a fancy way.

Sun Jan  3 14:16:10 1993  Fred Fish  (fnf@cygnus.com)

	* eval.c (language.h): Include.
	* eval.c (evaluate_subexp_with_coercion):  Only coerce arrays
	to pointer types when the current language is C.  It loses for
	other languages when the lower index bound is nonzero.
	* valarith.c (value_subscript):  Take array lower bounds into
	account when performing subscripting operations.
	* valops.c (value_coerce_array):  Add comment describing why
	arrays with nonzero lower bounds are dealt with in value_subscript,
	rather than in value_coerce_array.

Sat Jan  2 12:16:41 1993  Fred Fish  (fnf@cygnus.com)

	* ch-exp.y (FLOAT_LITERAL):  Add token.
	* ch-exp.y (literal):  Add FLOAT_LITERAL.
	* ch-exp.y (match_float_literal):  New lexer routine.
	* ch-exp.y (convert_float):  Remove.
	* ch-exp.y (yylex):  Call match_float_literal.
	* ch-exp.y (yylex):  Match single '.' after trying
	to match floating point literals.

	* eval.c (evaluate_subexp):  Add case MULTI_SUBSCRIPT.
	* expprint.c (print_subexp):  Rename BINOP_MULTI_SUBSCRIPT to
	MULTI_SUBSCRIPT.
	* expprint.c (dump_expression):  New function for dumping
	expression vectors during gdb debugging.
	* expression.h (BINOP_MULTI_SUBSCRIPT):  Name changed to
	MULTI_SUBSCRIPT and moved out of BINOP range.
	* expression.h (DUMP_EXPRESSION):  New macro that calls
	dump_expression if DEBUG_EXPRESSIONS is defined.
	* m2-exp.y (BINOP_MULTI_SUBSCRIPT):  Changed to MULTI_SUBSCRIPT.
	* parse.c (length_of_subexp, prefixify_subexp):  Change
	BINOP_MULTI_SUBSCRIPT to MULTI_SUBSCRIPT.
	* parse.c (parse_exp_1):  Call DUMP_EXPRESSION before and after
	prefixify'ing the expression.
	* printcmd.c (print_command_1):  Add comment.
	* ch-exp.y (expression_list):  Add useful actions.
	* ch-exp.y (value_array_element):  Add useful actions.
	* ch-exp.y (array_primitive_value):  Add production.
	* ch-exp.y (yylex):  Recognize ',' as a token.

Fri Jan  1 18:22:02 1993  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* Makefile.in: pass prefix and exec_prefix via FLAGS_TO_PASS,
	POSIXize the recursive makes (make [variable assignments] target{s})

Fri Jan  1 11:56:23 1993  Fred Fish  (fnf@cygnus.com)

	* tm-sun4sol2.h (CPLUS_MARKER):  Remove, now set in tm-sysv4.h.
	* tm-sysv4.h (CPLUS_MARKER):  By default, g++ uses '.' as the
	CPLUS_MARKER for all SVR4 systems, so follow suit.
	* defs.h (strdup_demangled):  Remove prototype.
	* dwarfread.c (enum_type, synthesize_typedef):  Use new macro
	SYMBOL_INIT_LANGUAGE_SPECIFIC.
	* dwarfread.c (new_symbol):  Use SYMBOL_INIT_DEMANGLED_NAME.
	* minsyms.c (install_minimal_symbols, prim_record_minimal_symbol,
	prim_record_minimal_symbol_and_info):  Use new macro
	SYMBOL_INIT_LANGUAGE_SPECIFIC.
	* minsyms.c (install_minimal_symbols):  Use new macro
	SYMBOL_INIT_DEMANGLED_NAME.
	* stabsread.c (define_symbol):  Use new macro
	SYMBOL_INIT_DEMANGLED_NAME.
	* symfile.c (add_psymbol_to_list, add_psymbol_addr_to_list):
	Use new macro SYMBOL_INIT_DEMANGLED_NAME.
	* symfile.h (ADD_PSYMBOL_VT_TO_LIST):  Use new macro
	SYMBOL_INIT_DEMANGLED_NAME.
	* symmisc.c (dump_msymbols, dump_symtab, print_partial_symbol):
	SYMBOL_DEMANGLED_NAME now tests language itself.
	* symtab.c (COMPLETION_LIST_ADD_SYMBOL):  SYMBOL_DEMANGLED_NAME
	now tests language itself.
	* symtab.h (SYMBOL_CPLUS_DEMANGLED_NAME):  New macro that does
	what SYMBOL_DEMANGLED_NAME used to do, directly access the C++
	mangled name member in the language dependent portion of a symbol.
	* symtab.h (SYMBOL_DEMANGLED_NAME):  New macro that returns the
	mangled name member appropriate for a symbol's language.
	* symtab.h (SYMBOL_SOURCE_NAME, SYMBOL_LINKAGE_NAME,
	SYMBOL_MATCHES_NAME, SYMBOL_MATCHES_REGEXP):
	SYMBOL_DEMANGLED_NAME now tests language itself.
	* symtab.h (SYMBOL_INIT_LANGUAGE_SPECIFIC):  New macro that
	initializes language dependent portion of symbol.
	* symtab.h (SYMBOL_INIT_DEMANGLED_NAME):  New macro that
	demangles and caches the demangled form of symbol names.
	* utils.c (fputs_demangled, fprint_symbol):  Use current language
	to select an appropriate demangling algorithm.
	* utils.c (strdup_demangled):  Remove, no longer used.
	* symtab.h (SYMBOL_CHILL_DEMANGLED_NAME):  New macro that directly
	access the Chill mangled name member in the language dependent
	portion of a symbol.
	* ch-lang.c (chill_demangle):  New function, simple demangler.
	* defs.h (chill_demangle):  Add prototype.
	* symtab.h (language_dependent_info):  Add struct for Chill.	

For older changes see ChangeLog-1992

Local Variables:
mode: indented-text
left-margin: 8
fill-column: 74
version-control: never
End:
