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)
