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):
	* config/m88k/delta88.mh (NATDEPFILES): Added corelow.o and
	coredep.o to this list.
	* 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:
        * 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).
	* config/nm-hppab.h (PTRACE_ARG3_TYPE): Define as caddr_t.
	* 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>.
	* hppa-tdep.c: Declare frame_saved_pc.
	(frameless_function_invocation): New function.
	(frame_saved_pc, init_extra_frame_info): Use 
	frameless_function_invocation.
	* 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.
	* config/pa/tm-hppah.h (SAVED_PC_AFTER_CALL): Delete private
	definition and use the common one in tm-hppa.h.
	* hppa-tdep.c (frame_chain_valid): If "use_unwind" is true, then
	use unwind descriptors to determine if the frame chain is valid.
	* hppa-tdep.c (find_dummy_frame_regs):  Rework so that
	it does not assume %r4 is the frame pointer.
	* hppa-pinsn.c (print_insn): Handle 'r' and 'R' for break, rsm,
	and ssm instructions.
	* hppa-tdep.c (extract_5r_store, extract_5R_store): New
	helper functions for print_insn.
	* hppa-tdep.c (gcc_p, hpux_cc_p): Delete unused functions.
	* 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.

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

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.

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: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)

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

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

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:
