2018-10-30  Joel Sherrill <joel@rtems.org>

	* configure.ac: Remove the Cygwin-specific libtermcap.a hack
	and use the standard logic to determine which library to use.
	* configure: Regenerate.

2017-09-06  John Baldwin  <jhb@FreeBSD.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* config.in, configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-10  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-09  Mike Frysinger  <vapier@gentoo.org>

	* config.in, configure: Regenerate.

2016-01-06  Mike Frysinger  <vapier@gentoo.org>

	* interf.c (sim_open): Mark argv const.
	(sim_create_inferior): Mark argv and env const.

2016-01-04  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2016-01-03  Mike Frysinger  <vapier@gentoo.org>

	* interf.c (sim_open): Replace while loop with a call to countargv.

2016-01-03  Mike Frysinger  <vapier@gentoo.org>

	* configure.ac (SIM_AC_OPTION_HOSTENDIAN): Delete.
	* configure: Regenerate.
	* exec.c (fpexec): Rename CURRENT_HOST_BYTE_ORDER to
	HOST_BYTE_ORDER.
	* sis.h (WITH_HOST_BYTE_ORDER): Rename to ...
	(HOST_BYTE_ORDER): ... this.

2016-01-02  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2015-12-26  Mike Frysinger  <vapier@gentoo.org>

	* config.in, configure: Regenerate.

2015-06-23  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2015-06-12  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2015-06-12  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2015-05-17  Mike Frysinger  <vapier@gentoo.org>

	* erc32.c: Re-add file overview & author info.
	* exec.c, float.c, func.c, help.c, interf.c, sis.c: Likewise.

2015-05-08  Joel Brobecker  <brobecker@adacore.com>

	* configure.ac: Add copyright header.
	* erc32.c: Change copyright holder to FSF.  Reformat.
	* exec.c, float.c, func.c, interf.c, sis.c, sis.h: Likewise.
	* help.c, startsim: Add copyright header.

2015-04-29  Nick Clifton  <nickc@redhat.com>

	PR 18273
	* sis.c (main): Remove unreachable code.

2015-04-24  David Binderman  <dcb314@hotmail.com>
	    Nick Clifton  <nickc@redhat.com>

	PR 18273
	* exec.c (add32): Fix typo in check for overflow.

2015-04-19  Jiri Gaisler  <jiri@gaisler.se>

	* erc32.c (current_target_byte_order): Delete.
	(fetch_bytes): Remove.
	(store_bytes): Remove byte twisting.
	(memory_read, memory_write): Access memory directly.
	(extract_short, extract_short_signed, extract_byte,
	extract_byte_signed): New function for for sub-word LD instructions.
	* exec.c (extract_short, extract_short_signed, extract_byte,
	extract_byte_signed): New functions.
	(dispatch_instruction): Update memory reads.
	* func.c (current_target_byte_order): Delete.
	(get_regi): Delete little endian handling.
	(disp_ctrl, dis_mem): Adjust print-out to new data endian.
	(bfd_load): Delete little endian handling.
	* interf.c (current_target_byte_order): Delete.
	(sim_open): Set dinfo to host endian to get correct disassembly.
	(sim_write, sim_read): Convert endian when gdb reads or writes
	memory.
	* sis.c (main): Set endian.
	* sis.h (EBT): Define.

2015-04-13  Mike Frysinger  <vapier@gentoo.org>

	* configure: Regenerate.

2015-03-31  Mike Frysinger  <vapier@gentoo.org>

	* config.in, configure: Regenerate.

2015-03-28  Jiri Gaisler  <jiri@gaisler.se>

	* func.c (exec_cmd): Fix old style prototype.  Mark cmd const.  Save
	the command in a new cmdsave2 to avoid modifying.
	(bfd_load): Fix old style prototype.  Mark fname const.
	* sis.h (exec_cmd): Mark cmd const.
	(bfd_load): Mark fname const.

2015-03-28  Jiri Gaisler  <jiri@gaisler.se>

	* erc32.c (memory_iread): New function to fetch instructions.
	(memory_read): Print message in verbose mode.
	* interf.c (run_sim): Use memory_iread.
	* sis.c (run_sim): As above.
	* sis.h (memory_iread): New prototype.
	(sregs): Declare.

2015-03-28  Mike Frysinger  <vapier@gentoo.org>

	* erc32.c (mec_read): Delete parenthesis around return statement.
	(mec_write, read_uart, rtc_counter_read, gpt_counter_read, memory_read,
	memory_write, get_mem_ptr, sis_memory_write, sis_memory_read): Likewise.
	* exec.c (sub_cc, add_cc, add32, dispatch_instruction, fpexec, chk_asi,
	execute_trap, check_interrupts): Likewise.
	* float.c (get_accex): Likewise.
	* func.c (batch, limcalc, exec_cmd, disp_fpu, now, wait_for_irq,
	check_bpt, bfd_load, get_time): Likewise.
	* interf.c (run_sim, sim_write, sim_read): Likewise.
	* sis.c (run_sim): Likewise.

2015-03-24  Mike Frysinger  <vapier@gentoo.org>

	* interf.c (sim_set_callbacks, sim_size, sim_trace): Delete.

2015-03-17  Jiri Gaisler  <jiri@gaisler.se>

	* func.c (exec_cmd): Silence compiler warnings when calling system().
	(batch): Replace fgets() with getline().

2015-03-17  Jiri Gaisler  <jiri@gaisler.se>

	* func.c (show_stat): Print simulation time in portable long long
	format.
	* help.c (usage): Update usage help print-out.
	* sis.c (run_sim): Increase debug level with -v. Also print
	simulation time in portable long long format.
	* sis.h: Use stdint.h for portable 32- and 64-bit ints.

2015-03-16  Mike Frysinger  <vapier@gentoo.org>

	* config.in, configure: Regenerate.

2015-03-16  Jiri Gaisler  <jiri@gaisler.se>

	* Makefile.in (end, end.h): Remove target rules.
	(clean): Remove end and end.h.
	(erc32.o, exec.o, float.o, func.o, help.o, interf.o, sis.o): Delete
	rules.
	* configure, config.in: Regenerate.
	* configure.ac: Use SIM_AC_OPTION_HOSTENDIAN
	* end.c: Delete.
	* erc32.c: Remove end.h include.
	* exec.c: Remove end.h include. Use HOST_LITTLE_ENDIAN.
	* func.c, sis.c: Likewise.

2015-03-14  Mike Frysinger  <vapier@gentoo.org>

	* Makefile.in (SIM_RUN_OBJS): Set to sis.o.

2015-03-14  Mike Frysinger  <vapier@gentoo.org>

	* configure.ac (AC_CHECK_HEADERS): Delete.
	* aclocal.m4, configure: Regenerate.

2015-02-22  Jiri Gaisler  <jiri@gaisler.se>

	* Makefile.in: Add include path to readline.h.
	sis.c: Remove locally define readline types.

2015-02-21  Jiri Gaisler  <jiri@gaisler.se>

	* func.c (reset_stat, show_stat): Switch to double in time keeping.
	(get_time): New function to get system time.
	* interf.c (run_sim): Use get_time() for system time.
	* sis.c (run_sim): Likewise.
	* sis.h: Likewise.

2015-02-21  Jiri Gaisler  <jiri@gaisler.se>

	* Makefile.in: Remove unused defines

2015-02-21  Jiri Gaisler  <jiri@gaisler.se>

	* float.c (get_accex, clear_accex, set_fsr): Use functions from fenv.h
	instead of custom assembly.

2015-02-21  Jiri Gaisler  <jiri@gaisler.se>

	* erc32.c (mec_read): Allow simulator memory size to be read
	by application.
	(boot_init): initialize memory and timers if start address is
	not 0.
	* func.c (exe_cmd): Call boot_init if start address not 0.
	* interf.c (run_sim): Likewise.

2015-02-21  Jiri Gaisler  <jiri@gaisler.se>

	* exec.c (init_regs): erc32 has vendor ID 1 and version ID 1 in %psr.

2015-02-21  Jiri Gaisler  <jiri@gaisler.se>

	* func.c (print_insn_sparc_sis): Add helper function for disassembly.
	(disp_ctrl): Use helper function.

2014-08-19  Alan Modra  <amodra@gmail.com>

	* configure: Regenerate.

2014-08-15  Roland McGrath  <mcgrathr@google.com>

	* configure: Regenerate.
	* config.in: Regenerate.

2014-03-10  Mike Frysinger  <vapier@gentoo.org>

	* interf.c (sim_do_command): Add const to cmd.

2014-03-05  Mike Frysinger  <vapier@gentoo.org>

	* interf.c (sim_load): Add const to prog.

2013-10-09  Sergio Durigan Junior  <sergiodj@redhat.com>

	PR sim/16018:
	* float.c (set_fsr): Add missing "break" statements.  Reindent
	code.

2013-09-23  Alan Modra  <amodra@gmail.com>

	* configure: Regenerate.

2013-06-03  Mike Frysinger  <vapier@gentoo.org>

	* aclocal.m4, configure: Regenerate.

2013-03-14  Joel Sherrill <joel.sherrill@oarcorp.com>

	* Makefile.in: Include build directory in search path to find
	config.h

2012-08-16  Nick Clifton  <nickc@redhat.com>

	* end.c: Include config.h before system header files.
	* erc32.c: Likewise.
	* exec.c: Likewise.
	* float.c: Likewise.
	* func.c: Likewise.
	* help.c: Likewise.
	* interf.c: Likewise.

2012-06-15  Joel Brobecker  <brobecker@adacore.com>

	* sys.h: Include "config.h".

2012-06-15  Joel Brobecker  <brobecker@adacore.com>

	* config.in, configure: Regenerate.

2012-05-24  Pedro Alves  <palves@redhat.com>

	PR gdb/7205

	Replace TARGET_SIGNAL_ with GDB_SIGNAL_ throughout.

2012-03-24  Mike Frysinger  <vapier@gentoo.org>

	* aclocal.m4, config.in, configure: Regenerate.

2011-12-31  Mike Frysinger  <vapier@gentoo.org>

	PR sim/9971:
	* configure.ac: Change AC_CHECK_LIB to AC_SEARCH_LIBS to match
	the code in gdb's configure.ac with $TERMCAP.
	* configure: Regenerated.

2011-12-03  Mike Frysinger  <vapier@gentoo.org>

	* aclocal.m4: New file.
	* configure: Regenerate.

2011-10-17  Mike Frysinger  <vapier@gentoo.org>

	* configure.ac: Change include to common/acinclude.m4.

2011-10-17  Mike Frysinger  <vapier@gentoo.org>

	* configure.ac: Change AC_PREREQ to 2.64.  Delete AC_CONFIG_HEADER
	call.  Replace common.m4 include with SIM_AC_COMMON.
	* configure: Regenerate.

2011-06-09  Mike Frysinger  <vapier@gentoo.org>

	* interf.c (sim_open): Accept and ignore `--sysroot=...'.

2011-06-01  Joel Brobecker  <brobecker@adacore.com>

	* interf.c (sim_complete_command): New stub function.

2011-01-11  Andrew Burgess  <aburgess@broadcom.com>

	* interf.c (sim_store_register): Update return value to
	match new API.

2010-05-20  Joel Brobecker  <brobecker@adacore.com>

	* sis.h: Remove #include <stdint.h>.
	(uint64, int64): Redefine without using stdint.h.
	(UINT64_MAX): Define.

2010-04-20  Tiemen Schut    <T.Schut@sron.nl>

	* erc32.c (sis_memory_write): Change prototype to const unsigned char *.
	* func.c (exec_cmd, event, advance_time, wait_for_irq): Use uint64
	for counts.
	* interf.c (run_sim): Change icount to uint64_t. Use strtol directly.
	(sim_resume): Specify maximum run time as uint64.
	* sis.c (run_sim): Change icount to uint64_t.
	* sis.h: Define uint64 as uint64_t. Change various fields and
	prototypes to uint64 to support longer simulations.

2010-04-14  Mike Frysinger  <vapier@gentoo.org>

	* interp.c (sim_write): Add const to buf arg.

2010-01-09  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* configure: Regenerate.

2009-08-22  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* config.in: Regenerate.
	* configure: Likewise.

	* configure: Regenerate.

2008-11-10  Joel Sherrill <joel.sherrill@oarcorp.com>

	* erc32.c, exec.c: Fix warnings.

2008-07-11  Hans-Peter Nilsson  <hp@axis.com>

	* configure: Regenerate to track ../common/common.m4 changes.
	* config.in: Ditto.

2008-06-09  Joel Sherrill <joel.sherrill@oarcorp.com>

	* sis.c: Correct spelling error.

2008-06-06  Vladimir Prus  <vladimir@codesourcery.com>
	    Daniel Jacobowitz  <dan@codesourcery.com>
	    Joseph Myers  <joseph@codesourcery.com>

	* configure: Regenerate.

2006-12-21  Hans-Peter Nilsson  <hp@axis.com>

	* acconfig.h: Remove.
	* config.in: Regenerate.

2006-12-20  Hans-Peter Nilsson  <hp@axis.com>

	* configure.ac: Add test for readline, substitute READLINE.
	* Makefile.in (READLINE_LIB): New substituted-contents variable.
	(SIM_EXTRA_LIBDEPS): Don't set.
	(SIM_EXTRA_LIBS): Use $(READLINE_LIB) instead of
	../../readline/libreadline.a.
	* configure: Regenerate.

2006-08-08  Daniel Jacobowitz  <dan@codesourcery.com>

	* Makefile.in (func.o, help.o): Correct dependencies.

2006-08-08  Joel Sherrill <joel.sherrill@oarcorp.com>

	* Makefile.in (install-sis): Honor DESTDIR.

2006-06-13  Richard Earnshaw  <rearnsha@arm.com>

	* configure: Regenerated.

2006-06-05  Daniel Jacobowitz  <dan@codesourcery.com>

	* configure: Regenerated.

2006-05-31  Daniel Jacobowitz  <dan@codesourcery.com>

	* configure: Regenerated.

2005-11-28  Mark Mitchell  <mark@codesourcery.com>

	* interf.c: (gdb/signals.h): Include it.
	(sim_stop_reason): Use TARGET_SIGNAL_*.

2005-07-08  Ben Elliston  <bje@au.ibm.com>

	* func.c: Remove ANSI_PROTOTYPES conditional code.

2005-03-23  Mark Kettenis  <kettenis@gnu.org>

	* configure: Regenerate.

2005-03-07  Jerome Guitton  <guitton@gnat.com>

	* sim/erc32/float.c (set_fsr): Do not use deprecated multi-line
	strings.
	(clear_accex): Ditto.
	* sim/erc32/interf.c: Remove the redeclaration of fprintf.
	* sim/erc32/sis.c: Ditto.
	* sim/erc32/exec.c: Add missing semicolon.
	* sim/erc32/func.c: Remove definitions of generic_print_address,
	generic_symbol_at_address, buffer_read_memory and perror_memory, as
	they are already defined in opcodes/dis-buf.c.

2005-01-14  Andrew Cagney  <cagney@gnu.org>

	* configure.ac: Sinclude aclocal.m4 before common.m4.  Add
	explicit call to AC_CONFIG_HEADER.
	* configure: Regenerate.

2005-01-12  Andrew Cagney  <cagney@gnu.org>

	* configure.ac: Update to use ../common/common.m4.
	* configure: Re-generate.

2005-01-11  Andrew Cagney  <cagney@localhost.localdomain>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

2005-01-07  Andrew Cagney  <cagney@gnu.org>

	* configure.ac: Rename configure.in, require autoconf 2.59.
	* configure: Re-generate.

2004-12-08  Hans-Peter Nilsson  <hp@axis.com>

	* configure: Regenerate for ../common/aclocal.m4 update.

2004-11-11  Andreas Schwab  <schwab@suse.de>

	* interf.c: Include "libiberty.h" instead of declaring buildargv
	ourselves.

2003-02-27  Andrew Cagney  <cagney@redhat.com>

	* interf.c (sim_open, sim_create_inferior): Rename _bfd to bfd.

2002-06-16  Andrew Cagney  <ac131313@redhat.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

2002-06-08  Andrew Cagney  <cagney@redhat.com>

	* sis.h: Include "gdb/remote-sim.h" and "gdb/callback.h".
	* interf.c: Include "gdb/remote-sim.h".

Tue May 23 21:39:23 2000  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

2000-03-07  Frank Ch. Eigler  <fche@redhat.com>

	From John Dallaway  <jld@redhat.co.uk>:
	* Makefile.in (install-sis): Add $(EXEEXT) for Windows host.

2000-03-03  Jonathan Larmour  <jlarmour@redhat.co.uk>

	* func.c (buffer_read_memory): Change type of size to unsigned to
	match prototype

Thu Sep  2 18:15:53 1999  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

1999-05-08  Felix Lee  <flee@cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

1999-03-03  DJ Delorie  <dj@cygnus.com>

	* configure.in: add termcap and -luser32 for host=cygwin
	* configure: regenerate

1999-02-11  Hugo Tyson  <hmt@cygnus.co.uk>

	* exec.c (dispatch_instruction):
	Correct the sense of the
	          if (!sparclite) {
		     sregs->trap = TRAP_UNIMP;
	             break;
		  }
	clause that has been pasted around: it's correct in the SCAN and
	DIVScc (divide step) cases (where it was probably originally
	written?), but reversed in the SDIV, SDIVcc, UDIV, UDIVcc cases
	ie. instructions only in the SPARC V8 or SPARClite 86x
	architectures.  It was also present when not required for SMUL,
	SMULcc, UMUL, UMULcc instructions that are present in all
	architectures.

1999-01-25  Hugo Tyson  <hmt@cygnus.co.uk>

	* interf.c (run_sim): Fix a bug in the main loop's handling of
	annulled delay slot instructions.  There is precedent for this
	change; the _other_ main loop in sis.c gets it right according to
	my reading of the code.

	The bug is: if an interrupt happens when the next instruction
	(at sregs->pc) is annulled, the trap is taken (by execute_trap())
	with the current values of PC and NPC, so when the trap returns,
	the annulled instruction is indeed executed.  Another giveaway is
	that the annul flag is cleared in execute_trap(): the information
	is demonstrably discarded.

	The solution is: perform annulling before looking for traps, in
	fact it's neater to do annulling, see if there's an interrupt and
	if not, do the instruction, then handle traps be they generated by
	interrupts pending or by the instruction we might just have done.
	That's what the sis.c one does.

1999-01-20  Hugo Tyson  <hmt@cygnus.co.uk>

	* sis.h: Add asr17 register for support of SparcLITE (at least the
	Hitachi ones I find before me)

	* exec.c (dispatch_instruction): Case WRY: Allow write of asr17 if
	sparclite.  Other ASR numbers than 17 or 0 (Y) trap out.
	Case RDY: Allow read of asr17 if sparclite.  Other ASRs ditto.
	(execute_trap): Do single-vector-trapping if asr17 bit 0 is set.
	(init_regs): Initialize y and asr17.
	NB: In instruction-set space, the Y register is asr0; the
	instructions have different names for human reasons only.

	* sis.c:
	* interf.c: Set boolean mode variable dumbio if invoked with
	argument "-dumbio" and mention it of verbose.
	* erc32.c: if "dumbio" is set, do not assume that there is a
	terminal type device attached to stdin/stdout.  Do not set
	buffering or mess with tcsetattr or do any read operations in
	order to make UART interrupts; not input data is supported.
	This is necessary to allow the sim to be used within the eCos
	testing infrastructure where stdin/stdout are pipes to a TCL
	program; the sim hangs otherwise.

Thu Jul 23 07:17:03 1998  Mark Alexander  <marka@cygnus.com>

	* exec.c (dispatch_instruction): Add SPARClite 'scan' instruction.

Tue Jul  7 21:12:41 1998  Mark Alexander  <marka@cygnus.com>

	* func.c (bfd_load): Add special handling of a.out executables.

Sat Jun 13 08:33:25 1998  Mark Alexander  <marka@cygnus.com>

	* func.c (bfd_load): Print correct endianness.
	* interf.c (run_sim): Print debugging information if verbosity level
	is greater than 2.
	(sim_open): Repeated -v options now increment verbosity level.
	(sim_store_register): Handle little-endian case.
	(flush_window): Print debugging information if verbosity level
	is greater then 2.

Tue Jun  2 15:20:35 1998  Mark Alexander  <marka@cygnus.com>

	* interf.c (sim_open): Use revamped memory_read, which makes
	byte-swapping unnecessary.  Add -sparclite-board option for
	emulating RAM found on typical SPARClite boards.  Print
	error message for unrecognized option.
	* erc32.c: Change RAM address and size from constants to variables,
	to allow emulation of SPARClite board RAM.
	(fetch_bytes, store_bytes): New helper functions for revamped
	mememory_read and memory_write.
	(memory_read, memory_write): Rewrite to store bytes in target
	byte order instead of storing words in host byte order; this
	greatly simplifies support of little-endian programs.
	(get_mem_ptr): Remove unnecessary byte parameter.
	(sis_memory_write, sis_memory_read): Store words in target
	byte order instead of host byte order.
	(byte_swap_words): Remove, no longer needed.
	* sis.h ((byte_swap_words): Remove declaration, no longer needed.
	(memory_read): Add new sz parameter.
	* sis.c (run_sim): Use revamped memory_read, which makes
	byte-swapping unnecessary.
	* exec.c (dispatch_instruction): Use revamped memory_read, which
	makes byte-swapping and double-word fetching unnecessary.
	* func.c (sparclite_board): Declare new variable.
	(get_regi): Handle little-endian data.
	(bfd_load): Recognize little-endian SPARClite as having
	little-endian data.

Fri May 22 14:23:16 1998  Mark Alexander  <marka@cygnus.com>

	* erc32.c (port_init): Print messages only if sis_verbose is true.
	* func.c (bfd_load): Ditto.
	* interf.c (sim_open): Ditto.

Thu May 14 23:10:48 1998  Mark Alexander  <marka@cygnus.com>

	* sis.h (uint64, int64): Define.
	* exec.c (SDIV, SDIVCC, UDIV, UDIVCC): Define new opcodes.
	* (mul64): Simplify calculation of negative result.
	* (div64): New helper function for 64-bit division.
	* (dispatch_instruction): Add emulation of SDIV, SDIVCC, UDIV,
	and UDIVCC.

Wed May 13 14:59:54 1998  Mark Alexander  <marka@cygnus.com>

	* erc32.c (close_port): Don't close stdin; it kills GDB.
	(byte_swap_words): New function.
	* sis.h: (byte_swap_words): Declare.
	* interf.c (run_sim): Always fetch instructions as big-endian.
	* sis.c (run_sim): Ditto.

Tue Apr 28 18:33:31 1998  Geoffrey Noer  <noer@cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Sun Apr 26 15:31:55 1998  Tom Tromey  <tromey@creche>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Sun Apr 26 15:20:17 1998  Tom Tromey  <tromey@cygnus.com>

	* acconfig.h: New file.
	* configure.in: Reverted change of Apr 24; use sinclude again.

Fri Apr 24 14:16:40 1998  Tom Tromey  <tromey@creche>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Fri Apr 24 11:19:52 1998  Tom Tromey  <tromey@cygnus.com>

	* configure.in: Don't call sinclude.

Sat Apr 18 12:00:16 1998  Mark Alexander  <marka@cygnus.com>

	* func.c (disp_fpu): Fix build problem on big-endian hosts.

Wed Apr  8 19:33:34 1998  Mark Alexander  <marka@cygnus.com>

	* erc32.c (sim_stop): Handle SIGINT gracefully.
	* interf.c (sim_open): Don't catch SIGINT; GDB will do that for us.

Wed Apr  8 18:29:40 1998  Mark Alexander  <marka@cygnus.com>

	* exec.c (dispatch_instruction): Change how carry out is calculated
	in DIVSCC.  Add emulation of SMULCC, UMUL, and UMULCC.

Sat Apr  4 20:36:25 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Apr  1 21:19:18 1998  Mark Alexander  <marka@cygnus.com>

	* end.c: Update to version 2.7.5, fix compiler warnings and bugs.
	* erc32.c: Ditto.
	* exec.c: Ditto.
	* float.c: Ditto.
	* func.c: Ditto.
	* help.c: Ditto.
	* interf.c: Ditto.
	* sis.c: Ditto.
	* sis.h: Ditto.

Fri Mar 27 16:15:52 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Mar 25 12:35:29 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Mar 18 12:38:12 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Feb 17 12:41:11 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* interf.c (sim_store_register, sim_fetch_register): Pass in
 	length parameter.  Return -1.

Sun Feb  1 16:47:51 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Sat Jan 31 18:15:41 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Jan 19 22:26:29 1998  Doug Evans  <devans@seba>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Dec 15 23:17:11 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Thu Dec  4 09:21:05 1997  Doug Evans  <devans@canuck.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Fri Oct  3 09:28:00 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Sep 24 17:38:57 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Sep 23 11:04:38 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Sep 22 11:46:20 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Fri Sep 19 17:45:25 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Sep 15 17:36:15 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Aug 27 18:13:22 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Tue Aug 26 10:38:20 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* float.c (__setfpucw): Compile on any i386 target.  Not just NT.

	* interf.c (sim_kill): Delete.
	(sim_create_inferior): Add ABFD argument.  Initialize PC from ABFD
 	argument.
	(sim_load): Don't save start address.
	(start_address): Delete variable.

Mon Aug 25 17:50:22 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Mon Aug 25 16:19:49 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interf.c (sim_open): Add ABFD argument. Change ARGV to PARGV.

Mon Jun 30 11:45:25 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (install-sis): Change $(srcdir)/sis to sis.

Wed May 28 09:46:13 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* interf.c (sim_set_callbacks): Drop SD argument - not applicable.
	(sim_open): Add callback arg, save it.

Thu Apr 24 00:39:51 1997  Doug Evans  <dje@canuck.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Tue Apr 22 11:05:01 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interf.c (sim_open): Undo patch to add -E support.

Thu Apr 17 03:03:56 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interf.c (sim_open): Ignore -E arg.
	(start_address): New static local.
	(sim_load): Return SIM_RC.  New arg abfd.  Set start_address from bfd.
	(sim_create_inferior): Return SIM_RC.  Delete arg start_address.

Tue Apr 15 15:16:11 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (install-sis): Depend upon installdirs.  Use
	$(program_transform_name) directly, rather than using
	$(INSTALL_XFORM).

Mon Apr  7 15:45:02 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.
	* config.in: Ditto.

Wed Apr  2 15:06:28 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interf.c (sim_open): New arg `kind'.

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Wed Apr  2 14:34:19 1997 Andrew Cagney <cagney@kremvax.cygnus.com>

	* configure: Regenerated to track ../common/aclocal.m4 changes.

Mon Mar 17 15:10:07 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* configure: Re-generate.

Thu Mar 13 12:46:04 1997  Doug Evans  <dje@canuck.cygnus.com>

	* interf.c (sim_open): New SIM_DESC result.  Argument is now in
	argv form.
	(other sim_*): New SIM_DESC argument.

Tue Feb  4 13:35:20 1997  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in (@COMMON_MAKEFILE_FRAG): Use
	COMMON_{PRE,POST}_CONFIG_FRAG instead.
	* configure.in: sinclude ../common/aclocal.m4.
	* configure: Regenerated.

Thu Jan 23 11:46:23 1997  Stu Grossman  (grossman@critters.cygnus.com)

	* configure configure.in Makefile.in:  Update to new configure
	scheme which is more compatible with WinGDB builds.
	* configure.in:  Improve comment on how to run autoconf.
	* configure:  Re-run autoconf to get new ../common/aclocal.m4.
	* Makefile.in:  Use autoconf substitution to install common
	makefile fragment.

Wed Dec  4 18:25:04 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* interf.c (run_sim): Stop the simulator and reset the stdio after
	breakpoints.

Tue Dec  3 11:54:37 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* configure.in: Look for libtermcap.a.
	* Makefile.in: Only link in -ltermcap if it exists.
	* erc32.c: Update to version 2.6a. Fix uart handling.
	* exec.c: Update to version 2.6a. Add sparclite support.
	* float.c: Update to version 2.6a. Convert comments to
	preprocessor warnings. Add __setfpucw() for i385 hosts so floating
	point exceptions work on win32.
	* func.c: Update to version 2.6a. Fix uart handling, add support
	for user error traps.
	* help.c: Update to version 2.6a. Add help note on user error
	traps.
	* interf.c: Update to version 2.6a. Fix uart handling, and add
	sparclite support.
	* examples/gccx: Use sparclite cross compiler, not native gcc.
	* examples/srt0.S: Use "mov" rather than "wr" for manipulating
	the psr register.

Mon Nov 25 08:28:10 1996  Fred Fish  <fnf@cygnus.com>

	* Makefile.in (run.o): Remove this rule, it hides the one in
	../common/Make-common.in that correctly references the source
	in the sibling ../common directory.

Wed Nov 20 01:30:12 1996  Doug Evans  <dje@canuck.cygnus.com>

	* Makefile.in: Delete stuff moved to ../common/Make-common.in.
	(SIM_{OBJS,EXTRA_LIBS,EXTRA_LIBDEPS,EXTRA_ALL,EXTRA_INSTALL}): Define.
	(SIM_{EXTRA_CLEAN,EXTRA_CFLAGS}): Define.
	* configure.in: Simplify using macros in ../common/aclocal.m4.
	Call AC_CHECK_HEADERS(stdlib.h).
	* configure: Regenerated.
	* config.in: New file.
	* func.c (sim_set_callbacks): Delete, moved to
	* interf.c (sim_set_callbacks): here.
	(sim_callback): New global.
	Rewrite all calls to printf_filtered to go through callback.
	(sim_size,sim_trace): New functions.
	(sim_{insert,remove}_breakpoint): #if 0 out.
	* sis.c: #include "config.h".  #include <stdlib.h> if present.
	(main): Coerce fprintf arg to INIT_DISASSEMBLE_INFO to fprintf_ftype.
	* sis.h: #include "callback.h".
	* run.c: Deleted, using one in ../common now.

Thu Oct  3 16:12:03 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (clean): Move config.log to distclean.

Wed Oct  2 16:57:57 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (clean): Also remove config.log.

Sat Sep 14 00:00:46 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (CC_FOR_BUILD): New variable.
	(AR, AR_FLAGS, BISON, MAKEINFO): Remove duplicate variables.
	(RANLIB, CC): Likewise.
	(end): Use $(CC_FOR_BUILD), not $(CC).
	* configure.in: Set CC_FOR_BUILD.
	* configure: Rebuild.

Sun Sep  8 14:04:37 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* erc32.c (port_init):  Disable this for __GO32__ (got no pty's
	there either...).

Mon Aug 12 17:04:58 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* erc32.c:  Don't include sys/ioctl.h or sys/file.h.  They aren't
	necessary.
	* (port_init):  Don't even *try* to open pty's under _WIN32.
	* Use SIM_ADDR, not caddr_t for declaring vars that hold addresses.
	* float.c:  Get rid of #warning.  Makes Microsoft C barf.
	* interf.c (sim_open):  Cast fprintf to (fprintf_ftype) to fix
	compiler warning.
	* (sim_load sim_create_inferior sim_read):  Use prototypes only in
	decls, not defs.
	* Get rid of enum sim_stop.  It's defined in remote-sim.h.
	* (sim_stop_reason):  Define SIGTRAP if _WIN32.
	* sis.h:  Include ansidecl.h and remote-sim.h.

Wed Jul  3 16:05:23 1996  Stu Grossman  (grossman@critters.cygnus.com)

	* erc32.c (mec_reset mec_read mec_write memory_read memory_write),
	sis.h:  Get rid of all uses of long long's.
	* (close_port read_uart write_uart uarta_tx):  Don't seg fault
	when can't open pty's.
	* exec.c:  Add two new instructions: smul, and divscc.
	* interf.c (flush_windows):  New routine to flush the register
	windows out to the stack just before returning to GDB.  Makes
	backtraces work much better.

Wed Jun 26 12:19:11 1996  Jason Molenda  (crash@godzilla.cygnus.co.jp)

	* Makefile.in (bindir, libdir, datadir, mandir, infodir, includedir,
	INSTALL_PROGRAM, INSTALL_DATA): Use autoconf-set values.
	(docdir, oldincludedir): Removed.
	* configure.in (AC_PREREQ): autoconf 2.5 or higher.
	(AC_PROG_INSTALL): Added.
	* configure: Rebuilt.

Mon Jun 24 14:19:07 1996  Ian Lance Taylor  <ian@cygnus.com>

	* configure.in: Call AC_PROG_CC before running configure.host.
	* configure: Rebuild with autoconf 2.10.

Tue Jun  4 10:37:12 1996  Tom Tromey  <tromey@csk3.cygnus.com>

	* Makefile.in (install): Don't check to see if tooldir exists.
	Make $(tooldir) and $(tooldir)/bin.

Mon Jun  3 12:33:38 1996  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (end.h): Use explicit ./ when running end.

Sun May 19 21:05:31 1996  Rob Savoye  <rob@chinadoll.cygnus.com>

	* func.c(bfd_load): Don't try to print the filename if the pfbd is
	NULL.
	* interf.c(sim_load): Pass the whole string, not just the first
	byte.

Version 2.1 26-02-96
--------------------

* Fixed bug in "go" command.

version 2.0 05-02-96
--------------------

* Fixed bug in interrupt force register (erc32.c).

* Change file load function to use bfd_openr.

* SIS should now be endian independent.

version 1.8 24-11-95
--------------------

* Fixed FPU timing - some sequences of FPU instructions did not calculate
  the resource dependencies right.

* Corrected STDFQ when qne = 0 (again!). The ftt is set to sequence_error
  but no FPU trap is generated.

version 1.7.1 31-10-95
--------------------

* Corrected STDFQ when qne = 0. Now, a trap is immidiately generated but
  the FPU stays in execute mode.

* Corrected JMPL and RETT timing (these instructions takes two cycles).


version 1.7 25-10-95
--------------------

* Interrupt during annuled instruction corrupted return address - fixed.


version 1.6.2 25-10-95
--------------------

* Added -DFAST_UART to Makefile


version 1.6.1 24-10-95
--------------------

* Fixed bug in STDFQ which caused bus error


version 1.6 02-10-95
--------------------

* Modified srt0.s to include code that initiates registers in IU and FPU
  and initializes the data segment. The simulator 'load' command does not
  longer initialize the data segment!

* Corrected MEC timer operation; scalers now divide the frequency by
  (scaler_value + 1).

* MEC breakpoints are not checked during store operation


version 1.5 14-09-95
--------------------

* Fixed some bugs in the cycle counting for IU & FPU instructions.

* Fixed bug that allowed an annuled instruction to cause memory exception.

* The *ws parameter in mem.c should now contain the number of waitstates
  required by the memory access (was total number of cycles).

* The supplied srt0.s now clears the BSS (thanks Joel).

version 1.4 22-08-95
--------------------

* Added a '-g' switch to enable/disable the GNU readline(), which cause
some problems on solaris 2.x machines.

* Enabled MEC watchpoint and breakpoint function to mem.c. Performance
may suffer a bit ...

NOTE: The UARTs are now connected to /dev/ttypc and /dev/ttypd.

version 1.3 26-07-95
--------------------

* Fixed bug in mulscc instruction (how could that ever have worked?)

* Fixed bug in UART B (flushed characters on UART A), thanks Paul.

version 1.2 13-07-95
--------------------

* Fixed bug in interrupt handling (wrong interrupt selected when more that
one interrupt pending)

* Fixed updating of condition codes during logical instructions (carry and
overflow were not reset)

* Fixed bug in WRTBR (tt field was wrongly over-written)

version 1.1 07-07-95
--------------------

* Fixed several bugs in the interrupt handler and callback routines.
(reported by Paul Warren, Alsys)
