Fri Dec 29 16:30:58 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* symfile.c (find_sym_fns): Add PowerMac to xcoff file recognition
	kludge.

Fri Dec 22 11:05:59 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (gdb_host): Add support for DG/UX running on x86 as
	a host.
  	(all x86 targets and hosts): Add support for pentium-pro machines.

	* configure: Rebuild.

	* config/i386/i386dgux.mh: New file for DG/UX running on x86 host.

Thu Dec 21 19:09:20 1995  Rob Savoye  <rob@chinadoll.cygnus.com>

	* remote-array.c (array_wait): Poll the keyboard along with the
	serial port so users can tpye at the target while their
	application is running.

Thu Dec 21 11:58:52 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (ppcbug-rom.o, srec.o): Add dependencies.

	* monitor.c (monitor_debug): Take prefix, and suffix arguments.
	Print trailing newline after the suffix.
	(monitor_printf{,_noecho}): Change monitor_debug calls.
	(monitor_printf): Call monitor_expect instead of trying to do the
	expect processing locally so that if there is extra junk, it
	doesn't hang things up.
	(readchar): If MO_HANDLE_NL is set, handle \r\n pairs and convert
	them to a single \r.  Use monitor_debug to print out byte read.

	* monitor.h (MO_HANDLE_NL): Add new flag.

	* ppcbug-rom.c (ppcbug_ops{1,2}): Split into two ops, one that
	uses lo 0 to load, and the other that uses lo 1.  Set flag
	MO_HANDLE_NL.
	(ppcbug_open{0,1}): Clone and split to handle ppcbug_ops{1,2}.
	(_initialize_ppcbug_rom): Set up both ppcbug_open{0,1}.

Wed Dec 20 10:54:41 1995  Fred Fish  <fnf@cygnus.com>

	* defs.h: Delete extraneous whitespace at end of file.
	* symfile.h: Move #include of demangle.h outside conditional.
	* objfiles.h (struct objstats, OBJSTAT, OBJSTATS): New struct and
 	macros to hold per-objfile statistics for internal
 	instrumentation.
	(struct objfile): Add OBJSTATS member, which is optional.
	* buildsym.h (next_symbol_text_func): Now takes objfile argument.
	Also update copyright to 1995.
	* dbxread.c (dbx_next_symbol_text): Now takes objfile argument.
	(dbx_symfile_init, coffstab_build_psymtabs, elfstab_build_psymtabs,
	stabsect_build_psymtabs): Accumulate string table size.
	(dbx_next_symbol_text, read_dbx_symtab, read_ofile_symtab):
	Accumulate number of stabs symbols read. 	
	* dwarfread.c (new_symbol, symthesize_typedef):
	Accumulate number of full symbols created.
	* gdbtypes.c (alloc_type): Accumulate number of types.
	* maint.c (maintenance_print_statistics): New function.
	* mdebugread.c (mdebug_next_symbol_text): Now takes objfile
 	argument.
	* minsyms.c (prim_record_minimal_symbol_and_info): Accumulate
	number of minimal symbols read.
	* os9kread.c (read_os9k_psymtab): next_symbol_text takes objfile
 	arg.
	* partial-stab.h: next_symbol_text takes objfile arg.
	* stabsread.c (error_type, STABS_CONTINUE): Now takes objfile arg
	and uses it to call next_symbol_text.
	* symfile.c (add_psymbol_to_list, add_psymbol_addr_to_list):
	Accumulate number of partial symbols created.
	* symfile.h (ADD_PSYMBOL_VT_TO_LIST): Accumulate number of partial
	symbols created.
	* symmisc.c (print_objfile_statistics): Print the per-objfile
	internal instrumentation statistics gathered.
	* xcoffread.c (xcoff_next_symbol_text): Now takes objfile argument.

Fri Dec 15 16:15:55 1995  Ian Lance Taylor  <ian@cygnus.com>

	* top.c (set_endian_from_file): Use new bfd_big_endian macro.

Fri Dec 15 12:21:10 1995  Raymond Jou  <rjou@mexican.cygnus.com>

	* mpw-make.sed: Add quotes to RIncludes reference. 

Fri Dec 15 13:18:55 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* remote-array.c: Remove bogus setting of baudrate to 4800. Their
	hardware has real UARTS now.

Mon Dec 11 18:19:16 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in (powerpc-*-macos*): New target configuration.
	* configure: Update.
	* config/powerpc/macos.mh, config/powerpc/macos.mt,
 	config/powerpc/nm-macos.h, config/powerpc/tm-macos.h, mac-nat.c:
 	New files, native PowerMac debugging support.
	* Makefile.in (mac-nat.o): Add build rule.
	* mpw-config.in (enable_cflags): Add support.
	(m68k-apple-macos, powerpc-apple-macos): Fix natdepfiles to
	list object file instead of source file.
	* mpw-make.sed (@ENABLE_CFLAGS@): Don't edit out, replace with
	value of variable.
	(install, install-only): Edit MPW-specific installation into
	place of Unix shell code.
	* mac-gdb.r: Fix version resources to use symbolic version strings.
	(cfrg): New resource, code fragment for PowerMac.

Mon Dec 11 14:13:03 1995  Fred Fish  <fnf@amigalib.com>

	* dbxread.c (process_one_symbol): When looking at the next
	minimal symbol, check for end of the minimal symbol array
 	(symbol with NULL pointer for name) before dereferencing it.

Mon Dec 11 15:56:55 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* eval.c (evaluate_struct_tuple):  Fix thinko.

Mon Dec 11 06:52:02 1995  Wilfried Moser  <moser@rtl.cygnus.com>

	* ch-typeprint.c (chill_type_print_base): Slightly change of printing
	of variant structures.

Mon Dec 11 00:36:01 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* valops.c (value_cast):  Handle casts to and from TYPE_CODE_CHAR.
	* ch-exp.c (match_integer_literal):  Fix long long support.
	* gdbtypes.c (get_discrete_bounds):  Make TYPE_LENGTH (type) ==
	sizeof (LONGEST) case work OK.

Fri Dec  8 21:02:24 1995  Fred Fish  <fnf@cygnus.com>

	* coffread.c, dbxread.c, dstread.c, objfiles.c, os9kread.c,
	symfile.c, symtab.c:  Use "obstack.h" rather than <obstack.h>.

Wed Dec  6 16:16:18 1995  Stu Grossman  (grossman@cirdan.cygnus.com)

	* remote-mips.c (mips_receive_header):  Allow mips_syn_garbage to be
	user-settable (via set syn-garbage-limit).  Setting it to -1 makes
	it unlimited.

Tue Dec  5 18:33:43 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* gdbtypes.c (check_stub_method): Make sure we get back a function
	string in the demangled name before we try to use it.

Tue Dec  5 18:08:29 1995  Stu Grossman  (grossman@cygnus.com)

	* monitor.c (monitor_expect_regexp):  Make static, add prototype.
	* (monitor_read_memory_single):  Call monitor_expect_regexp with
	pointer to getmem_resp_delim_pattern, not entire struct.

Tue Dec  5 15:51:25 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* c-lang.h (c_op_print_tab): Don't declare, some compilers
	consider illegal if structure not defined, and only used
	in c-lang.c anyway.

Sun Dec  3 12:31:03 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* eval.c (evaluate_subexp_standard case):  Fix typo.

Sun Dec  3 11:59:21 1995  Jeffrey A. Law  <law@cygnus.com>

	* ch-exp.c (parse_named_record_element): Avoid aggregrate
	initializations for automatic variables.

	* hppa-tdep.c (hppa_alignof): Fix typo in last change.

Sat Dec  2 19:32:57 1995  Fred Fish  <fnf@cygnus.com>

	* symfile.c (global_psymbols, static_psymbols):  Remove, unused.

Sat Dec  2 03:02:21 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* alpha-tdep.c (heuristic_proc_desc):  Add heuristic to
	determine the return address register, needed for OSF/1-3.2C.
	* config/alpha/tm-alpha.h (T7_REGNUM, T9_REGNUM):  Define.

Fri Dec  1 07:23:57 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppcbug-rom.c (ppcbug_cmds): Turn on MO_GETMEM_READ_SINGLE
	because PPCbug displays the memory as characters as well as hex.
	Fix getmem/setmem commands.

	* srec.c (load_srec): Fix off by one typo in last submission.

	* rs6000-tdep.c (push_arguments): Fix typo.

Thu Nov 30 23:54:17 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* language.c (lang_bool_type), language.h:  New function.
	* language.h (LA_BOOL_TYPE):  New macro.
	* eval.c (evaluate_subexp_standard)  Use LA_BOOL_TYPE instead
	of builtin_type_int where appropriate,
	* valarith.c (value_subscript):  Likewise.

	* valops.c (value_slice):  Implement (value) bitstring slices.
	* valprint.c (val_print):  If TYPE_LENGTH is zero, don't automatically
	print "<incomplete type>" - Chill has zero-length (string) types.

	* gdbtypes.c (check_stub_type):  Removed;  no longes needed.
	* ch-exp.c (expect, parse_call):  Tweak error messages.

Wed Nov 29 13:35:18 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* scm-valprint.c (scm_isymnames):  Remove "#@" prefix.
	(scm_scmval_print):  Do not print "#@" prefix.

	* gdbtypes.h (enum type_code):  Added TYPE_CODE_TYPEDEF.
	(check_typedef):  New prototype.
	(CHECK_TYPEDEF):  New macro.
	(TYPE_DUMMY_RANGE):  Removed.
	* gdbtypes.c (get_discrete_bounds):  Fix paren error; make more robust.
	(create_array_type):  Don't force_to_range_type;  users of the
	array are responsible for handling non-range index types.
	(create_set_type):  Likewise.
	(force_to_range_type):  Removed.
	(check_typedef):  New function handles stub types and typedefs.
	(check_stub_type):  Just call check_typedef. (To be removed.)
	(recursive_dump_type):  Handle TYPE_CODE_TYPEDEF.
	* ch-lang.c (type_lower_upper):  Use get_discrete_bounds.
	(evaluate_subexp_chill):  Handle string repetition.
	Re-arrange to handle EVAL_AVOID_SIDE_EFFECTS better.
	* ch-typeprint.c (chill_type_print_base):  Handle TYPE_CODE_TYPEDEF.
	Pass show=0 in recursive calls various places.
	(case TYPE_CODE_ARRAY):  Don't require index type to have
	TYPE_CODE_RANGE.
	(case TYPE_CODE_RANGE):  Don't need to support TYPE_DUMMY_RANGE.
	* gdbtypes.c, ch-lang.c, ch-typeprint.c (numerous places):
	Add check_typedef/CHECK_TYPEDEF as needed.

	* ch-exp.y:  Replaced by ...
	* ch-exp.c:  New file.  Use recursive-descent.
	Recognize labelled array tuples and powerset ranges.
	* Makefile.in:  Update for no longer using yacc for ch-exp.

	* c-lang.c:  Make various functions non-static.
	* c-lang.h:  Add bunches of prototypes.
	* cp-valprint.c (cp_print_value_fields):  Also take address.
	(cp_print_value):  Likewise.  Use baselcass_offset.
	* stabsread.c (current_symbol):  New static variable.
	(type_synonym_name):  Remove.
	(read_type):  If copying, make copy be a TYPE_CODE_TYPEDEF.
	(read_array_type):  Don't need to handle undefined element type here.
	(cleanup_undefined_types):  Ditto.
	(read_range_type):  Look for Chill ranges.
	* valops.c (value_assign):  Fix case lval_internalvar - don't try
	to assign into old value (which might be too small!).
	(value_coerce_array):  No longer need special VALUE_REPEATED handling.
	(value_arg_coerce):  Cleaner array->pointer decay mechanism.
	(search_struct_field):  Use baseclass_offset rather than
	baseclass_addr.
	(value_slice):  Use get_discrete_bounds.
	* value.h (COERCE_VARYING_ARRAY):  Take type argumnt as well.
	* values.c (baseclass_offset):  Change parameter interface.
	(baseclass_addr):  Removed.
	* c-typeprint.c, c-valprint.c, ch-valprint.c, values.c, valops.c:
	Add check_typedef/CHECK_TYPEDEF as needed.

	* alpha-tdep.c, c-exp.y, h8500-tdep.c, f-exp.y, f-valprint.c,
	findvar.c, hppa-tdep.c, infcmd.c, language.c, printcmd.c,
 	rs6000-tdep.c, symmisc.c, symtab.c, mdebugread.c:
	Add check_typedef/CHECK_TYPEDEF as needed.

	* f-typeprint.c, valarith.c, valprint.c, typeprint.c, eval.c:
	Add check_typedef/CHECK_TYPEDEF as needed.
	* f-typeprint.c:  Various cleaning up.
	* valarith.c (value_subscript):  Also subscript bitstrings (for Chill).
	* typeprint.c (print_type_scalar):  Also support TYPE_CODE_RANGE.
	* eval.c (evaluate_subexp_standard case OP_ARRAY):  Implement
	support for labelled array tuples and ranges in powerset tuples.
	(init_array_element):  New function.
	
	* top.c (command_line_input):  Only strip out an initial #-comment.
	Looking for internal comments is language-specific (breaks Scheme).
	
	* expression.h (enum exp_opcode):  Add BINOP_RANGE.
	* expprint.c (dump_expression):  Support BINOP_RANGE.
	* eval.c (evaluate_subexp_standard):  Handle BINOP_RANGE (as error).
	(case MULTI_SUBSCRIPT):  Fix broken f77 value->int ad hoc conversion.
	* ch-lang.c (chill_op_print_tab):  Support BINOP_RANGE.
	(evaluate_subexp_chill):  Error on BINOP_COMMA.

	* Makefile.in:  Clean up so doc stuff stays in doc sub-dir.

Wed Nov 29 16:39:50 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* monitor.c (monitor_debug): New function to print monitor debug
	output in printable fashion.
	(monitor_printf{,_noecho}): Call monitor_debug instead of
	fputs_unfiltered.

	* srec.c (load_srec): When printing srec debug information, do not
	print the carriage return directly, instead print \\r followed by
	a newline.

Tue Nov 28 15:25:28 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (target_subdir): Define.
	(CC_FOR_TARGET, CXX_FOR_TARGET): Use it to find target libraries.
	* configure.in (X_CFLAGS): Fix typo.
	(target_subdir): Set to "${target_alias}/" if cross.
	* configure: Regenerated.

	* dbxread.c (dbx_symfile_read): Set block_address_function_relative
	for `pe' format files.

Tue Nov 28 11:17:47 1995  Fred Fish  <fnf@cygnus.com>

	* magic.h:  Renamed to gmagic.h to avoid <magic.h> conflict.
	* magic.c:  Renamed to gmagic.c in sympathy.
	* eval.c, gmagic.c, config/tm-magic.h:
 	Include "gmagic.h" rather than "magic.h".

Sat Nov 25 02:56:38 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (handle_psymbol_enumerators, parse_symbol):
	Recognize enums from alpha cc -migrate.
	(upgrade_type):  Pass correct fd to parse_symbol when parsing
	the index type of an array.
	(parse_procedure, parse_lines, psymtab_to_symtab_1):  Handle
	unsorted procedure descriptors from Irix 5.x and Alpha OSF/1-3.x
	shared libraries. Use CORE_ADDR instead of `unsigned long' in
	procedure descriptor address computations.

	* symtab.c (decode_line_1):  Prevent accidental strchr match
	of a null character with the terminating null character of
	gdb_completer_quote_characters.
	(cplusplus_hint):  Make sure that only a single quote is printed
	in the hint message.

Fri Nov 24 16:17:01 1995  Jeffrey A Law  (law@cygnus.com)

	* top.c (recurse_read_control_structure): Don't make cleanups
	here.  Callers handle that correctly.

Tue Nov 21 15:16:34 1995  Fred Fish  <fnf@rtl.cygnus.com>

	* config/m68k/xm-hp300hpux.h: Define MMAP_BASE_ADDRESS and MMAP_INCREMENT.
	Also force HAVE_MMAP to be defined since autoconf is currently broken
	for detecting a working mmap under hpux.
	* config/pa/xm-hppah.h (MMAP_BASE_ADDRESS): Tweak MMAP_BASE_ADDRESS
	to a better value suggested by Jeffrey A Law (law@cygnus.com).

Tue Nov 21 08:48:58 1995  Fred Fish  <fnf@cygnus.com>

	* config/pa/xm-hppah.h: Define MMAP_BASE_ADDRESS and MMAP_INCREMENT.
	Also force HAVE_MMAP to be defined since autoconf is currently broken
	for detecting a working mmap under hpux.
	* objfiles.c (map_to_address): Have gdb print a warning when it
	is compiled with HAVE_MMAP but without both MMAP_BASE_ADDRESS and
 	MMAP_INCREMENT defined (thus making it appear mmap doesn't work).

Mon Nov 20 14:13:53 1995  Stu Grossman  (grossman@cygnus.com)

	* infrun.c (wait_for_inferior):  Add support for dynamic function
	trampolines.  These are pieces of code between the caller and the
	callee that figure out the address of the callee's code at run
	time.  Upon entry, we can't figure out the callee's address, so we
	set a breakpoint within the trampoline where the address will be
	known, and continue the target.  Once we hit the breakpoint, we
	break at the callee's address and proceed as usual.

Mon Nov 20 11:12:34 1995  Fred Fish  <fnf@cygnus.com>

	* objfiles.c (allocate_objfile): Change warning message about mapped
	symbol tables so that it is obvious that they are not supported on
	this particular machine rather than implying they are not supported
	at all in this version of gdb.

Sun Nov 19 05:20:53 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* irix5-nat.c, osfsolib.c (solib_address):  Return the name of the
	containing solib.
	* stack.c (print_frame_info):  Use minimal symbol only if
	fi->pc is in a known section.

Sat Nov 18 11:19:35 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* solib.c (solib_address): Return the name of the containing solib.
	* solib.h (PC_SOLIB): New macro; define using solib_address.
	* stack.c (print_frame_info) [PC_SOLIB]: If no function name, try
	PC_SOLIB on the PC value.

Sat Nov 18 04:09:31 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* annotate.c (annotate_source, annotate_frame_begin):  Issue
	`0x' prefix for the pc value, to remain consistent with previous
	GDB versions.

	* blockframe.c (find_pc_partial_function), config/pa/tm-hppa.h:
	Remove Sun shared library transfer hack and
	INHIBIT_SUNSOLIB_TRANSFER_TABLE_HACK, it is obsoleted by the
	mst_solib_trampoline minimal symbols.

	* blockframe.c (inside_main_func):  Check main_func_*pc against
	INVALID_ENTRY_*PC, not zero.
	* symfile.c (init_entry_point_info):  Initialize ei.*pc with
	INVALID_ENTRY_*PC.
	* mipsread.c (mipscoff_symfile_read):  If the entry_file bounds
	are still unknown after processing the partial symbols, then try
	to set them from the minimal symbols.

	* infcmd.c (registers_info):  Error out if selected_frame is NULL.
	* stack.c (return_command):  Select new current frame silently if
	not interactive.

	* mipsread.c (read_alphacoff_dynamic_symtab):  Ignore additional
	DT_MIPS_LOCAL_GOTNO and DT_MIPS_GOTSYM entries.

	* irix5-nat.c (solib_create_inferior_hook):  Call solib_add only
	if auto_solib_add_at_startup is nonzero.
	(_initialize_solib):  Add "set auto-solib-add" command.
	* osfsolib.c (solib_create_inferior_hook):  Call solib_add only
	if auto_solib_add_at_startup is nonzero.
	(_initialize_solib):  Add "set auto-solib-add" command.

Wed Nov 15 17:12:04 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* utils.c: Don't include sys/ioctl.h etc if MPW is host.

Tue Nov 14 17:16:46 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/arm/tm-arm.h (ADDITIONAL_REGISTER_NAMES): Fix r5.
	(FRAME_SAVED_PC): Minor clean up.

Tue Nov 14 14:51:05 1995  Stu Grossman  (grossman@cygnus.com)

	* monitor.c (monitor_load_srec monitor_make_srec):  Move all
	S-record download code into srec.c.
	* srec.c srec.h:  New files.  Contain S-record loading routines
	formerly in monitor.c.
	* serial.c serial.h:  New routine just like fprintf, but uses
	serial_t instead of FILE *.
	* sh-tdep.c (frame_find_saved_regs init_extra_frame_info):
	Don't add four to saved pc (makes things match manual).  Also, fix
	bug where we didn't get pc from stack frame correctly.
	* config/sh/tm-sh.h (SAVED_PC_AFTER_CALL):  Don't add four to
	saved pc.  Real hardware does this for you.
	* sh3-rom.c (sh3_load):  New routine.  Sets up for download then
	calls generic S-record loader.
	* config/h8300/h8300.mt, config/h8500/h8500.mt,
	config/m68k/monitor.mt, config/pa/hppapro.mt, config/sh/sh.mt:
	Add srec.o to TDEPFILES.

Tue Nov 14 15:57:36 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppcbug-rom.c: New file to support the Motorola PPCBUG monitor
	for PowerPC's.

	* config/powerpc/ppc{,le}-{eabi,sim}.mt (TDEPFILES): Include
	ppcbug-rom.o, monitor.o, and srec.o

	* config/i386/linux.mt (XDEPFILES): Include ser-tcp.o.

Mon Nov 13 13:12:46 1995  Jeffrey A Law  (law@cygnus.com)

	* partial-stab.h: Remove GDB_TARGET_IS_HPPA kludge.

Fri Nov 10 13:08:54 1995  Jeff Law  (law@kahlua.cs.utah.edu)

	* terminal.h (HAVE_SGTTY): Fix typo.

Thu Nov  9 17:34:01 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (gdb_target): Build in the simulator for all
	PowerPC eabi targets, not just eabisim, providing
	--enable-sim-powerpc is used, or the host compiler is GCC.

Thu Nov  9 14:04:05 1995  Raymond Jou  (rjou@mexican.cygnus.com)

	* mpw-config.in: Add variable with names of SIOW libraries.
	* mpw-make.sed: Add an action to build SIOWgdb.

Wed Nov  8 19:25:22 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.sed: Edit @ENABLE_CFLAGS@ out, mpw-configure can
	add back in if necessary.

Wed Nov  8 15:59:52 1995  James G. Smith  <jsmith@pasanda.cygnus.co.uk>

	* config/mips/vr4300.mt: Added simulator to default VR4300 build.

Tue Nov  7 16:02:25 1995  Stu Grossman  (grossman@cygnus.com)

	* remote-mips.c (mips_initialize):  Fix brain damage found by
	Jamie.  Basically had case statement in the wrong place...
	* (mips_load):  Remove unnecessary `db tty0' command.  It's all
	handled by mips_initialize now.

Tue Nov  7 12:59:14 1995  Raymond Jou  <rjou@mexican.cygnus.com>

	* mac-gdb.r: Added #ifdef Macgdb.

Tue Nov  7 14:59:51 1995  James G. Smith  <jsmith@pasanda.cygnus.co.uk>

	* remote-mips.c (mips_initialize): Updated to talk to VR4300 RISQ
 	monitor board.

Mon Nov  6 11:44:11 1995  James G. Smith  <jsmith@pasanda.cygnus.co.uk>

	* config/mips/{tm-vr4300.h tm-vr4300el.h} (TARGET_MONITOR_PROMPT):
 	Change into real strings.

	* remote-sim.c (gdbsim_open): Moved sim_open() call to after
 	callback initialisation.

Sun Nov  5 00:07:52 1995  Jason Molenda  (crash@phydeaux.cygnus.com)

        * configure.in (AC_CHECK_HEADERS): add stddef.h.

Fri Nov  3 12:30:43 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (COMMON_OBS): Use corefile.o rather than core.o
	* core.c:  Rename to corefile.c.
	* config/pyr/tm-pyr.h, umax-xdep.c, sun386-nat.c, pyr-xdep.c,
	Makefile.in (SFILES), gould-xdep.c, coredep.c, armtdep.c,
 	arm-xdep.c, altos-xdep.c: Change core.c references to corefile.c.

 	From Graham Stoney <greyham@research.canon.oz.au>.
	* Makefile.in (remote-array.o):  Add rule to build.
	(ALLDEPFILES): Add remote-array.c
	* remote-array.c (baud_rate):  Remove unnecessary declaration.
	(baudrate):  Remove.
	(array_files_info):  Print global baud_rate not baudrate.

Sat Nov  4 10:21:58 1995  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (INTERNAL_CFLAGS):  Add ENABLE_CFLAGS.
	* fork-child.c (fork_inferior):  Add call to
	TARGET_CREATE_INFERIOR_HOOK to allow target specific code to get
	control just before the new process executes it's first instruction.
	* remote-mips.c (mips_initialize):  Cleanup a bit.  Don't try to
	receive a packet at first.  This speeds up initialization a lot.
	Use TARGET_MONITOR_PROMPT instead of "<IDT>".
	(common_breakpoint):  Use rresponse instead of rerrflg to inspect
	error code.
	* symfile.c (syms_from_objfile reread_symbols):  Call
	TARGET_SYMFILE_POSTREAD to allow target specific code to get
	control after reading new symbols.
	* target.h:  New macros TARGET_SYMFILE_POSTREAD, and
	TARGET_CREATE_INFERIOR_HOOK.  See above for descriptions.
	* config/mips/{irix5.mh nm-irix5.h}:  Delete nm-irix5.h.  Make
	NAT_FILE point directly at ../nm-sysv4.h.
	* config/mips/{mipsm3.mh nm-m3.h}:  Delete nm-m3.h.  Make
	NAT_FILE point directly at ../nm-m3.h.
	* config/mips/{mipsv4.mh nm-sysv4.h}:  Delete nm-sysv4.h.  Make
	NAT_FILE point directly at ../nm-sysv4.h.
	* config/mips/nm-mips.h:  Improve comment at top of file.
	* config/mips/tm-mips.h (TARGET_MONITOR_PROMPT):  Change
	definition into a proper string.

Wed Nov  1 20:18:08 1995  Fred Fish  <fnf@cygnus.com>

	* config/i386/tm-i386.h: New file containing generic i*86 target
	definitions.
	(TARGET_BYTE_ORDER): Moved here from tm-i386v.h.
	(IEEE_FLOAT): Moved here from tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Define default as 2.
	(FUNCTION_START_OFFSET): Moved here from tm-i386v.h.
	(SKIP_PROLOGUE): Moved here from tm-i386v.h.
	(SAVED_PC_AFTER_CALL): Moved here from tm-i386v.h.
	(INNER_THAN): Moved here from tm-i386v.h.
	(BREAKPOINT): Moved here from tm-i386v.h.
	(DECR_PC_AFTER_BREAK): Moved here from tm-i386v.h.
	(ABOUT_TO_RETURN): Moved here from tm-i386v.h.
	(REGISTER_SIZE): Moved here from tm-i386v.h.
	(NUM_REGS): Moved here from tm-i386v.h.
	(REGISTER_NAMES): Moved here from tm-i386v.h.
	(EXTRACT_STRUCT_VALUE_ADDRESS): Moved here from tm-i386v.h.
	(FP_REGNUM): Moved here from tm-i386v.h.
	(SP_REGNUM): Moved here from tm-i386v.h.
	(PC_REGNUM): Moved here from tm-i386v.h.
	(PS_REGNUM): Moved here from tm-i386v.h.
	(FP0_REGNUM):  Moved here from tm-i386aix.h.
	(FPC_REGNUM):  Moved here from tm-sun386.h.
	(REGISTER_BYTES):  Moved here from tm-i386aix.h.
	(REGISTER_BYTE): Moved here from tm-i386aix.h.
	(REGISTER_RAW_SIZE): Moved here from tm-i386aix.h.
	(MAX_REGISTER_RAW_SIZE): Moved here from tm-i386aix.h.
	(REGISTER_VIRTUAL_SIZE): Moved here from tm-i386aix.h.
	(MAX_REGISTER_VIRTUAL_SIZE): Moved here from tm-i386aix.h.
	(EXTRACT_RETURN_VALUE): Moved here from tm-i386aix.h.
	(STORE_RETURN_VALUE):  Moved here from tm-i386aix.h.
	(REGISTER_VIRTUAL_TYPE): Moved here from tm-i386v.h.
	(STORE_STRUCT_RETURN): Moved here from tm-i386v.h.
	(FRAME_CHAIN): Moved here from tm-i386v4.h.
	(FRAMELESS_FUNCTION_INVOCATION): Moved here from tm-i386v4.h.
	(FRAME_SAVED_PC): Moved here from tm-i386os9k.h
	(FRAME_ARGS_ADDRESS): Moved here from tm-i386v.h.
	(FRAME_LOCALS_ADDRESS): Moved here from tm-i386v.h.
	(FRAME_NUM_ARGS): Moved here from tm-i386sun.h.
	(FRAME_ARGS_SKIP): Moved here from tm-i386v.h.
	(FRAME_FIND_SAVED_REGS): Moved here from tm-i386v.h.
	(PUSH_DUMMY_FRAME): Moved here from tm-i386v.h.
	(POP_FRAME): Moved here from tm-i386v.h.
	(CALL_DUMMY, CALL_DUMMY_LENGTH, CALL_DUMMY_START_OFFSET, 
	CALL_DUMMY_BREAKPOINT_OFFSET, FIX_CALL_DUMMY): Moved here from
	tm-i386v.h
	(print_387_control_word, print_387_status_word): Declare prototypes.
	(struct frame_info, struct frame_saved_regs): Forward decls for
	prototypes.
	(SP_ARG0): Moved here from tm-i386v.h.

	* config/i386/tm-i386v.h:
	(i386/tm-i386.h): Include.
	(TARGET_BYTE_ORDER): Remove.
	(IEEE_FLOAT): Remove.
	(START_INFERIOR_TRAPS_EXPECTED): Undef before redefine to 4.
	(FUNCTION_START_OFFSET): Remove.
	(SKIP_PROLOGUE): Remove.
	(i386_skip_prologue): Remove prototype.
	(SAVED_PC_AFTER_CALL): Remove.
	(INNER_THAN): Remove.
	(BREAKPOINT): Remove.
	(DECR_PC_AFTER_BREAK): Remove.
	(ABOUT_TO_RETURN): Remove.
	(REGISTER_SIZE): Remove.
	(NUM_REGS): Undef before redefine to 16 (no FP support).
	(REGISTER_NAMES): Undef before redefine.
	(FP_REGNUM, SP_REGNUM, PC_REGNUM, PS_REGNUM): Remove.
	(REGISTER_BYTES): Undef before redefine.
	(REGISTER_BYTE): Undef before redefine.
	(REGISTER_RAW_SIZE): Undef before redefine.
	(REGISTER_VIRTUAL_SIZE): Undef before redefine.
	(MAX_REGISTER_RAW_SIZE): Undef before redefine.
	(MAX_REGISTER_VIRTUAL_SIZE): Undef before redefine.
	(REGISTER_VIRTUAL_TYPE): Undef before redefine.
	(STORE_STRUCT_RETURN): Undef before redefine.
	(EXTRACT_RETURN_VALUE): Undef before redefine.
	(STORE_RETURN_VALUE): Undef before redefine.
	(EXTRACT_STRUCT_VALUE_ADDRESS): Remove.
	(FRAME_CHAIN): Undef before redefine.
	(FRAMELESS_FUNCTION_INVOCATION): Undef before redefine.
	(FRAME_SAVED_PC): Undef before redefine.
	(FRAME_ARGS_ADDRESS): Remove.
	(FRAME_LOCALS_ADDRESS): Remove.
	(FRAME_NUM_ARGS): Undef before redefine.
	(FRAME_ARGS_SKIP): Remove.
	(FRAME_FIND_SAVED_REGS): Remove.
	(PUSH_DUMMY_FRAME): Remove.
	(POP_FRAME): Remove.
	(CALL_DUMMY): Remove.
	(CALL_DUMMY_LENGTH): Remove.
	(CALL_DUMMY_START_OFFSET): Remove.
	(CALL_DUMMY_BREAKPOINT_OFFSET): Remove
	(FIX_CALL_DUMMY): Remove.
	(print_387_control_word): Remove.
	(print_387_status_word): Remove.
	(SP_ARG0): Remove.

	* config/i386/tm-symmetry.h: 
	(TM_SYMMETRY_H): Enclose file in test for define & define if needed.
	(START_INFERIOR_TRAPS_EXPECTED): Move to after inclusion of
	tm-i386v4.h or tm-i386v.h, #undef, and #define back to 2.
	(DECR_PC_AFTER_BREAK): Move to after inclusion of tm-i386v4.h
	or tm-i386v.h, #undef, and #define to 0.
	(MAX_REGISTER_RAW_SIZE): Remove.
	(FRAME_CHAIN): Remove.
	(FRAMELESS_FUNCTION_INVOCATION): Remove.
	(FRAME_SAVED_PC): Remove.
	(print_387_control_word, print_387_status_word): Remove prototypes.

	* config/i386/tm-ptx.h: 
	(TM_PTX_H): Enclose file in test for define & define if needed.
	(START_INFERIOR_TRAPS_EXPECTED): Move to after inclusion of
	tm-i386v4.h or tm-i386v.h, #undef, and #define back to 2.
	(DECR_PC_AFTER_BREAK): Move to after inclusion of tm-i386v4.h
	or tm-i386v.h, #undef, and #define to 0.
	(SDB_REG_TO_REGNUM):  Remove obsolete commented out define.
	(print_387_control_word, print_387_status_word): Remove prototypes.

	* config/i386/tm-linux.h:
	(TM_LINUX_H): Enclose file in test for define & define if needed.
	(i386/tm-i386.h): Include instead of tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Remove.

	* config/i386/tm-i386v4.h: 
	(TM_I386V4_H): Enclose file in test for define & define if needed.
	(i386/tm-i386.h): Include instead of tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Remove.
	(FRAME_CHAIN):  Moved to tm-i386.h.
	(FRAMELESS_FUNCTION_INVOCATION): Moved to tm-i386.h.
	(FRAME_SAVED_PC): Remove.
	(sigtramp_saved_pc):  Define as i386v4_sigtramp_saved_pc.
	(FRAME_NUM_ARGS): Remove.

	* config/i386/tm-i386os9k.h: 
	(TM_I386OS9K_H): Enclose file in test for define & define if needed.
	(i386/tm-i386.h): Include instead of tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Remove.
	(NUM_REGS):  Undefine before redefining.
	(FRAME_CHAIN): Remove.
	(FRAMELESS_FUNCTION_INVOCATION): Remove.
	(FRAME_SAVED_PC): Move to tm-i386.h.

	* config/i386/tm-i386nw.h: 
	(TM_I386NW_H): Enclose file in test for define & define if needed.
	(i386/tm-i386.h): Include instead of tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Remove.

	* config/i386/tm-i386bsd.h:
	(TM_I386BSD_H): Enclose file in test for define & define if needed.
	(i386/tm-i386.h): Include instead of tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Remove.
	(FRAMELESS_FUNCTION_INVOCATION): Remove.
	(FRAME_SAVED_PC): Remove.

	* config/i386/tm-i386aix.h:
	(i386/tm-i386.h): Include instead of tm-i386v.h.
	(START_INFERIOR_TRAPS_EXPECTED): Remove.
	(FP_REGNUM): Remove.
	(SP_REGNUM): Remove.
	(PC_REGNUM): Remove.
	(PS_REGNUM): Remove.
	(FP0_REGNUM):  Moved to tm-i386.h.
	(NUM_REGS): Remove.
	(REGISTER_NAMES): Remove.
	(REGISTER_BYTES): Moved to tm-i386.h.
	(REGISTER_BYTE): Moved to tm-i386.h.
	(REGISTER_RAW_SIZE): Moved to tm-i386.h.
	(MAX_REGISTER_RAW_SIZE): Moved to tm-i386.h.
	(REGISTER_VIRTUAL_SIZE): Moved to tm-i386.h.
	(REGISTER_VIRTUAL_TYPE): Removed.
	(EXTRACT_RETURN_VALUE): Moved to tm-i386.h.
	(STORE_RETURN_VALUE):  Moved to tm-i386.h.

	* config/i386/tm-sun386.h:
	(TM_SUN386_H): Enclose file in test for define & define if needed.
	(i386/tm-i386.h): Include.
	(TARGET_BYTE_ORDER): Remove.
	(FUNCTION_START_OFFSET): Remove.
	(SKIP_PROLOGUE): Remove.
	(SAVED_PC_AFTER_CALL): Remove.
	(INNER_THAN): Remove.
	(BREAKPOINT): Remove.
	(DECR_PC_AFTER_BREAK): Remove.
	(ABOUT_TO_RETURN): Remove.
	(REGISTER_SIZE): Remove.
	(NUM_REGS): Undefine before defining.
	(REGISTER_NAMES): Undefine before redefining.
	(REGISTER_BYTES): Undefine before redefining.
	(REGISTER_BYTE): Undefine before defining.
	(FP_REGNUM): Undefine before defining.
	(PC_REGNUM): Undefine before defining.
	(FPC_REGNUM):  Undefine before defining.
	(REGISTER_RAW_SIZE):  Undefine before defining.
	(FRAME_CHAIN): Undefine before defining.
	(FRAMELESS_FUNCTION_INVOCATION): Undefine before defining.
	(FRAME_SAVED_PC): Undefine before defining.
	(FRAME_NUM_ARGS): Moved to tm-i386.h.
	(MAX_REGISTER_RAW_SIZE): Remove.
	(MAX_REGISTER_VIRTUAL_SIZE): Remove.
	(STORE_STRUCT_RETURN): Remove.
	(EXTRACT_STRUCT_VALUE_ADDRESS): Remove.
	(FRAME_ARGS_ADDRESS): Remove.
	(FRAME_LOCALS_ADDRESS): Remove.
	(FRAME_NUM_ARGS): Undefine before defining.
	(FRAME_ARGS_SKIP): Remove.
	(FRAME_FIND_SAVED_REGS): Remove.
	(PUSH_DUMMY_FRAME): Remove.
	(POP_FRAME): Remove.
	(CALL_DUMMY, CALL_DUMMY_LENGTH, CALL_DUMMY_START_OFFSET): Remove.
	(struct frame_info, struct frame_saved_regs): Remove forward decls
	for prototypes.

	* config/i386/tm-i386lynx.h (i386/tm-i386.h): Include instead of
	tm-i386v.h.
	* config/i386/tm-i386m3.h (i386/tm-i386.h): Include instead of
 	tm-i386v.h.

	* i386-tdep.c (i386_extract_return_value):  Make function visible
	for all i386 targets, but only assume floating point values returned
	in floating point registers for I386_AIX_TARGET.

	* i386v-nat.c (i386_register_u_addr):  Enable code to locate
	floating point regs in user struct.
	
Wed Nov  1 15:32:57 1995  Fred Fish  <fnf@cygnus.com>

	* breakpoint.c (breakpoint_re_set): Fix typo in comment.
	* symtab.c (in_prologue): Document func_start and when it is zero
	don't call SKIP_PROLOGUE (which typically leads unconditionally to
	an error when we try to access a prologue at address 0).

Tue Oct 31 13:01:15 1995  Fred Fish  <fnf@cygnus.com>

	* elfread.c: Include elf-bfd.h rather than libelf.h.

Tue Oct 31 10:42:42 1995  steve chamberlain  <sac@slash.cygnus.com>

	* win32-nat.c (xlate_exception): Treat a stack overflow like a SEGV.

Sun Oct 29 11:22:05 1995  Fred Fish  <fnf@cygnus.com>

	* monitor.c: Include gnu-regex.h rather than system regex.h.

Sat Oct 28 23:51:48 1995  steve chamberlain  <sac@slash.cygnus.com>

	* defs.h: Test on name __WIN32__ rather than WIN32.
	* inflow.c (new_tty): Likewise
	* terminal.h: Likewise.
	* utils.c (initialize_utils): Likewise.
	* win32-nat.c (child_create_inferiror): Print error code when failing.
	* config/i386/win32.mh (XM_CLIBS): Need -lkernel32.
	
Sat Oct 28 04:52:36 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* symtab.h (enum address_class):  Add LOC_UNRESOLVED for
	a location whose address has to be resolved via the minimal
	symbol table.
	* buildsym.c (finish_block), findvar.c (symbol_read_needs_frame,
	read_var_value), printcmd.c (address_info),
	symmisc.c (print_symbol, print_partial_symbol):  Handle
	LOC_UNRESOLVED.
	* stabsread.c (scan_file_globals):  Change unresolved LOC_STATIC
	symbols to LOC_UNRESOLVED. Remove rt_common_objfile lookup
	kludge, global common symbols are now handled by LOC_UNRESOLVED.
	(scan_file_globals_1):  Move code back to scan_file_globals,
	delete.

Fri Oct 27 09:54:07 1995  Stu Grossman  (grossman@cygnus.com)

	* breakpoint.c (breakpoint_re_set):  #ifdef GET_LONGJMP_TARGET
	around calls to create_longjmp_breakpoint.  Why install the
	breakpoints if we can't find the longjmp target?
	* infrun.c (wait_for_inferior):  Cleanup comments near call test.
	* remote-mips.c:  Fixed a bunch of prototypes to avoid char/int
	complaint from picky compilers.  Add comment to mips_expect.
	Replace all instances of sr_get_debug with remote_debug.
	* (mips_readchar):  Don't jam init string to monitor.
	mips_initialize() handles that.
	* (mips_receive_header):  Print better message when we get too
	much garbage.
	* (mips_request):  Allow caller to pass in buff to allow them to
	analyze the returned message.
	* (mips_initialize):  Re-do initialization to try sending a BREAK,
	a ^C, and then a download escape sequence.  Cleanup protocol
	startup.  Eliminate sleeps.  Clear breakpoints (if using monitor
	breakpoints).  Re-init frame.
	* (mips_detach):  Close down target.
	* (mips_wait): Handle return status with registers, or breakpoint
 	* stuff.
	* (mips_kill):  Add ^C handling.
	* (mips_insert_breakpoint mips_remove_breakpoint):  Call new
	breakpoint stuff if enabled.
	* (calculate_mask remote_mips_set_watchpoint
	remote_mips_remove_watchpoint remote_mips_stopped_by_watchpoint):
	Hardware watchpoint/breakpoint stuff.
	* (common_breakpoint):  Common code for new monitor breakpoint commands.
	* (mips_load):  Don't use `prompt'.  It's a global variable.
	* top.c (dont_repeat_command):  New command for use in
	user-defined commands to suppress auto-repeat (by hittin return key).
	* valops.c:  Add start of auto function-call abandonment capability.

Thu Oct 26 22:02:27 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-config.in: Add support for PowerMac host, add beginnings
	of native support.
	* mpw-make.sed: Disable subdir recursion, edit out useless rule.
	* mac-xdep.c (Values.h): Don't include.
	(GestaltEqu.h): Include Gestalt.h instead.
	(do_mouse_down): Comment out control tracking, needs to be
	updated to use UPP before will work on PowerMac.
	* config/xm-mpw.h: New file, all-Mac host support.
	* config/m68k/xm-mpw.h: Move most definitions into generic Mac
	support.
	* config/powerpc/xm-mpw.h: New file, PowerMac host support.
	
Thu Oct 26 15:21:32 1995  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* regex.h: Renamed to gnu-regex.h.
	* regex.c: Renamed to gnu-regex.c.
	* Makefile.in (POSSLIBS): Refer to gnu-regex.h and gnu-regex.c.
	(REGEX, REGEX1): Change to gnu-regex.o instead of regex.o.
	(regex.o): Renamed to gnu-regex.o; refer to gnu-regex.c.
	(irix5-nat.o, osfsolib.o, gnu-regex.o, solib.o, source.o, symtab.o):
	Likewise.
	* irix5-nat.c, osfsolib.c, gnu-regex.c, solib.c, source.c, symtab.c):
	Include "gnu-regex.h" instead of "regex.h".
	* alpha-tdep.c (in_prologue): Rename to alpha_in_prologue, to
	avoid conflicts with symtab.h.

Tue Oct 24 18:30:18 1995  Jason Molenda  (crash@phydeaux.cygnus.com)

	* config/pa/hppahpux.mh: Remove hardcoding of X locations.
	* Makefile.in: Use X11_CFLAGS, X11_LDFLAGS and X11_LIBS.
	* configure.in: Link X statically on Solaris, SunOS and HPUX.

Tue Oct 24 12:26:14 1995  Stu Grossman  (grossman@cygnus.com)

	* monitor.c (monitor_expect_regexp): Same as monitor_expect, but
 	with the obvious extension.
	(monitor_read_memory_single): Use regexp for getmem.resp_delim
 	because of parsing ambiguities caused by certain monitors.
	(monitor_read_memory): Use new regexp stuff to parse
 	getmem.resp_delim.
	* monitor.h (struct memrw_cmd->resp_delim): Document this as a
 	regexp.
	* sh3-rom.c:  Finish off table.  Use new regexp capability for
	getmem commands.

	* infrun.c (wait_for_inferior):  Disable questionable code near
	the step range test.  Replace call detection test with much
	simpler (and more efficient) test that doesn't require prologue
	examination (as often).
	* symtab.c symtab.h (in_prologue):  New function that indicates
	whether or not we are in a function prologue.  This uses the
	symbol table, and then falls back to prologue examination if that
	fails.  It's much more efficient for remote debugging because it
	avoids examining memory, which is very slow.  This is used in
	wait_for_inferior to determine if we've made a function call that
	needs to be skipped over (for next/nexti).
	* mips-tdep.c (after_prologue):  New function, returns the PC
	after the prologue.  Uses PDRs and the symbol table.
	(mips_find_saved_regs):  Use in_prologue() to avoid costly
	prologue examination if possible.
	(mips_skip_prologue):  Use after_prologue() if possible to avoid
	costly prologue examination.

Mon Oct 23 16:03:33 1995  James G. Smith  <jsmith@pasanda.cygnus.co.uk>

	* configure.in (configdirs): Added support for the VR4300 default
 	builds (mips64*vr4300*el-*-elf*, mips64*vr4300*-*-elf*).

	* configure: Regenerated.

	* remote-mips.c (mips_load): Updated the prompt spotting code to
 	make use of the TARGET_MONITOR_PROMPT manifest.

Sat Oct 21 06:11:49 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* alpha-tdep.c, mips-tdep.c (init_extra_frame_info):
	Do not set saved registers from heuristics for a sigtramp frame.

	* dwarfread.c (enum_type):  Determine signedness of enum type
	from enumerators.

	* mips-tdep.c:  Include gdb_string.h, gcc -Wall lint.

	* rs6000-nat.c (xcoff_relocate_core):  Fix typo.

	* valops.c (value_repeat):  Fix length of memory transfer to
	match recent allocate_repeat_value change.

Thu Oct 19 19:04:35 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* gdbtypes.c (get_discrete_bounds):  Fix typo.

Thu Oct 19 12:15:37 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* defs.h (SEEK_SET, SEEK_CUR): Add default definitions.
	* dbxread.c, mdebugread.c, os9kread.c (SEEK_SET, SEEK_CUR):
	Remove default definitions.

	* Makefile.in (CC-LD): Rename to CC_LD, so MPW xform works.
	(MMALLOC_SRC): Define.
	(MMALLOC_CFLAGS): Use.
	(ser-mac.o): Add rule.
	* dwarfread.c, somread.c, ultra3-nat.c, xcoffread.c: Replace L_SET
 	with SEEK_SET in all calls to bfd_seek.
	* scm-tags.h (scm_tags): Remove excess comma.

	* mpw-config.in: Adapt to work with autoconf'ed configury;
	build config.h, add empty definitions to mk.tmp.
	(powerpc-apple-macos): Make it work.
	* mpw-make.sed: New file, sed commands to translate Unix makefile
	into MPW syntax.
	* mpw-make.in: Remove.
	* mac-gdb.r: New file, was macgdb.r, renamed for consistency
	with other tools, now includes cfrg resource.
	* macgdb.r: Remove.
	* config/m68k/xm-mpw.h: Remove most of contents, replace with
	include of include/mpw/mpw.h.

Tue Oct 17 10:38:53 1995  Jeffrey A Law  (law@cygnus.com)

	* hppa-tdep.c (frame_chain): Fix more obscure problems caused
	by system calls that core dump processes without saving all
	the register state.

	* config/pa/hppahpux.mt (XDEPFILES): Remove bogus definition.
	* config/pa/hppapro.mt (XDEPFILES): Likewise.

Tue Oct 17 08:04:26 1995  Fred Fish  <fnf@rtl.cygnus.com>

	* NEWS: Fix typo.

Mon Oct 16 18:24:03 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/sh/tm-sh.h (REGISTER_VIRTUAL_TYPE): Return builtin_type_float
	for FP registers.
	(REGISTER_NAMES): Add FP register names.  Remove ticks, stalls, cycles,
	insts, plr, and tlr.
	(NUM_REGS, NUM_REALREGS): Increase from 23 to 41.
	(FPUL_REGNUM, FP0_REGNUM): New macros.

Mon Oct 16 11:27:06 1995  Stu Grossman  (grossman@cygnus.com)

	* remote-mips.c:  Add support for speedy (about 10x faster)
	downloads.

	* remote-array.c:  Move baud_rate initialization from
	_initialize_array to array_open.  It was forcing the baud rate of
	all targets to be 4800 baud!  Seems like I've fixed this before...
	* config/mips/idt.mt (TDEPFILES):  Remove remote-array.o.  This
	has *nothing* to do with IDT!!!


	* Makefile.in sh3-rom.c config/sh/sh.mt config/sh/tm-sh.h:  Add
	sh3 monitor support.
	* monitor.c:  Cleanup regexp compilation stuff to make it easier
	to use several regexps.
	* monitor.h:  Get rid of struct rom_cmd_data.  It's no longer used.
	* config/m68k/tm-monitor.h:  Don't redefine NUM_REGS here.  It just
	causes GDB to crash.

	* sparcl-tdep.c:  Cleanup serial error handling.

Sun Oct 15 16:19:27 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* rs6000-tdep.c: Don't include a.out.h, improve some formatting.

Fri Oct 13 15:27:49 1995  Stu Grossman  (grossman@cygnus.com)

	* dcache.c:  Change default value of remotecache to off.  It just
	screws up too many targets.
	* sparcl-stub.c:  Add prototypes to many forward decls.
	* Create private copies of strlen, strcpy, and memcpy to prevent
	chaos when user steps into them.
	* (trap_low handle_exception):  Clean up DSU support code
	(hardware breakpoints).  Move lots of stuff from asm-land to
	C-land (make it much easier to #ifdef if necessary).  Also, use
	trap 255 to get into break mode instead of doing a DSU register
	write, which may trash the register.
	* (putpacket):  Don't check return value of putDebugChar.  It
	returns void...

Fri Oct 13 14:16:17 1995  steve chamberlain  <sac@slash.cygnus.com>

	* remote-sim.h: Always include callback.h.
	(sim_set_callbacks): New declaration.

Fri Oct 13 10:57:40 1995  Jeffrey A Law  (law@cygnus.com)

	* somsolib.c (som_solib_add): Just give a warning if a file
	mentioned in the dld_list can't be found.
	* config/pa/tm-hppah.h (FRAME_SAVED_PC_IN_SIGTRAMP): Dig out
	the PC from the PC queues rather than %r31.

Thu Oct 12 13:36:15 1995  Jeffrey A Law  (law@cygnus.com)

	* corelow.c (core_open): Don't update the to_sections and
	to_sections_end fields in core_ops here.  It's too late.
	* irix5-nat.c (solib_add): Update the to_sections and
	to_sections_end fields in core_ops here if needed.
	* osfsolib.c (solib_add): Likewise.
	* rs6000-nat.c (xcoff_relocate_core): Likewise.
	* solib.c (solib_add): Likewise.
	* somsolib.c (solib_add): Likewise.

Wed Oct 11 17:25:59 1995  Fred Fish  <fnf@rtl.cygnus.com>

	* Makefile.in (VERSION): Bump version to 4.15.1

Tue Oct 10 15:26:39 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (VERSION): Version 4.15 released.
	* README: Updated for version 4.15.
	* NEWS: Updated for 4.15 release.
	
Tue Oct 10 13:18:50 1995  Fred Fish  <fnf@cygnus.com>

	* configure.in:  Add AC_PROG_YACC
	* configure:  Regenerate
	* Makefile.in (BISON):  Remove macro definition.
	(YACC):  Set from autoconfig.
	(FLAGS_TO_PASS):  Remove BISON.
	(TARGET_FLAGS_TO_PASS):  Remove BISON.
	
Tue Oct 10 12:25:11 1995  steve chamberlain  <sac@slash.cygnus.com>

	* win32-nat.c (child_create_inferior): Pass argv correctly.
	* Makefile.in (win32-nat.o): Add dependencies.

Mon Oct  9 14:36:29 1995  steve chamberlain  <sac@slash.cygnus.com>

	* NEWS:  Add information about win32 and arm code.
	* win32-nat.c: Renamed from win32.c.
	* config/i386/win32.mh: Renamed from config/i386/i386win32.mh.
	* config/i386/win32.mt: Renamed from config/i386/i386win32.mt.
	* config/i386/tm-win32.h: Renamed from config/i386/tm-i386win32.h.
	* config/i386/xm-win32.h: Renamed from config/i386/xm-i386win32.h.
	* configure.in (i[345]86-*-win32): Updated to cope with filename
	changes.
	* configure: Regenerated.	

Sun Oct  8 18:01:04 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* ch-exp.y (yylex):  Also look for '$' following '$'.

Sat Oct  7 22:52:42 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ch-exp.y (yylex): Fix typo.

Fri Oct  6 11:56:49 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* remote-sim.c (gdbsim_open): Put callback initializations here.
	(_initalize_remote_sim): Not here.

Fri Oct  6 17:08:49 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* top.c (execute_control_command): Use 0/1 instead of BFD's
	true/false.

Fri Oct  6 14:43:19 1995  Stu Grossman  (grossman@cygnus.com)

	* sparcl-stub.c:  Include sparclite.h to get access to register
	fondling macros.
	* (trap_low):  Save and restore FP regs if necessary.  Also, clean
	up save and restore of debug unit regs.
	* (hard_trap_info):  Add more architecturally defined traps.
	* (set_debug_traps):  Only set FP disabled trap if FP is disabled.
	* (get_in_break_mode):  Clean up.  Get rid of calls to
	set_hw_breakpoint_trap().  Also, use write_asi macro.
	* (handle_exception):  Clean up `g' and `G' commands.  Add `P'
	command.
	* (hw_breakpoint):  Why was this here!?  It's gone now...

Fri Oct  6 11:56:49 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* callback.c (fdbad): Fix typo in comment.
	(os_close, os_isatty, os_lseek, os_read, os_write): Use if
 	statements rather than || to get correct return value.
	(os_write_stdout): Pass missing first argument to os_write.
	* remote-sim.c: Include callback.h.
	(_initialize_remote_sim): Call sim_set_callbacks and then
 	initialize the callbacks.

Thu Oct  5 17:28:09 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* values.c (allocate_repeat_value):  Allocate an array type, and
	a value of that type; use that instead of setting VALUE_REPEATED.
	* value.h (struct value):  Remove fields repetitions and repeated.
	(VALUE_REPEATED, VALUE_REPETITIONS):  Removed, no longer used.
	* c-valprint.c, ch-valprint.c, eval.c, printcmd.c, valops.c,
	value.h, values.c: Simplify, since now VALUE_REPEATED is never
 	used.
	* valprint.c (value_print_array_elemen): Removed never-used
 	function.
	
Thu Oct  5 15:14:36 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* parse.c (write_dollar_variable):  New function.

	* c-exp.y (yylex): Replace code for recognizing '$'
 	pseudo-variables with a call to write_dollar_variable.
	Simplify grammar correspondingly.
	* f-exp.y:  Likewise.
	* m2-exp.y:  Likewise.
	* ch-exp.y:  Likewise.  (Remove function match_dollar_tokens.)
	* scm-exp.c (scm_lreadr): Call write_dollar_variable to handle '$'.

Thu Oct  5 13:27:30 1995  steve chamberlain  <sac@slash.cygnus.com>

	* win32.c: New file; support for debugging on windows NT.
	* configure.in: (i[345]86-*-win32): New target.
	* configure: Regnerated.
	* eval.c (evaluate_subexp_standard): Remove unused name.
	* serial.c (gdb_string.h): Include.
	* source.c (value.h): Include.
	* config/i386/i386win32.mh (XDEPFILES): Add win32.o
	* config/i386/i386win32.mt: New.
	* config/i386/tm-i386win32.h: New.

Wed Oct  4 18:41:34 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* expression.h (enum exp_code):  Added OP_NAME.
	* expprint.c (print_subexp):  Add OP_NAME support.
	* parse.c (length_of_subexp, prefixify_subexp):  Likewise.
	* scm-lang.c (scm_unpack, in_eval_c, scm_lookup_name):  new function.
	* scm-lang.h:  Declare builtin_type_scm;  other minor tweaks.
	* values.c (unpack_long):  If type is SCM, call scm_unpack.
	* scm-valprint.c (scm_val_print):  Use extract_signed_integer,
	instead unpack_long
	* scm-lang.c: More Scheme expression parsing from here ...
	* scm-exp.c:  ... to here.  New file.
	Also, provide for gdb to evaluate simple constants and names..	
	* Makefile.in:  Note new scm-exp.{c,o}.
	
Wed Oct  4 17:23:03 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* gdbtypes.c (get_discrete_bounds):  New function.
	(force_to_range_type):  Use get_discrete_bounds.
	* gdbtypes.h (get_discrete_bounds):  Add declaration.
	* valarith.c (value_bit_index):  Generalize to use get_discrete_bounds.
	* ch-valprint.c (chill_val_print):  Make (power)sets and bitstring
	support use get_discrete_bounds and generally be more robust.

Tue Oct  3 16:54:56 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-nrom.c (nrom_ops): Add value for to_thread_alive,
	add comments naming slots.

Mon Oct  2 21:45:44 1995  Jeff Law  (law@hurl)

	* top.c (build_command_line): Demand arguments for if/while
	commands.

Mon Oct  2 13:08:01 1995  Jason Molenda   (crash@phydeaux.cygnus.com)

	* Makefile.in (X11_CFLAGS): Set only to @X_INCDIR@.

Sat Sep 30 16:13:36 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* scm-lang.c:  Moved Scheme value printing code to ...
	* scm-valprint.c:  ... this new file.
	Also major improvements in support for printing SCM values.
	* scm-lang.h:  New file.
	* scm-tags.h:  New file.
	* Makefile.in:  Note new scm-valprint.{c,o}.

Sat Sep 30 09:35:02 1995  Jason Molenda  (crash@phydeaux.cygnus.com)

	* configure.in: X_INCDIR and X_LIBDIR added.
	* Makefile.in: @X_INCDIR@ and @X_LIBDIR@ added.
	* configure: Regnerated.

Fri Sep 29 02:10:05 1995  steve chamberlain  <sac@slash.cygnus.com>

	* config/arm/tm-arm.h (FRAME_CHAIN, FRAME_CHAIN_VALID):
	Any pc > LOWESTPC is ok.

	* remote-rdp.c (rdp_init): Take out variable baud rate stuff.
	(remote_rdp_detatch): Delete.
	* breakpoint.c (ctype.h): Don't include twice.

	* Makefile.in (remote-rdp.o): Doesn't need remote-rdp.h
	* callback.c (os_printf_filtered): fix protos.
	* defs.h (puts_filtered, puts_unfiltered
	[v|f|]printf_[un]filtered): Make format arg const.
	* remote-rdp.c (rdp_init): Attept to sync at different
	baudrates.
	* utils.c (puts_filtered, puts_unfiltered
	[v|f|]printf_[un]filtered): Define prototypes with
	const in the right place.

Thu Sep 28 17:43:39 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* defs.h (enum language):  Add language_scm.
	* expression.h (enum exp_code):  Added OP_EXPRSTRING.
	* scm-lang.c:  Preliminary support for Guile /SCM dialect of Scheme.
	* expprint.c (print_subexp):  Add OP_EXPRSTRING support.
	* parse.c (length_of_subexp, prefixify_subexp):  Likewise.
	* valops.c (find_function_in_inferior):  New function.
	(value_allocate_space_in_inferior):  New function.
	(allocate_space_in_inferior):  Redefine using previous function.
	* Makefile.in (SFILES):  Add scm-lang.c.
	(COMMON_OBS):  Add scm-lang.o

Thu Sep 28 14:32:11 1995  steve chamberlain  <sac@slash.cygnus.com>

	* callback.[ch]: New files.
	* remote-rdp.c: Support for the ARM RDP monitor.
	* Makefile: Update.
	* arm-tdep.c (arm_othernames): New.
	(_initialize_arm_tdep): install 'othernames' command.
	(arm_nullified_insn, shifted_reg_val, arm_get_next_pc): New.
	* configure.in: Check for termios.h, termio.h and sgtty.h.
	(i[345]86-*-win32*): New host.
	* configure: Regenerated.
	* inflow.c: Clean up inclusions.
	* main.c (main): Check for WINGDB, not WIN32.
	* printcmd.c (do_examine): Put QUIT test in loop.
	* remote-hms.c (e7000_load): Delete.
	(hms_ops): Point to generic_load instead.
	* remote-hms.c (hms_ops): Point to generic_load.
	* remote-sim.c (sim_callback_write_stdout): Becomes
	gdbsim_write_stdout.
	(gdbsim_load): Call generic_load.
	* remote-utils.c (gr_load_image): Delete.
	* ser-unix.c (terminal.h): Include instead of havig
	own #if tree.
	(hardwire_flush_input): Reset input buffer too.
	* source.c (openp): If WIN32 then open file in binary mode.
	* terminal.h: Configure IO mechanism using autoconf defines if
 	available and not overriden.
	* utils.c (quit, pollquit, notice_quit): WIN32 check becomes
 	WINGDB check.

	* config/arm/arm.mt (TDEPFILES): Add remote-rdp.o.
	* config/arm/tm-arm.h (TARGET_BYTE_ORDER): becomes
	TARGET_BYTE_ORDER_SELECTABLE.
	(ADDR_BITS_REMOVE): New.
	(ORIGINAL_REGISTER_NAMES, ADDITIONAL_REGISTER_NAMES): New.
	(INST_xx): New.
	(FRAME_FIND_SAVED_REGS): Pass the right argument.
	(arm_get_next_pc): Declare.

Wed Sep 27 10:14:36 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* valops.c (search_struct_field):  Also allow "else" as a variant
	name.
	* eval.c (evaluate_struct_tuple):  New function.  Used to evaluate
	structure tuples.  Now also handles Chill variant records.
	(get_label):  New function, used by evaluate_struct_tuple.
	(evaluate_subexp_standard case OP_ARRAY):  Use evaluate_struct_tuple.
	(evaluate_labeled_field_init):  Removed.

	* valops.c (search_struct_field):  Generalize to work with Chill
	variant records.

Sat Sep 23 01:22:23 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_partial_symbols):  Reset includes_used
	and dependencies_used after finishing the partial symbol table.

	* rs6000-tdep.c (push_dummy_frame):  Handle lr_offset of zero
	correctly.

	* rs6000-nat.c (xcoff_relocate_core):  Don't relocate data
	addresses for the main objfile if DONT_RELOCATE_SYMFILE_OBJFILE
	is defined.
	* xcoffread.c:  gcc -Wall lint. Remove traceback table reading
	code. The existing code tried to add parameter information for
	functions compiled without -g, which cannot be done properly
	for optimized code and produced misleading parameter displays.
	(ef_complaint, eb_complaint):  Make a local static copy to avoid
	dependency on coffread.c.
	(read_xcoff_symtab, process_xcoff_symbol, scan_xcoff_symtab):
	Enter C_EXT/C_HIDEXT symbols into the minimal symbol table only.
	(read_xcoff_symtab):  Ignore C_STAT section auxiliary entry
	symbols. Complain about unmatched .ef and .eb symbols instead of
	segfaulting.
	(process_xcoff_symbol):  Determine value of C_GSYM symbols via
	the global_sym_chain mechanism in stabsread.c.
	(xcoff_new_init):  Call stabsread_new_init and buildsym_new_init.
	(init_string_tab):  Initialize length field bytes in the strtbl.
	(scan_xcoff_symtab):  Skip symbols that start with `$' or `.$'.
	Set first_fun_line_offset for symbols with two auxents only.

Wed Sep 20 21:06:35 1995  Jeff Law  (law@snake.cs.utah.edu)

	* op50-rom.c (op50n_cmds): Send ".\r" after the interrupt
	character.

Wed Sep 20 13:12:56 1995  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (maintainer-clean): New target, synonym for
	realclean.  Add GNU standard maintainer-clean echos.
	* gdbserver/Makefile.in (maintainer-clean): New target, synonym
	for realclean.
	* nlm/Makefile.in (maintainer-clean): Likewise.

Wed Sep 20 08:16:03 1995  steve chamberlain  <sac@slash.cygnus.com>

	* defs.h (xmalloc, xrealloc): Delete, they're declared in libiberty.h.
	(GETENV_PROVIDED, FCLOSE_PROVIDED): New.
	* remote-sim.[ch] (sim_callback_write_stdout): New.

Tue Sep 19 15:28:58 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* gdbtypes.c (create_set_type):  Set TYPE_LENGTH in bytes, not bits.
	* valops.c (value_bitstring):  TYPE_LENGTH is bytes, not bits.

	* gdbtypes.c (force_to_range_type):  Calculate upper limit of
	TYPE_CODE_CHAR depending on TYPE_LENGTH (instead of just using 255).

Mon Sep 18 01:43:42 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c (auto_solib_add_at_startup): Delete definition.  No
	longer needed.

Sat Sep 16 13:23:36 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/mips/tm-mips.h (UNUSED_REGNUM):  Define.
	* mipsv4-nat.c (supply_gregset):  Fill UNUSED_REGNUM register
	with zero.

Thu Sep 14 17:35:24 1995  Stu Grossman  (grossman@cygnus.com)

	* remote-sim.c (gdbsim_create_inferior):  Back out change that
	broke all simulator configurations except the rs6000.

Thu Sep 14 14:44:59 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* monitor.c (monitor_expect): Discard NULL characters.

Thu Sep 14 14:12:30 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* infcmd.c: Add extern declaration for auto_solib_add_at_startup.

Wed Sep 13 13:33:58 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* symfile.c: Move global variable auto_solib_add_at_startup from
	solib.c to symfile.c.
	* solib.c: ditto.
	* symfile.h: Add extern declaration of the above mentioned variable.
	* infcmd.c: Take out extern declaration, since it's in symfile.h.

Thu Sep 14 12:39:35 1995  Stu Grossman  (grossman@cygnus.com)

	* coffread.c (coff_symtab_read):  Complain about unmatched .ef and
	.eb symbols instead of segfaulting.

Wed Sep 13 13:33:58 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* stabsread.c (read_one_struct_field): Use subfile language instead of
	global language. Improve efficiency.

Wed Sep 13 08:45:02 1995  Jeff Law  (law@fast.cs.utah.edu)

	* somsolib.c (auto_solib_add_at_startup): Define new global variable.
	(som_solib_create_inferior_hook): Don't add libraries if
	auto_solib_add_at_startup is zero.
	(_initialize_som_solib): Add command to toggle
	auto_solib_add_at_startup.

Tue Sep 12 19:37:24 1995  Jeff Law  (law@snake.cs.utah.edu)

	* monitor.c (monitor_make_srec): Fix thinkos in computation
	of addr_size.

Tue Sep 12 15:46:18 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* stabsread.c (read_one_struct_field): Add a patch to handle cfront
	generated stabs that each field is in full mangled name.

	* stabsread.c: To include language.h and expression.h for the reason
	above.
	
	* infcmd.c (attach_command): Add solibs only when
	auto_solib_add_at_startup is set.

Mon Sep 11 17:22:35 1995  Fred Fish  <fnf@cygnus.com>

	* NEWS:  Add information about remote target caching.

Sun Sep 10 15:36:21 1995  Fred Fish  <fnf@cygnus.com>

	* defs.h: Only include mmalloc.h if NO_MMALLOC is not
	defined.

Sun Sep 10 10:24:48 1995  Michael Tiemann  <tiemann@axon.cygnus.com>

	* tm-ppc-eabi.h (PC_IN_CALL_DUMMY): Redefine this to work with the
	simulator.  FIXME.

	* rs6000-tdep.c (push_dummy_frame): Calculate the correct link
	register offset from the current frame (don't assume it is always 8).
	(push_dummy_frame): Add comment about having only 4096 bytes of
	stack space in the simulator (by default).

	* remote-sim.c (gdbsim_create_inferior): Call
	`add_text_to_loadinfo' so that gdb can find TOC entries when
	calling functions in the inferior.

Sun Sep 10 09:00:28 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sparc-tdep.c (fill_fpregset):  Fix incorrect FP_MAX_REGNUM
	substitution.
	(supply_fpregset):  Use FP_MAX_REGNUM.

Sat Sep  9 08:21:52 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* stabsread.c (read_enum_type):  Exit loop for putting pending
	enum symbols into the enum type correctly if we had no pending
	symbols on entry to read_enum_type.

Fri Sep  8 12:57:41 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* inferior.h: Add extern declaration of inferior_environ.
	* solib.c (solib_map_sections): To get inferior's env instead of
	gdb's for LD_LIBRARY_PATH, same for PATH.
	
	* solib.c (solib_map_sections): Copy full path name into so_list
	structure so that symbol_file_add can find it.

Tue Sep  5 17:47:53 1995  Doug Evans  <dje@canuck.cygnus.com>

	* config/sparc/tm-sp64.h (REGISTER_RAW_SIZE): Lower 32 fp regs
	have size 4.
	(REGISTER_VIRTUAL_SIZE): Likewise.
	(REGISTER_VIRTUAL_TYPE): Lower 32 fp regs have type float.
	Upper 32 fp regs have type double.
	* sparc-tdep.c (NUM_SPARC_FPREGS): Replace with
	(FP_REGISTER_BYTES): this, and update all uses.
	(FP_MAX_REGNUM): Define if not already.
	(get_saved_register): Handle new sparc64 fp regs.
	(sparc_frame_find_saved_regs): Likewise.
	(sparc_print_register_hook): Only print fp regs < 32 as doubles.
	Add code to handle long doubles when gdb does.
	(_initialize_sparc_tdep): Use print_insn_sparc64 if sparc64.

Sat Sep  2 06:41:26 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* configure.in:  Explicitly `exit 0' for broken shells.
	* configure:  Rebuilt.

	* symtab.c (list_symbols):  Add missing blank after
	`<function, no debug info>' output.

	* valops.c (value_assign):  Handle truncation when assigning
	to bitfields. Use value_copy to construct the return value
	from toval.
	* values.c (value_copy):  Copy VALUE_FRAME and VALUE_OPTIMIZED_OUT.

Fri Sep  1 08:25:50 1995  James G. Smith  <jsmith@beauty.cygnus.com>

	* configure (mips64*vr4300*-*-elf): Support added.
	* remote-mips.c (mips_readchar): Change to allow build-time prompt
 	string.
	* config/mips/tm-mips.h: Added TARGET_MONITOR_PROMPT.
	* config/mips/{vr4300.mt, vr4300el.mt, tm-vr4300.h,
 	tm-vr4300el.h}: Added.

Thu Aug 31 12:48:04 1995  Jim Wilson  <wilson@chestnut.cygnus.com>

	* config/sh/sh.mt (SIM): Add -lm.

Wed Aug 30 18:10:57 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* rmote-nindy.c (non_dle, nidy_resume, nindy_wait): Changes to 
	conform to GNU coding standards.

	* solib.c (match_main): Modify to follow GNU coding conventions.

Mon Aug 28 17:07:26 1995  Kung Hsu  <kung@lisa.cygnus.com>

	* remote.c (remote_wait): Revert 19 July my change which should be
	customer specific.

Sat Aug 26 00:26:11 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_symbol):  Handle sh.value of zero for enums.
	Determine signedness of enum type from enumerators.
	(parse_type):  Handle btIndirect types, handle fBitfield for
	some non-member types.
	(upgrade_type):  Use TYPE_FLAG_TARGET_STUB for arrays with
	unknown length.
	(cross_ref):  Handle stIndirect forward reference to btTypedef.

	* stabsread.c (read_enum_type):  Determine signedness of enum
	type from enumerators.

	* top.c (execute_command):  Remove trailing whitespace from
	command arguments, except for `set' and `complete' commands.
	(validate_comname):  Allow underscores in user defined command
	names.

	* values.c (modify_field):  Change `Value does not fit in %d bits'
	error to a warning. Exclude sign extension bits of negative field
	values from fit check.

Fri Aug 25 11:31:29 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (powerpc*-*-eabisim*): Only link in the simulator
	if the target is powerpc{,le}-*-eabisim*, since the simulator
	needs GCC to build.
	* config/powerpc/ppc{,le}-sim.mt: Cloned from ppc{,le}-eabi.mt.
	* config/powerpc/ppc{,le}-eabi.mt: Remove simulator support.
	* config/powerpc/tm-ppc{,le}-sim.mt: Include tm-ppc{,le}-sim.h.

Wed Aug 23 16:55:35 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/ppc{,le}-eabi.mt (SIM_OBJS, SIM): Link in the
	PowerPC simulator.

Tue Aug 22 02:00:47 1995  Jeff Law  (law@snake.cs.utah.edu)

	* tm-hppa.h (EXTRACT_RETURN_VALUE): Fix for FP values.

	* tm-hppa.h (STORE_RETURN_VALUE): Fix to work with -msoft-float
	calling conventions too.  Use the TYPE of the return value, not
	its length to determine if it should also be copied into the
	floating point registers.

	* tm-hppa.h (PROLOGUE_FIRSTLINE_OVERLAP): Delete.  Causes more
	problems than it fixes.
	* hppa-tdep.c (skip_prologue): If we exit the main loop without
	finding all the register saves, retry again without looking for
	the registers we could not find the first time.

Mon Aug 21 23:39:56 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (frame_chain_valid): Handle systems where "$START$"
	calls "main" directly.
	(skip_prologue): Always assume arguments were saved into the stack
	since GCC will do so without setting the magic Args_Saved bit in
	the unwind descriptor.

Mon Aug 21 11:49:17 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote-udi.c (udi_wait): Mask off high bits of stop reason.
	* remote-udi.c (fetch_register): For unfetchable regs, pretend it's
	done. Fix a bug.

Mon Aug 21 00:45:17 1995  Jeff Law  (law@snake.cs.utah.edu)

	* Makefile.in (install): Remove "brokensed" hack, unnecessary now
	that we're using autoconf.
	(uninstall): Likewise.


Sat Aug 19 01:19:34 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* gdbtypes.c (recursive_dump_type):  Add dont_print_type_obstack
	to inhibit infinite recursion when printing aggregate types.

Fri Aug 18 17:48:55 1995  steve chamberlain  <sac@slash.cygnus.com>

	* dcache.c (dcache_write_line): Write dirty lines right.

Fri Aug 18 06:26:56 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* sparc-tdep.c (isbranch):  Fix typo which caused wrong
	target addresses for annulled branches.

Wed Aug 16 21:54:39 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/pa/tm-hppa.h (PROLOGUE_FIRSTLINE_OVERLAP): Define.

Tue Aug 15 07:51:21 1995  steve chamberlain  <sac@slash.cygnus.com>

	* remote.c (remote_write_bytes): Chop up large transfers.

Mon Aug 14 17:56:36 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* gcc.patch: Remove, relevant only to long-ago versions of GCC.

Mon Aug 14 13:43:01 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* config/sparc/tm-sparclite.h: Define FRAME_CHAIN_VALID_ALTERNATE.
	* blockframe.c (inside_main_func): If main func addr range not set,
	try to set it now.

Sat Aug 12 15:34:54 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* config/powerpc/xm-aix.h (FIVE_ARG_PTRACE): Define.
	* config/rs6000/xm-rs6000.h (FIVE_ARG_PTRACE): Likewise.

	* configure.in: Recognize aix4 specially as some aspects
	of aix4 need different handling than aix3.
	* configure: Updated.
	* config/powerpc/{aix4.mh,aix4.mt,tm-ppc-aix4.h}: New files
	specific to aix4 support on the power pc.
	* config/powerpc/tm-ppc-aix.h (DONT_RELOCATE_SYMFILE_OBJFILE): Do
	not defined.  The aix4 specific target files will do that.
	* config/rs6000/{aix4,mh,aix4,mt,tm-rs6000-aix4.h}: New files
	specific to aix4 support on the rs6000.

	* config/rs6000/tm-rs6000.h (CONVERT_FROM_FUNC_PTR_ADDR): Don't
	do the conversion if the pointer is not a magic aix function
	pointer.
	* rs6000-tdep.c: Include objfiles.h and symtab.h.
 	(is_magic_function_pointer): New function.

	* rs6000-tdep.c (skip_prologue): Refine check for frameless
	functions.  Handle b .+4 emitted by aix4 compilers.  Only
	allow one load of a minimal toc pointer.  Handle aix4 compiler's
	code for alloca.

	* rs6000-tdep.c (find_toc_address): Report an error if no toc was
	found rather than possibly core dumping.

	* partial-stab.h: Handle extra field generated by the aix4 compiler
	for enumerations.
	* stabsread.c (read_enum_type): Likewise.

Sat Aug 12 03:18:04 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-tdep.c (extract_return_value):  Fix returning of values
	whose length is less than the register size for big endian targets.

Fri Aug 11 13:04:32 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* symtab.c (list_symbols): if break command set breakpoint on
	matched symbol.

Wed Aug  9 18:59:05 1995  Fred Fish  <fnf@cygnus.com>

	* defs.h (strchr, strrchr, strstr, strtok, strerror): Enclose in
	#ifndefs to protect against previous definitions as macros.

Wed Aug  9 14:51:36 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* xcoffread.c (xcoff_symfile_offset): Revert an unwanted change
	that got in accidentally with Aug 1 change.

Sat Aug  5 09:07:28 1995  steve chamberlain  <sac@slash.cygnus.com>
 
 	* remote-hms.c (hms_cmds): Get reg term right.
	* monitor.c (monitor_fetch_register):  If we see
	a non-hex digit, just stop reading.  
 	* remote.c (remote_wait): Change way $O is handled.
 
Wed Aug  9 11:42:36 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	 * configure.in (powerpc-*-aix*): Recognize as a new gdb host
	 and target.
	 (powerpc-*-eabi*): Don't set configdirs.
	 (powerpcle-*-eabi*): Likewise.
	 * configure: Updated.
	 * rs6000-nat.c (vmap_ldinfo): Don't relocate data addresses
	 for the main objfile if DONT_RELOCATE_SYMFILE_OBJFILE is
	 defined.
	 * config/powerpc/{aix.mh,aix.mh}: Host and target makefile fragments
	 for powerpc running aix4.
	 * config/powerpc/{nm-aix.h, tm-ppc-aix.h, xm-aix.h}: Native, target
	 and host include files for powerpc running aix4.

Wed Aug  9 08:11:45 1995  Stan Shebs  <shebs@cygnus.com>

	* top.c (target_output_hook): Really make it match defs.h (char *
	is not the same as unsigned char *).

Tue Aug  8 15:13:05 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (CXX_FOR_TARGET): Don't use ${rootme}/../gcc/xgcc
	unless it is present.

Tue Aug  8 10:50:15 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* top.c (target_output_hook): Make declaration match the one
	in defs.h.

	* symfile.c (add_psymbol_to_list): Initialize SYMBOL_SECTION.
	(add_psymbol_addr_to_list): Likewise.
	* symfile.h (ADD_PSYMBOL_VT_TO_LIST): Likewise.

Mon Aug  7 15:34:29 1995  steve chamberlain  <sac@slash.cygnus.com>

	* top.c (target_output_hook): New definition.
	* stack.c (gdb_string.h): Include after defs.h
	* defs.h (target_output_hook): New declaration.
	* source.c (mod_path): Fix Win32 \ handling.

Sun Aug  6 22:14:25 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (frame_saved_pc): Don't try to dig a return pointer
	out of a long branch stub.

Fri Aug  4 13:37:31 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* xcoffread.c (process_linenos): Fix typo in last change.

Thu Aug  3 22:01:26 1995  Fred Fish  <fnf@rtl.cygnus.com>

	* ch-exp.y (write_lower_upper_value):  Add prototype so bison
	generated parser will insert prototype before first func usage.
	Bison and byacc order the output sections differently.  Also
	make function static.

Thu Aug  3 10:45:37 1995  Fred Fish  <fnf@cygnus.com>

	* Update all FSF addresses except those in COPYING* files.

Thu Aug  3 01:38:45 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/alpha/tm-alpha.h (EXTRA_FRAME_INFO):  Add pc_reg field.
	(SKIP_TRAMPOLINE_CODE):  Define.
	* alpha-tdep.c (alpha_frame_saved_pc):  Use pc_reg field from
	frame to find the saved pc register.
	(alpha_saved_pc_after_call):  Skip over shared library trampoline
	before trying to find the saved pc register.
	(find_proc_desc):  Copy PROC_PC_REG from found proc_desc
	to heuristic proc_desc.
	(init_extra_frame_info):  Initialize pc_reg field in frame.

Wed Aug  2 18:00:36 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in (m68*-est-*): Use monitor target config.
	* configure: Update.
	* config/m68k/est.mt, config/m68k/tm-est.h: Delete.
	* config/m68k/monitor.mt, config/m68k/tm-monitor.h: Fix comments.

Tue Aug  1 22:52:53 1995  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (VERSION): Bump to 4.14.2

Tue Aug  1 16:04:36 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* xcoffread.c (process_linenos): The value in include file symbol
	should point to line number table. Currently this value is not
	set correctly by AIX ld. A fix to get around this bug.

Tue Aug  1 11:44:53 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* configure.in: Check for working mmap, ansi headers, string.h,
	strings.h, and memory.h.
	* configure: Regenerated.

	* gdb_stat.h: New file, "portable" <sys/stat.h>.
	* gdb_string.h: New file, "portable" <string.h>.

	* altos-xdep.c, arm-tdep.c, arm-xdep.c, convex-tdep.c,
	convex-xdep.c, coredep.c, cxux-nat.c, dbxread.c, exec.c,
	gould-xdep.c, hppa-tdep.c, i386aix-nat.c, i386b-nat.c,
	i386mach-nat.c, i386v-nat.c, infptrace.c, m88k-nat.c, main.c,
	mdebugread.c, objfiles.c, os9kread.c, procfs.c, pyr-xdep.c,
	rs6000-nat.c, source.c, standalone.c, stuff.c, sun386-nat.c,
	symfile.c, symm-nat.c, symm-tdep.c, symtab.c, top.c, ultra3-nat.c,
	ultra3-xdep.c, umax-xdep.c, xcoffread.c: Include "gdb_stat.h"
	instead of <sys/stat.h>.

	* alpha-tdep.c, breakpoint.c, buildsym.c, c-typeprint.c,
	ch-typeprint.c, coffread.c, command.c, core-sol2.c, core-svr4.c,
	core.c, corelow.c, cp-valprint.c, dbxread.c, dcache.c, demangle.c,
	dpx2-nat.c, dstread.c, dwarfread.c, elfread.c, environ.c, eval.c,
	exec.c, f-lang.c, f-typeprint.c, f-valprint.c, findvar.c,
	fork-child.c, gdbtypes.c, hpread.c, i386-tdep.c, infcmd.c,
	inflow.c, infptrace.c, infrun.c, irix5-nat.c, language.c,
	m2-typeprint.c, main.c, mdebugread.c, minsyms.c, mipsread.c,
	monitor.c, nlmread.c, objfiles.c, os9kread.c, osfsolib.c, parse.c,
	printcmd.c, procfs.c, regex.c, remote-adapt.c,
	remote-array.c, remote-bug.c, remote-e7000.c, remote-eb.c,
	remote-es.c, remote-hms.c, remote-mm.c, remote-os9k.c,
	remote-pa.c, remote-sim.c, remote-st.c, remote-udi.c,
	remote-utils.c, remote-vx.c, remote-vx29k.c, remote-vx68.c,
	remote-vx960.c, remote-vxmips.c, remote-vxsparc.c, remote.c,
	solib.c, somread.c, source.c, stabsread.c, stack.c, symfile.c,
	symmisc.c, symtab.c, target.c, top.c, typeprint.c, utils.c,
	valarith.c, valops.c, valprint.c, values.c, xcoffread.c: Include
	"gdb_string.h" instead of <string.h>.

	* config/xm-sysv4.h, i386/xm-ptx.h, m68k/xm-sun3os4.h,
	sparc/xm-sun4os4.h (HAVE_MMAP): Removed.

	* config/xm-lynx.h, config/i386/xm-ptx.h,
	config/m68k/nm-apollo68b.h, config/m68k/xm-hp300hpux.h,
	config/mips/xm-irix3.h, config/mips/xm-mips.h,
	config/mips/xm-news-mips.h, config/mips/xm-riscos.h,
	config/pa/hppah.h, config/rs6000/xm-rs6000.h,
	config/sparc/xm-sun4os4.h, config/sparc/xm-sun4sol2.h,
	config/vax/xm-vaxbsd.h, config/vax/xm-vaxult.h,
	config/vax/xm-vaxult2.h (MEM_FNS_DECLARED): Removed.
	* config/mips/xm-irix3.h, config/mips/xm-mips.h,
	config/pa/xm-hppah.h (memcpy, memset): Removed declarations.

Tue Aug  1 02:08:30 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mips-tdep.c (mips_extract_return_value):  Fix returning of
	values whose length is less than the register size for big endian
	targets.
	* alpha-tdep.c (alpha_extract_return_value,
	alpha_store_return_value):  Use alpha_convert_register_to_*
	to handle functions returning "float" correctly.

Mon Jul 31 19:12:48 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* h8500-tdep.c: General linting and cleanup.
	(opcodes/h8500-opc.h): Don't include.
	(code_size, data_size): Make static.
	(frame_locals_address, frame_args_address): Remove.
	(h8300_pop_frame): Rename to h8500_pop_frame.
	(big_command, medium_command, compact_command, small_command):
	Define as regular functions rather than with macro trickery.
	(tm_print_insn): Set to correct disassembler function.
	* config/h8500/tm-h8500.h: Minor cleanup, add prototypes.
	(ABOUT_TO_RETURN): #if 0 out.
	(FRAME_ARGS_ADDRESS, FRAME_LOCALS_ADDRESS): Use usual define.
	(GDB_TARGET_IS_H8500): Remove duplicate	definition.
	(regoff): Remove, never used.
	* config/h8500/h8500.mt (TDEPFILES): Add monitor.o.

Mon Jul 31 14:32:30 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* configure.in: Check for unistd.h.
	* configure: Regenerated.

	* command.c, cp-valprint.c, fork-child.c, i386-tdep.c,
	i386b-nat.c, inflow.c, main.c, maint.c, objfiles.c, solib.c,
	source.c, stack.c, symfile.c, top.c, utils.c: Include strings.h
	and/or unistd.h to bring prototypes into scope.

Sun Jul 30 01:40:11 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-tdep.c (frame_saved_pc):  Check for signal handler caller
	before trying to determine the start of the function.
	(skip_prologue):  Skip subroutine call which might save the
	floating point registers only if it is within the first three
	instructions.
	Reinstate setting of alloca_reg if setup of a gcc frame pointer
	is found.
	(frame_get_cache_fsr):  Use new fields in rs6000_framedata.

Sat Jul 29 14:43:35 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* sparclite: Removed subdirectory.  aload and eload are now in
	utils/sparclite, low-level library is in libgloss.
	* configure.in (sparclite*): Don't configure sparclite subdir.
	* configure: Update.
	* Makefile.in (TARDIRS): Remove, no longer used.

Sat Jul 29 01:45:56 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* procfs.c (unconditionally_kill_inferior):  Clear current signal
	if PROCFS_NEED_CLEAR_CURSIG_FOR_KILL is defined.
	* config/alpha/nm-osf3.h (PROCFS_NEED_CLEAR_CURSIG_FOR_KILL):  Define.

	* alpha-tdep.c:  Move sigtramp handling of saved registers from
	read_next_frame_reg to alpha_find_saved_regs, handle saved
	floating point registers.
	* mips-tdep.c:  Move sigtramp handling of saved registers from
	read_next_frame_reg to mips_find_saved_regs, handle saved
	floating point registers.
	* config/mips/tm-irix3.h, config/mips/tm-irix5.h,
	config/mips/tm-mipsv4.h (SIGFRAME_FPREGSAVE_OFF):  Define. 

	* sparc-tdep.c (sparc_pc_adjust):  Fix check for `unimp'
	instruction to handle functions returning structures with
	large sizes properly.

Fri Jul 28 11:50:17 1995  steve chamberlain  <sac@slash.cygnus.com>

	* configure, configure.in (z8k-*-sim): deleted.

Thu Jul 27 12:49:28 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* lynx-nat.c (child_wait): Handle threads exiting.

Thu Jul 27 07:47:50 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000-tdep.c (skip_prologue): Don't assume the update stack
	instruction is the last in the prologue, since xlc stores the lr
	after the stack update.  Make sure offset is correct sign for
	large frames.
	(frame_saved_pc): Move test for signal before frameless.

	* config/rs6000/tm-rs6000.h (DEFAULT_LR_SAVE): Define.
	* config/powerpc/tm-ppc-eabi.h (DEFAULT_LR_SAVE): Redefine.

Thu Jul 27 01:22:08 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* hppa-tdep.c (hppa_fix_call_dummy): Rewrite code for calling
	into shared libraries.

Wed Jul 26 23:33:34 1995  Michael Meissner  <meissner@cygnus.com>

	* config/rs6000/tm-rs6000.h (rs6000_framedata): Add offsets the
	gprs, fprs, lr, and cr is stored at.
	(FRAME_FIND_SAVED_REGS): Use new fields in rs6000_framedata.
	(function_frame_info): Delete declaration.
	(SKIP_PROLOGUE): Skip_prologue is now passed a rs6000_framedata
	structure to fill in.
	(FRAMELESS_FUNCTION_INVOCATION): Function now longer takes a
	second argument.
	(FRAME_SAVED_PC): Call frame_saved_pc.

	* rs6000-tdep.c (skip_prologue): Recognize V.4 prologues as well
	as AIX style.  Fill in rs6000_framedata structure.  Remember where
	the gprs, fprs, cr, and lr are saved.
	(pop_frame): Use skip_prologue, not function_frame_info, and use
	new rs6000_framedata fields.
	(function_frame_info): Function deleted.
	(frameless_function_invocation): Separate frame_saved_pc support
	to new function.  Recognize V.4 frames.
	(frame_saved_pc): New function.
	(frame_get_cache_fsr): Use skip_prologue, not function_frame_info.
	(frame_initial_stack_address): Ditto.

Wed Jul 26 01:00:37 1995  Jeff Law  (law@snake.cs.utah.edu)

	* remote.c:  Add documentation for extended protocol operations
	and for thread_alive change from a couple weeks ago.
	(extended_remote_ops): Declare and define a new target vector
	for the extended remote protocol.
	(extended_remote_restart): New function to restart the remote
	server & process.
	(remote_open): Just a stub routine.
	(extended_remote_open): New function to start a remote session
	using the extended gdb remote protocol.
	(remote_open_1): New function containing code common to both
	remote_open and extended_remote_open.
	(remote_mourn, extended_remote_mourn, remote_mourn_1): Similarly.
	(extended_remote_create_inferior): New function for the extended
	remote target.
	(initialize_remote): Add the extended_remote_ops target vector.
	* gdbserver/server.c (main, case '!'): Set extended_protocol.
	(main, case 'k'): If the extended protocol is in use, kill the
	inferior then start a new one.
	(main, case 'R'): New command to restart the remote server and
	inferior process.  Only supported when using the extended
	protocol.
	(main, server loop): If the inferior terminates while using the
	extended protocol then start a new one.  If getpkt fails when
	using the extended protocol then exit.

Tue Jul 25 11:43:44 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mdebugread.c (psymtab_to_symtab_1): Relocate encoded stab
	line numbers using the psymtab's section offsets.

Tue Jul 25 10:43:27 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/rs6000/tm-rs6000.h (rs6000_framedata): Rename from
	aix_framedata.  Change all uses.
	* rs6000-tdep.c: Change all aix_framedata -> rs6000_framedata.	

Sat Jul 22 23:44:18 1995  Jeff Law  (law@snake.cs.utah.edu)

	* defs.h (ATTR_FORMAT): Disable if ANSI_PROTOTYPES is not defined.

Fri Jul 21 16:50:28 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* lynx-nat.c (child_thread_alive): New function.  Somehow I
	forgot to check this in with all the other thread_alive changes.

Thu Jul 20 22:22:34 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somread.c (som_symtab_read): Add unsatisfied common symbols to
	the minimal symbol table.  All common symbols are "unsatisfied"
	when -E is passed to the linker.

Thu Jul 20 15:04:57 1995  Fred Fish  <fnf@cygnus.com>

	* top.c (show_endian): Cast first arg of printf_unfiltered to
	correct type of "char *".

Thu Jul 20 14:18:51 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* lynx-nat.c (child_wait): A thread_id of zero from wait apparently
	means the process is single threaded, so there's no need to add
	it to the thread list.  Handle case where multi-threaded process
	reverts back to a single-threaded process.

	* gdbserver/low-hppabsd.c: Remove error declaration.
	* gdbserver/low-sparc.c: Likewise.
	* gdbserver/low-sun3.c: Likewise.
	* gdbserver/server.h: Remove error and fatal declaration.
	* gdbserver/utils.c (error): Update to be compatable with recent
	changes in defs.h.
	(fatal): Likewise.

Wed Jul 19 22:42:43 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/m68k/tm-m68kv4.h (DWARF_REG_TO_REGNUM):  Define to
	correctly map floating point registers numbers.

	* dwarfread.c (locval, new_symbol):  Handle variables that are
	optimized out.

	* mdebugread.c:  Replace all uses of builtin_type_* with
	mdebug_type_*. Define and initialize mdebug_type_*.

	* serial.h (serial_close):  Add additional argument `really_close'.
	(SERIAL_CLOSE):  Update serial_close call accordingly.
	(SERIAL_UN_FDOPEN):  Use serial_close to handle refcnt properly.
	* serial.c (serial_close):  Handle `really_close'.
	* serial.h (scb_base):  Moved to serial.c, made static.

	* valops.c (value_addr):  Don't coerce arrays.
	(typecmp):  Coerce arrays instead of calling value_addr if necessary.

Wed Jul 19 18:19:28 1995  Stan Shebs  <shebs@andros.cygnus.com>

	From Richard Earnshaw (rearnsha@armltd.co.uk):
	* infrun.c (wait_for_inferior): Set the convenience variable
	$_exitcode to the termination code of the inferior.
	* top.c (quit_command): Accept optional expression to use
	as parameter to exit().

Wed Jul 19 13:15:32 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote.c (remote_wait): When getting registers, check endianess and
	do conversion if necessary.

Tue Jul 18 00:41:31 1995  Jeff Law  (law@snake.cs.utah.edu)

	* gdbserver/low-hppabsd.c: New file.
	* gdbserver/Makefile.in (SFILES): Add low-hppabsd.c.
	* config/pa/hppabsd.mh (XDEPFILES): Add ser-tcp.o.
	(GDBSERVER_DEPFILES): Add low-hppabsd.o.
	* config/pa/hppaosf.mh: Likewise.

Mon Jul 17 21:35:18 1995  Fred Fish  <fnf@cygnus.com>

	* dache.c (struct dcache_block): Change data member from unsigned
	char to char, since everything passed in and out of dcache is char
	or casted to appropriate type anyway.
	(dcache_alloc):  Move assignment of db out of test and combine
	separate tests into if-else.
	(dcache_peek_byte):  Change ptr from unsigned char* to char*.
	(dcache_peek_byte):  Remove now unnecessary cast in read_memory call.
	(dcache_peek):  Change cast of incoming data arg.
	(dcache_poke):  Change cast of addr of incoming data arg.	
	(dcache_info):  Mask data passed to printf_filtered to lsbyte only.
	(dcache_info):  Change printf_filtered arg from "% 2x" to " %2x".
	* target.c (debug_to_thread_alive): Change return type to int and
	return zero, for type compatibility with other *_thread_alive
	funcs.
	(cleanup_target): Change cast of ignore function to match type of the
	to_thread_alive member.
	* defs.h (error_hook): Add ATTR_NORETURN.
	* defs.h (NORETURN, ATTR_NORETURN): Switch from volatile to
	__attribute__ method with gcc 2.7, to avoid gcc 2.6.3 bug.
	* remote.c (remote_wait): Cast first arg to strtol, strchr, and
	strncmp to "const char *" from "unsigned char *".
	(remote_wait):  Cast arg to putpkt and strcpy from "unsigned char *"
	to "char *".
	(remote_wait):  Change printf format for long arg from "%d" to "%ld".
	(getpkt):  Remove unused variable "bp".
	(remote_fetch_word, remote_store_word):  Ifdef out apparently unused
	functions.
	* breakpoint.c (watchpoint_check):  Removed unused variables
	"saved_level" and "saved_frame".
	* valops.c (value_arg_coerce):  Add other enum TYPE_CODE_* and
	default cases to switch for completeness.
	* infrun.c (wait_for_inferior):  Enclose "have_waited" label
	in #ifdef that matches the one in which it is referenced.
	* ser-unix.c (hardwire_noflush_set_tty_state):  Enclose otherwise
	unused variable "state" in #ifdef that matches one in which it is
	referenced.
	* eval.c (evaluate_subexp_standard):  Remove unused variable "var".
	* eval.c (evaluate_subexp_standard):  Remove unused variable
	"tmp_symbol".
	* valarith.c (value_subscript):  Remove unused variable
	"lowerbound", which is redeclared in a nested scope prior to use.
	* printcmd.c (print_frame_nameless_args):  Use "%ld" to print long
	arg, not "%d".
	* {mem-break.c, remote-pa.c, remote.c, saber.suppress}:
	Remove unused static var "check_break_insn_size".
	* buildsym.c (finish_block):  Add other enum LOC_* and default
	cases to switch for completeness.
	ch-lang.c (type_lower_upper):  Removed unused label "retry".
	Add other enum TYPE_* and default cases to switch for completeness.
	* f-typeprint.c (f_type_print_args):  Ifdef out unused function
	that may be used someday when Fortran support is complete.
	* ch-valprint.c (chill_print_type_scalar):  Add other enum
	TYPE_* and default cases to switch for completeness.
	(chill_val_print):  Remove unused local var "high_bound" that
	is redeclared in a nested scope prior to use.
	(chill_var_print):  Use "%ld" to print long arg, not "%d".
	* regex.c (re_compile_fastmap, re_match_2):  Add remaining enum
	types and default to switches for completeness.
	* minsyms.c (lookup_minimal_symbol_text): Delete unused variable
	"trampoline_symbol".
	(prim_record_minimal_symbol_and_info):  Return NULL rather than
	trash.
	* elfread.c (elf_symtab_read):  Don't dereference NULL returns from
	record_minimal_symbol_and_info.
	* f-lang.c (saved_function_list_end):  Ifdef out unused variable
	that may be used someday.
	* f-valprint.c (f_val_print):  Remove unused local "straddr".
	
Mon Jul 17 13:08:00 1995  Ian Lance Taylor  <ian@cygnus.com>

	* stabsread.h (struct stab_section_list): Define.
	(coffstab_build_psymtabs): Remove staboff and stabsize parameters.
	Add textaddr, textsize, and stabs parameters.
	* gdb-stabs.h (struct dbx_symfile_info): Remove text_sect field.
	Add text_addr and text_size fields.
	(DBX_TEXT_SECT): Don't define.
	(DBX_TEXT_ADDR, DBX_TEXT_SIZE): Define.
	* coffread.c: Include <ctype.h>.
	(struct coff_symfile_info): Remove stabsect and stabindexsect
	fields.  Add textaddr, textsize, and stabsects fields.
	(coff_locate_sections): Record the address of the .text section,
	and total the sizes of all sections with names beginning with
	".text".  Don't bother to record a .stab.index section (COFF
	doesn't use them).  Make a linked list of all sections with names
	beginning with ".stab".
	(coff_symfile_read): Adjust call to coffstab_build_psymtabs for
	new parameters.
	* dbxread.c (dbx_symfile_read): Use DBX_TEXT_ADDR and
	DBX_TEXT_SIZE, rather than getting both from DBX_TEXT_SECT.
	(dbx_symfile_init): Set DBX_TEXT_ADDR and DBX_TEXT_SIZE, not
	DBX_TEXT_SECT.
	(elfstab_build_psymtabs): Likewise.
	(stabsect_build_psymtabs): Likewise.
	(symbuf_sections, symbuf_left, symbuf_read): New static variables.
	(fill_symbuf): If symbuf_sections is not NULL, read symbols from
	multiple sections.
	(coffstab_build_psymtabs): Remove staboffset and stabsize
	parameters.  Add textaddr, textsize, and stabsects parameters.
	Set DBX_TEXT_ADDR and DBX_TEXT_SIZE, not DBX_TEXT_SECT.  Handle
	multiple stabs sections.
	* os9kread.c (os9k_symfile_read):  Use DBX_TEXT_ADDR and
	DBX_TEXT_SIZE, rather than getting both from DBX_TEXT_SECT.
	(os9k_symfile_init): Set DBX_TEXT_ADDR and DBX_TEXT_SIZE, not
	DBX_TEXT_SECT.

	* remote-vx.c (vx_ops, vx_run_ops): Initialize new to_thread_alive
	field.

Sat Jul 15 01:02:53 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config/alpha/alpha-osf3.mh, config/alpha/nm-osf3.h:  New files
	for OSF/1-3.x procfs support.
	* configure.in (alpha-dec-osf):  Use them when configuring
	for OSF/1-3.x.
	* configure:  Updated.
	* target.c:  Include <string.h>.

Fri Jul 14 16:16:56 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in, configure.in: Use one variable, frags, to hold
	pathnames of makefile fragments.
	* configure: regenerated.

Fri Jul 14 09:49:47 1995  Jeff Law  (law@snake.cs.utah.edu)

	* procfs.c (procfs_ops): Fix typo in last change.

Thu Jul 13 13:42:38 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* inftarg.c (child_thread_alive): New function to see if a
	particular thread is still running.
	(child_ops): Add child_thread_alive entry.
	* remote.c (remote_thread_alive): New function to see if a
	particular thread is still alive.
	(remote_ops): Add remote_thread_alive.
	* target.c (dummy_target): Add dummy entry for thread_alive.
	(cleanup_target): de_fault thread_alive too.
	(update_current_target): INHERIT thread_alive too.
	(debug_to_thread_alive): New function.
	(setup_target_debug): Add debug_to_thread_alive.
	* target.h (struct target_ops): Add to_thread_alive.
	(target_thread_alive): Define.
	* thread.c (info_threads_command): Don't call kill; use
	target_thread_alive instead.
	* config/nm-lynx.h (CHILD_THREAD_ALIVE): Define.
	* gdbserver/low-lynx.c (mythread_alive): New function.
	(mywait): Don't restart any threads after a new thread notification,
	let the generic code handle it.
	* gdbserver/low-sparc.c (mythread_alive): Dummy version.
	* gdbserver/low-sun3.c (mythread_alive): Likewise.
	* gdbserver/server.c (main): Handle thread_alive requests.
	* gdbserver/server.h (mythread_alive): Declare.
	* corelow.c (core_ops): Add dummy entry for thread_alive.
	* exec.c (exec_ops): Likewise.
	* m3-nat.c (m3_ops): Likewise.
	* monitor.c (monitor_ops): Likewise.
	* procfs.c (procfs_ops): Likewise.
	* remote-array.c (array_ops): Likewise.
	* remote-e7000.c (e7000_ops): Likewise.
	* remote-es.c (es1800_ops, es1800_child_ops): Likewise.
	* remote-mips.c (mips_ops): Likewise.
	* remote-pa.c (remote_hppro_ops): Likewise.
	* remote-sim.c (gdbsim_ops): Likewise.
	* sparcl-tdep.c (sparclite_ops): Likewise.

Tue Jul 11 11:15:55 1995  Kung Hsu  <kung@rtl.cygnus.com>

	* solib.c: Add _DYNAMIC__MGC base symbol for Mentor Graphics Inc.
	* solib.c (match_main): New function for checking name of main.
	* solib.c (solib_add): Not to add if solib match main.

Fri Jul  7 14:41:56 1995  Kung Hsu  <kung@rtl.cygnus.com>

	* elfread.c (elf_symtab_read): Fix a bug ignoring compiler
	generated internal labels ($LM...).

Wed Jul  5 11:38:36 1995  Kung Hsu  <kung@rtl.cygnus.com>

	* defs.h: if __GO32__ or WIN32 the directory separating symbol should
	be '\' not '/'.

	* remote-nindy (nindy_wait): Use infinite timeout reading after
	esacpe character.

Tue Jul  4 10:30:22 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* infrun.c (wait_for_inferior): When switching from one thread to
	another, save infrun's state for the old thread and load infrun's
	previous state for the new thread.
	* thread.c (struct thread_info): Add new fields for thread specific
	state saved/restored in infrun.c.
	(add_thread): Initialize new fields.
	(load_infrun_state): New function.
	(save_infrun_state): New function.
	* thread.h (load_infrun_state): Provide external decl.
	(save_infrun_state): Likewise.

	* infrun.c (wait_for_inferior): When we hit a breakpoint for the
	wrong thread, make sure to write the fixed PC value into the thread
	that stopped.  Restart all threads after single stepping over a
	breakpoint for a different thread.
	* breakpoint.c (set_momentary_breakpoint): Make momentary
	breakpoints thread specific in a multi-threaded program.
	* lynx-nat.c (child_resume): Add some comments.  Correctly
	choose between the single and multi-threaded step and continue
	ptrace calls.

Fri Jun 30 16:15:36 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* config/h8300/h8300.mt: Renamed from h8300hms.mt.
	* config/h8500/h8500.mt: Renamed from h8500hms.mt.
	* config/z8k/z8k.mt: Renamed from z8ksim.mt.
	* configure, configure.in: Update to reflect renamings.

	* remote-sim.c (sim): New command, passes commands to simulator.
	(simulator_command): New function.
	(gdbsim_ops): Clean up.
	* remote-sim.h (sim_do_command): Declare.
	* sh-tdep.c (memory_size): Remove command.

	* Makefile.in (SIM, SIM_OBS): New variables.
	(CLIBS, CDEPS): Add value of SIM.
	(DEPFILES): Add value of SIM_OBS

	* config/arm/arm.mt, config/h8300/h8300.mt, config/h8500/h8500.mt,
	config/sh/sh.mt, config/sparc/sp64sim.mt, config/w65/w65.mt,
	config/z8k/z8k.mt: Remove simulator files from TDEPFILES,
	define in SIM_OBS and SIM.
	config/sparc/sp64sim.mt (SIMFILES): Remove.

	* remote-z8k.c: Remove, was superseded by remote-sim.c
	* Makefile.in, mpw-make.in: Remove references to remote-z8k.c.

Sun Jun 25 15:30:43 1995  Stan Shebs  <shebs@cygnus.com>

	* remote.c (remote_read_bytes, remote_write_bytes): Second arg
	should be char *, not unsigned char *.
	* dcache.h (memxferfunc): Ditto.
	* monitor.c (monitor_write_memory, monitor_read_memory_single):
	Ditto.
	(monitor_make_srec): Let compiler figure size of hextab.

Sat Jun 24 19:27:37 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* lynx-nat.c (child_wait): Don't restart new threads and loop
	to the top of child_wait; let the machine independent code in
	wait_for_inferior deal with new thread notifications.

Fri Jun 23 11:51:58 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote-nindy (nindy_load): Put in target specific load, it's 
	20 times faster.

Thu Jun 22 20:21:59 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* utils.c (error): Move local `args' outside conditional,
	move local `string1' inside, declare function as void if
	non-ANSI compiler, dereference error_hook when calling.

	* mac-xdep.c (stdarg.h): Don't include.

Thu Jun 22 13:12:33 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote-nindy.c (nindy_wait): Change timeout in SERIAL_READCHAR.

Wed Jun 21 13:24:41 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hppam3-nat.c: Change HP800_THREAD_STATE to TRACE_FLAVOR and
	HP800_THREAD_STATE_COUNT to TRACE_FLAVOR_SIZE.

Wed Jun 21 05:57:56 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* monitor.c: Turn on caching.
	(monitor_printf): If a ^C was sent, don't expect to see its
	echo.
	(monitor_open): Enable caching.
	(monitor_resume, monitor_load): Flush cache.
	(monitor_xfer_memory): Call cache routine.
	(monitor_dump_regs): New.
	(monitor_fetch_registers):  If monitor_dump_regs available
	then use it.
	(monitor_load): Don't ref exec_bfd if it's NULL.
	(monitor_load_srec): Use new monitor_make_srec calling convention.
	(monitor_make_srec): Rewrite to cope with two, three and four byte
	addresses.
	* remote-hms.c (hms_cmds): Initialze end-of-command delim.
	* dcache.h, dcache.h: Rewritten.
	* remote.c: Reenable caching.
	(getpkt): Reduce MAX_TRIES to 3.
	(remote_xfer_memory): Use dcache_xfer_memory.
	* defs.h (error_hook): New.
	* top.c (error_hook): New definition.
	* utils.c (error): Use error_hook if initialized.
	* sparcl-tdep.c (HAVE_SOCKETS): Don't define if GO32 or WIN32. Use 
	HAVE_SOCKETS in place of #ifndef GO32.

Tue Jun 20 22:17:44 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/pa/tm-hppa.h (PSW_*): Define processor status word masks.
	(INSTRUCTION_NULLIFIED): Allow specific targets to override.
	* config/pa/tm-hppao.h (INSTRUCTION_NULLIFIED): Define to work
	around losing mach kernel behavior.

Tue Jun 20 12:03:36 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.c (monitor_wait): Don't use the watchdog timeout
	if its value is 0.
	* w89k-rom.c (w89k_open): Define to be static.


Sat Jun 17 10:17:16 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c (som_solib_add): Validate regexp argument.
	Don't assume the first entry on dld's library list is the main
	program.  Don't load the same library more than once and don't
	consider the main program a shared library.
	(som_solib_sharedlibrary_command): New function
	(_initialize_som_solib): Add "sharedlibrary" command.

Thu Jun 15 14:54:58 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* array-rom.c: Remove, no longer used.

	* remote-hms.c (hms_open): Make static.

	* mpw-config.in (MacSerial.h): Copy from version in {CIncludes},
	not {MPW}Interfaces:CIncludes.
	* ser-mac.c (mac_baud_rate_table): Fix value for 38400 baud.

Wed Jun 14 14:27:07 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* ch-exp.y:  Remove lots of unsupported productions and names.
	Add support for IF-expressions, ORIF, ANDIF, NUM, and ADDR.

Tue Jun 13 21:40:11 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* parser-defs.h (enum precedence):  Added PREC_BUILTIN_FUNCTION.
	* expression.h (enum exp_opcode):  Added UNOP_LOWER, UNOP_UPPER,
	UNUP_LENGTH.
	* expprint.c (dump_expression):  Handle the new exp_opcodes.
	(print_subexp):  Handle PREC_BUILTIN_FUNCTION.
	(print_simple_m2_func):  Removed.
	(print_subexp):  Remove support for Modula2 builtin functions.
	* m2-lang.c (m2_op_print_tab):  Add support for builtin functions.
	* ch-exp.y:  Parse LOWER, UPPER, and LENGTH builtins.
	(write_lower_upper_value):  Convenience function for LOWER and UPPER.
	(upper_lower_argument, length_argument):  Removed non-terminals.
	* ch-lang.c (chill_op_print_tab):  Entries for UPPER, LOWER, LENGTH.
	(type_lower_upper):  New function.  Calculate LOWER/UPPER of type.
	(value_chill_length):  New function.  Calcalate LENGTH of ARRAY/STRING.
	(evaluate_subexp_chill):  Handle UNOP_LOWER, UNOP_UPPER, UNOP_LENGTH.

Mon Jun 12 12:48:13 1995  Stan Shebs  <shebs@andros.cygnus.com>

	Windows support bits from Steve Chamberlain <sac@slash.cygnus.com>.
	* defs.h: Don't declare strchr and friends if WIN32.
	(DIRNAME_SEPARATOR): Move here from source.c.
	(SLASH_P, SLASH_CHAR, SLASH_STRING, ROOTED_P): New macros,
	symbolic definitions for filename bits.
	* top.c (cd_command): Use these.
	* source.c (mod_path, openp): Ditto.
	* terminal.h: Disable termio/sgtty definitions if WIN32.
	* findvar.c (registers_changed): Call registers_changed_hook
	if it is defined.

Mon Jun 12 12:22:05 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (distclean, realclean): Remove config.cache and
	  config.log.

Mon Jun 12 00:21:59 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c: Include gdb-stabs.h.
	(som_solib_section_offsets): Use SECT_OFF_XXX rather than 0, 1,
	etc.  Initialize offsets for RODATA & BSS too.

Sat Jun 10 17:59:11 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hppa-tdep.c (frame_chain): Try to compensate for incomplete
	register information in core files when backtracing.

Fri Jun  9 14:51:38 1995  Stu Grossman  (grossman@cygnus.com)

	* remote-nrom.c:  Remove everything but download code.  More
	cleanups.

Thu Jun  8 15:06:00 1995  Stu Grossman  (grossman@cygnus.com)

	* defs.h maint.c monitor.c remote-mips.c remote.c:  Add support
	for `watchdog' variable.  This allows the user to put an upper
	limit on the amount of time that GDB will wait for the target to
	return from a step or continue operation.  This will primarily be
	used for the testsuite, where it is difficult to come up with a
	reasonable timeout for things like function calls, which can take
	as long as three minutes under some circumstances.  If the
	watchdog timer expires, GDB will generate an error that looks like
	`Watchdog has expired.', and will detach from the target.

	* remote-mips.c (mips_open):  Setup initial frame from target.
	Print it out so that user is told where the program is stopped
	when they attach.

	* remote-nrom.c:  Loads of cleanups.  Use serial code to open
	network connections.  Use expect() to wait for response to
	download command.

	* ser-tcp.c (tcp_open):  Retry connection if we get ECONNREFUSED.

	* serial.c serial.h (serial_open serial_fdopen serial_close):
	Allow users to open the same device multiple times.  They all get
	to share the same serial_t.  This is about the only way to have
	multiple active targets use the same device (for download and
	debug).

	* sparcl-tdep.c:  Keep #include <unistd.h> away from GO32.

	* target.c:  Add `targetdebug' variable.  If this is non-zero,
	then a special target is put at the top of the target stack which
	will cause all calls through the target vector to have their args
	and results printed out.

Wed Jun  7 17:40:37 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* ch-exp.y: Handle <primitive_value> "->" <modename>.

Wed Jun  7 17:46:33 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* mem-break.c (LITTLE_BREAKPOINT): If BREAKPOINT and
	{LITTLE,BIG}_BREAKPOINT are all defined, don't redefine.
	(BIG_BREAKPOINT): Ditto.

	* config/rs6000/tm-rs6000.h (BREAKPOINT): Define as either
	BIG_BREAKPOINT or LITTLE_BREAKPOINT depending on the target byte
	order.

Wed Jun  7 12:41:42 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c (som_solib_section_offsets): Handle relative pathnames.

	* hppa-tdep.c (frame_saved_pc): Handle backtracing through signal
	handler in dynamically linked executables.

Tue Jun  6 10:44:25 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	From Andrew Cagney <cagney@highland.com.au>
	* rs6000-tdep.c (single_step): Handle both little and big endian
	breakpoints.
	(gdb_print_insn_powerpc): Deal with disassembling both little and
	big endian PowerPC systems.
	(_initialize_rs6000_tdep): Use gdb_print_insn_powerpc to handle
	disassembly, rather that assuming big endian order.

	* config/rs6000/tm-rs6000.h (BREAKPOINT): Delete.
	(BIG_BREAKPOINT): Define, big endian breakpoint instruction.
	(LITTLE_BREAKPOINT): Define, little endian breakpoint instruction.

Sat Jun  3 01:54:56 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* README:  Add note about Unixware 2.x.

	* dbxread.c (process_one_symbol):  Check for exact symbol name
	match when fixing up N_GSYM and N_STSYM symbols from Sun acc.

	* valprint.c (value_print_array_elements):  Use
	fprintf_filtered to put out `<repeats %u times>',
	from schwab@issan.informatik.uni-dortmund.de (Andreas Schwab).

	* value.h (struct value):  Change `repetitions' field from
	`short' to `int' type.

Fri Jun  2 11:17:23 1995  Doug Evans  <dje@canuck.cygnus.com>

	* arc-tdep.c (arc_bfd_mach_type): New static global.
	(codestream_fill): Handle byte order differences.
	(setup_prologue_scan): Don't read stdarg function's "sub sp,sp,N".
	(arc_get_frame_setup): Read it here.
	(arc_frame_saved_pc): And here.
	(arc_print_insn): New function.
	(arc_set_cpu_type): Set arc_bfd_mach_type.  Don't set tm_print_insn.
	(_initialize_arc_tdep): Set tm_print_insn to arc_print_insn.

Wed May 31 12:04:01 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* nlm/{configure.in, Makefile.in}: Converted to use autoconf.
	* nlm/configure: New file, generated with autoconf 2.3.

	* nlm/configure.in: Use sed instead of awk to get the value of
	  cpufile.  Awk is not a utility required by the GNU coding
	  standards.  This change also fixes the rigid whitespace
	  requirements that were required for awk.

	* sparclite/aload.c: Use a file descriptor instead of a stdio
	  stream for i/o with target board.
	  Use #error if HAVE_TERMIOS is not defined.

	* sparclite/{Makefile.in, configure.in}: Converted to use
	  autoconf.
	* sparclite/configure: New file, generated with autoconf 2.3.

Sun May 28 23:10:07 1995  Jeff Law  (law@snake.cs.utah.edu)

	* defs.h: Include either varargs.h or stdarg.h (for va_list).
	Fix stupid thinko in last change ("..." -> "va_list").

	* defs.h (vprintf_filtered declaration): Add PARAMS prototype;
	gcc-2.5 chokes on format attributes for unprototyped functions.
	(vfprintf_filtered declaration): Likewise.
	(vprintf_unfiltered declaration): Likewise.
	(vfprintf_unfiltered). Likewise.

Sat May 27 23:54:17 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* configure.in: Use sed instead of awk to get the values of
	  hostfile, targetfile and nativefile.  Awk is not a utility
	  required by the GNU coding standards.  This change also 
	  fixes the rigid whitespace requirements that were required
	  for awk.
	* configure: regenerated.

Sat May 27 16:24:04 1995  Angela Marie Thomas  <angela@cirdan.cygnus.com>

        * sparclite/{Makefile,configure}.in: Add hooks for building with
        -lsocket & -lnsl for solaris2.  Don't build aload/eload for DOS.

Thu May 25 12:46:37 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdbserver/remote-utils.c (prepare_resume_reply): Add FIXME
	comment regarding signal numbering.

Wed May 24 15:49:47 1995  Steve Chamberlain  <sac@slash.cygnus.com>

	* arm-tdep.c (_initialize_arm_tdep): Use print_insn_little_arm
	now.

	* arm-tdep.c (convert_from_extended, convert_to_extended):
	New.
	* coffread.c (enter_linenos): Return if linetab 0.
	* config/arm/arm.mt (TDEPFILES): Add simulator support.
	* config/arm/tm-arm.h (FRAME_FIND_SAVED_REGS): Fix prototypes.

Mon May 22 19:37:21 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* config/idt.mt: replace monitor and array-rom with the new
	remote-array.

Mon May 22 15:38:25 1995  Stu Grossman  (grossman@cygnus.com)

	* remote-nindy.c:  Install Kung patch for PR 6820.  I have no idea
	what this does...

	* breakpoint.c:  Move defaults of watchpoint related macros into
	target.h.
	* target.h:  Macros from breakpoint.c.  Conditionalize based on
	TARGET_HAS_HARDWARE_WATCHPOINTS.
	* i386v-nat.c procfs.c:  Use TARGET_HAS_HARDWARE_WATCHPOINTS
	instead of TARGET_CAN_USE_HARDWARE_WATCHPOINT to enable watchpoint
	code.
	* config/i386/nm-linux.h, config/mips/nm-irix4.h,
	config/pa/nm-hppab.h, config/sparc/tm-sparclite.h:  #define
	TARGET_HAS_HARDWARE_WATCHPOINTS to enable watchpoint code.

Mon May 22 06:47:30 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c, target.h: Move defaults of watchpoint related
	macros back to breakpoint.c.  Required to get GDB compiling
	on Solaris again.

Fri May 19 14:49:37 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* defs.h (ATTR_FORMAT): New macro, expands to gcc's format
	  attribute when compiled by gcc.  
	* defs.h, language.h, monitor.h: Changed many function
	  declarations to use ATTR_FORMAT.

	* breakpoint.c (delete_command); source.c (directory_command);
	  top.c (define_command): Changed call to query() that had too
	  many arguments.
	* printcmd.c (address_info): Changed call to printf_filtered()
	  that had too many arguments.

Fri May 19 09:52:07 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (wait_for_inferior): Move assignments to stop_signal
	and stop_pc, and STOPPED_BY_WATCHPOINT code, back where they
	were--after the switch statement on w.kind.  You can't read the
	registers of an inferior which has exited.  Use a goto in the
	STOPPED_BY_WATCHPOINT code.
	* infrun.c (wait_for_inferior): Reinstate
	HAVE_STEPPABLE_WATCHPOINT and HAVE_CONTINUABLE_WATCHPOINT code.

Fri May 19 06:15:40 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* utils.c, complaints.c, language.c, monitor.c, remote-array.c,
	remote-mips.c, remote-os9k.c, remote-st.c: Conditionalize use of
	stdarg rather than varargs on ANSI_PROTOTYPES not __STDC__; it
	must match the definition of PARAMS.

Thu May 18 15:58:46 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* utils.c (fprintf_filtered, fprintf_unfiltered, fprintfi_filtered,
	  printf_filtered, printf_unfiltered, printfi_filtered, query, warning,
	  error, fatal, fatal_dump_core): Use stdarg.h macros when compiling 
	  with an ANSI compiler.
	* complaints.c (complain): Likewise.
	* language.c (type_error, range_error): Likewise.
	* monitor.c (monitor_printf, monitor_printf_noecho): Likewise.
	* remote-array.c (printf_monitor, debuglogs): Likewise.
	* remote-mips.c (mips_error): Likewise.
	* remote-os9k.c (printf_monitor): Likewise.
	* remote-st.c (printf_stdebug): Likewise.

	* defs.h, complaints.h, language.h, monitor.h: Add prototypes to
	  match above changes.

	* printcmd.c: Remove uneeded #include <varargs.h>.
	* remote-e7000.c: Likewise.

	* f-typeprint.c (f_type_print_base): Fix typo found by above
	  changes.

Wed May 17 11:21:32 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* Makefile.in (xcoffread.o): Depend on partial-stab.h.

	* xcoffsolib.c (sharedlibrary_command): New command.
	* xcoffsolib.c (solib_info): Call xcoff_relocate_symtab.
	* xcoffsolib.c: Miscellaneous cleanups.

	* partial-stab.h: Ignore symbol descriptor '-' (for local
	variables with negative type numbers) without complaint.

	* rs6000-nat.c (vmap_ldinfo): Use bfd_stat rather than our own
	local emulation thereof.  Remove unused variable ostart.

Wed May 17 15:55:53 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (config.status): changed target so that
	  config.status --recheck is executed if configure script changes.

	* monitor.c (monitor_printf): Changed format specification in
	  error message to work with pre-ansi compilers.
	  (monitor_load_srec): reduced length of s-records from 128 to 32
	  bytes so download is more reliable with the rom68k monitor.

	* rom68k-rom.c: Added trailing space to prompt string.

	* config/i386/xm-i386sco.h (HAVE_STRSTR): Removed.
	* config/i386/xm-go32.h, mswin/xm.h (SYS_SIGLIST_MISSING):
	  Removed.
	* defs.h, config/{xm-lynx.h, xm-nbsd.h},
	  config/i386/{xm-i386bsd.h, xm-linux.h},
	  config/m68k/xm-hp300bsd.h, config/mips/xm-irix4.h,
	  config/ns32k/xm-ns32km3.h, doc/gdbint.texinfo
	  (PSIGNAL_IN_SIGNAL_H): Removed.

Tue May 16 13:16:06 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* Makefile.in (Makefile): Added config.status to dependency list.

	* configure.in: Added INIT-CMDS argument to AC_OUTPUT which sets
	  gdb_host_cpu, gdb_target_cpu and nativefile.
	* configure: regenerated.

Mon May 15 23:50:51 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_symbol):  Do not relocate stBlock/scText
	symbols, their value is the displacement from the procedure address.
	* top.c (init_main):  Add missing newlines to help strings for
	`if' and `while' commands, fix help string for `show commands'.

Mon May 15 18:37:56 1995  Stu Grossman  (grossman@cygnus.com)

	* breakpoint.c:  Move defaults of watchpoint related macros into
	target.h.  Use BP_TEMPFLAG and BP_HARDWAREFLAG instead of
	constants.
	* infrun.c (wait_for_inferior):  Enhance comment near
	STOPPED_BY_WATCHPOINT.
	* target.h:  Macros from breakpoint.c.

Mon May 15 17:11:38 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* config/i386/{i386sol2.mh, i386v4.mh, ncr3000.mh},
	  config/m68k/m68kv4.mh, config/mips/{irix4.mh, irix5.mh,
	  mipsv4.mh}, config/sparc/sun4so2.mh (INSTALL): Removed, figured
	  out by autoconf.
	* config/apollo68v.mh (RANLIB): Removed, figured out by autoconf.

	* Makefile.in, configure.in: Converted to use autoconf
	* aclocal.m4: New file, local autoconf macro definitions.
	* configure: New file, generated with autoconf 2.3.

Mon May 15 14:46:41 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* remote.c (remote_kill): Add prototype.
	* cpu32bug-rom.c (cpu32bug_open): Properly define as static.
	* config/h8300/h8300hms.mt (TDEPFILES): Add monitor.o.

Mon May 15 12:12:34 1995  Stu Grossman  (grossman@cygnus.com)

	* sparclite/salib.c (win_ovf win_unf):  Make window size constant
	into a variable (__WINSIZE) so that it can be controlled via the
	.h file.
	* sparclite/sparclite.h:  Add SL933 #ifdef to set __WINSIZE to 6
	for the 933 board.

	* infrun.c:  Add #ifdef HP_OS_BUG to all references to
	trap_expected_after_continue.
	* (wait_for_inferior):  Fix for remote watchpoints.  Don't try to
	insert breakpoints while target is running (this only works on
	*some* native targets).  This may also speed up native watchpoints
	considerably.

Sat May 13 13:55:04 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dwarfread.c (struct dwfinfo), dbxread.c (struct symloc),
	mdebugread.c (struct symloc), hpread.c (struct symloc),
	xcoffread.c (struct symloc): Fix inaccurate comment introduced
	20 Apr 1995.

Sat May 13 13:34:18 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* rs6000-tdep.c (find_toc_address): Revise comment.
	* symfile.c, symfile.h (init_psymbol_list): New function;
	consolidate duplicated copies from os9kread.c, dbxread.c
	and dwarfread.c.
	* defs.h: Declare info_verbose.
	* xcoffread.c: Extensive changes to support psymtabs.

Fri May 12 13:48:41 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* cpu32bug-rom.c remote-est.c rom68k-rom.c:  Update line_term element.

Fri May 12 06:39:30 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* partial-stab.h: Expand comments.

Thu May 11 19:01:37 1995  Jeff Law  (law@snake.cs.utah.edu)

	* Support debugging using native MACH primitives on hppa*-*-osf*.
	* configure.in: hppa*-*-osf* != hppa*-*-bsd* anymore.
	* config/pa/hppaosf.mh: New file.
	* config/pa/nm-hppao.h: Likewise.
	* hppam3-nat.c: Likewise.
	* config/pa/tm-hppao.h (PSW_SS): Define for single-stepping.
	(MACHINE_CPROC_*_OFFSET): Define.
	(TRACE_*): Define.
	(START_INFERIOR_TRAPS_EXPECTED): Delete definition.

Wed May 10 18:59:26 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* hppa-tdep.c (read_unwind_info):  Cosmetic cleanup.
	* (unwind_command):  Clean it up and make it print things out
	nicer.
	* monitor.c:  Add ^C handling capability (mostly ripped off from
	remote.c).
	* (monitor_printf):  Make it check the command echo.
	* (monitor_printf_noecho):  Similar to above, but doesn't check
	for echo.
	* (monitor_stop):  No longer waits for prompt.  That is the job of
	the caller.  This makes things work much better for monitor_wait,
	which waits for the prompt itself.
	* (monitor_open):  Deal with new monitor_stop semantics.  Also,
	flush input after sending init strings to get rid of junk that may
	be output.  Also, don't always send \r to remote.  Use
	monitor_ops->line_term cuz proper character isn't always \r.
	* (monitor_fetch_register):  Switch to completely different
	algorithm to deal with lame-ass monitors which put spaces in the
	middle of numbers, and prompt with a space!!!!!
	* (monitor_read_memory_single):  New routine to be used with
	monitors that can only return one byte/short/long at a time.  This
	is selected via MO_GETMEM_READ_SINGLE.
	* (monitor_load_srec):  Use monitor_printf_noecho for sending S
	records.  Most targets don't echo them.
	* (monitor.h):  Get rid of cmd_delim.  Add line_delim.
	* op50n-rom.c (op50n_cmds):  Fill it up.  Make it work.
	* w89k-rom.c:  Change all eols from \r to \n.  Change load_resp to
	^Q to prevent error message.
	* config/pa/tm-hppa.h (CALL_DUMMY (for hppro)):   Add special
	instruction sequence at end to make restore_pc_queue happy.

Wed May 10 15:59:00 1995  Torbjorn Granlund  <tege@adder.cygnus.com>

	* remote-est.c (est_open): Make static to match prototype.

Tue May  9 16:58:50 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Add little endian PowerPC support.
	* config/powerpc/ppcle-eabi.mt: New file for little endian PowerPC
	support.
	* config/powerpc/tm-ppcle-eabi.h: ditto.

Mon May  8 12:11:38 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* nlm/configure.in (gdb_host, gdb_host_cpu, gdb_target): Removed.
	  These variables not used.

	* config/m68k/monitor.mt (TDEPFILES): Added cpu32bug-rom.o.

Wed May  3 17:54:47 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.c (monitor_command): Don't use PROMPT until monitor
	target is known to be open.
	(monitor_make_srec): Don't define size of hextab.

Tue May  2 18:32:24 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* configure.in (--enable-netrom): New configuration option.
	* Makefile.in (REMOTE_OBS): Rename from REMOTE_O, append
	value of NETROM_OBS.
	(NETROM_OBS): New variable.
	* remote-nrom.c: New file, NetROM target support.
	* config/a29k/a29k-udi.mt, config/i960/vxworks960.mt: Use
	REMOTE_OBS instead of REMOTE_O.
	* config/arc/arc.mt: Ditto.

Fri Apr 28 23:30:00 1995  Stu Grossman  (grossman@cygnus.com)

	* array-rom.c (_initialize_array array_open):  Move baud_rate
	initialization from _initxxx to array_open to fix bug with
	overriding -b command line option.

Thu Apr 27 20:29:34 1995  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (RUNTEST): Fix reference of `srcdir'.

Wed Apr 26 19:01:08 1995  Steve Chamberlain  <sac@slash.cygnus.com>
 
 	* remote-hms.c: Rewrite to use new monitor conventions.

Tue Apr 25 11:27:14 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dbxread.c: Add comment explaining lowest_text_address.
	Add comment regarding stringtab_global and psymtabs.

Sat Apr 22 01:26:29 1995  Jeff Law  (law@snake.cs.utah.edu)

	* config/pa/tm-hppa.h (EXTRACT_STRUCT_VALUE_ADDRESS): Fix.

	* config/pa/tm-hppa.h (EXTRACT_RETURN_VALUE): Rewrite to correctly
	handle "short", "int" and small structures returned in registers. 

Fri Apr 21 12:57:53 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* minsyms.c: add new function lookup_minimal_symbol_text, to look
	for text symbol only.
	* breakpoint.c (create_longjmp_breakpoint): call
	lookup_minimal_symbol_text instead of lookup_minimal_symbol.
	* symtab.h: add lookup_minimal_symbol_text prototype.

Fri Apr 21 12:03:44 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* sh-tdep.c (sh-opc.h): Don't include.
	(gdbcore.h): Include.
	(frame_find_saved_regs): Remove unused local.

Thu Apr 20 10:12:21 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* dwarfread.c (struct dwfinfo), dbxread.c (struct symloc),
	mdebugread.c (struct symloc), hpread.c (struct symloc): Clean
	up comments.

Wed Apr 19 16:58:11 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* hppa-tdep.c (deposit_17):  New routine to deposit 17 bit
	constants into PA instructions.
	* Put #ifdefs around all signal handling code.  Not generally
	needed for embedded boards.
	* (hppa_fix_call_dummy):  Parameterize offsets into call dummy to
	allow different dummys to be used by this code.  Use
	INSTRUCTION_SIZE instead of REGISTER_SIZE for things.
	Conditionalize setup of _sr4export fixup.  Improve comments.
	* config/pa/tm-hppa.h:  Define INSTRUCTION_SIZE.  Use a different
	call dummy if PA_LEVEL_0 is defined.  Better comments for call
	dummys.  Define offsets for LDIL/LDO instructions which load
	function addresses.
	* config/pa/tm-pro.h:  Get rid of signal handling stuff.  Define
	PA_LEVEL_0 to disable mucking with space regs and such.

Mon Apr 17 15:37:08 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* cpu32bug-rom.c monitor.h op50-rom.c remote-est.c rom68k-rom.c
	w89k-rom.c:  Remove loadtypes, loadprotos and baudrates.
	* op50-rom.c:  Fix copyrights and add load routine to op50n_cmds.
	* rom68k-rom.c (_initialize_rom68k):  Don't set baud rate.
	* w89k-rom.c:  Fix copyrights.

Sun Apr 16 14:00:55 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* monitor.c:  Move all xmodem stuff into xmodem.[ch].  Remove
	unnecessary remoteloadprotocol and remoteloadtype support.
	* (expect expect_prompt):  Change names to monitor_expect and
	monitor_expect_prompt.  Make them global.
	* (printf_monitor):  Change name to monitor_printf.  Make global.
	* (monitor_read_memory):  Flush command echo to avoid parsing
	ambiguity with CPU32Bug monitor.
	* (monitor_load):  Remove remoteloadprotocol and remoteloadtype
	support.  Call target_ops->load_routine, default to
	monitor_load_srec.
	* (monitor_load_srec):  Remove everything but S-record support.
	* monitor.h (monitor_ops):  Add load_routine to provide monitor
	specific download capability.
	* remote-est.c:  Clean up copyrights and comments.
	* w89k-rom.c:  Use new xmodem support.
	* xmodem.c xmodem.h:  New files to support xmodem downloads.
	* rom68k-rom.c remote-est.c:  Fix copyrights, add load_routine
	entry to monitor_ops.
	* cpu32bug-rom.c:  New file to support Moto BCC debuggers.
	* config/m68k/est.mt (TDEPFILES):  Add cpu32bug.o.
	* config/pa/hppapro.mt (TDEPFILES):  Add xmodem.o.

Sat Apr 15 18:00:15 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* rem-multi.shar: Removed; superceded by gdbserver.

Fri Apr 14 12:10:24 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* xcoffread.c (xcoff_sym_fns): Revise comment about merging this
	with coffread.c.

	* breakpoint.c (fixup_breakpoints): Removed.
	* rs6000-nat.c (vmap_symtab): Don't call fixup_breakpoints.
	(vmap_ldinfo, xcoff_relocate_core): Call breakpoint_re_set.

	* coffread.c (coff_symfile_offsets): Allocate SECT_OFF_MAX
	sections, not just SECT_OFF_MAX-1.

	* rs6000-nat.c (vmap_symtab), xcoffread.c: Re-do section offsets
	to be indexed by SECT_OFF_* instead of xcoff section numbers.
	* objfiles.c, remote.c: Remove comments regarding SECT_OFF_*.
	* symtab.h: Revise comment about block_line_section.
	* rs6000-nat.c (vmap_symtab): Don't relocate objfile->sections.

Sat Apr 15 14:15:14 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* mpw-make.in (init.c): Don't try to do symbolic {o} in sed
	command, not allowed by some version of MPW Make.
	* ser-mac.c (mac-setbaudrate): Make it actually set baud rates.

Sat Apr 15 14:05:09 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* alpha-tdep.c (alpha_push_arguments): Fix typo (TYPE_VALUE ->
	VALUE_TYPE).  Do the cast for TYPE_CODE_BOOL, TYPE_CODE_CHAR,
	TYPE_CODE_ENUM, and TYPE_CODE_RANGE as well as TYPE_CODE_INT.

Sat Apr 15 14:04:32 1995  Per Bothner  <bothner@cygnus.com>

	* alpha-tdep.c (alpha_push_arguments): Only cast to long for
	TYPE_CODE_INT.


Thu Apr 13 16:17:04 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* remote-array.c: New file for Array Tech LSI33k based controller
	board.

Thu Apr 13 12:23:31 1995  Kung Hsu  <kung@rtl.cygnus.com>

	* a29k-tdep.c (get_longjmp_target): Replace SWAP_TARGET_AND_HOST with
	extract_address.
	* remote-vxsparc.c: New file, preliminary check in, this configuration
	not supported yet. 
	* remote-vxmips.c: ditto.

Thu Apr 13 12:10:14 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000-tdep.c (xcoff_add_toc_to_loadinfo): Don't use a prototype
	to declare the function.

Wed Apr 12 16:40:20 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.h (init_monitor_ops): Declare.
	* rom68k-rom.c: Clarify some comments.
	(rom68k_open): Define as static, to match decl.

Wed Apr 12 16:36:44 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* gdb.gdb: New file.
	* .gdbinit: Move list-objfiles to gdb.gdb.

	* values.c (set_internalvar): Set modifiable flag of newval.

Wed Apr 12 14:34:31 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* xcoffread.c: Call complain() rather than error() or printing a
	warning.

Wed Apr 12 08:15:27 1995  Doug Evans  <dje@canuck.cygnus.com>

	* arc-tdep.c: #include "gdbcmd.h".
	(codestream_seek): Pass CORE_ADDR.
	(arc_cpu_type, tmp_arc_cpu_type, arc_cpu_type_table): New globals.
	(debug_pipeline_p): Likewise.
	(X_...): Instruction field access macros.
	(BUILD_INSN): Define.
	(codestream_tell): Allow for stream elements > 1 byte.
	(codestream_fill): Likewise.
	(setup_prologue_scan): New function.
	(arc_get_frame_setup): Call it.  Update to current spec
	regarding prologues.  Use BUILD_INSN.
	(skip_prologue): New argument `frameless_p'.  Use BUILD_INSN.
	(arc_frame_saved_pc): New function.
	(frame_find_saved_regs): Use BUILD_INSN.
	(get_insn_type, single_step): New functions.
	(one_stepped): New global.
	(arc_set_cpu_type_command, arc_show_cpu_type_command): New functions.
	(arc_set_cpu_type): New function.
	(_initialize_arc_tdep): Define new `set' commands `cpu',
	`displaypipeline', and `debugpipeline'.
	* arc/tm-arc.h (TARGET_BYTE_ORDER): Delete.
	(TARGET_BYTE_ORDER_SELECTABLE): Define.
	(DEFAULT_ARC_CPU_TYPE): Define.
	(SKIP_PROLOGUE_FRAMELESS_P): Define.
	(BREAKPOINT): Delete.
	(BIG_BREAKPOINT, LITTLE_BREAKPOINT): Define.
	(DECR_PC_AFTER_BREAK): Change to 8.
	(NO_SINGLE_STEP): Define.
	(ARC_PC_TO_REAL_ADDRESS): Define.
	(SAVED_PC_AFTER_CALL): Use it.
	(NUM_REGS, REGISTER_BYTES): Fix.
	(FRAME_SAVED_PC): Call arc_frame_saved_pc.
	(FRAME_LOCALS_ADDRESS): Fix.

Tue Apr 11 16:42:37 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* top.c, utils.c, defs.h: Remove error_hook.  It is currently
	unused and would need to hook into error_begin()/return_to_top_level(),
	instead of error(), if it were to be used.

Tue Apr 11 13:46:25 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* utils.c, defs.h (warning_begin): Renamed from warning_setup, for
	consistency with error_begin.  Also print warning_pre_print.
	Document it better.
	* utils.c (warning): Use it.
	* utils.c (error_begin): Doc fix.
	* rs6000-nat.c (vmap_ldinfo): If we don't find ldinfo for the
	symfile_objfile, nuke it.

Tue Apr 11 09:35:20 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* printcmd.c (print_address_numeric): Pass use_local to
	print_longest, rather than always passing 1.

	* nlm/Makefile.in: Remove comments discussing munch.


Mon Apr 10 18:31:57 1995  Stan Shebs  <shebs@andros.cygnus.com>
	
	Merge in support for Mac MPW as a host.
	(Old change descriptions retained for informational value.)

	* mpw-config.in (i386-unknown-go32): Change from aout.
	(sh-hitachi-hms): New target.
	* mpw-make.in (BISON): Use byacc instead of bison.
	(VERSION): Bump to 4.14.1.
	(*-pinsn.*): Remove mentions everywhere.
	(all): Don't build MacGDB.
	(gdb, SiowGDB): Depend on Version.r.
	(Version.r): Generate from version info.
	* main.c (main): Pass program name to START_PROGRESS, END_PROGRESS.
	(main) [MPW]: Remove debugging hook.
	* mac-xdep.c (debug_openp): New flag.
	(mac_init): Set flag if env variable defined.
	* ser-mac.c (mac_open): Clarify error message.
	(mac_readchar): Call PROGRESS while looping.
	(mac_write): Call sleep instead of sec_sleep.
	(sec_sleep): Remove.
	* source.c (openp) [MPW]: Only print debugging info if debugging.
	* utils.c (query) [MPW]: Clarify that behavior is a bug.

	* mpw-make.in (init.c): Use open-brace instead of mpw-open-brace.

	* main.c, source.c: Remove hacks that replace long strings
	with shorter ones, now solved portably.

	* config/m68k/xm-mpw.h (spin.h): Include.
	(ALMOST_STDC): Only define if MPW_C.
	* config/m68k/tm-mac.h: New file, Mac target definitions.

	* mpw-config.in (m68k-apple-macos, ppc-apple-macos,
        i386-unknown-aout): New targets.
	(mk.tmp): Add *DEPFILES definitions.
	* mpw-make.in: Remove gC rules, clean up definitions for other
        include files, bump version, fix bogus \ that should be \Option-d.
	(init.c): Build correctly.

	* mpw-make.in (HFILES_NO_SRCDIR): Add somsolib.h
	(ALLDEPFILES): Add somsolib.c.
	(somsolib.o): Add some dependencies.

	* mpw-config.in: Use nm-empty.h if host is not target.
	(xdepfiles): Add mac-xdep.c.o.
	(xm_file): Remove.
	* mpw-make.in: Add Fortran files.
	(XDEPFILES): Remove.

	* mpw-config.in (MacSerial.h): Duplicate from standard Serial.h.
	* ser-mac.c (MacSerial.h): Include instead of Serial.h.

	* mpw-make.in: Use {s} instead of {srcdir} everywhere.
	(bindir, libdir): Remove extra colon.
	(source.c): Compile with C instead of gC.
	(c-exp.tab.c, ch-exp.tab.c, m2-exp.tab.c): Add {o}.
	(install-only): Don't install MacGDB.
	* source.c (openp) [MPW]: Add a debugging display.
	(open_source_file) [MPW]: Use MPW basename finders.
	[MPW_C]: Briefer versions of help for line and list commands.

	* mpw-make.in: Change references from paread.c to somread.c

	* mpw-make.in (VERSION): Update to 4.12.3.
	(SiowGDB): New target, GDB using SIOW library.
	(init-new.c): New target, attempt to generate init.c from sources.
	(main.c.o, top.c.o): Put each in its own segment.
	* main.c (main) [MPW]: Always call mac_init.
	* utils.c (query) [MPW]: Always return "yes" if in MacGDB, output
	an extra newline otherwise.
	* mac-xdep.c: More comments in various places, remove junk.
	(mac_init): Add tests for MPW and SIOW.
	(use_wne, has_color_qd): Renamed.
	(use_color_qd): New variable.
	(grow_window): Only do console resizing to console window,
	call resize_console_window.
	(zoom_window): Call resize_console_window.
	(resize_console_window, scroll_text): New functions.
	(adjust_console_sizes): Always align viewrect to even multiples of
	text lines.
	(adjust_console_text): Always scroll by whole lines.
	(hacked_vfprintf, hacked_puts, hacked_fputc, hacked_putc): Force a
	recalculation of scroll positions if a newline was output.
	(hacked_fflush): Similarly, for flushing.
	(hacked_fgetc): New function, aborts if called in MacGDB.
	* ser-mac.c (mac_readchar): Rename starttime to start_time,
	remove debugging printf.
	(mac_write): Sleep on first 4 writes.
	(sec_sleep): New function, works like standard sleep.
	* macgdb.r: Adjust positioning and contents of About box.
	Set minimum size to 2000K, preferred size to 5000K.
	* config/m68k/xm-mpw.h (fgetc): Define as a macro.

	* mpw-make.in (.c.o, .gc.o): Prefix segment names with gdb_.
	(top.c.o, annotate.c.o): Add build rules.
	* macgdb.r (SysTypes.r): Include.
	('vers'): New resource, version info.
	(mFile, mEdit, mDebug): Enable all menu items.
	(mDebug): Add key equivalents for continue, step, next.
	(wConsole): Add zoom and close boxes to window.
	* mac-xdep.c (new_console_window): New function, code taken from
	mac_init.
	(mac_command_loop): Use GetCaretTime for wait interval, call
	do_idle on null events.
	(do_idle): New function.
	(zoom_window): Implement zooming.
	(v_scroll_proc): New function, handles vertical scrolling.
	(activate_window): Do activation of console window.
	(do_menu_command): Implement items of file, edit, and debug menus.
	(do_keyboard_command): Fix command extraction.
	(adjust_console_sizes, adjust_console_text): New functions.
	(hacked_fprintf, hacked_vfprintf, hacked_fputs, hacked_fputc,
	hacked_putc): Don't call draw_console.
	* ser-mac.c (mac_open): Add an error message for invalid ports.
	(first_mac_write): New global.
	(mac_write): Use first_mac_write to sleep on first several writes.

	* mpw-make.in (INCLUDE_CFLAGS): Add readline source dir.
	(READLINE_CFLAGS, READLINE_SRC, READLINE_DIR): Uncomment.
	(TSOBS): Don't compile inflow.c.
	(all, install): Add MacGDB.
	* main.c (main): Do Mac-specific init and command loop if a
	standalone app, skip full option help message if compiling
	with MPW C.
	(gdb_readline): If MPW, add a newline after the (gdb) prompt.
	* utils.c (_initialize_utils): If MPW, don't try to use termcap to
	compute the window size.
	* config/m68k/xm-mpw.h (printf, fprintf, fputs, fputc, putc,
	fflush): Define as macros that expand into hacked_... versions.
	(StandAlone, mac_app): Declare.
	* macgdb.r (SIZE): Set the default partition to 4000K.
	* mac-xdep.c (readline.h, history.h): Include.
	(terminal.h): Don't include.
	(mac_app): Define.
	(gdb_has_a_terminal): Define Mac-specific version.
	(do_keyboard_command): Simplify search for command string.
	(readline): Define as gdb_readline.
	Add other history/readline stubs to make main gdb link.
	(hacked_fprintf, hacked_printf, hacked_vfprintf, hacked_fputs,
	hacked_fputc, hacked_fflush): New functions, intercept output to
	stdout and stderr, send to console window.

	* mpw-make.in (MacGDB): New target, standalone Mac-hosted gdb.
	(XDEPFILES): Define.
	(main.c.o): Compile with gC instead of C.
	* mac-defs.h: New file, menu etc definitions shared between
	C and Rez files.
	* macgdb.r: New file, Rez (resource compiler) resource
	definitions.
	* mac-xdep.c: New file, Mac host interface code.
	* config/m68k/xm-mpw.h (PATHNAME_SEPARATOR): Rename to
	DIRNAME_SEPARATOR.
	(PATHNAME_SEPARATOR_STRING): Remove.
	(SIGQUIT, SIGHUP): Define.
	(fileno, R_OK): Define.

	* mpw-config.in: New file, MPW configuration fragment.
	* mpw-make.in: New file, MPW makefile fragment.
	* config/m68k/xm-mpw.h: New file, MPW host definitions.
	* ser-mac.c: New file, Mac serial interface.

Mon Apr 10 16:47:57 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* valprint.c (print_longest): Fix a syntax error in #ifdef 
	PRINTF_HAS_LONG_LONG.

	* config/mips/xm-irix5.h: turn on CC_HAS_LONG_LONG and 
	PRINTF_HAS_LONG_LONG.
	* config/mips/tm-irix5.h: turn on FORCE_LONG_LONG.

Sat Apr  8 02:47:45 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_symbol):  Use new variable 
	nodebug_var_symbol_type as type of variables which don't have any
	ecoff debug info associated with them.
	(parse_symbol, parse_procedure):  Use heuristics to determine if
	functions were compiled without debugging info and change their
	type to nodebug_function_symbol_type.
	(_initialize_mdebugread):  Initialize nodebug_*_symbol_type.

	* source.c (line_info):  Clear sal.pc for `info line' without
	arguments.

Fri Apr  7 17:43:01 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* monitor.c:  make_xmodem_packet and print_xmodem_packet go away.
	send_xmodem_packet shows up to do the obvious.  Lots of fixes to
	xmodem downloads including resetting of block number at start of
	new transfers, fix for buffer overrun problem, addition of CRC
	generation code.
	* (monitor_open):  loadtype_str and loadproto_str now default to
	first entry in monitor_ops->loadtypes.
	* (monitor_wait):  Lengthen register dump buf, because of verbose
	Winbond monitor.
	* (monitor_fetch_register):  Report unimplemented registers as 0.
	* (monitor_read_memory):  Only do 16 byte aligned transfers
	because of formatting weirdness with the Winbond monitor.  Also,
	ignore non-hex, non-whitespace formatting between bytes (same
	monitor).
	* (monitor_load):  Clean up logic.
	* (monitor_load_srec):  Re-do xmodem support.  Move lots of it
	into send_xmodem_packet.
	* (getacknak):  Get rid of polls and timeouts.  Handle CRC
	requests from receiver.
	* (monitor_make_srec):  Efficiency improvements.  Don't call
	sprintf to output two digit hex numbers.
	* (crcinit, docrc):  New, CRC-16 support routines.
	* (send_xmodem_packet):  New routine to generate either CRC-16 or
	checksummed xmodem packets.

	* remote-est.c (est_loadtypes), rom68k-rom.c (rom68k_loadtypes):
	Reduce tables down to only the load types supported by each
	monitor.

	* w89k-rom.c  (w89k_supply_register):  Parses output of Winbond
	register dumps.
	* (w89k_loadtypes, w89k_loadprotos):  Reduce to just srec/xmodem.
	* (w89k_cmds):  Add clear all breakpoints, memory fill, and dump
	registers commands.

	* config/pa/tm-hppa.h:  Define lots register offsets needed by
	w89k-rom.c.


Thu Apr  6 17:00:46 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (X11_INCLUDES): Define as empty.
	(X11_CFLAGS): Define as including $(X11_INCLUDES).
	(X11_LIB_SWITCHES): Define as empty.
	(X11_LIBS): Define as -lX11.


Wed Apr  5 19:57:38 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* mips-tdep.c (mips_print_register): Remove unused variable
	our_type and call to init_type.  Fixes memory leak.  Reindent function.

	* mips-tdep.c (mips_print_register), findvar.c
	(write_register_bytes): Make buffer char[] instead of unsigned
	char[].

Mon Apr  3 19:28:14 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* top.c, utils.c, main.c, defs.h: Replace error_pre_print with two
	variables: error_pre_print (for RETURN_ERROR) and quit_pre_print
	(for RETURN_QUIT).  Fixes a bug whereby typing ^C (e.g. in "maint
	print sym") could output extraneous stuff.
	* objfiles.c: Don't declare error_pre_print; defs.h does it.

Mon Apr  3 13:48:28 1995  Stu Grossman  (grossman@andros.cygnus.com)

	* monitor.h:  Add MO_GETMEM_NEEDS_RANGE flag.
	* monitor.c (monitor_read_memory):  Use previously mentioned flag
	to send proper format memory examine commands to the w89k monitor.
	Also, try to handle bizarre format of memory dump...

	* op50-rom.c w89k-rom.c:  Update to new monitor.[ch] conventions.

Sat Apr  1 03:22:20 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c (process_one_symbol) [SOFUN_ADDRESS_MAYBE_MISSING]:
	Handle relocated symbol address.
	* partial-stab.h, case N_SO, SOFUN_ADDRESS_MAYBE_MISSING:
	Do not relocate a zero address.

Thu Mar 30 19:46:36 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/a29k/tm-a29k.h: Nuke obsolete define CONTROL_END_ADDR; it
	is nowhere used.

	* stabsread.c (read_range_type): Remove FIXME comment about
	type-id (I presume this meant a number followed by = followed by a
	type) versus type number; Per fixed it.

Wed Mar 29 09:56:04 1995  Jason Molenda  (crash@phydeaux.cygnus.com)

	* configure.in: sparc-*-sunos5* is same as sparc-*-solaris2*.

Wed Mar 29 18:30:03 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-e7000.c (why_stop): Add new kinds of strings to expect
	from the emulator.
	(e7000_wait): Add interpretations for more stop reasons,
	including warnings for write protect and cycle address errors.

Wed Mar 29 17:09:29 1995  Stu Grossman  (grossman@cygnus.com)

	* monitor.c monitor.h remote-est.c rom68k-rom.c:  Add start of
	support for interrupting target.
	* monitor.c (monitor_open):  Send stop command before doing
	anything else.
	* (monitor_load_srec):  Fix record size calculation to prevent end
	of segment from getting trashed.
	* rom68k-rom.c:  Update to latest version of struct monitor_ops.
	* config/sparc/tm-sparc.h (FIX_CALL_DUMMY):  Fix byte-order
	problems.  Makes DOS hosted function calling work.
	* sparclite/crt0.s:  Define _start to make COFF happy.

Wed Mar 29 09:11:51 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* defs.h (atof): Don't provide an external declaration if atof is
	a macro.

Wed Mar 29 00:01:07 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* rs6000-tdep.c (skip_prologue):  Skip saving of LR and CR in
	the stack frame, fix typos in `st rx,NUM(r1)' and `stu r1,NUM(r1)'
	tests.

Tue Mar 28 17:04:04 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* gdbtypes.c (create_range_type):  If indextype has TYPE_FLAG_STUB
	set, set TYPE_FLAG_TARGET_STUB.
	(check_stub_type):  Recalculate TYPE_LENGTH for range type.
	* stabsread.c (read_range_type):  If index type number is followed
	by '=', back up, call read_type. and assume we have a true range.
	* gdbtypes.h (TYPE_FLAG_TARGET_STUB):  Update comment.

Mon Mar 27 22:51:54 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* alpha-nat.c, irix4-nat.c, irix5-nat.c, mipsv4-nat.c,
	sparc-tdep.c (supply_gregset, supply_fpregset):  Fill inaccessible
	registers with zero to handle recent read_register_bytes change.
	* irix4-nat.c, irix5-nat.c, mipsv4-nat.c (supply_gregset,
	fill_gregset):  Fix handling of CAUSE_REGNUM.
	* mips-nat.c (store_inferior_registers):  Handle unwritable
	registers when storing a single register.
	* config/mips/tm-irix3.h (CAUSE_REGNUM, BADVADDR_REGNUM):
	Fix definitions.

	* mdebugread.c (parse_symbol, psymtab_to_symtab_1):  Clear
	allocated mips_extra_func_info, if the debug info is corrupt,
	the PDR to fill it in might be missing.

Mon Mar 27 14:43:00 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* vx-share/regPacket.h: a new file interfacing with vxworks.

Sun Mar 26 13:22:47 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (bpstat_do_actions): Once we've executed the
	commands, set bs->commands to NULL.

Sat Mar 25 01:16:10 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* buildsym.c (patch_subfile_name):  Update last_source_file
	with the real source file name.
	* dbxread.c (end_psymtab):  Handle static functions in the
	SOFUN_ADDRESS_MAYBE_MISSING case by passing pst->filename
	to lookup_minimal_symbol.
	(process_one_symbol):  Ignore extra outermost context from
	SunPRO cc and acc.
	* stabsread.c (define_symbol):  Do not complain for SunPRO
	static variable encoding if STATIC_TRANSFORM_NAME is defined.
	* sparc-tdep.c, config/sparc/tm-sun4sol2.h
	(sunpro_static_transform_name):  Renamed from
	solaris_static_transform_name.
	* config/sparc/tm-sun4os4.h (STATIC_TRANSFORM_NAME):
	Define to sunpro_static_transform_name for acc 3.0 compiled
	executables.
	* procfs.c, config/alpha/nm-osf2.h (PROCFS_DONT_TRACE_FAULTS):
	Renamed from PROCFS_DONT_TRACE_IFAULT, don't trace any faults
	if defined.
	* procfs.c (info_proc_siginfo):  Cast sip->si_addr to
	`unsigned long' and use `lx' format for printing it.

Fri Mar 24 15:45:42 1995  Stu Grossman  (grossman@cygnus.com)

	* configure.in:  Move test for m68*-est-* before m68*-*-coff*.
	* findvar.c:  Move default def of CANNOT_STORE_REGISTER closer to
	the beginning of the code.
	* (write_register_gen):  New routine.  Analogous to
	read_register_gen.
	* (write_register_bytes):  Another rewrite!  Make it smarter about
	not updating regs with the same value.
	* monitor.c (printf_monitor readchar):  Use stderr instead of
	stdout to output debug info.  Also cleanup readchar a little.
	* (expect):  Make sure that excessive responses are null
	terminated.
	* (monitor_open):  Check for magic number in monitor_ops struct.
	Allow multiple commands as init strings.  Also, clear all
	breakpoints.
	* (monitor_resume monitor_wait):  Send a command to dump all the
	regs for those targets which don't do so when waking up after a
	continue command.
	* (monitor_wait):  Handle excessive response output better.
	* (monitor_write_memory):  Use block fill, word, and long word
	commands (if they exist) to write memory more efficiently.
	* General cleanups to use flag bits instead of individual flag
	words in monitor_ops struct.
	* (monitor_command):  Return output from command.
	* (monitor_load_srec):  Allocate buffer only once.  Use alloca.
	Wait for load response string instead of using a timeout to start
	sending S-records.  Fix bug where value of srec_frame shrinks.  If
	hashmark is set, print `-' for retransmissions.  General cleanups.
	* (monitor_make_srec):  Get rid of S-record default type kludge.
	* monitor.h:  Use seperate struct for memory and register
	read/write commands.  Memory commands can come in byte, word,
	long, and longlong forms.
	* (monitor_ops):  Change lots of fields.  Generalize some stuff.
	Put all flags into flags word.  Allow init to be a list of commands.
	Add command for clearing all breakpoints, block fill, dumping all
	registers.
	* remote-est.c:  Rewrite to use new monitor conventions.
	* config/m68k/est.mt (TDEPFILES):  Add monitor.o.
	* config/m68k/tm-est.h:  Set NUM_REGS to 18.

Thu Mar 23 23:20:00 1995  Jeff Law  (law@snake.cs.utah.edu)

        * somsolib.c (som_solib_add): Handle case where a shared library
        referenced by a core file has sections without the SEC_ALLOC bit
        set (eg stabs sections).

Thu Mar 23 15:07:08 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* breakpoint.c (bpstat_do_actions): For each element in the bpstat
	chain, do all the commands regardless of whether they run the
	inferior.

Wed Mar 22 19:17:06 1995  Doug Evans  <dje@cygnus.com>

	* mem-break.c (LITTLE_BREAKPOINT, BIG_BREAKPOINT): Define as
	BREAKPOINT if mono-endian.
	(break_insn): Deleted.
	(big_break_insn, little_break_insn): Define.
	(memory_insert_breakpoint): Handle bi-endian cpus.
	(BREAKPOINT_LEN): Define.
	(memory_remove_breakpoint): Use it.
	(memory_breakpoint_size): Likewise.

Tue Mar 21 17:03:17 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* sparc-stub.c: add nop after 'bg good_wim'.
	* sparcl-stub.c: ditto.

Tue Mar 21 13:34:12 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (handle_command): Don't print TARGET_SIGNAL_0,
	TARGET_SIGNAL_UNKNOWN, or TARGET_SIGNAL_DEFAULT.

Mon Mar 20 10:09:59 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hppab-nat.c (store_inferior_registers): Sync with HPUX version.

Mon Mar 20 07:34:48 1995  Stu Grossman  (grossman@cygnus.com)

	* hppah-nat.c (store_inferior_registers):  Move check for
	CANNOT_STORE_REGISTER to a better place.  Fixes ptrace I/O errors
	found by test suite during function calls, which attempts to write
	unwritable registers.

Sat Mar 18 02:02:24 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* mdebugread.c (parse_symbol):  If finishing a function without
	known parameter type info, set that from parameter symbols.
	Remove commented-out add_param_to_type support.

Thu Mar 16 16:38:03 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (process_linenos): Make sure filename we pass to
	start_subfile will cause deduce_language_from_filename to return
	the correct thing.  Reindent function to GNU standards.

Thu Mar 16 15:54:00 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* nlm/gdbserve.c (handle_exception): #if out call to StopBell,
	  as it is not available on NetWare 3 or PIN.
	* nlm/ppc.c (StopBell): Removed.

Thu Mar 16 12:14:41 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (read_xcoff_symtab): When creating a dummy parameter
	inferred from the traceback tags, give its type the name
	"<non-float parameter>".

	* stabsread.c (rs6000_builtin_type): Recognize types -31 to -34.

Wed Mar 15 15:09:29 1995  Stu Grossman  (grossman@cygnus.com)

	* findvar.c (read_register_bytes write_register_bytes):  Make
	these routines much smarter about updating registers from the
	target, only doing so when absolutely necessary.  This really
	speeds up register modification on some remote targets.

	* monitor.c:  More cleanups.  Get rid of monitor_load_ascii_srec.
	BFD makes this unnecessary.  Lots of debugging speedups.
	* (expect):  NULL terminate return string.
	* (monitor_open	monitor_supply_register parse_register_dump
	monitor_wait monitor_fetch_register):  Switch to using GNU regexp
	library to parse multi-register displays.
	* (monitor_read_memory): Read multiple bytes (up to 16) at once.
	* (monitor_create_inferior):  Call clear_proceed_status to make run
	command notice first breakpoint.
	* (monitor_load):  Clean up.  Reset inferior_pid, set pc to start
	address and reset symbol table stuff to make loads put things into
	a fresh state.
	* (monitor_load_srec):  Lower sleep time to 1 second.

	* monitor.h (struct monitor_ops):  Add register_pattern and
	supply_register to monitor_ops.

	* rom68k-rom.c:  Add new support for handling register dumps.
	* config/m68k/tm-m68k.h:  Define D0_REGNUM and A0_REGNUM for register
	dump handling.

Wed Mar 15 15:18:27 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* utils.c, defs.h (putchar_unfiltered, fputc_unfiltered): Make
	argument be an int, not a char.  Using a prototype followed by an
	old-style function definition in a case where an argument is
	widened is a GCC-ism not supported by the native AIX compiler.

Wed Mar 15 12:22:35 1995  J.T. Conklin  <jtc@rtl.cygnus.com>

	* nlmstub.def: Removed, this was moved to nlm/gdbserve.def 
	  long ago.

	* configure.in (alpha-*-netware*): Removed configuration.
	* config/alpha/{alpha-nw.mt, gdbserve.mt, tm-alphanw.h}: Removed.
	* nlm/{README-ALPHA-NETWARE, aio.h, alpha-io.S, alpha-regdef.h,
	  alpha.c, alpha.h, altdebug.h}: Removed.

	* nlm/gdbserve.c (main): Add support for processing BOARD=
	  argument, deprecate NODE=.

Wed Mar 15 10:58:26 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* c-exp.y (yylex): Make an empty character constant an error.

Tue Mar 14 15:00:54 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* valops.c (value_arg_coerce):  Do possible value_coerce_array
	before determining type argument to value_cast.

Tue Mar 14 10:41:41 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote-es.c: Replace ignore with 0.

Tue Mar 14 05:52:36 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valops.c (value_repeat), eval.c (evaluate_subexp_standard):
	If VALUE_REPEATED is already set, just error out.

	* valops.c (value_cast, value_slice), parse.c (follow_types): Add
	FIXME-type-allocation comments.

	* gdbtypes.h (struct type): Fix comment about what units the
	TYPE_LENGTH is in.

Mon Mar 13 18:27:25 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* ch-valprint.c (annotate.h): Include.
	* eval.c (evaluate_subexp_standard): Remove unused variable.
	(calc_f77_array_dims): Add parens to expression.
	* f-exp.y (yylex): Add parens to expression, remove unused label.
	* f-lang.h (calc_f77_array_dims): Declare.
	* f-valprint.c (f_val_print): Remove unused variables.

Mon Mar 13 15:25:47 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* alpha-tdep.c (find_proc_desc): If pdr.framereg field is -1, don't
	use the PDR, just examine prologues instead.

Fri Mar 10 16:13:18 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* config/arc/tm-arc.h: Change arc register names.

Fri Mar 10 02:49:40 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	Fix problems with infinite recursion when printing a class
	that contains a static instance of the class.
	* cp-valprint.c (dont_print_vb_obstack):  Renamed from
	dont_print_obstack, made static.
	(dont_print_statmem_obstack):  New obstack, controls printing
	of static member classes.
	(_initialize_cp_valprint):  Initialize it.
	(cp_print_static_field):  New function, handles printing of
	static members.
	(cp_print_value_fields):  New parameter dont_print_statmem to
	handle recursive printing of static member classes, use
	cp_print_static_field to handle printing of static members.
	* c-valprint.c (cp_print_value_fields):  Update prototype and
	call to include additional dont_print_statmem parameter.
	* c-valprint.c, f-valprint.c (dont_print_obstack):  Remove unused
	extern declaration.

	* alpha-tdep.c, findvar.c, infptrace.c:  Include <string.h>.

	* config/alpha/tm-alpha.h (FRAME_FIND_SAVED_REGS):  Call
	alpha_find_saved_regs if fi->saved_regs is still NULL.

	* elfread.c (elf_symtab_read):  Ensure that the filename field
	of a minsym is nonempty. Ignore solib trampoline symbols from
	the main symbol table, they might have a bogus value.

	* procfs.c (set_proc_siginfo), config/alpha/alpha-osf2.mh:
	Fix typos in comments.

Thu Mar  9 17:19:47 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* mdebugread.c (parse_symbol, psymtab_to_symtab_1): Initialize
	pdr.framereg field of MIPS_EFI_SYMBOL_NAME symbol to -1.  That way
	we know whether the PDR ever got set.
	* mips-tdep.c (find_proc_desc): If pdr.framereg field is -1, don't
	use the PDR, just examine prologues instead.

Wed Mar  8 23:35:10 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somsolib.c (som_solib_section_offsets): Get offset of text
	section right. 

Wed Mar  8 16:12:21 1995  Stu Grossman  (grossman@cygnus.com)


	* source.c (forward_search_command reverse_search_command):  Set
	convenience variable $_ to be the line # of the match.
	* symtab.c (decode_line_1):  Allow convenience variables to be
	used in line specs (for breakpoints and such).

Wed Mar  8 12:51:00 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* Makefile.in (VERSION): Bump to 4.14.1.
	* NEWS, README: Update for 4.14.
	* i386v-nat.c (i386_insert_aligned_watchpoint): Fix declaration.
	(i386_insert_nonaligned_watchpoint): Call aligned instead of
	generic watchpoint insertion.

Tue Mar  7 19:26:10 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* valops.c (value_slice):  Do COERCE_VARYING_ARRAY.

Tue Mar  7 00:23:47 1995  Stu Grossman  (grossman@cygnus.com)

	* monitor.c, array-rom.c, monitor.h, rom68k-rom.c:  Move target_ops
	into monitor.c.
	* monitor.c (monitor_create_inferior):  Allow run command to start
	program.

	* monitor.c (monitor_load):  Set PC to start address when done
	loading.

	* array-rom.c, monitor.h, rom68k-rom.c:  Clean up target_ops.
	Remove ref to monitor_create_inferior.

	* monitor.c:  More general cleanups.  Add prototypes, remove
	unused routines.  Fix bug with wrong number of args to error().

	* main.c (main):  Don't start up GUI when running under gdb mode
	in emacs.

	* Makefile.in:  Add rules for monitor.o and rom68k-rom.o to make
	Sun make (with VPATH) work...

	* monitor.c, monitor.h, rom68k-rom.c:  Serious cleanup to make IDP
	(rom68k) target work right.
	* array-rom.c, op50-rom.c, w89k-rom.c:  Partial updates to new
	monitor.c interface.  More work needs to be done here.
	* config/m68k/tm-monitor.h:  Change DECR_PC_AFTER_BREAK to 0 to
	match the IDP monitor.  Also, set NUM_REGS to 18 cuz there's no
	floating-point for this card.

	* serial.h, ser-go32.c, ser-mac.c, ser-tcp.c, ser-unix.c: Add
 	SERIAL_SETSTOPBITS to set the number of stopbits (needed for IDP
 	board?!?!?).

	* defs.h, utils.c, remote-hms.c, remote-pa.c, remote.c:  Fix defs
	and usage of fputc_unfiltered and putchar_unfiltered.  Eliminate
	putc_unfiltered (it's superfluous).

	* command.h, command.c, top.c:  Add var_enum command type.  It's
	like var_string but allows only only one of the specified strings.

Mon Mar  6 15:03:59 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valops.c (value_cast): Don't use backslash newline--pre-ANSI
	compilers (such as SunOS4 /bin/cc) don't generally support it
	except in some contexts.

Fri Mar  3 17:42:48 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* valops.c (value_cast):  Check for cast to array type *before*
	we coerce array to pointer (in case arg2 is already array).

	* valops.c (call_function_by_hand):  Set using_gcc to 2 if using
	gcc2.  Needed for REG_STRUCT_HAS_ADDR to work on sparc.
	Also check REG_STRUCT_HAS_ADDR for union, array and string types.

	* valops.c (call_function_by_hand):  Re-arrange code for pushing
	paramaters on the stack so we can do better STACK_ALIGN.

	* valops.c (call_function_by_hand):  Call error if the number
	of arguments is fewer than parameter types in function type.

Fri Mar  3 17:13:05 1995  Doug Evans  <dje@canuck.cygnus.com>

	* sparc-tdep.c (sparc_extract_struct_value_address): Move
	sparc64 support to here.
	(sparc64_extract_struct_value_address): Deleted.
	(dump_ccreg): Add a prototype so long long arg -> int.
	* sparc/tm-sp64.h (USE_STRUCT_CONVENTION): Define.
	(EXTRACT_STRUCT_VALUE_ADDRESS): Delete.

Fri Mar  3 15:12:12 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (hpread_record_lines): New argument "offset".  All
	callers changed.  Use it to handle dynamic address relocation.
	(hpread_build_psymtabs): Adjust texthigh as we read each function
	debug symbol.  Fix computation of texthigh.
	(hpread_read_subrange_type): Work around macro bugs in HP's
	compilers.
	(hpread_process_one_debug_symbol): Correctly map source lines.

	* somread.c (check_strange_names): Filter names emitted by the HP
	compiler when generating PIC code.

	* valops.c (value_struct_elt_for_reference): Work around macro
	bugs in HP's compilers.
	* c-exp.y (block): Likewise.

Fri Mar  3 12:27:28 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* rs6000-tdep.c (push_dummy_frame): Fix order of arguments to
	store_address.

	* utils.c [_AIX]: Include stddef.h instead of #defining size_t.

Fri Mar  3 12:33:24 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* rs6000-tdep.c (skip_prologue): Skip multiple stores of the saved
	registers that GCC emits on the PowerPC by default in addition to
	the store multiple instruction used on the Power series.

Fri Mar  3 00:54:58 1995  Doug Evans  <dje@canuck.cygnus.com>

	* sparc-tdep.c (decode_asi): New function.
	(sparc_print_register_hook): Pretty print more v9 registers.
	* sparc/tm-sp64.h (REGISTER_NAMES): Fix some typos.

Thu Mar  2 22:20:22 1995  Doug Evans  <dje@canuck.cygnus.com>

	* dwarfread.c (struct dieinfo): Use CORE_ADDR for at_{low,high}_pc.
	(target_to_host): Change result type to CORE_ADDR.

Thu Mar  2 15:13:04 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* rs6000-tdep.c: Fix byte-swapping sins.

Thu Mar  2 16:48:45 1995  Michael Meissner  <meissner@cygnus.com>

	* rs6000-tdep.c (branch_dest): Minor code cleanup, don't share
	code between branch unconditional and branch conditional cases.

Wed Mar  1 09:41:26 1995  Doug Evans  <dje@canuck.cygnus.com>

	Various changes for sparc64.
	* sparc-tdep.c (NUM_SPARC_FPREGS): Define.
	(SPARC_INTREG_SIZE): Define.
	(*): Use SPARC_INTREG_SIZE instead of REGISTER_RAW_SIZE (intreg)
	where appropriate.
	(enum branch_type): New value `done_retry'.
	(isbranch): Renamed from isannulled.  All callers changed.
	Support new sparc64 branch insns.
	(single_step): Handle done_retry.
	(sparc_extract_struct_value_address): Don't assume 4 byte regs.
	(get_saved_register): Likewise.
	(sparc_push_dummy_frame): Likewise.
	(sparc_frame_find_saved_regs): Likewise.
	(sparc_pop_frame): Likewise.  Don't refer to FPS_REGNUM, CPS_REGNUM,
	or PS_REGNUM if not sparc64.  sparc64 has 64 fp regs.
	(sparc64_extract_struct_value_address): New function.
	(dump_ccreg, sparc_print_register_hook): Likewise.
	* sp64-tdep.c: Deleted.
	* sparc/tm-sp64.h (GDB_TARGET_IS_SPARC64): Define.
	(NUM_REGS): Reduce by 2, cle/tle are in the pstate reg.
	(CC_HAS_LONG_LONG): Define.
	(REGISTER_NAMES): Delete cle/tle and reorganize.
	(PS_REGNUM, FPS_REGNUM, CPS_REGNUM): Delete, they're ifdef'd out of
	sparc-tdep.c now.
	(REGISTER_BYTES): Update.
	(REGISTER_CONVERT_TO_VIRTUAL, REGISTER_CONVERT_TO_RAW): Delete.
	(EXTRACT_RETURN_VALUE): Delete.  Use definition in tm-sparc.h.
	(NO_SINGLE_STEP): Likewise.
	* sparc/tm-sparc.h (EXTRACT_VALUE_RETURN): Don't assume 4 byte regs.
	* sparc/sp64.mt: Move simulator support ...
	* sparc/sp64sim.mt: ... to here.

Wed Mar  1 13:14:42 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote-vx960.c: new file for target specific register packaging.
	* remote-vx68.c: ditto.
	* config/i960/vxworks960.mt: add remote-vx960.o.
	* config/m68k/vxworks68.mt: add remote-vx68.o.

Wed Mar  1 13:42:49 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* remote.c (remote_wait): Make calls to strtol be type correct by
	passing the address of a char * pointer instead of an unsigned
	char *.

	* rs6000-tdep.c (push_dummy_frame): Cast sp to char * when calling
	write_memory to make things type correct.

Wed Mar  1 12:17:31 1995  Michael Meissner  <meissner@cygnus.com>

	* ch-exp.y, c-exp.y, f-exp.y, m2-exp.y (yy defines): Support the
	standard Linux yacc by adding more names to be redefined with a
	prefix.

Tue Feb 28 22:55:47 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* hppa-tdep.c (pa_print_registers), monitor.c: Use
	extract_unsigned_integer and friends, not SWAP_TARGET_AND_HOST.
	* defs.h, findvar.c: Move SWAP_TARGET_AND_HOST back to findvar.c.
	Rename it to SWAP_FLOATING to make it clear it is no longer for
	integers.

Tue Feb 28 14:38:39 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* defs.h (SWAP_TARGET_AND_HOST): check endianess at runtime not
	compile time.
	* arc-tdep.c (_initialize_arc_tdep): set tm_print_insn according to 
	processor.

	* vx-share/ptrace.h: merge in WRS new ptrace requests.

	* defs.h: fix a syntax error.

	* a29k-tdep.c (get_longjmp_target): add this function, from WRS.
	* remote-vx.c: move read_register and write_register out to 
	target specific files.
	* remote-vx29k.c (get_fp_contnets): add this function, from WRS.

	* defs.h: define SWAP_TARGET_AND_HOST macro.
	* findvar.c, monitor.c, hppa-tdep.c: remove definition of
	SWAP_TARGET_AND_HOST.

Tue Feb 28 08:31:40 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* alpha-tdep.c (find_proc_desc): Only attempt to set
	PROC_LOCALOFF (found_heuristic) if found_heuristic is non-NULL.

Mon Feb 27 11:56:32 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* monitor.c: General gcc -Wall lint cleanup and reformat.
	(monitor_command): If no args, send an empty command.

Thu Feb 23 21:07:25 1995  Stu Grossman  (grossman@cygnus.com)

	* monitor.c (monitor_load_ascii_srec):  Add a one second sleep
	after send LOAD_CMD to prevent loss of first S-record.

Tue Feb 21 20:48:42 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* valops.c (call_function_by_hand):  Set using_gcc to 2 if gcc-2.
	Call error if too few arguments.
	If REG_STRUCT_HAS_ADDR (structs passed by invisible reference),
	copy and convert to reference *before* we calculate alignment.
	Also, make sure structs allocated for return values and invisible
	reference don't violate STACK_ALIGN.

Tue Feb 21 23:29:59 1995  Per Bothner  <bothner@rtl.cygnus.com>

	* ch-exp.y (expression_conversion):  Recognize 'ARRAY () TYPE (EXPR)'
	(same as C's '(TYPE[])EXPR')

Tue Feb 21 11:47:26 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* top.c (print_gdb_version): Update the year.

Sun Feb 19 14:31:57 1995  Jim Kingdon  <kingdon@rtl.cygnus.com>

	* Makefile.in (CC_FOR_TARGET, CXX_FOR_TARGET): Look for newlib in
	`..' not in `../..'.

Sun Feb 19 11:05:28 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* procfs.c (unconditionally_kill_inferior):  Don't issue a PIOCKILL
	in addition to a PIOCSSIG to kill the inferior.

Thu Feb 16 15:06:12 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* parse.c (follow_types):  Given (TYPE[]) (i.e. with no length),
	create a 0-length array type, and set BOUND_CANNOT_BE_DETERMINED.
	* valops.c (value_cast):  If a cast like (TYPE[])VALUE (i.e. array
	of unknown length) use sizeof(VALUE)/sizeof(TYPE) as the length.
	* c-typeprint.c (c_type_print_varspec_suffix):  If array length
	is 0, print it, but not if upper_bound is BOUND_CANNOT_BE_DETERMINED.

Thu Feb 16 16:06:50 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* dcache.c (insque, remque): Rewrite Linux support.

Wed Feb 15 12:33:20 1995  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config/powerpc/tm-ppc-eabi.h (TEXT_SEGMENT_BASE): Define as 1.

	* dcache.c (insque, remque): If compiling in standard C on Linux,
	protect insque and remque with macros to cast the pointer
	arguments to the proper type.

Tue Feb 14 17:16:41 1995  Stu Grossman  (grossman@cygnus.com)

	* annotate.c, breakpoint.c, defs.h, top.c:  Replace
	enable/disable_breakpoint_hook with modify_breakpoint_hook.

Tue Feb 14 16:58:07 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* expression.h: Move declaration of evaluate_subexp_with_coercion
	from here...
	* value.h: ...to here.
	* expression.h: Don't include value.h

Tue Feb 14 11:46:07 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* expression.h: Move include of value.h until after declaration of
	enum exp_opcode.

Sun Feb 12 13:47:30 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-e7000.c: Comprehensive cleanup; removal of dead code,
	simplify code, declare things, format to standards.
	(inferior.h, value.h, command.h, remote-utils.h): Include.
	(e7000_login): Rename to e7000_login_command.
	(e7000_ftp): Rename to e7000_ftp_command.
	(e7000_drain): Rename to e7000_drain_command.

	* irix5-nat.c (string.h): Include near beginning of file.

Sun Feb 12 12:36:38 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* valops.c (value_arg_coerce): Use VALUE_TYPE not SYMBOL_TYPE on
	arg, it is a value not a symbol.

	gcc -Wall lint:
	* eval.c: Move declaration of evaluate_subexp_with_coercion from here..
	* expression.h: ..to here.
	* expression.h: Include value.h.
	* ch-lang.c (evaluate_subexp_chill): Add default case in switch.

Sun Feb 12 11:03:47 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* language.h (struct language_defn):  New field evaluate_exp.
	* c-lang.c (c_language_defn, cplus_language_defn, asm_langauge_defn),
	f-lang.c (f_language_defn), language.c (unknown_language_defn,
	auto_language_defn, local_language_defn), m2-lang.c (m2_language_defn):
	Set evaluate_exp to evaluate_subexp_standard.
	* ch-lang.c (evaluate_subexp_chill):  New function.  Chill-specific
	support for MULTI_SUBSCRIPT.
	(chill_language_defn):  Set evaluate_exp to evaluate_subexp_chill.
	* eval.c (enum noside):  Move from here ....
	* expression.h (enum noside):  ... to here.
	(evaluate_subexp_standard):  New prototype.
	* eval.c (evaluate_subexp):  Renamed to evaluate_subexp_standard.
	Removed lo-longer-needed test for chill_varying_type.
	(evaluate_subexp):  New.  Calls exp->language_defn->evaluate_exp.

	* ch-exp.y (maybe_expression_list):  New non-terminal.
	(primitive_value):  Allow empty parameter list.

Sun Feb 12 10:02:16 1995  Per Bothner  <bothner@cygnus.com>

	* buildsym.c (finish_block):  If finishing a function without known
	parameter type info, set that from parameter symbols.
	* c-typeprint.c (c_type_print_varspec_suffix):  For TYPE_CODE_FUNC,
	print parameter types, if available.
	* ch-typeprint.c (chill_type_print_base):  Likewise.

	* gdbtypes.h (struct type):  Remove function type field.
	(TYPE_FUNCTION_TYPE):  Remove macro.  We can't as simply re-use
	function types now that we're also storing parameter types.
	And the payoff is much less.
	* gdbtypes.c (make_function_type):  Don't use/set TYPE_FUNCTION_TYPE.
	(recursive_dump_type):  Don't print TYPE_FUNCTION_TYPE.
	* dwarfread.c (read_subroutine_type):  Don't set TYPE_FUNCTION_TYPE.

	* valops.c (value_arg_coerce):  Now takes param_type argument.
	(call_function_by_hand):  Convert arguments with value_arg_coerce
	early, and overwrite original args with converted args.
	No longer need multiple calls to value_arg_coerce.
	(value_arg_push):  Removed.
	* hppa-tdep.c (hppa_push_arguments):  No longer call value_arg_coerce.
	* mips-tdep.c (mips_push_arguments):  Likewise.
	* alpha-tdep.c (alpha_push_arguments):  Likewise.
	* rs6000-tdep.c (push_arguments, ran_out_of_registers_for_arguments):
	Likewise.
	* value.h (value_arg_coerce):  Remove declaration.  (It's now static.)

	* valops.c (value_cast):  Do COERCE_VARYING_ARRAY after COERCE_REF.

	* symtab.c (add_param_to_type):  Remove (commented-out) function,
	since that functionality has been re-written.
	* coffread.c:  Remove commented-out add_param_to_type support.
	* mdebugread.c (parse_symbol):  Likewise.
	* stabsread.c (define_symbol):  Likewise.

Sun Feb 12 09:03:47 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* buildsym.c (start_subfile): Set language for f2c like for cfront.

Thu Feb  9 20:20:11 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* op50n-rom.c: Add the control registers.

Thu Feb  9 15:46:39 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* Makefile.in (CLIBS): Add $(LIBIBERTY) before, in addition to
	after, any host/target/native libraries.
	* dcache.c (insque, remque): Remove declarations.
	* gdbtypes.h (type_code): Remove trailing comma.

	From Peter Schauer:
	* xcoffread.c (read_xcoff_symtab) [C_HIDEXT]: Move #ifdef
	STATIC_NODEBUG_VARS inside case.

Thu Feb  9 07:43:41 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* config/sparc/tm-sun4sol2.h: Define STATIC_TRANSFORM_NAME.
	* partial-stab.h: Call it.
	* stabsread.c (define_symbol) [STATIC_TRANSFORM_NAME]: Call
	STATIC_TRANSFORM_NAME to get the name and use minimal symbols to
	get the address.
	* sparc-tdep.c (solaris_static_transform_name): New function.

Thu Feb  9 12:09:09 1995  Jeff Law  (law@snake.cs.utah.edu)

	* somread.c (som_symtab_read): Handle dynamic relocation for both
	text and data symbols.
	(som_symfile_offsets): If objfile is a shared library, then get
	text and data offsets from the shared library structures.
	* somsolib.c (som_solib_add): Copy the bfd pointer from the
	objfile rather than reopening the file again.
	(som_solib_section_offsets): New function.
	* somsolib.h (som_solib_section_offsets): Declare.

Wed Feb  8 20:32:18 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* config/sparc/tm-sun4sol2.h, dbxread.c: Rename
	N_SO_ADDRESS_MAYBE_MISSING to SOFUN_ADDRESS_MAYBE_MISSING.
	* symtab.h (minimal_symbol) [SOFUN_ADDRESS_MAYBE_MISSING]: Add
	filename field.
	* elfread.c (record_minimal_symbol_and_info),
	minsyms.c, symtab.h (prim_record_minimal_symbol_and_info): Return
	newly created symbol.
	* elfread.c (elf_symtab_read) [SOFUN_ADDRESS_MAYBE_MISSING]:
	Set filename field of minimal symbol.
	* symmisc.c (dump_msymbols) [SOFUN_ADDRESS_MAYBE_MISSING]:
	Print filename field.
	* minsyms.c, symtab.h (lookup_minimal_symbol): New arg sfile.
	* symm-tdep.c, somsolib.c, hppa-tdep.c, c-exp.y, f-exp.y,
	m2-exp.y, nindy-tdep.c, m3-nat.c, irix5-nat.c, hpread.c,
	os9kread.c, breakpoint.c, alpha-tdep.c, valops.c, symtab.c,
	printcmd.c, dbxread.c: Change callers to pass NULL for sfile.
	* dbxread.c (process_one_symbol) [SOFUN_ADDRESS_MAYBE_MISSING]:
	Find address of function from minimal symbols.
	* partial-stab.h, case 'f', 'F': Call find_stab_function_addr
	instead of getting pst->textlow from the stab.
	* minsyms.c (find_stab_function_addr): New function.

Wed Feb  8 19:19:56 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* monitor.c: Fix so all the output shows up in the GUI command
	window.

Mon Feb  6 18:50:59 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* i386-tdep.c (_initialize_i386_tdep): Put void decl on separate
        line, so init.c generation works correctly.
	* arc-tdep.c (_initialize_arc_tdep): Ditto.

Mon Feb  6 14:44:36 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* config/mips/idt.mt: Add support for the lsi33k target.
	* config/sparc/sun4sol2.mh: Add support for ser-tcp.
	* array-rom.c: Finish the rest of the support commands needed by
	GDB.
	* mips-tdep.c: Add LSI33k register names and processor type.

Sat Feb  4 13:29:52 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* config/m68k/est.mt (TDEPFILES): Remove m68k-pinsn.o.

Fri Feb  3 11:19:20 1995  Stu Grossman  (grossman@cygnus.com)

	* core.c (dis_asm_read_memory), defs.h, top.c: Get rid of
	dis_asm_read_memory_hook.  We can now call the disassemblers
	directly and have no need for this hook anymore.
	* defs.h, printcmd.c: Make print_insn be static.

	* ser-go32.c (dos_comisr):  Make this 8 bit clean.
	* (dos_open dos_close):  Allow multiple opens to the same device.
	Use a ref count to prevent unwanted deallocations.
	* sparcl-tdep.c:  Put #ifdefs around all socket stuff to make GO32
	happy.
	* (sparclite_ops):  Switch to download_stratum.
	* target.h (enum strata):  Move download_stratum before
	process_stratum so that executable targets get pushed on top of
	download targets.

Thu Feb  2 19:02:45 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* array-rom.c: Remove the non GDB remote protocol config stuff.

	* monitor.c: All reading/writing functions for memory and
	registers work.

Thu Feb  2 16:11:04 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* config/arc/arc.mt: new target makefile for arc processor.
	* config/arc/tm-arc.h: new target header for arc processor.
	* config/arc/go32.mh: new go32 host makefile for arc processor.
	* config/arc/xm-go32.h: new go32 host header for arc processor.
	* arc-tdep.c: new target dependent codes for arc processor.

Thu Feb  2 13:58:40 1995  Stan Shebs  <shebs@andros.cygnus.com>

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

Thu Feb  2 07:27:56 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	Fix compiler warnings:
	* remote-e7000.c (printf_e7000debug): Rename to puts_e7000debug
	and have the caller do the sprintf.  Saves us from varargs hell.
	(normal): Define before use.
	* remote-e7000.c: Reindent a few things.

Wed Feb  1 21:16:42 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* f-typeprint.c (f_type_print_varspec_suffix):  Print array index
	ranges in reverse order.
	* f-valprint.c (f77_create_arrayprint_offset_tbl):  Fix calculation.

	* eval.c (evaluate_subscript):  Don't call value_subscript, since
	it adjusts for lower bound and enforces ranges.

	* expression.h (exp_code):  Remove MULTI_F77_SUBSCRIPT, OP_F77_SUBSTR.
	* eval.c, parse.c:  Removed uses of removed opcodes.
	* eval.c (evaluate_subexp):  Clean up handling of
	OP_UNDETERMINED_ARGLIST (no backtracking, more general).

	* f-valprint.c (f_val_print):  Print TYPE_CODE_STRING using
	LA_PRINT_STRING, and not val_print_string (which reads from inferior).

	* ch-lang.c (chill_is_varying_struct), ch-lang.h:  Remve function
	duplicate function made redundant by chill_varying_type.

	Re-write of f77 string and complex number support:

	* language.h (struct language_defn):  New fields string_lower_bound
	and string_char_type.
	* c-lang.c (c_language_defn, cplus_language_defn, asm_language_defn),
	language.c (unknown_language_defn, auto_language_defn,
	local_language_defn), m2-lang.c (m2_language_defn), f-lang.c
	(f_language_defn), ch-lang.c (chill_language_defn):  Set new fields.
	* gdbtypes.c (create_string_type):  Use new string_char_type field.
	* valops.c (value_string):  Use new string_lower_bound field.

	* defs.h (TARGET_COMPLEX_BIT, TARGET_DOUBLE_COMPLEX_BIT):  Removed.
	* f-lang.c (f_create_fundamental_type, _initialize_f_language),
	m2-lang.c (m2_create_fundamental_type),
	gdbtypes.c (_initialize_gdbtypes):  Set TYPE_TARGET_TYPE of complex
	types.  Set their TYPE_CODEs to TYPE_CODE_COMPLEX.
	* mdebugread.c (mdebug_type_complex, mdebug_type_double_complex):
	Removed.  Use builtin_type_complex and builtin_type_double_complex.

	* gdbtypes.h (enum type_code):  Removed TYPE_CODE_LITERAL_STRING
	and TYPE_CODE_LITERAL_COMPLEX.
	* c-typeprint.c, f-typeprint.c, f-valprint.c, eval.c:  Removed uses of
	TYPE_CODE_LITERAL_STRING and TYPE_CODE_LITERAL_COMPLEX.
	* gdbtypes.c, gdbtypes.h (f77_create_literal_complex_type,
	f77_create_literal_string_type):  Removed.
	* value.h (VALUE_LITERAL_DATA, VALUE_SUBSTRING_MEMADDR,
	VALUE_SUBSTRING_MYADDR):  Removed.

	* expression.h (enum exp_opcode):  Rename OP_F77_LITERAL_COMPLEX to
	OP_COMPLEX.
	* parse.c:  Update accordingly.

	* f-valprint.c (f77_print_cmplx):  Removed.
	(f_val_print case TYPE_CODE_COMPLEX):  Re-write to use print_floating.

	* f-exp.y (STRING_LITERAL):  Use OP_STRING instead of OP_ARRAY.
	* eval.c (evaluate_subexp):  For case OP_ARRAY, don't call
	f77_value_literal_string.
	* valops.c, value.h (f77_value_literal_string, f77_value_substring,
	f77_assign_from_literal_string, f77_assign_from_literal_complex):
	Removed.
	(value_assign):  No longer need to handle literal types.
	* valops.c (f77_value_literal_complex), value.h:  Re-written and
	renamed to value_literal_complex.  Last arg is now a (complex) type.
	* valops.c (f77_cast_into_complex):  Re-written and renamed to
	cast_into_complex.
	* eval.c (evaluate_subexp):  Update accordingly.

	* ch-valprint.c (chill_val_print):  On TYPE_CODE_STRING, don't
	print address for non-'s'-formats.
	* ch-typeprint.c, ch-valprint.c:  Use chill_varying_type instead
	of chill_is_varying_struct.

Wed Feb  1 13:27:33 1995  Stan Shebs  <shebs@andros.cygnus.com>

	gcc -Wall lint.
	* alpha-tdep.c (alpha_in_lenient_prologue): Comment out.
	(after_prologue): Remove unused local b.
	* procfs.c (thread.h): Include.
	(pr_flag_table, pr_why_table, faults_table, siginfo_table): Use
	nested braces in initializer.
	* top.c (initialize_targets, initialize_utils): Declare.
	(locate_arg, insert_args): Add parens around tested assignments.
	* remote-utils.c (sr_scan_args): Remove decl of strtol.
	* remote.c (thread.h): Include.
	(remote_wait): Remove unused local p2.
	* sparc-tdep.c (fill_gregset, fill_fpregset): Remove decls of
	registers array.

	defs.h (stdlib.h): Include.
	(exit, perror, atoi, qsort, memcpy, memcmp): Don't declare.
	(fclose, atof, malloc, realloc, free, strchr, strrchr, strstr,
	strtok,	strerror): Don't specify parameter types in declaration.

Wed Feb  1 12:23:57 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* ch-exp.y (value_string_element, string_primitive_value,
	start_element, left_element, right_element, slice_size,
	lower_element, upper_element, first_element):  Removed.
	(value_string_slice, value_array_slice):  Replaced by ...
	(slice):  New non-terminal, with working slice support.
	(primitive_value_lparen, rparen):  New non-terminals.
	(maybe_tuple_elements):  New non-terminal, to allow empty tuples.
	(idtokentab):  Added "up".

	* value.h (COERCE_VARYING_ARRAY):  New macro.
	* valarith.c (value_subscript):  Use it.
	* valops.c (value_cast):  Likewise.  Also, do nothing if already
	correct type, and allow converting from/to range to/from scalar.

	* valops.c, value.h (varying_to_slice, value_slice):  New functions.
	* eval.c (OP_ARRAY):  Add cast for array element.
	* expression.h (TERNOP_SLICE, TERNOP_SLICE_COUNT):  New exp_opcodes.
	* valops.c (chill_varying_type):  Moved function frp, here ...
	* gdbtypes.c (chill_varying_type), gdbtypes.h: ... to here.
	* parse.c (length_of_subexp, prefixify_subexp):  Add support
	for TERNOP_SLICE, TERNOP_SLICE_COUNT.
	* expprint.c (print_subexp, dump_expression):  Likewise.
	* eval.c (evaluate_subexp):  Likewise.

	* eval.c (evaluate_subexp case MULTI_SUBSCRIPT):  Don't call
	value_x_binop on a Chill varying string.

Tue Jan 31 13:51:53 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config/m68k/monitor.mt,
	config/pa/{hppabsd.mt,hppahpux.mt,hppaosf.mt,hppapro.mt}: Put
	depfiles in TDEPFILES not REMOTE_O.

Tue Jan 31 11:14:44 1995  Steve Chamberlain  <sac@splat>

	From nigel@algor.co.uk.
	* ser-go32.c (dos_close): Don't crash if scb null.
	(dos_sendbreak): New function.
	(dos_ops): Point to dos_sendbreak.
	(dos_info): Calculate COM number correctly.

Tue Jan 31 09:40:11 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* xcoffread.c (process_xcoff_symbol): Use new variables
	func_symbol_type and var_symbol_type as type of functions and
	variables which don't have any stabs associated with them.
	Reindent most of function.
	(_initialize_xcoffread): Initialize *_symbol_type.

	* xcoffread.c (read_xcoff_symtab): Reindent most of function.
	Put C_HIDEXT symbols in the minimal symbols, rather than ignoring
	them (this part commented out as I didn't quite get it to work).
	(cs_to_section, find_targ_sec): New functions, to support above code.
	* xcoffread.c (RECORD_MINIMAL_SYMBOL): Only skip '.' if it is
	actually present.

Mon Jan 30 17:34:24 1995  Stu Grossman  (grossman@cygnus.com)
	* sparcl-tdep.c:  Add `sparclite' target for doing serial and udp
	downloads to SPARClite demo boards.

Sun Jan 29 09:43:22 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* remote.c, remote-pa.c: Remove #if 0'd icache code.  It has had
	no hope of working as is for a long time (in particular, shebs' 27
	Jan 95 change confuses the issue further--target_read_memory and
	xfer_core_file do *not* do the same thing in this context).
	Revise comment.

Sat Jan 28 13:40:46 1995 Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* elfread.c (elf_symtab_read):  Do not test BSF_GLOBAL for
	procedure linkage table symbols, it is no longer set due to the
	Jan 6 BFD change in bfd/elfcode.h.

Fri Jan 27 17:08:06 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* top.c (use_windows): Clarify comments.

	* convex-tdep.c (xfer_core_file): Comment out.
	* config/convex/tm-convex.h (XFER_CORE_FILE): Remove.
	* remote.c, remote-pa.c (remote_fetch_word): Change xfer_core_file
        references to target_read_memory.
	* gdbcore.h (xfer_core_file, core_open, core_detach): Remove
	declarations.
	* corelow.c (core_open, core_detach): Make static.

	* arm-tdep.c: Make it compile.
	(exec_file_command, xfer_core_file): Comment out.
	(arm_print_insn): Remove, now in libopcodes.
	(skip_prologue): Comment out most of body.
	(arm_frame_find_saved_regs): Move here from tm-arm.h.
	(_initialize_arm_tdep): Set tm_print_insn.
	* config/arm/tm-arm.h: Remove old refs to first_object_file_end.
	(XFER_CORE_FILE): Remove.
	(FRAME_FIND_SAVED_REGS): Call arm_frame_find_saved_regs.
	
Fri Jan 27 08:48:28 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (CHILL_LIB): Define as in testsuite/Makefile.in.

Thu Jan 26 18:24:41 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* symtab.c (find_pc_line): When subtracting one to get a line
	number, make sure not to end up with zero.

	* remote-vx.c: Revert all of Kung's changes of 16 Jan.  The
	problems with those changes were (a) the file didn't compile, (b)
	they changed memset to bzero--memset is correct, (c) they took out
	code to deal with boards lacking floating point, (d) who knows
	what I didn't discover in a quick read.

Thu Jan 26 17:32:54 1995  Stu Grossman  (grossman@cygnus.com)

	* sparcl-tdep.c:  Clean up formatting and indentation.

Thu Jan 26 10:49:59 1995  Steve Chamberlain  <sac@splat>

	* remote-hms.c (hms_ops): Change ref of hr_load_image
	to gr_load_image.
	(dcache_flush, dcache_hit, dcache_value, dcache_fetch,
	dcache_poke, dcache_init):  Deleted.
	(hms_open, hms_resume, hms_fetch_word, hms_store_word):
	Use dcache routines provided by remote-util.h

Thu Jan 26 12:08:31 1995  Michael Meissner  <meissner@cygnus.com>

	* configure.in: Add support for powerpc-*-eabi.

	* powerpc/tm-ppc-eabi.h, powerpc/pcc-eabi.mt: New files for
	PowerPC support.

Wed Jan 25 18:13:14 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* language.h (struct language_defn):  New field c_style_arrays.
	* language.c (unknown_language_defn, auto_language_defn,
	local_language_defn), c-lang.c (c_language_defn, cplus_language_defn,
	asm_language_defn):  Set c_style_arrays to true.
	* m2-lang.c (m2_language_defn), ch-lang.c (chill_language_defn),
	f-lang.c (f_language_defn):  Set c_style_arrays to false.
	* valops.c (value_string):  If c_style_array is not set,
	allocate string in gdb (not inferior) using allocate_value.

	* value.h (COERCE_ARRAY), valops.c (value_addr, value_arg_coerce):
	Only call value_coerce_array if current_language->c_style_arrays.
	* values.c:  Add #include "language.h".  (Needed for COERCE_ARRAY.)

	* valops.c (chill_varying_type):  New predicate.
	* valops.c (value_cast):  Support assigning a fixed string or array
	to a variable string/array structure.

	* valarith.c (value_subscripted_rvalue):  Extra parameter lowerbound.
	Check index>=lowerbound, and then add lowerbound to index here,
	instead of in caller.  Generalize to arbitrary lval_types.
	(value_subscript):  Use enhanced value_subscripted_rvalue if
	c_style_arrays is false (and index is in range).


Wed Jan 25 18:13:14 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* eval.c (evaluate_subexp case OP_ARRAY):  Fix calls to memset:
	TYPE_LENGTH is length in bytes, not bits.

Wed Jan 25 08:19:35 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* infrun.c (proceed): Flush stdout before resuming inferior.
	* infcmd.c (step_1), annotate.c (annotate_starting):
	Don't bother to flush here.

Wed Jan 25 01:11:21 1995  Jeff Law  (law@snake.cs.utah.edu)

	* hpread.c (hpread_process_one_debug_symbol): Fix lines garbled
	by an ill-advised global search and replace.

Mon Jan 23 13:11:46 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	Add support for Chill bitstring literals (e.h. H'FF00').
	* ch-exp.y (match_bitstring_literal):  Fix for proper endianness.
	* expprint.c (print_subexp):  Don't call error on OP_BITSTRING,
	just print B'<unimlemented>'.
	* gdbtypes.c (create_set_type):  Fix bug in length calculation.
	* valops.c, value.h (value_bitstring):  New function.
	* eval.c (evaluate_subexp):  Implement support for OP_BITSTRING.

	* ch-typeprint.c (chill_type_print_base): For TYPE_CODE_FUNC,
	check that return type is non-void, and print in proper Chill syntax.

Mon Jan 23 12:20:34 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* Makefile.in: Remove references to remote-mon.c.
	* remote-mon.c: remove. Replaced by rom68k-rom.c.
	* rom68k-rom.c: Support for Rom68k monitor.

Mon Jan 23 10:50:57 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* Makefile.in (CHILL_FOR_TARGET): Update -L argument to point to
	gcc/ch/runtime not chillrt, since that is where the chill runtime
	lives now.

Mon Jan 23 00:06:57 1995  Steve Chamberlain  <sac@splat>

	* remote-hms.c (hms_load): Delete.
	(target_ops): Use hr_load_image.

	* remote-e7000.c, remote-z8k.c, remote-nindy.c (target_ops):
        Define memory_insert/remove_breakpoint.
	* xm-go32.h: Remove redundant SIGs.
	
Thu Jan 19 20:26:58 1995  Steve Chamberlain  <sac@splat>

	* ser-go32.c: Rewritten by nigel@algor.co.uk.

Fri Jan 20 15:23:55 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* expression.h (OP_LABELED):  New operator, for Chill
	labeled structre tuples.
	* ch-exp.y (tuple_element, named_record_element, tuple_elements):
	New non-terminals, to handle labeled structure tuples.
	(tuple):  Re-define using tuple_elements.
	* eval.c (evaluate_labeled_field_init):  New function, to handle
	initialization of structure fields, possibly using OP_LABELED.
	(evaluate_subexp):  Use it.
	* expprint.c (print_subexp case):  For OP_ARRAY, use Chill syntax
	for Chill.  Handled OP_LABELED.
	* parse.c (length_of_subexp, prefixify_subexp):  Handle OP_LABELED.

	* eval.c (evaluate_subexp):  Handle Chill Powerset tuples.
	* valarith.c (value_bit_index):  Just treat bitstring as represented
	by an array of bytes.  Alignment is handled by compiler. 

Wed Jan 18 19:00:29 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* h8300-tdep.c (gdb_print_insn_h8300): Fix typo (&info -> info).
	* sh-tdep.c (gdb_print_insn_sh): Ditto.

Wed Jan 18 11:25:43 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* remote-os9k.c (rombug_open): Fix a bug in exception handling
	command.
	* remote-os9k.c (rombug_write_inferior_memory): reset buffer after
	write.

Tue Jan 17 09:48:38 1995  Jim Kingdon  <kingdon@lioth.cygnus.com>

	* parse.c (_initialize_parse): Improve wording of names of
	msym_*_symbol_type.

Tue Jan 17 14:00:58 1995  Ian Lance Taylor  <ian@sanguine.cygnus.com>

	* config/mips/tm-mips.h (enum mips_fpu_type): New enum.
	(mips_fpu): Change type to enum mips_fpu_type.
	(FIX_CALL_DUMMY): Handle mips_fpu == MIPS_FPU_SINGLE.
	* mips-tdep.c (mips_fpu): Change type to enum mips_fpu_type.
	Don't initialize.
	(mips_fpu_string): New static variable.
	(mips_push_dummy_frame): Handle mips_fpu == MIPS_FPU_SINGLE.
	(mips_pop_frame): Likewise.
	(mips_extract_return_value): Likewise.
	(mips_store_return_value): Likewise.
	(mips_set_fpu_command): New static function.
	(mips_show_fpu_command): New static function.
	(_initialize_mips_tdep): Change handling of set/show mipsfpu.

Tue Jan 17 09:48:38 1995  Jim Kingdon  <kingdon@lioth.cygnus.com>

	* a29k-tdep.c (gdb_print_insn_a29k): Fix typo (&info -> info).

	* parse.c (write_exp_msymbol): Use new variables
	msym_*_symbol_type as type of msymbol expression.
	(_initialize_parse): Initialize them.

Mon Jan 16 18:11:03 1995  Stan Shebs  <shebs@andros.cygnus.com>

	General cleanup and simplication of disassembler interface.
	* a29k-pinsn.c, arm-pinsn.c, convex-pinsn.c, gould-pinsn.c,
        hppa-pinsn.c, i386-pinsn.c, i960-pinsn.c, m68k-pinsn.c,
        m88k-pinsn.c, mips-pinsn.c, ns32k-pinsn.c, pyr-pinsn.c,
        rs6000-pinsn.c, sparc-pinsn.c, tahoe-pinsn.c, vax-pinsn.c: Remove.
	* gould-tdep.c, ns32k-tdep.c, tahoe-tdep.c, vax-tdep.c: New files,
	had been -pinsn.c files.
	* Makefile.in (ALLDEPFILES): Remove removed files.
	(a29k-pinsn.o, arm-pinsn.o, convex-pinsn.o, gould-pinsn.o,
        hppa-pinsn.o, i386-pinsn.o, i960-pinsn.o, m68k-pinsn.o,
        m88k-pinsn.o, mips-pinsn.o, ns32k-pinsn.o, pyr-pinsn.o,
        rs6000-pinsn.o, sparc-pinsn.o, tahoe-pinsn.o, vax-pinsn.o):
        Remove compile actions.
	* arm-tdep.o, gould-tdep.o, ns32k-tdep.o, tahoe-tdep.o,
	vax-tdep.o: Add compile actions.
	* defs.h (tm_print_insn): New global.
	* a29k-tdep.c (gdb_print_insn_a29k): New function.
	(_initialize_a29k_tdep): Rename from _initialize_29k,
	set tm_print_insn.
	* alpha-tdep.c (print_insn): Remove.
	(_initialize_alpha_tdep): Set tm_print_insn.
	* arm-tdep.c (arm_print_insn): New function, was print_insn
	in arm-pinsn.c.
	* convex-tdep.c (convex_print_insn): New function, was print_insn
	in convex-pinsn.c.
	* h8300-tdep.c (print_insn): Remove.
	(gdb_print_insn_h8300): New function.
	(_initialize_h8300_tdep): New function.
	* h8500-tdep.c (print_insn): Remove.
	(_initialize_h8500_tdep): New function.
	* hppa-tdep.c (_initialize_hppa_tdep): Set tm_print_insn.
	* i386-tdep.c (_initialize_i386_tdep): New function.
	* i960-tdep.c (mem, next_insn): New functions, were in
	i960-pinsn.c.
	(_initialize_i960_tdep): Set tm_print_insn.
	* m68k-tdep.c (_initialize_m68k_tdep): New function.
	* m88k-tdep.c (_initialize_m88k_tdep): New function.
	* mips-tdep.c (gdb_print_insn_mips): New function.
	(_initialize_mips_tdep): Set tm_print_insn.
	* pyr-tdep.c (pyr_print_insn): New function, was print_insn
	in pyr-pinsn.c.
	* rs6000-tdep.c (_initialize_rs6000_tdep): New function.
	* sh-tdep.c (print_insn): Remove.
	(gdb_print_insn_sh): New function.
	(_initialize_sh_tdep): Set tm_print_insn.
	* sparc-tdep.c (_initialize_sparc_tdep): New function.
	* w65-tdep.c (print_insn): Remove.
	(_initialize_w65_tdep): New function.
	* z8k-tdep.c (print_insn): Remove.
	(gdb_print_insn_z8k): New function.
	(_initialize_z8k_tdep): Set tm_print_insn.
	* printcmd.c (print_insn): New function, generic disassembler.
	* config/*/*.mt (TDEPFILES): Remove refs to *-pinsn.o.

Mon Jan 16 15:43:29 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* Makefile.in: add new files remote-vx29k.c, config/a29k/tm-vx29k.h,
	and config/a29k/vx29k.mt.
	* configure.in: add new configuration a29k-*-vxworks.
	* remote-vx29k.c: new file merged from WRS.
	* remote-vx.c: merge changes from WRS.
	* config/a29k/vx29k.mt: new file for new configuration.
	* config/a29k/tm-vx29k.h: new header file for newconfiguration.

Sun Jan 15 14:36:19 1995  Steve Chamberlain  <sac@splat>

	* breakpoint.h (disable_breakpoint, enable_breakpoint):
	New declarations.
	(enum bpdisp): Change name of 'delete' member to 'del'.
	(struct bpstat): Changed name to 'bpstats'.
	* breakpoint.c (disable_breakpoint, enable_breakpoint,
	breakpoint_chain): Made globally visible.
	(bpstat_stop_status): Use new name for bpstat.
	(break_command_1, watch_command_1, catch_command_1,
	breakpoint_auto_delete, denable_delete_breakpoint): Use 'del'
	instead of 'delete'.
	(set_breakpoint_sal): New function.
	* defs.h (registers_changed_hook): New declaration.
	* infcmd.c (run_stack_dummy): 'delete' is now 'del'.
	* inflow.c (new_tty): Treat WIN32 in same way as __GO32__	
	* main.c (main): Don't scan options when in WIN32 and exit
	without entering main loop.
	* m2-exp.y (m2_elx): Member 'class' is now 'aclass'.
	* symtab.h (struct symbol, struct partial_symbol): Changed name of
	member 'class' to 'aclass'. 
	(SYMBOL_CLASS, PSYMBOL_CLASS): Reflect change.
	* top.c (registers_changed_hook): New definition.
	* utils.c (quit, notice_quit, initialize_utils): Treate WIN32
	in same way as __GO32__.
	* value.h (c_typedef_print): Rename 'new' argument.

	* w65-tdep.c, config/tm-w65.h, config/w65.mt: New files.
	* configure.in: Suppprt for w65,


Sat Jan 14 11:18:11 1995  Jim Kingdon  <kingdon@lioth.cygnus.com>

	* infcmd.c (signal_command): For "signal 0", pass (CORE_ADDR)-1,
	not stop_pc, to proceed.

	* eval.c (evaluate_subexp): Clear expect_type except for C++ and CHILL.

Fri Jan 13 17:52:57 1995  Jim Kingdon  <kingdon@lioth.cygnus.com>

	* infcmd.c (signal_command): Accept "signal 0"; the change to not
	accept it was accidental.  "handle 0" and "info signal 0" remain
	illegal, though.

Fri Jan 13 15:19:01 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* Makefile.in (all): Don't make libgdb-files.
	(libgdb): New action, makes libgdb-files.

Thu Jan 12 21:23:25 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* stabsread.c (read_enum_type):  When pending enum symbols are
	put into the enum type, they must be inserted in "backwards
	order, in case we've overflowed a struct pending buffer.


Thu Jan 12 09:33:24 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* README:  Add note about SPARCworks cc release 3.0 and higher.

	Add procfs support for Alpha OSF/1-2.x.
	* config/alpha/nm-osf.h:  Renamed from nm-alpha.h, generic
	OSF/1 native support.
	* config/alpha/alpha-osf1.mh (NAT_FILE):  Changed accordingly.
	(MUNCH_DEFINE):  Removed.
	* config/alpha/alpha-osf2.mh, config/alpha/nm-osf2.h:  New files
	for procfs support.
	* configure.in (alpha-dec-osf*):  Use alpha-osf2.mh for OSF/1
	release 2.x and higher, else alpha-osf1.mh, as the procfs support
	in release 1.x is incomplete.
	* Makefile.in (ALLCONFIG):  Add config/alpha/alpha-osf2.mh.
	* alpha-nat.c (supply_gregset, fill_gregset, supply_fpgregset,
	fill_fpgregset):  New routines for procfs support.
	* inftarg.c (_initialize_inftarg):  Don't add ptrace support
	if we have an optional procfs and /proc is accessible.
	* procfs.c:  Include sys/fault.h and sys/syscall.h before
	including sys/procfs.h.
	(unconditionally_kill_inferior):  If PROCFS_NEED_PIOCSSIG_FOR_KILL
	is defined, additionally perform a PIOCSSIG to really terminate
	the inferior.
	(create_procinfo):  Always return a result.
	(create_procinfo, do_attach):  Don't trace T_IFAULT faults if
	PROCFS_DONT_TRACE_IFAULT is defined.
	(procfs_init_inferior):  Use START_INFERIOR_TRAPS_EXPECTED as
	argument to startup_inferior if it is defined.
	(proc_set_exec_trap):  If PIOCSSPCACT is defined, use it instead
	of tracing exits from exec system calls. Needed for the user level
	loader under Alpha OSF/1.
	(do_detach):  Clear any pending signal if we want to detach from
	a process without a signal.
	(set_proc_siginfo):  If PROCFS_DONT_PIOCSSIG_CURSIG is defined,
	don't issue a PIOCSSIG if pr_cursig already contains the signal we
	intend to set.
	(info_proc_signals):  If PROCFS_SIGPEND_OFFSET is defined, the
	pending signals are numbered from 1 instead of 0.
	(info_proc_mappings):  Increase size of output format for addresses
	if BFD_HOST_64_BIT is defined.
	(procfs_stop):  Renamed from child_stop.
	(_initialize_procfs):  Don't add procfs support if we have an
	optional procfs and /proc is not accessible.


Wed Jan 11 17:53:26 1995  Rob Savoye  <rob@darkstar.cygnus.com>

	* array-rom.c: Add support for most commands.
	
	* monitor.c: Add GDB remote protocol for the hybrid environment on
	the Array board. 

Wed Jan 11 00:44:01 1995  Jeff Law  (law@snake.cs.utah.edu)

	* command.c (show_user_1): Use print_command_line to show a user
	defined command (including control structures).

	* top.c (init_main): Change documentation for user defined
	commands to indicate they may accept up to ten arguments.

Tue Jan 10 16:22:41 1995  Jim Kingdon  <kingdon@lioth.cygnus.com>

	* mips-tdep.c (mips_skip_prologue): Accept or as well as addu for
	`move $s8, $sp' instruction.

Sun Jan  8 12:45:34 1995  Jim Kingdon  <kingdon@deneb.cygnus.com>

	* target.c, target.h (target_signal_from_command): New function.
	* infrun.c (handle_command, signals_info), infcmd.c
	(signal_command): Use it.
	* infrun.c, infcmd.c: Update docstrings for these commands.

	* target.h (enum target_signal), target.c (signals), target.c
	(target_signal_from_host, target_signal_to_host): Add
	TARGET_SIGNAL_REALTIME_* and TARGET_SIGNAL_PRIO for lynx.
	* config/tm-lynx.h: Define signal numbers for realtime events.

Sat Jan  7 07:23:53 1995  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* dbxread.c (process_one_symbol):  Handle N_FUN symbols
	for Sun acc 3.0 under SunOS4.

	Changes to improve handling of runtime common symbols
	under SunOS4.
	* minsyms.c (get_symbol_leading_char):  New routine to determine
	the leading symbol character for an objfile.
	(prim_record_minimal_symbol_and_info, install_minimal_symbols):
	Use it.
	* objfiles.h (rt_common_objfile):  New global, points to objfile
	containing the runtime common minimal symbols.
	* objfiles.c (free_objfile):  Mark rt_common_objfile as
	unallocated before freeing it.
	* solib.c (allocate_rt_common_objfile):  New routine to allocate
	an objfile for the runtime common minimal symbols.
	(solib_add_common_symbols):  Allocate an objfile for the runtime
	common symbols if necessary and put common symbols into it.
	Clean up code and comments.
	(solib_add, special_symbol_handling):  Cleanup comments regarding
	runtime common symbols.
	* stabsread.c (scan_file_globals_1):  New routine, contains
	old scan_file_globals code. Checks if there are any unresolved
	global symbols before starting the expensive minimal symbol table
	search.
	(scan_file_globals):  Now calls scan_file_globals_1 for the passed
	objfile and eventually for the runtime common objfile. Complains
	about any unresolved global symbols and removes them from the
	global symbol chain to avoid dangling pointers into the symbol
	table if the symbol table is reread.

Thu Jan  5 17:38:29 1995  Stu Grossman  (grossman@cygnus.com)

	* Makefile.in (install_only uninstall):  Indent for clarity.

	* core.c (dis_asm_read_memory):  Add call to
	dis_asm_read_memory_hook to provide alternate way for disassembler
	to read memory.

	* defs.h:  Protect from multiple inclusion.  Add decl for
	dis_asm_read_memory_hook.

	* top.c:  Make window startup be the default.
	* Add dis_asm_read_memory_hook.


Thu Jan  5 01:16:40 1995  Jeff Law  (law@snake.cs.utah.edu)

	* stabsread.c (define_symbol): Handle `a' symbol type used for
	reference parameter passed in a register.


Wed Jan  4 12:27:29 1995  Kung Hsu  <kung@mexican.cygnus.com>

	* defs.h: move include tm.h up, so that the type LONGEST can
	also based on the target requirement to determine. In this case
	target mips64.

	* remote-os9k.c (rombug_open): catch exception e in rombug.
	* remote-os9k.c (rombug_wait): print message before register display
	from rombug.

Wed Jan  4 09:18:27 1995  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* top.c (locate_arg): Call strchr not index.

Tue Jan  3 16:52:03 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* ch-exp.y (literal):  Recognize NULL.
	(tuple):  Parse simple unlabelled tuples.
	* eval.c (evaluate_subexp case OP_ARRAY):  Use expect_type to
	evaluate brace-initializer-expressions depending on context.
	(evaluate_subexp case UNOP_CAST):  Pass the target type as
	expected type when evaluating the expression.

	* ch-typeprint.c (chill_type_print_base):  Get names of PTR and
	BOOL from TYPE_NAME.
	* ch-valprint.c (chill_print_type_scalar):  New function, to handle
	TYPE_CODE_RANGE better than print_type_scalar does.
	(chill_val_print_array_elements):  Use above new function.

Mon Jan  2 15:02:51 1995  Stan Shebs  <shebs@andros.cygnus.com>

	* remote-udi.c (udi_load): Tell symbol_file_add that the
	program being loaded is the main program.

For older changes see ChangeLog-1994

Local Variables:
mode: indented-text
left-margin: 8
fill-column: 74
version-control: never
End:
