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.
	* doc/gdbint.texinfo (GETENV_PROVIDED, FCLOSE_PROVIDED): Document.
	* 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.
	* testsuite/gdb.base/break.exp:  Lots of cleanups.  Use gdb_test
	more thoroughly.

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:
