[rtems-tools commit] tools/gdb: Add a patch for gdb-7.7/gdb-7.8 SPARC.

Chris Johns chrisj at rtems.org
Tue Dec 2 04:51:14 UTC 2014


Module:    rtems-tools
Branch:    master
Commit:    4bdba3e552f22bbd82ffc9ab2c915a7b4f2eadd5
Changeset: http://git.rtems.org/rtems-tools/commit/?id=4bdba3e552f22bbd82ffc9ab2c915a7b4f2eadd5

Author:    Chris Johns <chrisj at rtems.org>
Date:      Tue Dec  2 15:50:02 2014 +1100

tools/gdb: Add a patch for gdb-7.7/gdb-7.8 SPARC.

This patch updates and merges the previous SPARC patches as well
as providing update LEON2/LEON3 support in the SIS simulator.

---

 .../sparc/gdb-7.7-7.8-sis-leon2-leon3-fixup.diff   | 8934 ++++++++++++++++++++
 1 file changed, 8934 insertions(+)

diff --git a/tools/4.11/gdb/sparc/gdb-7.7-7.8-sis-leon2-leon3-fixup.diff b/tools/4.11/gdb/sparc/gdb-7.7-7.8-sis-leon2-leon3-fixup.diff
new file mode 100644
index 0000000..242a8ab
--- /dev/null
+++ b/tools/4.11/gdb/sparc/gdb-7.7-7.8-sis-leon2-leon3-fixup.diff
@@ -0,0 +1,8934 @@
+From 458324b419f29cd473a6ed13ed7c61005453ab7a Mon Sep 17 00:00:00 2001
+From: Jiri Gaisler <jiri at gaisler.se>
+Date: Fri, 14 Nov 2014 23:19:09 +0100
+Subject: [PATCH] gdb patch to add leon2/3 support to sis
+
+---
+ .../gdb/sparc/gdb-7.7-sis-leon2-leon3-fixup.diff   | 8915 ++++++++++++++++++++
+ 1 file changed, 8915 insertions(+)
+ create mode 100644 tools/4.11/gdb/sparc/gdb-7.7-sis-leon2-leon3-fixup.diff
+
+diff --git a/tools/4.11/gdb/sparc/gdb-7.7-sis-leon2-leon3-fixup.diff b/tools/4.11/gdb/sparc/gdb-7.7-sis-leon2-leon3-fixup.diff
+new file mode 100644
+index 0000000..e19e30a
+--- /dev/null
++++ b/tools/4.11/gdb/sparc/gdb-7.7-sis-leon2-leon3-fixup.diff
+@@ -0,0 +1,8915 @@
++diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
++index 66ef84e..424e390 100644
++--- a/gdb/sparc-tdep.c
+++++ b/gdb/sparc-tdep.c
++@@ -1713,6 +1713,8 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
++   /* Hook in ABI-specific overrides, if they have been registered.  */
++   gdbarch_init_osabi (info, gdbarch);
++ 
+++  dwarf2_append_unwinders (gdbarch);  /* DWARF CFI frame unwinder */
+++
++   frame_unwind_append_unwinder (gdbarch, &sparc32_frame_unwind);
++ 
++   /* If we have register sets, enable the generic core file support.  */
++diff --git a/sim/erc32/Makefile.in b/sim/erc32/Makefile.in
++index 0ce58a6..3f09b0e 100644
++--- a/sim/erc32/Makefile.in
+++++ b/sim/erc32/Makefile.in
++@@ -21,7 +21,7 @@
++ TERMCAP_LIB = @TERMCAP@
++ READLINE_LIB = @READLINE@
++ 
++-SIM_OBJS = exec.o erc32.o func.o help.o float.o interf.o
+++SIM_OBJS = exec.o erc32.o func.o help.o float.o interf.o leon2.o leon3.o grlib.o
++ SIM_EXTRA_LIBS = $(READLINE_LIB) $(TERMCAP_LIB) -lm
++ SIM_EXTRA_ALL = sis
++ SIM_EXTRA_INSTALL = install-sis
++@@ -30,32 +30,24 @@ SIM_EXTRA_CLEAN = clean-sis
++ # UARTS run at about 115200 baud (simulator time). Add -DFAST_UART to
++ # CFLAGS if faster (infinite) UART speed is desired. Might affect the
++ # behaviour of UART interrupt routines ...
++-SIM_EXTRA_CFLAGS = -DSTAT -DFAST_UART -DIUREV0 -DMECREV0
+++SIM_EXTRA_CFLAGS = -DFAST_UART -I$(srcdir)/../..
++ 
++ ## COMMON_POST_CONFIG_FRAG
++ 
++ # `sis' doesn't need interf.o.
++-SIS_OFILES = exec.o erc32.o func.o help.o float.o
+++SIS_OFILES = exec.o erc32.o func.o help.o float.o grlib.o leon2.o leon3.o
++ 
++ sis: sis.o $(SIS_OFILES) $(COMMON_OBJS) $(LIBDEPS)
++ 	$(CC) $(ALL_CFLAGS) -o sis \
++ 	  sis.o $(SIS_OFILES) $(COMMON_OBJS) $(EXTRA_LIBS)
++ 
++-# FIXME: This computes the build host's endianness, doesn't it?
++-# There is AC_C_BIGENDIAN but it doesn't handle float endianness.
++-# [Are int/float endians every different on a sparc?]
++-end: $(srcdir)/end.c
++-	$(CC_FOR_BUILD) -I. $(srcdir)/end.c -o end
++-end.h: end
++-	./end > end.h
++-
++ # Copy the files into directories where they will be run.
++ install-sis: installdirs
++ 	n=`echo sis | sed '$(program_transform_name)'`; \
++ 	$(INSTALL_PROGRAM) sis$(EXEEXT) $(DESTDIR)$(bindir)/$$n$(EXEEXT)
++ 
++ clean-sis:
++-	rm -f sis end end.h
+++	rm -f sis
++ 
++ configure:
++ 	@echo "Rebuilding configure..."
++@@ -65,10 +57,13 @@ configure:
++ 	(cd $${srcdir}; autoconf --localdir=../common)
++ 
++ # Circumvent Sun Make bug with VPATH.
++-erc32.o: erc32.c sis.h end.h
++-exec.o: exec.c sis.h end.h
++-float.o: float.c sis.h end.h
++-func.o: func.c sis.h end.h
++-help.o: help.c sis.h end.h
++-interf.o: interf.c sis.h end.h 
++-sis.o: sis.c sis.h end.h
+++erc32.o: erc32.c sis.h
+++exec.o: exec.c sis.h
+++float.o: float.c sis.h
+++func.o: func.c sis.h
+++help.o: help.c sis.h
+++interf.o: interf.c sis.h
+++sis.o: sis.c sis.h
+++grlib.o: grlib.c sis.h grlib.h
+++leon3.o: leon3.c sis.h grlib.h
+++leon2.o: leon2.c sis.h
++diff --git a/sim/erc32/NEWS b/sim/erc32/NEWS
++deleted file mode 100644
++index dd24b7b..0000000
++--- a/sim/erc32/NEWS
+++++ /dev/null
++@@ -1,108 +0,0 @@
++-
++-version 2.0 05-02-96
++---------------------
++-
++-* Switched to bfd library. Any supported format (elf, coff, ...) can be used.
++-* The UART devices can be set through -uart1 and -uart2 switches.
++-* Switched to GNU readline.
++-* Added -c option to run batch files at startup
++-* 'reg' command can show different register windows (eg 'reg w3').
++-* Use 'help' for online help on simulator commands
++-
++-version 1.8.1 20-01-96
++---------------------
++-
++-* added -mevrev0 switch to simulate MEC rev.0 bugs in timer and uart
++-
++-* added -iurev0 switch to simulate IU rev.0 jmpl/restore bug
++-
++-* Added sis command 'batch' to run batch files
++-
++-
++-version 1.8 30-10-95
++---------------------
++-
++-* Added s-record support. Use the '-s' switch with sis or the 'load' command.
++-
++-* IU load dependencies are now modelled
++-
++-version 1.7 30-10-95
++---------------------
++-
++-* Power-down mode implemented in erc32.c.
++-  
++-* Performance display shows the ratio between simulator-time and real-time.
++-
++-
++-version 1.6.2 25-10-95
++---------------------
++-
++-* The UARTs can now be run at a given speed (simulator time) to better
++-  simulate the behaviour of interrupt routines. The "true mode" is
++-  selected through a compile switch in the makefile.
++-
++-
++-version 1.6 28-09-95
++---------------------
++-
++-* Major reorganisation of the code. mec.c and mem.c merged into erc32.c.
++-
++-* The load command does NOT longer load the initialised data at an address
++-  defined by .bdata. This is done in srt0.s using _environ.
++-
++-* Additional MEC functionallity added - software reset, memory access
++-  protection and waitstate configuration register.
++-
++-* interf.c - a GDB interface added
++-
++-* -v switch (verbose) added
++-
++-version 1.5 14-09-95
++---------------------
++-
++-* Added a instruction trace buffer, enabled through the 'hist' command.
++-
++-* Added a 'perf' command to display statistics such as instruction mix,
++-  CPI, FPU holds etc.
++-
++-* Added -nfp switch to disable FPU.
++-
++-* Added -freq switch to set simulated frequency.
++-
++-version 1.4 22-08-95
++---------------------
++-
++-* A -g is provided for those who have problems with GNU readline(). 
++-
++-version 1.3 26-07-95
++---------------------
++-
++-* No major news, just a bug fix release ...
++-
++-
++-version 1.2 13-07-95
++---------------------
++-
++-* Added setting of IU registers through the 'reg' command. See README.
++-
++-* The GNU readline() function is used for command input. However, a
++-ctrl-D still kills the simulator ...
++-
++-
++-version 1.1 07-07-95
++---------------------
++-
++-
++-* Added a 'go' command
++-
++-* Added cycle counting for interrupt overhead.
++-
++-* Function 'get_mem_ptr' takes one more parameter to avoid segmentation 
++-   faults if a.out files are loaded outside the simulated memory. See README.
++-
++-* Added user-defined function sim_stop().
++-
++-* Added a reset command. See README.
++-
++-* Implemented buffered output for MEC uarts to improve output speed.
++-
++diff --git a/sim/erc32/README.gdb b/sim/erc32/README.gdb
++deleted file mode 100644
++index 619fcb3..0000000
++--- a/sim/erc32/README.gdb
+++++ /dev/null
++@@ -1,67 +0,0 @@
++-How to use SIS with GDB
++------------------------
++-
++-1. Building GDB with SIS
++-
++-To build GDB with the SIS/ERC32 simulator, configure with option
++-'--target sparc-erc32-aout' and build as usual.
++-
++-2. Attaching the simulator
++-
++-To attach GDB to the simulator, use:
++-
++-target sim [options] [files]
++-
++-The following options are supported:
++-
++- -nfp		Disable FPU. FPops will cause an FPU disabled trap.
++-
++- -freq <f>	Set the simulated "system clock" to <f> MHz.
++-
++- -v		Verbose mode.
++-
++- -nogdb		Disable GDB breakpoint handling (see below)
++-
++-The listed [files] are expected to be in aout format and will be
++-loaded in the simulator memory prior. This could be used to load
++-a boot block at address 0x0 if the application is linked to run
++-from RAM (0x2000000).
++-
++-To start debugging a program type 'load <program>' and debug as
++-usual. 
++-
++-The native simulator commands can be reached using the GDB 'sim'
++-command:
++-
++-sim <sis_command>
++-
++-Direct simulator commands during a GDB session must be issued
++-with care not to disturb GDB's operation ... 
++-
++-For info on supported ERC32 functionality, see README.sis.
++-
++-
++-3. Loading aout files
++-
++-The GDB load command loads an aout file into the simulator
++-memory with the data section starting directly after the text
++-section regardless of wich start address was specified for the data
++-at link time! This means that your applications either has to include
++-a routine that initialise the data segment at the proper address or
++-link with the data placed directly after the text section.
++-
++-A copying routine is fairly simple, just copy all data between
++-_etext and _data to a memory loaction starting at _environ. This
++-should be done at the same time as the bss is cleared (in srt0.s).
++-
++-
++-4. GDB breakpoint handling
++-
++-GDB inserts breakpoint in the form of the 'ta 1' instruction. The
++-GDB-integrated simulator will therefore recognize the breakpoint
++-instruction and return control to GDB. If the application uses
++-'ta 1', the breakpoint detection can be disabled with the -nogdb
++-switch. In this case however, GDB breakpoints will not work.
++-
++-
++-Report problems to Jiri Gaisler ESA/ESTEC (jgais at wd.estec.esa.nl)
++diff --git a/sim/erc32/README.leon2 b/sim/erc32/README.leon2
++new file mode 100644
++index 0000000..3820eca
++--- /dev/null
+++++ b/sim/erc32/README.leon2
++@@ -0,0 +1,53 @@
+++
+++1. LEON2 emulation
+++
+++The file 'leon2.c' contains a model of simple LEON2 sub-system. It 
+++contains 16 Mbyte ROM and 16 Mbyte RAM. Standard peripherals
+++such as interrupt controller, UART and timer are provided.
+++The model can execute leon2 binaries that do not require an
+++MMU.
+++
+++To start sis in Leon2 mode, add the -leon2 switch. In gdb,
+++use 'target sim -leon2' .
+++
+++1.1 UART
+++
+++One LEON2 UART is emaulted, and is located at address 0x80000070.
+++The following registers are implemeted:
+++
+++- UART RX and TX register	(0x80000070)
+++- UART status register		(0x80000074)
+++
+++The UART generates interrupt 3.
+++
+++1.2 Timer unit 
+++
+++The LEON2 timer unit is emulated and located at address 0x80000040.
+++It is configured with two timers and separate interrupts (8 and 9).
+++The scaler is configured to 16 bits, while the counters are 32 bits.
+++
+++1.3 Interrupt controller
+++
+++The interrupt controller is implemented as described in the
+++LEON2 IP manual, with the exception of the interrupt level register.
+++Secondary interrupts are not supported. The registers are located
+++at address 0x80000090.
+++
+++1.5 Memory interface
+++
+++The following memory areas are valid for the Leon3 simulator:
+++
+++0x00000000 - 0x01000000		ROM (16 Mbyte, loaded at start-up)
+++0x40000000 - 0x41000000		RAM (16 Mbyte, loaded at start-up)
+++0x80000000 - 0x81000000		APB bus, including plug&play
+++0xFFFFF000 - 0xFFFFFFFF		AHB plug&play area
+++
+++Access to non-existing memory will result in a memory exception trap.
+++
+++1.8 Power-down mode
+++
+++The Leon2 power-down register (0x80000018) is supported. When power-down is
+++entered, time is skipped forward until the next event in the event queue.
+++However, if the simulator event queue is empty, power-down mode is not
+++entered since no interrupt would be generated to exit from the mode. A
+++Ctrl-C in the simulator window will exit the power-down mode.
++diff --git a/sim/erc32/README.leon3 b/sim/erc32/README.leon3
++new file mode 100644
++index 0000000..00ab14a
++--- /dev/null
+++++ b/sim/erc32/README.leon3
++@@ -0,0 +1,53 @@
+++
+++1. LEON3 emulation
+++
+++The file 'leon3.c' contains a model of simple LEON3 sub-system. It 
+++contains 16 Mbyte ROM and 16 Mbyte RAM. Standard peripherals
+++such as interrupt controller, UART and timer are provided.
+++The model can execute leon3 binaries that do not require an
+++MMU.
+++
+++To start sis in Leon3 mode, add the -leon3 switch. In gdb,
+++use 'target sim -leon3' .
+++
+++1.1 UART
+++
+++The UART emulates an APBUART and is located at address 0x80000100.
+++The following registers are implemeted:
+++
+++- UART RX and TX register	(0x80000100)
+++- UART status register		(0x80000104)
+++
+++The UART generates interrupt 3.
+++
+++1.2 Timer unit (GPTIMER)
+++
+++The GPTIMER programmable counter is emulated and located at
+++address 0x80000300. It is configured with two timers and separate
+++interrupts (8 and 9).
+++
+++1.3 Interrupt controller
+++
+++The IRQMP interrupt controller is implemented as described in the
+++GRLIB IP manual, with the exception of the interrupt level register.
+++Extended interrupts are not supported. The registers are located
+++at address 0x80000200.
+++
+++1.5 Memory interface
+++
+++The following memory areas are valid for the Leon3 simulator:
+++
+++0x00000000 - 0x01000000		ROM (16 Mbyte, loaded at start-up)
+++0x40000000 - 0x41000000		RAM (16 Mbyte, loaded at start-up)
+++0x80000000 - 0x81000000		APB bus, including plug&play
+++0xFFFFF000 - 0xFFFFFFFF		AHB plug&play area
+++
+++Access to non-existing memory will result in a memory exception trap.
+++
+++1.8 Power-down mode
+++
+++The Leon3 power-down feature (%asr19) is supported. When power-down is
+++entered, time is skipped forward until the next event in the event queue.
+++However, if the simulator event queue is empty, power-down mode is not
+++entered since no interrupt would be generated to exit from the mode. A
+++Ctrl-C in the simulator window will exit the power-down mode.
++diff --git a/sim/erc32/README.sis b/sim/erc32/README.sis
++index b119f03..59c4c64 100644
++--- a/sim/erc32/README.sis
+++++ b/sim/erc32/README.sis
++@@ -1,10 +1,10 @@
++ 
++-SIS - Sparc Instruction Simulator README file  (v2.0, 05-02-1996)
+++SIS - Sparc Instruction Simulator README file  (v2.8, 10-11-2014)
++ -------------------------------------------------------------------
++ 
++ 1. Introduction
++ 
++-The SIS is a SPARC V7 architecture simulator. It consist of two parts,
+++The SIS is a SPARC V7/V8 architecture simulator. It consist of two parts,
++ the simulator core and a user defined memory module. The simulator
++ core executes the instructions while the memory module emulates memory
++ and peripherals. 
++@@ -13,28 +13,29 @@ and peripherals.
++ 
++ The simulator is started as follows: 
++ 
++-sis [-uart1 uart_device1] [-uart2 uart_device2] 
+++sis [-leon2] [-leon3] [-uart1 uart_device1] [-uart2 uart_device2] 
++     [-nfp] [-freq frequency] [-c batch_file] [files] 
++ 
++-The default uart devices for SIS are /dev/ptypc and /dev/ptypd. The
++--uart[1,2] switch can be used to connect the uarts to other devices.
++-Use 'tip /dev/ttypc'  to connect a terminal emulator to the uarts.
+++By default, SIS emaultes an ERC32 system. The -leon2 switch enables
+++LEON2 emaultion, while the -leon3 switch enables emulation of a 
+++LEON3 SOC system.
+++
+++The emulated console uart is connected stdin/stdout. The -uart[1,2]
+++switch can be used to connect the uarts to other devices.
+++
++ The '-nfp' will disable the simulated FPU, so each FPU instruction will
++ generate a FPU disabled trap. The '-freq' switch can be used to define
++ which "frequency" the simulator runs at. This is used by the 'perf'
++ command to calculated the MIPS figure for a particular configuration.
++-The give frequency must be an integer indicating the frequency in MHz.
+++The frequency must be an integer indicating the frequency in MHz.
++ 
++ The -c option indicates that sis commands should be read from 'batch_file' 
++ at startup.
++ 
++-Files to be loaded must be in one of the supported formats (see INSTALLATION),
++-and will be loaded into the simulated memory. The file formats are
++-automatically recognised.
+++Files to be loaded must be in one of the supported formats (elf, a.out, srec),
+++and will be loaded into the simulated memory.
++ 
++-The script 'startsim' will start the simulator in one xterm window and
++-open a terminal emulator (tip) connected to the UART A in a second
++-xterm window. Below is description of commands  that are recognized by 
+++Below is description of commands  that are recognized by 
++ the simulator. The command-line is parsed using GNU readline. A command
++ history of 64 commands is maintained. Use the up/down arrows to recall
++ previous commands. For more details, see the readline documentation.
++@@ -77,8 +78,8 @@ Prints the FPU registers
++ go <address> [inst_count]
++ 
++ The go command will set pc to <address> and npc to <address> + 4, and start
++-execution. No other initialisation will be done. If inst_count is given, 
++-execution will stop after the specified number of instructions.
+++execution. If inst_count is given, execution will stop after the specified
+++number of instructions.
++ 
++ help
++ 
++@@ -143,136 +144,67 @@ Typing a 'Ctrl-C' will interrupt a running simulator.
++ Short forms of the commands are allowed, e.g 'c' 'co' or 'con' are all
++ interpreted as 'cont'. 
++ 
+++2 Using SIS with gdb
+++
+++2.1 Attaching the simulator
+++
+++To attach GDB to the simulator, use:
+++
+++target sim [options]
+++
+++The following options are supported:
+++
+++ -leon2         Emulate a LEON2 system
+++
+++ -leon3         Emulate a LEON3 system
+++
+++ -nfp           Disable FPU. FPops will cause an FPU disabled trap.
+++
+++ -freq <f>      Set the simulated "system clock" to <f> MHz.
+++
+++ -v             Verbose mode.
+++
+++ -nogdb         Disable GDB breakpoint handling (see below)
+++
+++To start debugging a program type 'load <program>' and debug as
+++usual.
+++
+++The native simulator commands can be reached using the GDB 'sim'
+++command:
+++
+++sim <sis_command>
+++
+++Direct simulator commands during a GDB session must be issued
+++with care not to disturb GDB's operation ...
+++
+++A program can be restarted in gdb by first issuing the load command,
+++followed by run.
+++
+++2.2 GDB breakpoint handling
+++
+++GDB inserts breakpoint in the form of the 'ta 1' instruction. The
+++GDB-integrated simulator will therefore recognize the breakpoint
+++instruction and return control to GDB. If the application uses
+++'ta 1', the breakpoint detection can be disabled with the -nogdb
+++switch. In this case however, GDB breakpoints will not work.
+++
++ 
++ 3. Simulator core
++ 
++-The SIS emulates the behavior of the 90C601E and 90C602E sparc IU and
++-FPU from Matra MHS. These are roughly equivalent to the Cypress C601
++-and C602.  The simulator is cycle true, i.e a simulator time is
+++In ERC32 mode, SIS emulates the behavior of the 90C601E and 90C602E
+++sparc IU and FPU from Matra MHS. These are roughly equivalent to the
+++Cypress C601 and C602. The simulator is cycle true, i.e a simulator time is
++ maintained and inremented according the IU and FPU instruction timing.
++ The parallel execution between the IU and FPU is modelled, as well as
++-stalls due to operand dependencies (FPU). The core interacts with the
++-user-defined memory modules through a number of functions. The memory
++-module must provide the following functions:
++-
++-int memory_read(asi,addr,data,ws)
++-int asi;
++-unsigned int addr;
++-unsigned int *data;
++-int *ws;
++-
++-int memory_write(asi,addr,data,sz,ws)
++-int asi;
++-unsigned int addr;
++-unsigned int *data;
++-int sz;
++-int *ws;
++-
++-int sis_memory_read(addr, data, length)
++-unsigned int addr;
++-char   *data;
++-unsigned int length;
++-
++-int sis_memory_write(addr, data, length)
++-unsigned int addr;
++-char    *data;
++-unsigned int length;
++-
++-int init_sim()
++-
++-int reset()
++-
++-int error_mode(pc)
++-unsigned int pc;
++-
++-memory_read() is used by the simulator to fetch instructions and
++-operands.  The address space identifier (asi) and address is passed as
++-parameters. The read data should be assigned to the data pointer
++-(*data) and the number of waitstate to *ws. 'memory_read' should return
++-0 on success and 1 on failure. A failure will cause a data or
++-instruction fetch trap. memory_read() always reads one 32-bit word.
++-
++-sis_memory_read() is used by the simulator to display and disassemble
++-memory contants. The function should copy 'length' bytes of the simulated
++-memory starting at 'addr' to '*data'.
++-The sis_memory_read() should return 1 on success and 0 on failure.
++-Failure should only be indicated if access to unimplemented memory is attempted.
++-
++-memory_write() is used to write to memory. In addition to the asi
++-and address parameters, the size of the written data is given by 'sz'.
++-The pointer *data points to the data to be written. The 'sz' is coded
++-as follows:
++-
++-  sz	access type
++-  0	  byte
++-  1	  halfword
++-  2	  word
++-  3	  double-word
++-
++-If a double word is written, the most significant word is in data[0] and
++-the least significant in data[1].
++-
++-sis_memory_write() is used by the simulator during loading of programs.
++-The function should copy 'length' bytes from *data to the simulated
++-memory starting at 'addr'. sis_memory_write() should return 1 on 
++-success and 0 on failure. Failure should only be indicated if access 
++-to unimplemented memory is attempted. See erc32.c for more details 
++-on how to define the memory emulation functions.
++-
++-The 'init_sim' is called once when the simulator is started. This function
++-should be used to perform initialisations of user defined memory or 
++-peripherals that only have to be done once, such as opening files etc.
++-
++-The 'reset' is called every time the simulator is reset, i.e. when a
++-'run' command is given. This function should be used to simulate a power
++-on reset of memory and peripherals.
++-
++-error_mode() is called by the simulator when the IU goes into error mode,
++-typically if a trap is caused when traps are disabled. The memory module
++-can then take actions, such as issue a reset.
++-
++-sys_reset() can be called by the memory module to reset the simulator. A
++-reset will empty the event queue and perform a power-on reset.
++-
++-4. Events and interrupts
++-
++-The simulator supports an event queue and the generation of processor
++-interrupts. The following functions are available to the user-defined
++-memory module:
++-
++-event(cfunc,arg,delta)
++-void (*cfunc)();
++-int arg;
++-unsigned int delta;
++-
++-set_int(level,callback,arg)
++-int level;
++-void (*callback)();
++-int arg;
++-
++-clear_int(level)
++-int level;
++-
++-sim_stop()
++-
++-The 'event' functions will schedule the execution of the function 'cfunc'
++-at time 'now + delta' clock cycles. The parameter 'arg' is passed as a 
++-parameter to 'cfunc'.
++-
++-The 'set_int' function set the processor interrupt 'level'. When the interrupt
++-is taken, the function 'callback' is called with the argument 'arg'. This
++-will also clear the interrupt. An interrupt can be cleared before it is
++-taken by calling 'clear_int' with the appropriate interrupt level.
++-
++-The sim_stop function is called each time the simulator stops execution.
++-It can be used to flush buffered devices to get a clean state during
++-single stepping etc.
+++stalls due to operand dependencies (FPU).
++ 
++-See 'erc32.c' for examples on how to use events and interrupts.
+++In Leon2/3 mode, the core emulates the Leon2/3 SPARC V8 core from
+++Gaisler Research. All SPARC V8 instructions are supported but
+++emaultion is not fully cycle-true as the cache is not emulated.
++ 
++ 5. Memory module
++ 
++-The supplied memory module (erc32.c) emulates the functions of memory and
+++The ERC32 memory module (erc32.c) emulates the functions of memory and
++ the MEC asic developed for the 90C601/2. It includes the following functions:
++ 
++ * UART A & B
++@@ -284,28 +216,38 @@ the MEC asic developed for the 90C601/2. It includes the following functions:
++ * 512 Kbyte ROM
++ * 4 Mbyte RAM
++ 
++-See README.erc32 on how the MEC functions are emulated.  For a detailed MEC
++-specification, look at the ERC32 home page at URL:
+++See README.erc32 on how the MEC functions are emulated.
+++
+++The Leon2 memory module (leon2.c) emulates on-chip peripherals and
+++external memory for a simple Leon2 system. The modules includes the
+++following functions:
+++
+++* AHB and APB buses
+++* One UART
+++* Interrupt controller
+++* Timer unit with two timers
+++* PROM/SRAM memory controller
+++* 16 Mbyte PROM, 16 Mbyte SRAM
++ 
++-http://www.estec.esa.nl/wsmwww/erc32
+++See README.leon2 for further details on Leon3 emulation.
++ 
++-6. Compile and linking programs
+++The Leon3 memory module (leon3.c) emulates on-chip peripherals and
+++external memory for a simple Leon3 system. The modules includes the
+++following functions:
++ 
++-The directory 'examples' contain some code fragments for SIS.
++-The script gccx indicates how the native sunos gcc and linker can be used
++-to produce executables for the simulator. To compile and link the provided
++-'hello.c', type 'gccx hello.c'. This will build the executable 'hello'.
++-Start the simulator by running 'startsim hello', and issue the command 'run.
++-After the program is terminated, the IU will be force to error mode through
++-a software trap and halt. 
+++* AHB and APB buses with plug&play
+++* UART (APBUART)
+++* Interrupt controller (IRQMP)
+++* Timer unit with two timers (GPTIMER)
+++* PROM/SRAM memory controller (SRCTRL)
+++* 16 Mbyte PROM, 16 Mbyte SRAM
++ 
++-The programs are linked with a start-up file, srt0.S. This file includes
++-the traptable and window underflow/overflow trap routines.
+++See README.leon3 for further details on Leon3 emulation.
++ 
++-7. IU and FPU instruction timing.
+++6. IU and FPU instruction timing.
++ 
++-The simulator provides cycle true simulation. The following table shows
++-the emulated instruction timing for 90C601E & 90C602E:
+++The simulator provides cycle true simulation for ERC32. The following table
+++shows the emulated instruction timing for 90C601E & 90C602E:
++ 
++ Instructions	      Cycles
++ 
++diff --git a/sim/erc32/config.in b/sim/erc32/config.in
++index 0db6f1e..0f712af 100644
++--- a/sim/erc32/config.in
+++++ b/sim/erc32/config.in
++@@ -1,5 +1,8 @@
++ /* config.in.  Generated from configure.ac by autoheader.  */
++ 
+++/* Define if building universal (internal helper macro) */
+++#undef AC_APPLE_UNIVERSAL_BUILD
+++
++ /* Define to 1 if translation of program messages to the user's native
++    language is requested. */
++ #undef ENABLE_NLS
++@@ -73,6 +76,10 @@
++ /* Define to 1 if you have the `__setfpucw' function. */
++ #undef HAVE___SETFPUCW
++ 
+++/* Define to the sub-directory in which libtool stores uninstalled libraries.
+++   */
+++#undef LT_OBJDIR
+++
++ /* Name of this package. */
++ #undef PACKAGE
++ 
++@@ -128,6 +135,18 @@
++ #endif
++ 
++ 
+++/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
+++   significant byte first (like Motorola and SPARC, unlike Intel). */
+++#if defined AC_APPLE_UNIVERSAL_BUILD
+++# if defined __BIG_ENDIAN__
+++#  define WORDS_BIGENDIAN 1
+++# endif
+++#else
+++# ifndef WORDS_BIGENDIAN
+++#  undef WORDS_BIGENDIAN
+++# endif
+++#endif
+++
++ /* Define to 1 if on MINIX. */
++ #undef _MINIX
++ 
++diff --git a/sim/erc32/configure b/sim/erc32/configure
++index b8fd852..9d1b373 100755
++--- a/sim/erc32/configure
+++++ b/sim/erc32/configure
++@@ -1,10 +1,10 @@
++ #! /bin/sh
++ # Guess values for system-dependent variables and create Makefiles.
++-# Generated by GNU Autoconf 2.64.
+++# Generated by GNU Autoconf 2.69.
+++#
+++#
+++# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
++ #
++-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
++-# Foundation, Inc.
++ #
++ # This configure script is free software; the Free Software Foundation
++ # gives unlimited permission to copy, distribute and modify it.
++@@ -87,6 +87,7 @@ fi
++ IFS=" ""	$as_nl"
++ 
++ # Find who we are.  Look in the path if we contain no directory separator.
+++as_myself=
++ case $0 in #((
++   *[\\/]* ) as_myself=$0 ;;
++   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++@@ -131,6 +132,31 @@ export LANGUAGE
++ # CDPATH.
++ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++ 
+++# Use a proper internal environment variable to ensure we don't fall
+++  # into an infinite loop, continuously re-executing ourselves.
+++  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
+++    _as_can_reexec=no; export _as_can_reexec;
+++    # We cannot yet assume a decent shell, so we have to provide a
+++# neutralization value for shells without unset; and this also
+++# works around shells that cannot unset nonexistent variables.
+++# Preserve -v and -x to the replacement shell.
+++BASH_ENV=/dev/null
+++ENV=/dev/null
+++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+++case $- in # ((((
+++  *v*x* | *x*v* ) as_opts=-vx ;;
+++  *v* ) as_opts=-v ;;
+++  *x* ) as_opts=-x ;;
+++  * ) as_opts= ;;
+++esac
+++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+++# Admittedly, this is quite paranoid, since all the known shells bail
+++# out after a failed `exec'.
+++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+++as_fn_exit 255
+++  fi
+++  # We don't want this to propagate to other subprocesses.
+++          { _as_can_reexec=; unset _as_can_reexec;}
++ if test "x$CONFIG_SHELL" = x; then
++   as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
++   emulate sh
++@@ -164,7 +190,8 @@ if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
++ else
++   exitcode=1; echo positional parameters were not saved.
++ fi
++-test x\$exitcode = x0 || exit 1"
+++test x\$exitcode = x0 || exit 1
+++test -x / || exit 1"
++   as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
++   as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
++   eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
++@@ -217,14 +244,25 @@ IFS=$as_save_IFS
++ 
++ 
++       if test "x$CONFIG_SHELL" != x; then :
++-  # We cannot yet assume a decent shell, so we have to provide a
++-	# neutralization value for shells without unset; and this also
++-	# works around shells that cannot unset nonexistent variables.
++-	BASH_ENV=/dev/null
++-	ENV=/dev/null
++-	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++-	export CONFIG_SHELL
++-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+++  export CONFIG_SHELL
+++             # We cannot yet assume a decent shell, so we have to provide a
+++# neutralization value for shells without unset; and this also
+++# works around shells that cannot unset nonexistent variables.
+++# Preserve -v and -x to the replacement shell.
+++BASH_ENV=/dev/null
+++ENV=/dev/null
+++(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+++case $- in # ((((
+++  *v*x* | *x*v* ) as_opts=-vx ;;
+++  *v* ) as_opts=-v ;;
+++  *x* ) as_opts=-x ;;
+++  * ) as_opts= ;;
+++esac
+++exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
+++# Admittedly, this is quite paranoid, since all the known shells bail
+++# out after a failed `exec'.
+++$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
+++exit 255
++ fi
++ 
++     if test x$as_have_required = xno; then :
++@@ -322,10 +360,18 @@ $as_echo X"$as_dir" |
++       test -d "$as_dir" && break
++     done
++     test -z "$as_dirs" || eval "mkdir $as_dirs"
++-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
++ 
++ 
++ } # as_fn_mkdir_p
+++
+++# as_fn_executable_p FILE
+++# -----------------------
+++# Test if FILE is an executable regular file.
+++as_fn_executable_p ()
+++{
+++  test -f "$1" && test -x "$1"
+++} # as_fn_executable_p
++ # as_fn_append VAR VALUE
++ # ----------------------
++ # Append the text in VALUE to the end of the definition contained in VAR. Take
++@@ -362,19 +408,19 @@ else
++ fi # as_fn_arith
++ 
++ 
++-# as_fn_error ERROR [LINENO LOG_FD]
++-# ---------------------------------
+++# as_fn_error STATUS ERROR [LINENO LOG_FD]
+++# ----------------------------------------
++ # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++ # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++-# script with status $?, using 1 if that was 0.
+++# script with STATUS, using 1 if that was 0.
++ as_fn_error ()
++ {
++-  as_status=$?; test $as_status -eq 0 && as_status=1
++-  if test "$3"; then
++-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+++  as_status=$1; test $as_status -eq 0 && as_status=1
+++  if test "$4"; then
+++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
++   fi
++-  $as_echo "$as_me: error: $1" >&2
+++  $as_echo "$as_me: error: $2" >&2
++   as_fn_exit $as_status
++ } # as_fn_error
++ 
++@@ -447,6 +493,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits
++   chmod +x "$as_me.lineno" ||
++     { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
++ 
+++  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
+++  # already done that, so ensure we don't try to do so again and fall
+++  # in an infinite loop.  This has already happened in practice.
+++  _as_can_reexec=no; export _as_can_reexec
++   # Don't try to exec as it changes $[0], causing all sort of problems
++   # (the dirname of $[0] is not the place where we might find the
++   # original and so on.  Autoconf is especially sensitive to this).
++@@ -481,16 +531,16 @@ if (echo >conf$$.file) 2>/dev/null; then
++     # ... but there are two gotchas:
++     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++-    # In both cases, we have to default to `cp -p'.
+++    # In both cases, we have to default to `cp -pR'.
++     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++-      as_ln_s='cp -p'
+++      as_ln_s='cp -pR'
++   elif ln conf$$.file conf$$ 2>/dev/null; then
++     as_ln_s=ln
++   else
++-    as_ln_s='cp -p'
+++    as_ln_s='cp -pR'
++   fi
++ else
++-  as_ln_s='cp -p'
+++  as_ln_s='cp -pR'
++ fi
++ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++ rmdir conf$$.dir 2>/dev/null
++@@ -502,28 +552,8 @@ else
++   as_mkdir_p=false
++ fi
++ 
++-if test -x / >/dev/null 2>&1; then
++-  as_test_x='test -x'
++-else
++-  if ls -dL / >/dev/null 2>&1; then
++-    as_ls_L_option=L
++-  else
++-    as_ls_L_option=
++-  fi
++-  as_test_x='
++-    eval sh -c '\''
++-      if test -d "$1"; then
++-	test -d "$1/.";
++-      else
++-	case $1 in #(
++-	-*)set "./$1";;
++-	esac;
++-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++-	???[sx]*):;;*)false;;esac;fi
++-    '\'' sh
++-  '
++-fi
++-as_executable_p=$as_test_x
+++as_test_x='test -x'
+++as_executable_p=as_fn_executable_p
++ 
++ # Sed expression to map a string onto a valid CPP name.
++ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++@@ -534,10 +564,11 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++ SHELL=${CONFIG_SHELL-/bin/sh}
++ 
++ 
++-exec 7<&0 </dev/null 6>&1
+++test -n "$DJDIR" || exec 7<&0 </dev/null
+++exec 6>&1
++ 
++ # Name of the host.
++-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+++# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
++ # so uname gets run too.
++ ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
++ 
++@@ -833,8 +864,9 @@ do
++   fi
++ 
++   case $ac_option in
++-  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++-  *)	ac_optarg=yes ;;
+++  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+++  *=)   ac_optarg= ;;
+++  *)    ac_optarg=yes ;;
++   esac
++ 
++   # Accept the important Cygnus configure options, so we can diagnose typos.
++@@ -879,7 +911,7 @@ do
++     ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
++     # Reject names that are not valid shell variable names.
++     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++-      as_fn_error "invalid feature name: $ac_useropt"
+++      as_fn_error $? "invalid feature name: $ac_useropt"
++     ac_useropt_orig=$ac_useropt
++     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++     case $ac_user_opts in
++@@ -905,7 +937,7 @@ do
++     ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
++     # Reject names that are not valid shell variable names.
++     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++-      as_fn_error "invalid feature name: $ac_useropt"
+++      as_fn_error $? "invalid feature name: $ac_useropt"
++     ac_useropt_orig=$ac_useropt
++     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++     case $ac_user_opts in
++@@ -1109,7 +1141,7 @@ do
++     ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
++     # Reject names that are not valid shell variable names.
++     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++-      as_fn_error "invalid package name: $ac_useropt"
+++      as_fn_error $? "invalid package name: $ac_useropt"
++     ac_useropt_orig=$ac_useropt
++     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++     case $ac_user_opts in
++@@ -1125,7 +1157,7 @@ do
++     ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
++     # Reject names that are not valid shell variable names.
++     expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++-      as_fn_error "invalid package name: $ac_useropt"
+++      as_fn_error $? "invalid package name: $ac_useropt"
++     ac_useropt_orig=$ac_useropt
++     ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++     case $ac_user_opts in
++@@ -1155,8 +1187,8 @@ do
++   | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
++     x_libraries=$ac_optarg ;;
++ 
++-  -*) as_fn_error "unrecognized option: \`$ac_option'
++-Try \`$0 --help' for more information."
+++  -*) as_fn_error $? "unrecognized option: \`$ac_option'
+++Try \`$0 --help' for more information"
++     ;;
++ 
++   *=*)
++@@ -1164,7 +1196,7 @@ Try \`$0 --help' for more information."
++     # Reject names that are not valid shell variable names.
++     case $ac_envvar in #(
++       '' | [0-9]* | *[!_$as_cr_alnum]* )
++-      as_fn_error "invalid variable name: \`$ac_envvar'" ;;
+++      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
++     esac
++     eval $ac_envvar=\$ac_optarg
++     export $ac_envvar ;;
++@@ -1174,7 +1206,7 @@ Try \`$0 --help' for more information."
++     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
++     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
++-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+++    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
++     ;;
++ 
++   esac
++@@ -1182,13 +1214,13 @@ done
++ 
++ if test -n "$ac_prev"; then
++   ac_option=--`echo $ac_prev | sed 's/_/-/g'`
++-  as_fn_error "missing argument to $ac_option"
+++  as_fn_error $? "missing argument to $ac_option"
++ fi
++ 
++ if test -n "$ac_unrecognized_opts"; then
++   case $enable_option_checking in
++     no) ;;
++-    fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
+++    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
++     *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
++   esac
++ fi
++@@ -1211,7 +1243,7 @@ do
++     [\\/$]* | ?:[\\/]* )  continue;;
++     NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
++   esac
++-  as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
+++  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
++ done
++ 
++ # There might be people who depend on the old broken behavior: `$host'
++@@ -1225,8 +1257,6 @@ target=$target_alias
++ if test "x$host_alias" != x; then
++   if test "x$build_alias" = x; then
++     cross_compiling=maybe
++-    $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
++-    If a cross compiler is detected then cross compile mode will be used." >&2
++   elif test "x$build_alias" != "x$host_alias"; then
++     cross_compiling=yes
++   fi
++@@ -1241,9 +1271,9 @@ test "$silent" = yes && exec 6>/dev/null
++ ac_pwd=`pwd` && test -n "$ac_pwd" &&
++ ac_ls_di=`ls -di .` &&
++ ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
++-  as_fn_error "working directory cannot be determined"
+++  as_fn_error $? "working directory cannot be determined"
++ test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
++-  as_fn_error "pwd does not report name of working directory"
+++  as_fn_error $? "pwd does not report name of working directory"
++ 
++ 
++ # Find the source files, if location was not specified.
++@@ -1282,11 +1312,11 @@ else
++ fi
++ if test ! -r "$srcdir/$ac_unique_file"; then
++   test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
++-  as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
+++  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
++ fi
++ ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
++ ac_abs_confdir=`(
++-	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
+++	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
++ 	pwd)`
++ # When building in place, set srcdir=.
++ if test "$ac_abs_confdir" = "$ac_pwd"; then
++@@ -1326,7 +1356,7 @@ Configuration:
++       --help=short        display options specific to this package
++       --help=recursive    display the short help of all the included packages
++   -V, --version           display version information and exit
++-  -q, --quiet, --silent   do not print \`checking...' messages
+++  -q, --quiet, --silent   do not print \`checking ...' messages
++       --cache-file=FILE   cache test results in FILE [disabled]
++   -C, --config-cache      alias for \`--cache-file=config.cache'
++   -n, --no-create         do not create output files
++@@ -1420,7 +1450,7 @@ Some influential environment variables:
++   LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
++               nonstandard directory <lib dir>
++   LIBS        libraries to pass to the linker, e.g. -l<library>
++-  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+++  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
++               you have headers in a nonstandard directory <include dir>
++   CPP         C preprocessor
++ 
++@@ -1491,9 +1521,9 @@ test -n "$ac_init_help" && exit $ac_status
++ if $ac_init_version; then
++   cat <<\_ACEOF
++ configure
++-generated by GNU Autoconf 2.64
+++generated by GNU Autoconf 2.69
++ 
++-Copyright (C) 2009 Free Software Foundation, Inc.
+++Copyright (C) 2012 Free Software Foundation, Inc.
++ This configure script is free software; the Free Software Foundation
++ gives unlimited permission to copy, distribute and modify it.
++ _ACEOF
++@@ -1537,8 +1567,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
++ 
++ 	ac_retval=1
++ fi
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++-  return $ac_retval
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+++  as_fn_set_status $ac_retval
++ 
++ } # ac_fn_c_try_compile
++ 
++@@ -1563,7 +1593,7 @@ $as_echo "$ac_try_echo"; } >&5
++     mv -f conftest.er1 conftest.err
++   fi
++   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++-  test $ac_status = 0; } >/dev/null && {
+++  test $ac_status = 0; } > conftest.i && {
++ 	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ 	 test ! -s conftest.err
++        }; then :
++@@ -1574,8 +1604,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
++ 
++     ac_retval=1
++ fi
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++-  return $ac_retval
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+++  as_fn_set_status $ac_retval
++ 
++ } # ac_fn_c_try_cpp
++ 
++@@ -1587,10 +1617,10 @@ fi
++ ac_fn_c_check_header_mongrel ()
++ {
++   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++-  if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+++  if eval \${$3+:} false; then :
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++ $as_echo_n "checking for $2... " >&6; }
++-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+++if eval \${$3+:} false; then :
++   $as_echo_n "(cached) " >&6
++ fi
++ eval ac_res=\$$3
++@@ -1626,7 +1656,7 @@ if ac_fn_c_try_cpp "$LINENO"; then :
++ else
++   ac_header_preproc=no
++ fi
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.err conftest.i conftest.$ac_ext
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
++ $as_echo "$ac_header_preproc" >&6; }
++ 
++@@ -1653,7 +1683,7 @@ $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
++ esac
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++ $as_echo_n "checking for $2... " >&6; }
++-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+++if eval \${$3+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   eval "$3=\$ac_header_compiler"
++@@ -1662,7 +1692,7 @@ eval ac_res=\$$3
++ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++ $as_echo "$ac_res" >&6; }
++ fi
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++ 
++ } # ac_fn_c_check_header_mongrel
++ 
++@@ -1703,8 +1733,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
++        ac_retval=$ac_status
++ fi
++   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++-  return $ac_retval
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+++  as_fn_set_status $ac_retval
++ 
++ } # ac_fn_c_try_run
++ 
++@@ -1717,7 +1747,7 @@ ac_fn_c_check_header_compile ()
++   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++ $as_echo_n "checking for $2... " >&6; }
++-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+++if eval \${$3+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -1735,7 +1765,7 @@ fi
++ eval ac_res=\$$3
++ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++ $as_echo "$ac_res" >&6; }
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++ 
++ } # ac_fn_c_check_header_compile
++ 
++@@ -1766,7 +1796,7 @@ $as_echo "$ac_try_echo"; } >&5
++ 	 test ! -s conftest.err
++        } && test -s conftest$ac_exeext && {
++ 	 test "$cross_compiling" = yes ||
++-	 $as_test_x conftest$ac_exeext
+++	 test -x conftest$ac_exeext
++        }; then :
++   ac_retval=0
++ else
++@@ -1780,8 +1810,8 @@ fi
++   # interfere with the next link command; also delete a directory that is
++   # left behind by Apple's compiler.  We do this before executing the actions.
++   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++-  return $ac_retval
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+++  as_fn_set_status $ac_retval
++ 
++ } # ac_fn_c_try_link
++ 
++@@ -1793,7 +1823,7 @@ ac_fn_c_check_func ()
++   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++ $as_echo_n "checking for $2... " >&6; }
++-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
+++if eval \${$3+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -1848,7 +1878,7 @@ fi
++ eval ac_res=\$$3
++ 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++ $as_echo "$ac_res" >&6; }
++-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+++  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
++ 
++ } # ac_fn_c_check_func
++ cat >config.log <<_ACEOF
++@@ -1856,7 +1886,7 @@ This file contains any messages produced by compilers while
++ running configure, to aid debugging if configure makes a mistake.
++ 
++ It was created by $as_me, which was
++-generated by GNU Autoconf 2.64.  Invocation command line was
+++generated by GNU Autoconf 2.69.  Invocation command line was
++ 
++   $ $0 $@
++ 
++@@ -1966,11 +1996,9 @@ trap 'exit_status=$?
++   {
++     echo
++ 
++-    cat <<\_ASBOX
++-## ---------------- ##
+++    $as_echo "## ---------------- ##
++ ## Cache variables. ##
++-## ---------------- ##
++-_ASBOX
+++## ---------------- ##"
++     echo
++     # The following way of writing the cache mishandles newlines in values,
++ (
++@@ -2004,11 +2032,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++ )
++     echo
++ 
++-    cat <<\_ASBOX
++-## ----------------- ##
+++    $as_echo "## ----------------- ##
++ ## Output variables. ##
++-## ----------------- ##
++-_ASBOX
+++## ----------------- ##"
++     echo
++     for ac_var in $ac_subst_vars
++     do
++@@ -2021,11 +2047,9 @@ _ASBOX
++     echo
++ 
++     if test -n "$ac_subst_files"; then
++-      cat <<\_ASBOX
++-## ------------------- ##
+++      $as_echo "## ------------------- ##
++ ## File substitutions. ##
++-## ------------------- ##
++-_ASBOX
+++## ------------------- ##"
++       echo
++       for ac_var in $ac_subst_files
++       do
++@@ -2039,11 +2063,9 @@ _ASBOX
++     fi
++ 
++     if test -s confdefs.h; then
++-      cat <<\_ASBOX
++-## ----------- ##
+++      $as_echo "## ----------- ##
++ ## confdefs.h. ##
++-## ----------- ##
++-_ASBOX
+++## ----------- ##"
++       echo
++       cat confdefs.h
++       echo
++@@ -2098,7 +2120,12 @@ _ACEOF
++ ac_site_file1=NONE
++ ac_site_file2=NONE
++ if test -n "$CONFIG_SITE"; then
++-  ac_site_file1=$CONFIG_SITE
+++  # We do not want a PATH search for config.site.
+++  case $CONFIG_SITE in #((
+++    -*)  ac_site_file1=./$CONFIG_SITE;;
+++    */*) ac_site_file1=$CONFIG_SITE;;
+++    *)   ac_site_file1=./$CONFIG_SITE;;
+++  esac
++ elif test "x$prefix" != xNONE; then
++   ac_site_file1=$prefix/share/config.site
++   ac_site_file2=$prefix/etc/config.site
++@@ -2109,18 +2136,22 @@ fi
++ for ac_site_file in "$ac_site_file1" "$ac_site_file2"
++ do
++   test "x$ac_site_file" = xNONE && continue
++-  if test -r "$ac_site_file"; then
+++  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
++     { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
++ $as_echo "$as_me: loading site script $ac_site_file" >&6;}
++     sed 's/^/| /' "$ac_site_file" >&5
++-    . "$ac_site_file"
+++    . "$ac_site_file" \
+++      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+++as_fn_error $? "failed to load site script $ac_site_file
+++See \`config.log' for more details" "$LINENO" 5; }
++   fi
++ done
++ 
++ if test -r "$cache_file"; then
++-  # Some versions of bash will fail to source /dev/null (special
++-  # files actually), so we avoid doing that.
++-  if test -f "$cache_file"; then
+++  # Some versions of bash will fail to source /dev/null (special files
+++  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
+++  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
++     { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
++ $as_echo "$as_me: loading cache $cache_file" >&6;}
++     case $cache_file in
++@@ -2189,7 +2220,7 @@ if $ac_cache_corrupted; then
++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++   { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
++ $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
++-  as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
+++  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
++ fi
++ ## -------------------- ##
++ ## Main body of script. ##
++@@ -2249,21 +2280,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
++ 
++ 
++ 
++-# _AC_CHECK_DECL_BODY
++-# -------------------
++-# Shell function body for AC_CHECK_DECL.
++-# _AC_CHECK_DECL_BODY
++-
++-# _AC_CHECK_DECLS(SYMBOL, ACTION-IF_FOUND, ACTION-IF-NOT-FOUND,
++-#                 INCLUDES)
++-# -------------------------------------------------------------
++-# Helper to AC_CHECK_DECLS, which generates the check for a single
++-# SYMBOL with INCLUDES, performs the AC_DEFINE, then expands
++-# ACTION-IF-FOUND or ACTION-IF-NOT-FOUND.
++-
++-
++-
++-
++ 
++ 
++ 
++@@ -4057,7 +4073,7 @@ if test -n "$ac_tool_prefix"; then
++ set dummy ${ac_tool_prefix}gcc; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_CC+set}" = set; then :
+++if ${ac_cv_prog_CC+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$CC"; then
++@@ -4069,7 +4085,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_CC="${ac_tool_prefix}gcc"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -4097,7 +4113,7 @@ if test -z "$ac_cv_prog_CC"; then
++ set dummy gcc; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_CC+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_CC"; then
++@@ -4109,7 +4125,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_CC="gcc"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -4150,7 +4166,7 @@ if test -z "$CC"; then
++ set dummy ${ac_tool_prefix}cc; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_CC+set}" = set; then :
+++if ${ac_cv_prog_CC+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$CC"; then
++@@ -4162,7 +4178,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_CC="${ac_tool_prefix}cc"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -4190,7 +4206,7 @@ if test -z "$CC"; then
++ set dummy cc; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_CC+set}" = set; then :
+++if ${ac_cv_prog_CC+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$CC"; then
++@@ -4203,7 +4219,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
++        ac_prog_rejected=yes
++        continue
++@@ -4249,7 +4265,7 @@ if test -z "$CC"; then
++ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_CC+set}" = set; then :
+++if ${ac_cv_prog_CC+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$CC"; then
++@@ -4261,7 +4277,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -4293,7 +4309,7 @@ do
++ set dummy $ac_prog; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_CC+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_CC"; then
++@@ -4305,7 +4321,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_CC="$ac_prog"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -4347,8 +4363,8 @@ fi
++ 
++ test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++-as_fn_error "no acceptable C compiler found in \$PATH
++-See \`config.log' for more details." "$LINENO" 5; }
+++as_fn_error $? "no acceptable C compiler found in \$PATH
+++See \`config.log' for more details" "$LINENO" 5; }
++ 
++ # Provide some information about the compiler.
++ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
++@@ -4369,8 +4385,8 @@ $as_echo "$ac_try_echo"; } >&5
++ ... rest of stderr output deleted ...
++          10q' conftest.err >conftest.er1
++     cat conftest.er1 >&5
++-    rm -f conftest.er1 conftest.err
++   fi
+++  rm -f conftest.er1 conftest.err
++   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++   test $ac_status = 0; }
++ done
++@@ -4387,12 +4403,12 @@ main ()
++ }
++ _ACEOF
++ ac_clean_files_save=$ac_clean_files
++-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
+++ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
++ # Try to create an executable without -o first, disregard a.out.
++ # It will help us diagnose broken compilers, and finding out an intuition
++ # of exeext.
++-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
++-$as_echo_n "checking for C compiler default output file name... " >&6; }
+++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
+++$as_echo_n "checking whether the C compiler works... " >&6; }
++ ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
++ 
++ # The possible output files:
++@@ -4454,62 +4470,28 @@ test "$ac_cv_exeext" = no && ac_cv_exeext=
++ else
++   ac_file=''
++ fi
++-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
++-$as_echo "$ac_file" >&6; }
++ if test -z "$ac_file"; then :
++-  $as_echo "$as_me: failed program was:" >&5
+++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+++$as_echo "no" >&6; }
+++$as_echo "$as_me: failed program was:" >&5
++ sed 's/^/| /' conftest.$ac_ext >&5
++ 
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++-{ as_fn_set_status 77
++-as_fn_error "C compiler cannot create executables
++-See \`config.log' for more details." "$LINENO" 5; }; }
+++as_fn_error 77 "C compiler cannot create executables
+++See \`config.log' for more details" "$LINENO" 5; }
+++else
+++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+++$as_echo "yes" >&6; }
++ fi
+++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
+++$as_echo_n "checking for C compiler default output file name... " >&6; }
+++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
+++$as_echo "$ac_file" >&6; }
++ ac_exeext=$ac_cv_exeext
++ 
++-# Check that the compiler produces executables we can run.  If not, either
++-# the compiler is broken, or we cross compile.
++-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
++-$as_echo_n "checking whether the C compiler works... " >&6; }
++-# If not cross compiling, check that we can run a simple program.
++-if test "$cross_compiling" != yes; then
++-  if { ac_try='./$ac_file'
++-  { { case "(($ac_try" in
++-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++-  *) ac_try_echo=$ac_try;;
++-esac
++-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++-$as_echo "$ac_try_echo"; } >&5
++-  (eval "$ac_try") 2>&5
++-  ac_status=$?
++-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++-  test $ac_status = 0; }; }; then
++-    cross_compiling=no
++-  else
++-    if test "$cross_compiling" = maybe; then
++-	cross_compiling=yes
++-    else
++-	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++-as_fn_error "cannot run C compiled programs.
++-If you meant to cross compile, use \`--host'.
++-See \`config.log' for more details." "$LINENO" 5; }
++-    fi
++-  fi
++-fi
++-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++-$as_echo "yes" >&6; }
++-
++-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
+++rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
++ ac_clean_files=$ac_clean_files_save
++-# Check that the compiler produces executables we can run.  If not, either
++-# the compiler is broken, or we cross compile.
++-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
++-$as_echo_n "checking whether we are cross compiling... " >&6; }
++-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
++-$as_echo "$cross_compiling" >&6; }
++-
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
++ $as_echo_n "checking for suffix of executables... " >&6; }
++ if { { ac_try="$ac_link"
++@@ -4539,19 +4521,78 @@ done
++ else
++   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++-as_fn_error "cannot compute suffix of executables: cannot compile and link
++-See \`config.log' for more details." "$LINENO" 5; }
+++as_fn_error $? "cannot compute suffix of executables: cannot compile and link
+++See \`config.log' for more details" "$LINENO" 5; }
++ fi
++-rm -f conftest$ac_cv_exeext
+++rm -f conftest conftest$ac_cv_exeext
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
++ $as_echo "$ac_cv_exeext" >&6; }
++ 
++ rm -f conftest.$ac_ext
++ EXEEXT=$ac_cv_exeext
++ ac_exeext=$EXEEXT
+++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++#include <stdio.h>
+++int
+++main ()
+++{
+++FILE *f = fopen ("conftest.out", "w");
+++ return ferror (f) || fclose (f) != 0;
+++
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++ac_clean_files="$ac_clean_files conftest.out"
+++# Check that the compiler produces executables we can run.  If not, either
+++# the compiler is broken, or we cross compile.
+++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
+++$as_echo_n "checking whether we are cross compiling... " >&6; }
+++if test "$cross_compiling" != yes; then
+++  { { ac_try="$ac_link"
+++case "(($ac_try" in
+++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+++  *) ac_try_echo=$ac_try;;
+++esac
+++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+++$as_echo "$ac_try_echo"; } >&5
+++  (eval "$ac_link") 2>&5
+++  ac_status=$?
+++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+++  test $ac_status = 0; }
+++  if { ac_try='./conftest$ac_cv_exeext'
+++  { { case "(($ac_try" in
+++  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+++  *) ac_try_echo=$ac_try;;
+++esac
+++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+++$as_echo "$ac_try_echo"; } >&5
+++  (eval "$ac_try") 2>&5
+++  ac_status=$?
+++  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+++  test $ac_status = 0; }; }; then
+++    cross_compiling=no
+++  else
+++    if test "$cross_compiling" = maybe; then
+++	cross_compiling=yes
+++    else
+++	{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+++as_fn_error $? "cannot run C compiled programs.
+++If you meant to cross compile, use \`--host'.
+++See \`config.log' for more details" "$LINENO" 5; }
+++    fi
+++  fi
+++fi
+++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
+++$as_echo "$cross_compiling" >&6; }
+++
+++rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
+++ac_clean_files=$ac_clean_files_save
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
++ $as_echo_n "checking for suffix of object files... " >&6; }
++-if test "${ac_cv_objext+set}" = set; then :
+++if ${ac_cv_objext+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -4591,8 +4632,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
++ 
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++-as_fn_error "cannot compute suffix of object files: cannot compile
++-See \`config.log' for more details." "$LINENO" 5; }
+++as_fn_error $? "cannot compute suffix of object files: cannot compile
+++See \`config.log' for more details" "$LINENO" 5; }
++ fi
++ rm -f conftest.$ac_cv_objext conftest.$ac_ext
++ fi
++@@ -4602,7 +4643,7 @@ OBJEXT=$ac_cv_objext
++ ac_objext=$OBJEXT
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
++ $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
++-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+++if ${ac_cv_c_compiler_gnu+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -4639,7 +4680,7 @@ ac_test_CFLAGS=${CFLAGS+set}
++ ac_save_CFLAGS=$CFLAGS
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
++ $as_echo_n "checking whether $CC accepts -g... " >&6; }
++-if test "${ac_cv_prog_cc_g+set}" = set; then :
+++if ${ac_cv_prog_cc_g+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_save_c_werror_flag=$ac_c_werror_flag
++@@ -4717,7 +4758,7 @@ else
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
++ $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
++-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+++if ${ac_cv_prog_cc_c89+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_cv_prog_cc_c89=no
++@@ -4726,8 +4767,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ /* end confdefs.h.  */
++ #include <stdarg.h>
++ #include <stdio.h>
++-#include <sys/types.h>
++-#include <sys/stat.h>
+++struct stat;
++ /* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
++ struct buf { int x; };
++ FILE * (*rcsopen) (struct buf *, struct stat *, int);
++@@ -4814,16 +4854,22 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
++ 
++ ac_aux_dir=
++ for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
++-  for ac_t in install-sh install.sh shtool; do
++-    if test -f "$ac_dir/$ac_t"; then
++-      ac_aux_dir=$ac_dir
++-      ac_install_sh="$ac_aux_dir/$ac_t -c"
++-      break 2
++-    fi
++-  done
+++  if test -f "$ac_dir/install-sh"; then
+++    ac_aux_dir=$ac_dir
+++    ac_install_sh="$ac_aux_dir/install-sh -c"
+++    break
+++  elif test -f "$ac_dir/install.sh"; then
+++    ac_aux_dir=$ac_dir
+++    ac_install_sh="$ac_aux_dir/install.sh -c"
+++    break
+++  elif test -f "$ac_dir/shtool"; then
+++    ac_aux_dir=$ac_dir
+++    ac_install_sh="$ac_aux_dir/shtool install -c"
+++    break
+++  fi
++ done
++ if test -z "$ac_aux_dir"; then
++-  as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
+++  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
++ fi
++ 
++ # These three variables are undocumented and unsupported,
++@@ -4837,27 +4883,27 @@ ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
++ 
++ # Make sure we can run config.sub.
++ $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
++-  as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
+++  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
++ $as_echo_n "checking build system type... " >&6; }
++-if test "${ac_cv_build+set}" = set; then :
+++if ${ac_cv_build+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_build_alias=$build_alias
++ test "x$ac_build_alias" = x &&
++   ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
++ test "x$ac_build_alias" = x &&
++-  as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
+++  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
++ ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
++-  as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
+++  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
++ 
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
++ $as_echo "$ac_cv_build" >&6; }
++ case $ac_cv_build in
++ *-*-*) ;;
++-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
+++*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
++ esac
++ build=$ac_cv_build
++ ac_save_IFS=$IFS; IFS='-'
++@@ -4875,14 +4921,14 @@ case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
++ $as_echo_n "checking host system type... " >&6; }
++-if test "${ac_cv_host+set}" = set; then :
+++if ${ac_cv_host+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test "x$host_alias" = x; then
++   ac_cv_host=$ac_cv_build
++ else
++   ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
++-    as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
+++    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
++ fi
++ 
++ fi
++@@ -4890,7 +4936,7 @@ fi
++ $as_echo "$ac_cv_host" >&6; }
++ case $ac_cv_host in
++ *-*-*) ;;
++-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
+++*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
++ esac
++ host=$ac_cv_host
++ ac_save_IFS=$IFS; IFS='-'
++@@ -4908,14 +4954,14 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5
++ $as_echo_n "checking target system type... " >&6; }
++-if test "${ac_cv_target+set}" = set; then :
+++if ${ac_cv_target+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test "x$target_alias" = x; then
++   ac_cv_target=$ac_cv_host
++ else
++   ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` ||
++-    as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
+++    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5
++ fi
++ 
++ fi
++@@ -4923,7 +4969,7 @@ fi
++ $as_echo "$ac_cv_target" >&6; }
++ case $ac_cv_target in
++ *-*-*) ;;
++-*) as_fn_error "invalid value of canonical target" "$LINENO" 5;;
+++*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;;
++ esac
++ target=$ac_cv_target
++ ac_save_IFS=$IFS; IFS='-'
++@@ -4958,7 +5004,7 @@ if test -n "$CPP" && test -d "$CPP"; then
++   CPP=
++ fi
++ if test -z "$CPP"; then
++-  if test "${ac_cv_prog_CPP+set}" = set; then :
+++  if ${ac_cv_prog_CPP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++       # Double quotes because CPP needs to be expanded
++@@ -4988,7 +5034,7 @@ else
++   # Broken: fails on valid input.
++ continue
++ fi
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.err conftest.i conftest.$ac_ext
++ 
++   # OK, works on sane cases.  Now check whether nonexistent headers
++   # can be detected and how.
++@@ -5004,11 +5050,11 @@ else
++ ac_preproc_ok=:
++ break
++ fi
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.err conftest.i conftest.$ac_ext
++ 
++ done
++ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.i conftest.err conftest.$ac_ext
++ if $ac_preproc_ok; then :
++   break
++ fi
++@@ -5047,7 +5093,7 @@ else
++   # Broken: fails on valid input.
++ continue
++ fi
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.err conftest.i conftest.$ac_ext
++ 
++   # OK, works on sane cases.  Now check whether nonexistent headers
++   # can be detected and how.
++@@ -5063,18 +5109,18 @@ else
++ ac_preproc_ok=:
++ break
++ fi
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.err conftest.i conftest.$ac_ext
++ 
++ done
++ # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++-rm -f conftest.err conftest.$ac_ext
+++rm -f conftest.i conftest.err conftest.$ac_ext
++ if $ac_preproc_ok; then :
++ 
++ else
++   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++-as_fn_error "C preprocessor \"$CPP\" fails sanity check
++-See \`config.log' for more details." "$LINENO" 5; }
+++as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
+++See \`config.log' for more details" "$LINENO" 5; }
++ fi
++ 
++ ac_ext=c
++@@ -5086,7 +5132,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
++ $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
++-if test "${ac_cv_path_GREP+set}" = set; then :
+++if ${ac_cv_path_GREP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -z "$GREP"; then
++@@ -5100,7 +5146,7 @@ do
++     for ac_prog in grep ggrep; do
++     for ac_exec_ext in '' $ac_executable_extensions; do
++       ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
++-      { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+++      as_fn_executable_p "$ac_path_GREP" || continue
++ # Check for GNU ac_path_GREP and select it if it is found.
++   # Check for GNU $ac_path_GREP
++ case `"$ac_path_GREP" --version 2>&1` in
++@@ -5135,7 +5181,7 @@ esac
++   done
++ IFS=$as_save_IFS
++   if test -z "$ac_cv_path_GREP"; then
++-    as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+++    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++   fi
++ else
++   ac_cv_path_GREP=$GREP
++@@ -5149,7 +5195,7 @@ $as_echo "$ac_cv_path_GREP" >&6; }
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
++ $as_echo_n "checking for egrep... " >&6; }
++-if test "${ac_cv_path_EGREP+set}" = set; then :
+++if ${ac_cv_path_EGREP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
++@@ -5166,7 +5212,7 @@ do
++     for ac_prog in egrep; do
++     for ac_exec_ext in '' $ac_executable_extensions; do
++       ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
++-      { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+++      as_fn_executable_p "$ac_path_EGREP" || continue
++ # Check for GNU ac_path_EGREP and select it if it is found.
++   # Check for GNU $ac_path_EGREP
++ case `"$ac_path_EGREP" --version 2>&1` in
++@@ -5201,7 +5247,7 @@ esac
++   done
++ IFS=$as_save_IFS
++   if test -z "$ac_cv_path_EGREP"; then
++-    as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+++    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++   fi
++ else
++   ac_cv_path_EGREP=$EGREP
++@@ -5216,7 +5262,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
++ $as_echo_n "checking for ANSI C header files... " >&6; }
++-if test "${ac_cv_header_stdc+set}" = set; then :
+++if ${ac_cv_header_stdc+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -5333,8 +5379,7 @@ do :
++   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++ "
++-eval as_val=\$$as_ac_Header
++-   if test "x$as_val" = x""yes; then :
+++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
++   cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++ _ACEOF
++@@ -5346,7 +5391,7 @@ done
++ 
++ 
++   ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
++-if test "x$ac_cv_header_minix_config_h" = x""yes; then :
+++if test "x$ac_cv_header_minix_config_h" = xyes; then :
++   MINIX=yes
++ else
++   MINIX=
++@@ -5368,14 +5413,14 @@ $as_echo "#define _MINIX 1" >>confdefs.h
++ 
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
++ $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
++-if test "${ac_cv_safe_to_define___extensions__+set}" = set; then :
+++if ${ac_cv_safe_to_define___extensions__+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++ /* end confdefs.h.  */
++ 
++-#	  define __EXTENSIONS__ 1
++-	  $ac_includes_default
+++#         define __EXTENSIONS__ 1
+++          $ac_includes_default
++ int
++ main ()
++ {
++@@ -5432,7 +5477,7 @@ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
++ $as_echo_n "checking for a BSD-compatible install... " >&6; }
++ if test -z "$INSTALL"; then
++-if test "${ac_cv_path_install+set}" = set; then :
+++if ${ac_cv_path_install+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++@@ -5452,7 +5497,7 @@ case $as_dir/ in #((
++     # by default.
++     for ac_prog in ginstall scoinst install; do
++       for ac_exec_ext in '' $ac_executable_extensions; do
++-	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+++	if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
++ 	  if test $ac_prog = install &&
++ 	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++ 	    # AIX install.  It has an incompatible calling convention.
++@@ -5615,7 +5660,7 @@ esac
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
++ $as_echo_n "checking for a sed that does not truncate output... " >&6; }
++-if test "${ac_cv_path_SED+set}" = set; then :
+++if ${ac_cv_path_SED+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++             ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
++@@ -5635,7 +5680,7 @@ do
++     for ac_prog in sed gsed; do
++     for ac_exec_ext in '' $ac_executable_extensions; do
++       ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
++-      { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
+++      as_fn_executable_p "$ac_path_SED" || continue
++ # Check for GNU ac_path_SED and select it if it is found.
++   # Check for GNU $ac_path_SED
++ case `"$ac_path_SED" --version 2>&1` in
++@@ -5670,7 +5715,7 @@ esac
++   done
++ IFS=$as_save_IFS
++   if test -z "$ac_cv_path_SED"; then
++-    as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
+++    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
++   fi
++ else
++   ac_cv_path_SED=$SED
++@@ -5697,7 +5742,7 @@ Xsed="$SED -e 1s/^X//"
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
++ $as_echo_n "checking for fgrep... " >&6; }
++-if test "${ac_cv_path_FGREP+set}" = set; then :
+++if ${ac_cv_path_FGREP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
++@@ -5714,7 +5759,7 @@ do
++     for ac_prog in fgrep; do
++     for ac_exec_ext in '' $ac_executable_extensions; do
++       ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
++-      { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
+++      as_fn_executable_p "$ac_path_FGREP" || continue
++ # Check for GNU ac_path_FGREP and select it if it is found.
++   # Check for GNU $ac_path_FGREP
++ case `"$ac_path_FGREP" --version 2>&1` in
++@@ -5749,7 +5794,7 @@ esac
++   done
++ IFS=$as_save_IFS
++   if test -z "$ac_cv_path_FGREP"; then
++-    as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
+++    as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++   fi
++ else
++   ac_cv_path_FGREP=$FGREP
++@@ -5828,7 +5873,7 @@ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
++ $as_echo_n "checking for non-GNU ld... " >&6; }
++ fi
++-if test "${lt_cv_path_LD+set}" = set; then :
+++if ${lt_cv_path_LD+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -z "$LD"; then
++@@ -5865,10 +5910,10 @@ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++ $as_echo "no" >&6; }
++ fi
++-test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
+++test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
++ $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
++-if test "${lt_cv_prog_gnu_ld+set}" = set; then :
+++if ${lt_cv_prog_gnu_ld+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   # I'd rather use --version here, but apparently some GNU lds only accept -v.
++@@ -5895,7 +5940,7 @@ with_gnu_ld=$lt_cv_prog_gnu_ld
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
++ $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
++-if test "${lt_cv_path_NM+set}" = set; then :
+++if ${lt_cv_path_NM+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$NM"; then
++@@ -5958,7 +6003,7 @@ else
++ set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
+++if ${ac_cv_prog_DUMPBIN+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$DUMPBIN"; then
++@@ -5970,7 +6015,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6002,7 +6047,7 @@ do
++ set dummy $ac_prog; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_DUMPBIN"; then
++@@ -6014,7 +6059,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6074,7 +6119,7 @@ test -z "$NM" && NM=nm
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
++ $as_echo_n "checking the name lister ($NM) interface... " >&6; }
++-if test "${lt_cv_nm_interface+set}" = set; then :
+++if ${lt_cv_nm_interface+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_nm_interface="BSD nm"
++@@ -6109,7 +6154,7 @@ fi
++ # find the maximum length of command line arguments
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
++ $as_echo_n "checking the maximum length of command line arguments... " >&6; }
++-if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
+++if ${lt_cv_sys_max_cmd_len+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++     i=0
++@@ -6306,7 +6351,7 @@ esac
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
++ $as_echo_n "checking for $LD option to reload object files... " >&6; }
++-if test "${lt_cv_ld_reload_flag+set}" = set; then :
+++if ${lt_cv_ld_reload_flag+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_ld_reload_flag='-r'
++@@ -6342,7 +6387,7 @@ if test -n "$ac_tool_prefix"; then
++ set dummy ${ac_tool_prefix}objdump; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
+++if ${ac_cv_prog_OBJDUMP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$OBJDUMP"; then
++@@ -6354,7 +6399,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6382,7 +6427,7 @@ if test -z "$ac_cv_prog_OBJDUMP"; then
++ set dummy objdump; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_OBJDUMP"; then
++@@ -6394,7 +6439,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_OBJDUMP="objdump"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6441,7 +6486,7 @@ test -z "$OBJDUMP" && OBJDUMP=objdump
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
++ $as_echo_n "checking how to recognize dependent libraries... " >&6; }
++-if test "${lt_cv_deplibs_check_method+set}" = set; then :
+++if ${lt_cv_deplibs_check_method+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_file_magic_cmd='$MAGIC_CMD'
++@@ -6662,7 +6707,7 @@ if test -n "$ac_tool_prefix"; then
++ set dummy ${ac_tool_prefix}ar; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_AR+set}" = set; then :
+++if ${ac_cv_prog_AR+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$AR"; then
++@@ -6674,7 +6719,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_AR="${ac_tool_prefix}ar"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6702,7 +6747,7 @@ if test -z "$ac_cv_prog_AR"; then
++ set dummy ar; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_AR+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_AR"; then
++@@ -6714,7 +6759,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_AR="ar"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6767,7 +6812,7 @@ if test -n "$ac_tool_prefix"; then
++ set dummy ${ac_tool_prefix}strip; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_STRIP+set}" = set; then :
+++if ${ac_cv_prog_STRIP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$STRIP"; then
++@@ -6779,7 +6824,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_STRIP="${ac_tool_prefix}strip"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6807,7 +6852,7 @@ if test -z "$ac_cv_prog_STRIP"; then
++ set dummy strip; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_STRIP"; then
++@@ -6819,7 +6864,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_STRIP="strip"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6866,7 +6911,7 @@ if test -n "$ac_tool_prefix"; then
++ set dummy ${ac_tool_prefix}ranlib; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+++if ${ac_cv_prog_RANLIB+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$RANLIB"; then
++@@ -6878,7 +6923,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -6906,7 +6951,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
++ set dummy ranlib; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_RANLIB"; then
++@@ -6918,7 +6963,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_RANLIB="ranlib"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7010,7 +7055,7 @@ do
++ set dummy $ac_prog; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_AWK+set}" = set; then :
+++if ${ac_cv_prog_AWK+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$AWK"; then
++@@ -7022,7 +7067,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_AWK="$ac_prog"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7077,7 +7122,7 @@ compiler=$CC
++ # Check for command to grab the raw symbol name followed by C symbol from nm.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
++ $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
++-if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
+++if ${lt_cv_sys_global_symbol_pipe+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++ 
++@@ -7461,7 +7506,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
++   CFLAGS="$CFLAGS -belf"
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
++ $as_echo_n "checking whether the C compiler needs -belf... " >&6; }
++-if test "${lt_cv_cc_needs_belf+set}" = set; then :
+++if ${lt_cv_cc_needs_belf+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_ext=c
++@@ -7537,7 +7582,7 @@ need_locks="$enable_libtool_lock"
++ set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
+++if ${ac_cv_prog_DSYMUTIL+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$DSYMUTIL"; then
++@@ -7549,7 +7594,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7577,7 +7622,7 @@ if test -z "$ac_cv_prog_DSYMUTIL"; then
++ set dummy dsymutil; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_DSYMUTIL"; then
++@@ -7589,7 +7634,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7629,7 +7674,7 @@ fi
++ set dummy ${ac_tool_prefix}nmedit; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_NMEDIT+set}" = set; then :
+++if ${ac_cv_prog_NMEDIT+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$NMEDIT"; then
++@@ -7641,7 +7686,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7669,7 +7714,7 @@ if test -z "$ac_cv_prog_NMEDIT"; then
++ set dummy nmedit; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_NMEDIT"; then
++@@ -7681,7 +7726,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_NMEDIT="nmedit"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7721,7 +7766,7 @@ fi
++ set dummy ${ac_tool_prefix}lipo; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_LIPO+set}" = set; then :
+++if ${ac_cv_prog_LIPO+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$LIPO"; then
++@@ -7733,7 +7778,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7761,7 +7806,7 @@ if test -z "$ac_cv_prog_LIPO"; then
++ set dummy lipo; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_LIPO+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_LIPO"; then
++@@ -7773,7 +7818,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_LIPO="lipo"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7813,7 +7858,7 @@ fi
++ set dummy ${ac_tool_prefix}otool; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_OTOOL+set}" = set; then :
+++if ${ac_cv_prog_OTOOL+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$OTOOL"; then
++@@ -7825,7 +7870,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7853,7 +7898,7 @@ if test -z "$ac_cv_prog_OTOOL"; then
++ set dummy otool; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_OTOOL+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_OTOOL"; then
++@@ -7865,7 +7910,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_OTOOL="otool"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7905,7 +7950,7 @@ fi
++ set dummy ${ac_tool_prefix}otool64; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_OTOOL64+set}" = set; then :
+++if ${ac_cv_prog_OTOOL64+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$OTOOL64"; then
++@@ -7917,7 +7962,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -7945,7 +7990,7 @@ if test -z "$ac_cv_prog_OTOOL64"; then
++ set dummy otool64; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_OTOOL64"; then
++@@ -7957,7 +8002,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_OTOOL64="otool64"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -8020,7 +8065,7 @@ fi
++ 
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
++ $as_echo_n "checking for -single_module linker flag... " >&6; }
++-if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
+++if ${lt_cv_apple_cc_single_mod+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_apple_cc_single_mod=no
++@@ -8049,7 +8094,7 @@ fi
++ $as_echo "$lt_cv_apple_cc_single_mod" >&6; }
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
++ $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
++-if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
+++if ${lt_cv_ld_exported_symbols_list+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_ld_exported_symbols_list=no
++@@ -8081,7 +8126,7 @@ fi
++ $as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5
++ $as_echo_n "checking for -force_load linker flag... " >&6; }
++-if test "${lt_cv_ld_force_load+set}" = set; then :
+++if ${lt_cv_ld_force_load+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_ld_force_load=no
++@@ -8148,7 +8193,7 @@ for ac_header in dlfcn.h
++ do :
++   ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
++ "
++-if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
+++if test "x$ac_cv_header_dlfcn_h" = xyes; then :
++   cat >>confdefs.h <<_ACEOF
++ #define HAVE_DLFCN_H 1
++ _ACEOF
++@@ -8184,7 +8229,7 @@ if test -n "$ac_tool_prefix"; then
++ set dummy ${ac_tool_prefix}ranlib; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_RANLIB+set}" = set; then :
+++if ${ac_cv_prog_RANLIB+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$RANLIB"; then
++@@ -8196,7 +8241,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -8224,7 +8269,7 @@ if test -z "$ac_cv_prog_RANLIB"; then
++ set dummy ranlib; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
+++if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$ac_ct_RANLIB"; then
++@@ -8236,7 +8281,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_ac_ct_RANLIB="ranlib"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -8292,7 +8337,7 @@ depcc="$CC"   am_compiler_list=
++ am_depcomp=$ac_aux_dir/depcomp
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
++ $as_echo_n "checking dependency style of $depcc... " >&6; }
++-if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
+++if ${am_cv_CC_dependencies_compiler_type+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -f "$am_depcomp"; then
++@@ -8378,7 +8423,7 @@ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
++ $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
++ if test x${am_cv_CC_dependencies_compiler_type-none} = xnone
++-then as_fn_error "no usable dependency style found" "$LINENO" 5
+++then as_fn_error $? "no usable dependency style found" "$LINENO" 5
++ else CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
++ 
++ fi
++@@ -8391,7 +8436,7 @@ do
++ set dummy $ac_prog; ac_word=$2
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++ $as_echo_n "checking for $ac_word... " >&6; }
++-if test "${ac_cv_prog_MAKE+set}" = set; then :
+++if ${ac_cv_prog_MAKE+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   if test -n "$MAKE"; then
++@@ -8403,7 +8448,7 @@ do
++   IFS=$as_save_IFS
++   test -z "$as_dir" && as_dir=.
++     for ac_exec_ext in '' $ac_executable_extensions; do
++-  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+++  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
++     ac_cv_prog_MAKE="$ac_prog"
++     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++     break 2
++@@ -8521,8 +8566,7 @@ for ac_header in stdlib.h string.h strings.h unistd.h time.h
++ do :
++   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
++-eval as_val=\$$as_ac_Header
++-   if test "x$as_val" = x""yes; then :
+++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
++   cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++ _ACEOF
++@@ -8535,8 +8579,7 @@ for ac_header in sys/time.h sys/resource.h
++ do :
++   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
++-eval as_val=\$$as_ac_Header
++-   if test "x$as_val" = x""yes; then :
+++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
++   cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++ _ACEOF
++@@ -8549,8 +8592,7 @@ for ac_header in fcntl.h fpu_control.h
++ do :
++   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
++-eval as_val=\$$as_ac_Header
++-   if test "x$as_val" = x""yes; then :
+++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
++   cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++ _ACEOF
++@@ -8563,8 +8605,7 @@ for ac_header in dlfcn.h errno.h sys/stat.h
++ do :
++   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
++-eval as_val=\$$as_ac_Header
++-   if test "x$as_val" = x""yes; then :
+++if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
++   cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++ _ACEOF
++@@ -8577,8 +8618,7 @@ for ac_func in getrusage time sigaction __setfpucw
++ do :
++   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
++ ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
++-eval as_val=\$$as_ac_var
++-   if test "x$as_val" = x""yes; then :
+++if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
++   cat >>confdefs.h <<_ACEOF
++ #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++ _ACEOF
++@@ -8590,7 +8630,7 @@ done
++ # Check for socket libraries
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bind in -lsocket" >&5
++ $as_echo_n "checking for bind in -lsocket... " >&6; }
++-if test "${ac_cv_lib_socket_bind+set}" = set; then :
+++if ${ac_cv_lib_socket_bind+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -8624,7 +8664,7 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_bind" >&5
++ $as_echo "$ac_cv_lib_socket_bind" >&6; }
++-if test "x$ac_cv_lib_socket_bind" = x""yes; then :
+++if test "x$ac_cv_lib_socket_bind" = xyes; then :
++   cat >>confdefs.h <<_ACEOF
++ #define HAVE_LIBSOCKET 1
++ _ACEOF
++@@ -8635,7 +8675,7 @@ fi
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
++ $as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
++-if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then :
+++if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -8669,7 +8709,7 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
++ $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
++-if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then :
+++if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
++   cat >>confdefs.h <<_ACEOF
++ #define HAVE_LIBNSL 1
++ _ACEOF
++@@ -8695,7 +8735,7 @@ fi
++   if test "$with_zlib" != "no"; then
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing zlibVersion" >&5
++ $as_echo_n "checking for library containing zlibVersion... " >&6; }
++-if test "${ac_cv_search_zlibVersion+set}" = set; then :
+++if ${ac_cv_search_zlibVersion+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_func_search_save_LIBS=$LIBS
++@@ -8729,11 +8769,11 @@ for ac_lib in '' z; do
++ fi
++ rm -f core conftest.err conftest.$ac_objext \
++     conftest$ac_exeext
++-  if test "${ac_cv_search_zlibVersion+set}" = set; then :
+++  if ${ac_cv_search_zlibVersion+:} false; then :
++   break
++ fi
++ done
++-if test "${ac_cv_search_zlibVersion+set}" = set; then :
+++if ${ac_cv_search_zlibVersion+:} false; then :
++ 
++ else
++   ac_cv_search_zlibVersion=no
++@@ -8749,7 +8789,7 @@ if test "$ac_res" != no; then :
++   for ac_header in zlib.h
++ do :
++   ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default"
++-if test "x$ac_cv_header_zlib_h" = x""yes; then :
+++if test "x$ac_cv_header_zlib_h" = xyes; then :
++   cat >>confdefs.h <<_ACEOF
++ #define HAVE_ZLIB_H 1
++ _ACEOF
++@@ -8761,7 +8801,7 @@ done
++ fi
++ 
++     if test "$with_zlib" = "yes" -a "$ac_cv_header_zlib_h" != "yes"; then
++-      as_fn_error "zlib (libz) library was explicitly requested but not found" "$LINENO" 5
+++      as_fn_error $? "zlib (libz) library was explicitly requested but not found" "$LINENO" 5
++     fi
++   fi
++ 
++@@ -8965,7 +9005,7 @@ fi
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
++ $as_echo_n "checking for objdir... " >&6; }
++-if test "${lt_cv_objdir+set}" = set; then :
+++if ${lt_cv_objdir+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   rm -f .libs 2>/dev/null
++@@ -9043,7 +9083,7 @@ file_magic*)
++   if test "$file_magic_cmd" = '$MAGIC_CMD'; then
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
++ $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
++-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+++if ${lt_cv_path_MAGIC_CMD+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   case $MAGIC_CMD in
++@@ -9109,7 +9149,7 @@ if test -z "$lt_cv_path_MAGIC_CMD"; then
++   if test -n "$ac_tool_prefix"; then
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
++ $as_echo_n "checking for file... " >&6; }
++-if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
+++if ${lt_cv_path_MAGIC_CMD+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   case $MAGIC_CMD in
++@@ -9251,7 +9291,7 @@ if test "$GCC" = yes; then
++ 
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
++ $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
++-if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
+++if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_prog_compiler_rtti_exceptions=no
++@@ -9604,7 +9644,7 @@ $as_echo "$lt_prog_compiler_pic" >&6; }
++ if test -n "$lt_prog_compiler_pic"; then
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
++ $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
++-if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
+++if ${lt_cv_prog_compiler_pic_works+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_prog_compiler_pic_works=no
++@@ -9663,7 +9703,7 @@ fi
++ wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
++ $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
++-if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
+++if ${lt_cv_prog_compiler_static_works+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_prog_compiler_static_works=no
++@@ -9706,7 +9746,7 @@ fi
++ 
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
++ $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
++-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+++if ${lt_cv_prog_compiler_c_o+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_prog_compiler_c_o=no
++@@ -9761,7 +9801,7 @@ $as_echo "$lt_cv_prog_compiler_c_o" >&6; }
++ 
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
++ $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
++-if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
+++if ${lt_cv_prog_compiler_c_o+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_prog_compiler_c_o=no
++@@ -10577,7 +10617,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++ 	  # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does)
++ 	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5
++ $as_echo_n "checking if $CC understands -b... " >&6; }
++-if test "${lt_cv_prog_compiler__b+set}" = set; then :
+++if ${lt_cv_prog_compiler__b+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_prog_compiler__b=no
++@@ -10949,7 +10989,7 @@ x|xyes)
++       # to ld, don't add -lc before -lgcc.
++       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
++ $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
++-if test "${lt_cv_archive_cmds_need_lc+set}" = set; then :
+++if ${lt_cv_archive_cmds_need_lc+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   $RM conftest*
++@@ -11587,7 +11627,7 @@ linux* | k*bsd*-gnu | kopensolaris*-gnu)
++   shlibpath_overrides_runpath=no
++ 
++   # Some binutils ld are patched to set DT_RUNPATH
++-  if test "${lt_cv_shlibpath_overrides_runpath+set}" = set; then :
+++  if ${lt_cv_shlibpath_overrides_runpath+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   lt_cv_shlibpath_overrides_runpath=no
++@@ -12007,7 +12047,7 @@ else
++   # if libdl is installed we need to link against it
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
++ $as_echo_n "checking for dlopen in -ldl... " >&6; }
++-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+++if ${ac_cv_lib_dl_dlopen+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -12041,7 +12081,7 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
++ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
++-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+++if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
++   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
++ else
++ 
++@@ -12055,12 +12095,12 @@ fi
++ 
++   *)
++     ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
++-if test "x$ac_cv_func_shl_load" = x""yes; then :
+++if test "x$ac_cv_func_shl_load" = xyes; then :
++   lt_cv_dlopen="shl_load"
++ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
++ $as_echo_n "checking for shl_load in -ldld... " >&6; }
++-if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
+++if ${ac_cv_lib_dld_shl_load+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -12094,16 +12134,16 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
++ $as_echo "$ac_cv_lib_dld_shl_load" >&6; }
++-if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
+++if test "x$ac_cv_lib_dld_shl_load" = xyes; then :
++   lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
++ else
++   ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
++-if test "x$ac_cv_func_dlopen" = x""yes; then :
+++if test "x$ac_cv_func_dlopen" = xyes; then :
++   lt_cv_dlopen="dlopen"
++ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
++ $as_echo_n "checking for dlopen in -ldl... " >&6; }
++-if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
+++if ${ac_cv_lib_dl_dlopen+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -12137,12 +12177,12 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
++ $as_echo "$ac_cv_lib_dl_dlopen" >&6; }
++-if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
+++if test "x$ac_cv_lib_dl_dlopen" = xyes; then :
++   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
++ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
++ $as_echo_n "checking for dlopen in -lsvld... " >&6; }
++-if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
+++if ${ac_cv_lib_svld_dlopen+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -12176,12 +12216,12 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
++ $as_echo "$ac_cv_lib_svld_dlopen" >&6; }
++-if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
+++if test "x$ac_cv_lib_svld_dlopen" = xyes; then :
++   lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
++ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
++ $as_echo_n "checking for dld_link in -ldld... " >&6; }
++-if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
+++if ${ac_cv_lib_dld_dld_link+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -12215,7 +12255,7 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
++ $as_echo "$ac_cv_lib_dld_dld_link" >&6; }
++-if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
+++if test "x$ac_cv_lib_dld_dld_link" = xyes; then :
++   lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
++ fi
++ 
++@@ -12256,7 +12296,7 @@ fi
++ 
++     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
++ $as_echo_n "checking whether a program can dlopen itself... " >&6; }
++-if test "${lt_cv_dlopen_self+set}" = set; then :
+++if ${lt_cv_dlopen_self+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   	  if test "$cross_compiling" = yes; then :
++@@ -12265,7 +12305,7 @@ else
++   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
++   lt_status=$lt_dlunknown
++   cat > conftest.$ac_ext <<_LT_EOF
++-#line 12268 "configure"
+++#line 12308 "configure"
++ #include "confdefs.h"
++ 
++ #if HAVE_DLFCN_H
++@@ -12362,7 +12402,7 @@ $as_echo "$lt_cv_dlopen_self" >&6; }
++       wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
++       { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
++ $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
++-if test "${lt_cv_dlopen_self_static+set}" = set; then :
+++if ${lt_cv_dlopen_self_static+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   	  if test "$cross_compiling" = yes; then :
++@@ -12371,7 +12411,7 @@ else
++   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
++   lt_status=$lt_dlunknown
++   cat > conftest.$ac_ext <<_LT_EOF
++-#line 12374 "configure"
+++#line 12414 "configure"
++ #include "confdefs.h"
++ 
++ #if HAVE_DLFCN_H
++@@ -12644,7 +12684,7 @@ if test "${enable_sim_bswap+set}" = set; then :
++   enableval=$enable_sim_bswap; case "${enableval}" in
++   yes)	sim_bswap="-DWITH_BSWAP=1 -DUSE_BSWAP=1";;
++   no)	sim_bswap="-DWITH_BSWAP=0";;
++-  *)	as_fn_error "\"--enable-sim-bswap does not take a value\"" "$LINENO" 5; sim_bswap="";;
+++  *)	as_fn_error $? "\"--enable-sim-bswap does not take a value\"" "$LINENO" 5; sim_bswap="";;
++ esac
++ if test x"$silent" != x"yes" && test x"$sim_bswap" != x""; then
++   echo "Setting bswap flags = $sim_bswap" 6>&1
++@@ -12659,7 +12699,7 @@ fi
++ if test "${enable_sim_cflags+set}" = set; then :
++   enableval=$enable_sim_cflags; case "${enableval}" in
++   yes)	 sim_cflags="-O2 -fomit-frame-pointer";;
++-  trace) as_fn_error "\"Please use --enable-sim-debug instead.\"" "$LINENO" 5; sim_cflags="";;
+++  trace) as_fn_error $? "\"Please use --enable-sim-debug instead.\"" "$LINENO" 5; sim_cflags="";;
++   no)	 sim_cflags="";;
++   *)	 sim_cflags=`echo "${enableval}" | sed -e "s/,/ /g"`;;
++ esac
++@@ -12693,7 +12733,7 @@ if test "${enable_sim_stdio+set}" = set; then :
++   enableval=$enable_sim_stdio; case "${enableval}" in
++   yes)	sim_stdio="-DWITH_STDIO=DO_USE_STDIO";;
++   no)	sim_stdio="-DWITH_STDIO=DONT_USE_STDIO";;
++-  *)	as_fn_error "\"Unknown value $enableval passed to --enable-sim-stdio\"" "$LINENO" 5; sim_stdio="";;
+++  *)	as_fn_error $? "\"Unknown value $enableval passed to --enable-sim-stdio\"" "$LINENO" 5; sim_stdio="";;
++ esac
++ if test x"$silent" != x"yes" && test x"$sim_stdio" != x""; then
++   echo "Setting stdio flags = $sim_stdio" 6>&1
++@@ -12762,7 +12802,7 @@ fi
++ # Check whether --with-pkgversion was given.
++ if test "${with_pkgversion+set}" = set; then :
++   withval=$with_pkgversion; case "$withval" in
++-      yes) as_fn_error "package version not specified" "$LINENO" 5 ;;
+++      yes) as_fn_error $? "package version not specified" "$LINENO" 5 ;;
++       no)  PKGVERSION= ;;
++       *)   PKGVERSION="($withval) " ;;
++      esac
++@@ -12778,7 +12818,7 @@ fi
++ # Check whether --with-bugurl was given.
++ if test "${with_bugurl+set}" = set; then :
++   withval=$with_bugurl; case "$withval" in
++-      yes) as_fn_error "bug URL not specified" "$LINENO" 5 ;;
+++      yes) as_fn_error $? "bug URL not specified" "$LINENO" 5 ;;
++       no)  BUGURL=
++ 	   ;;
++       *)   BUGURL="$withval"
++@@ -12815,7 +12855,7 @@ _ACEOF
++ 
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5
++ $as_echo_n "checking return type of signal handlers... " >&6; }
++-if test "${ac_cv_type_signal+set}" = set; then :
+++if ${ac_cv_type_signal+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -12872,7 +12912,7 @@ sim_link_links="${sim_link_links} targ-vals.def"
++ for ac_header in stdlib.h
++ do :
++   ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
++-if test "x$ac_cv_header_stdlib_h" = x""yes; then :
+++if test "x$ac_cv_header_stdlib_h" = xyes; then :
++   cat >>confdefs.h <<_ACEOF
++ #define HAVE_STDLIB_H 1
++ _ACEOF
++@@ -12885,7 +12925,7 @@ done
++ # In the Cygwin environment, we need some additional flags.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cygwin" >&5
++ $as_echo_n "checking for cygwin... " >&6; }
++-if test "${sim_cv_os_cygwin+set}" = set; then :
+++if ${sim_cv_os_cygwin+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++@@ -12913,7 +12953,7 @@ else
++   # Keep in sync with gdb's configure.ac list.
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing tgetent" >&5
++ $as_echo_n "checking for library containing tgetent... " >&6; }
++-if test "${ac_cv_search_tgetent+set}" = set; then :
+++if ${ac_cv_search_tgetent+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_func_search_save_LIBS=$LIBS
++@@ -12947,11 +12987,11 @@ for ac_lib in '' termcap tinfo curses ncurses; do
++ fi
++ rm -f core conftest.err conftest.$ac_objext \
++     conftest$ac_exeext
++-  if test "${ac_cv_search_tgetent+set}" = set; then :
+++  if ${ac_cv_search_tgetent+:} false; then :
++   break
++ fi
++ done
++-if test "${ac_cv_search_tgetent+set}" = set; then :
+++if ${ac_cv_search_tgetent+:} false; then :
++ 
++ else
++   ac_cv_search_tgetent=no
++@@ -12979,7 +13019,7 @@ if test -r ../../readline/Makefile; then
++ else
++   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for readline in -lreadline" >&5
++ $as_echo_n "checking for readline in -lreadline... " >&6; }
++-if test "${ac_cv_lib_readline_readline+set}" = set; then :
+++if ${ac_cv_lib_readline_readline+:} false; then :
++   $as_echo_n "(cached) " >&6
++ else
++   ac_check_lib_save_LIBS=$LIBS
++@@ -13013,14 +13053,238 @@ LIBS=$ac_check_lib_save_LIBS
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_readline_readline" >&5
++ $as_echo "$ac_cv_lib_readline_readline" >&6; }
++-if test "x$ac_cv_lib_readline_readline" = x""yes; then :
+++if test "x$ac_cv_lib_readline_readline" = xyes; then :
++   READLINE=-lreadline
++ else
++-  as_fn_error "the required \"readline\" library is missing" "$LINENO" 5
+++  as_fn_error $? "the required \"readline\" library is missing" "$LINENO" 5
++ fi
++ 
++ fi
++ 
+++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+++$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+++if ${ac_cv_c_bigendian+:} false; then :
+++  $as_echo_n "(cached) " >&6
+++else
+++  ac_cv_c_bigendian=unknown
+++    # See if we're dealing with a universal compiler.
+++    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++#ifndef __APPLE_CC__
+++	       not a universal capable compiler
+++	     #endif
+++	     typedef int dummy;
+++
+++_ACEOF
+++if ac_fn_c_try_compile "$LINENO"; then :
+++
+++	# Check for potential -arch flags.  It is not universal unless
+++	# there are at least two -arch flags with different values.
+++	ac_arch=
+++	ac_prev=
+++	for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+++	 if test -n "$ac_prev"; then
+++	   case $ac_word in
+++	     i?86 | x86_64 | ppc | ppc64)
+++	       if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+++		 ac_arch=$ac_word
+++	       else
+++		 ac_cv_c_bigendian=universal
+++		 break
+++	       fi
+++	       ;;
+++	   esac
+++	   ac_prev=
+++	 elif test "x$ac_word" = "x-arch"; then
+++	   ac_prev=arch
+++	 fi
+++       done
+++fi
+++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+++    if test $ac_cv_c_bigendian = unknown; then
+++      # See if sys/param.h defines the BYTE_ORDER macro.
+++      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++#include <sys/types.h>
+++	     #include <sys/param.h>
+++
+++int
+++main ()
+++{
+++#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+++		     && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+++		     && LITTLE_ENDIAN)
+++	      bogus endian macros
+++	     #endif
+++
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++if ac_fn_c_try_compile "$LINENO"; then :
+++  # It does; now see whether it defined to BIG_ENDIAN or not.
+++	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++#include <sys/types.h>
+++		#include <sys/param.h>
+++
+++int
+++main ()
+++{
+++#if BYTE_ORDER != BIG_ENDIAN
+++		 not big endian
+++		#endif
+++
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++if ac_fn_c_try_compile "$LINENO"; then :
+++  ac_cv_c_bigendian=yes
+++else
+++  ac_cv_c_bigendian=no
+++fi
+++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+++fi
+++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+++    fi
+++    if test $ac_cv_c_bigendian = unknown; then
+++      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+++      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++#include <limits.h>
+++
+++int
+++main ()
+++{
+++#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+++	      bogus endian macros
+++	     #endif
+++
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++if ac_fn_c_try_compile "$LINENO"; then :
+++  # It does; now see whether it defined to _BIG_ENDIAN or not.
+++	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++#include <limits.h>
+++
+++int
+++main ()
+++{
+++#ifndef _BIG_ENDIAN
+++		 not big endian
+++		#endif
+++
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++if ac_fn_c_try_compile "$LINENO"; then :
+++  ac_cv_c_bigendian=yes
+++else
+++  ac_cv_c_bigendian=no
+++fi
+++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+++fi
+++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+++    fi
+++    if test $ac_cv_c_bigendian = unknown; then
+++      # Compile a test program.
+++      if test "$cross_compiling" = yes; then :
+++  # Try to guess by grepping values from an object file.
+++	 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++short int ascii_mm[] =
+++		  { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+++		short int ascii_ii[] =
+++		  { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+++		int use_ascii (int i) {
+++		  return ascii_mm[i] + ascii_ii[i];
+++		}
+++		short int ebcdic_ii[] =
+++		  { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+++		short int ebcdic_mm[] =
+++		  { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+++		int use_ebcdic (int i) {
+++		  return ebcdic_mm[i] + ebcdic_ii[i];
+++		}
+++		extern int foo;
+++
+++int
+++main ()
+++{
+++return use_ascii (foo) == use_ebcdic (foo);
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++if ac_fn_c_try_compile "$LINENO"; then :
+++  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+++	      ac_cv_c_bigendian=yes
+++	    fi
+++	    if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+++	      if test "$ac_cv_c_bigendian" = unknown; then
+++		ac_cv_c_bigendian=no
+++	      else
+++		# finding both strings is unlikely to happen, but who knows?
+++		ac_cv_c_bigendian=unknown
+++	      fi
+++	    fi
+++fi
+++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+++else
+++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+++/* end confdefs.h.  */
+++$ac_includes_default
+++int
+++main ()
+++{
+++
+++	     /* Are we little or big endian?  From Harbison&Steele.  */
+++	     union
+++	     {
+++	       long int l;
+++	       char c[sizeof (long int)];
+++	     } u;
+++	     u.l = 1;
+++	     return u.c[sizeof (long int) - 1] == 1;
+++
+++  ;
+++  return 0;
+++}
+++_ACEOF
+++if ac_fn_c_try_run "$LINENO"; then :
+++  ac_cv_c_bigendian=no
+++else
+++  ac_cv_c_bigendian=yes
+++fi
+++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+++  conftest.$ac_objext conftest.beam conftest.$ac_ext
+++fi
+++
+++    fi
+++fi
+++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+++$as_echo "$ac_cv_c_bigendian" >&6; }
+++ case $ac_cv_c_bigendian in #(
+++   yes)
+++     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+++;; #(
+++   no)
+++      ;; #(
+++   universal)
+++
+++$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+++
+++     ;; #(
+++   *)
+++     as_fn_error $? "unknown endianness
+++ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+++ esac
+++
++ 
++ ac_sources="$sim_link_files"
++ ac_dests="$sim_link_links"
++@@ -13110,10 +13374,21 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++      :end' >>confcache
++ if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
++   if test -w "$cache_file"; then
++-    test "x$cache_file" != "x/dev/null" &&
+++    if test "x$cache_file" != "x/dev/null"; then
++       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
++ $as_echo "$as_me: updating cache $cache_file" >&6;}
++-    cat confcache >$cache_file
+++      if test ! -f "$cache_file" || test -h "$cache_file"; then
+++	cat confcache >"$cache_file"
+++      else
+++        case $cache_file in #(
+++        */* | ?:*)
+++	  mv -f confcache "$cache_file"$$ &&
+++	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+++        *)
+++	  mv -f confcache "$cache_file" ;;
+++	esac
+++      fi
+++    fi
++   else
++     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
++ $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
++@@ -13129,6 +13404,7 @@ DEFS=-DHAVE_CONFIG_H
++ 
++ ac_libobjs=
++ ac_ltlibobjs=
+++U=
++ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
++   # 1. Remove the extension, and $U if already installed.
++   ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
++@@ -13144,19 +13420,20 @@ LTLIBOBJS=$ac_ltlibobjs
++ 
++ 
++ if test -z "${GMAKE_TRUE}" && test -z "${GMAKE_FALSE}"; then
++-  as_fn_error "conditional \"GMAKE\" was never defined.
+++  as_fn_error $? "conditional \"GMAKE\" was never defined.
++ Usually this means the macro was only invoked conditionally." "$LINENO" 5
++ fi
++ if test -z "${PLUGINS_TRUE}" && test -z "${PLUGINS_FALSE}"; then
++-  as_fn_error "conditional \"PLUGINS\" was never defined.
+++  as_fn_error $? "conditional \"PLUGINS\" was never defined.
++ Usually this means the macro was only invoked conditionally." "$LINENO" 5
++ fi
++ if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
++-  as_fn_error "conditional \"MAINTAINER_MODE\" was never defined.
+++  as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined.
++ Usually this means the macro was only invoked conditionally." "$LINENO" 5
++ fi
++ 
++-: ${CONFIG_STATUS=./config.status}
+++
+++: "${CONFIG_STATUS=./config.status}"
++ ac_write_fail=0
++ ac_clean_files_save=$ac_clean_files
++ ac_clean_files="$ac_clean_files $CONFIG_STATUS"
++@@ -13257,6 +13534,7 @@ fi
++ IFS=" ""	$as_nl"
++ 
++ # Find who we are.  Look in the path if we contain no directory separator.
+++as_myself=
++ case $0 in #((
++   *[\\/]* ) as_myself=$0 ;;
++   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++@@ -13302,19 +13580,19 @@ export LANGUAGE
++ (unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++ 
++ 
++-# as_fn_error ERROR [LINENO LOG_FD]
++-# ---------------------------------
+++# as_fn_error STATUS ERROR [LINENO LOG_FD]
+++# ----------------------------------------
++ # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++ # provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++-# script with status $?, using 1 if that was 0.
+++# script with STATUS, using 1 if that was 0.
++ as_fn_error ()
++ {
++-  as_status=$?; test $as_status -eq 0 && as_status=1
++-  if test "$3"; then
++-    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+++  as_status=$1; test $as_status -eq 0 && as_status=1
+++  if test "$4"; then
+++    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+++    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
++   fi
++-  $as_echo "$as_me: error: $1" >&2
+++  $as_echo "$as_me: error: $2" >&2
++   as_fn_exit $as_status
++ } # as_fn_error
++ 
++@@ -13452,16 +13730,16 @@ if (echo >conf$$.file) 2>/dev/null; then
++     # ... but there are two gotchas:
++     # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++     # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++-    # In both cases, we have to default to `cp -p'.
+++    # In both cases, we have to default to `cp -pR'.
++     ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++-      as_ln_s='cp -p'
+++      as_ln_s='cp -pR'
++   elif ln conf$$.file conf$$ 2>/dev/null; then
++     as_ln_s=ln
++   else
++-    as_ln_s='cp -p'
+++    as_ln_s='cp -pR'
++   fi
++ else
++-  as_ln_s='cp -p'
+++  as_ln_s='cp -pR'
++ fi
++ rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++ rmdir conf$$.dir 2>/dev/null
++@@ -13510,7 +13788,7 @@ $as_echo X"$as_dir" |
++       test -d "$as_dir" && break
++     done
++     test -z "$as_dirs" || eval "mkdir $as_dirs"
++-  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
+++  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
++ 
++ 
++ } # as_fn_mkdir_p
++@@ -13521,28 +13799,16 @@ else
++   as_mkdir_p=false
++ fi
++ 
++-if test -x / >/dev/null 2>&1; then
++-  as_test_x='test -x'
++-else
++-  if ls -dL / >/dev/null 2>&1; then
++-    as_ls_L_option=L
++-  else
++-    as_ls_L_option=
++-  fi
++-  as_test_x='
++-    eval sh -c '\''
++-      if test -d "$1"; then
++-	test -d "$1/.";
++-      else
++-	case $1 in #(
++-	-*)set "./$1";;
++-	esac;
++-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++-	???[sx]*):;;*)false;;esac;fi
++-    '\'' sh
++-  '
++-fi
++-as_executable_p=$as_test_x
+++
+++# as_fn_executable_p FILE
+++# -----------------------
+++# Test if FILE is an executable regular file.
+++as_fn_executable_p ()
+++{
+++  test -f "$1" && test -x "$1"
+++} # as_fn_executable_p
+++as_test_x='test -x'
+++as_executable_p=as_fn_executable_p
++ 
++ # Sed expression to map a string onto a valid CPP name.
++ as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++@@ -13564,7 +13830,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++ # values after options handling.
++ ac_log="
++ This file was extended by $as_me, which was
++-generated by GNU Autoconf 2.64.  Invocation command line was
+++generated by GNU Autoconf 2.69.  Invocation command line was
++ 
++   CONFIG_FILES    = $CONFIG_FILES
++   CONFIG_HEADERS  = $CONFIG_HEADERS
++@@ -13605,6 +13871,7 @@ Usage: $0 [OPTION]... [TAG]...
++ 
++   -h, --help       print this help, then exit
++   -V, --version    print version number and configuration settings, then exit
+++      --config     print configuration, then exit
++   -q, --quiet, --silent
++                    do not print progress messages
++   -d, --debug      don't remove temporary files
++@@ -13630,12 +13897,13 @@ Report bugs to the package provider."
++ 
++ _ACEOF
++ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+++ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
++ ac_cs_version="\\
++ config.status
++-configured by $0, generated by GNU Autoconf 2.64,
++-  with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+++configured by $0, generated by GNU Autoconf 2.69,
+++  with options \\"\$ac_cs_config\\"
++ 
++-Copyright (C) 2009 Free Software Foundation, Inc.
+++Copyright (C) 2012 Free Software Foundation, Inc.
++ This config.status script is free software; the Free Software Foundation
++ gives unlimited permission to copy, distribute and modify it."
++ 
++@@ -13652,11 +13920,16 @@ ac_need_defaults=:
++ while test $# != 0
++ do
++   case $1 in
++-  --*=*)
+++  --*=?*)
++     ac_option=`expr "X$1" : 'X\([^=]*\)='`
++     ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
++     ac_shift=:
++     ;;
+++  --*=)
+++    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+++    ac_optarg=
+++    ac_shift=:
+++    ;;
++   *)
++     ac_option=$1
++     ac_optarg=$2
++@@ -13670,12 +13943,15 @@ do
++     ac_cs_recheck=: ;;
++   --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
++     $as_echo "$ac_cs_version"; exit ;;
+++  --config | --confi | --conf | --con | --co | --c )
+++    $as_echo "$ac_cs_config"; exit ;;
++   --debug | --debu | --deb | --de | --d | -d )
++     debug=: ;;
++   --file | --fil | --fi | --f )
++     $ac_shift
++     case $ac_optarg in
++     *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
+++    '') as_fn_error $? "missing file argument" ;;
++     esac
++     as_fn_append CONFIG_FILES " '$ac_optarg'"
++     ac_need_defaults=false;;
++@@ -13688,7 +13964,7 @@ do
++     ac_need_defaults=false;;
++   --he | --h)
++     # Conflict between --help and --header
++-    as_fn_error "ambiguous option: \`$1'
+++    as_fn_error $? "ambiguous option: \`$1'
++ Try \`$0 --help' for more information.";;
++   --help | --hel | -h )
++     $as_echo "$ac_cs_usage"; exit ;;
++@@ -13697,7 +13973,7 @@ Try \`$0 --help' for more information.";;
++     ac_cs_silent=: ;;
++ 
++   # This is an error.
++-  -*) as_fn_error "unrecognized option: \`$1'
+++  -*) as_fn_error $? "unrecognized option: \`$1'
++ Try \`$0 --help' for more information." ;;
++ 
++   *) as_fn_append ac_config_targets " $1"
++@@ -13717,7 +13993,7 @@ fi
++ _ACEOF
++ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ if \$ac_cs_recheck; then
++-  set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+++  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++   shift
++   \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
++   CONFIG_SHELL='$SHELL'
++@@ -14021,7 +14297,7 @@ do
++     "Makefile") CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;;
++     "stamp-h") CONFIG_COMMANDS="$CONFIG_COMMANDS stamp-h" ;;
++ 
++-  *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
+++  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
++   esac
++ done
++ 
++@@ -14045,9 +14321,10 @@ fi
++ # after its creation but before its name has been assigned to `$tmp'.
++ $debug ||
++ {
++-  tmp=
+++  tmp= ac_tmp=
++   trap 'exit_status=$?
++-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+++  : "${ac_tmp:=$tmp}"
+++  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
++ ' 0
++   trap 'as_fn_exit 1' 1 2 13 15
++ }
++@@ -14055,12 +14332,13 @@ $debug ||
++ 
++ {
++   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
++-  test -n "$tmp" && test -d "$tmp"
+++  test -d "$tmp"
++ }  ||
++ {
++   tmp=./conf$$-$RANDOM
++   (umask 077 && mkdir "$tmp")
++-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
+++} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+++ac_tmp=$tmp
++ 
++ # Set up the scripts for CONFIG_FILES section.
++ # No need to generate them if there are no CONFIG_FILES.
++@@ -14077,12 +14355,12 @@ if test "x$ac_cr" = x; then
++ fi
++ ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
++ if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
++-  ac_cs_awk_cr='\r'
+++  ac_cs_awk_cr='\\r'
++ else
++   ac_cs_awk_cr=$ac_cr
++ fi
++ 
++-echo 'BEGIN {' >"$tmp/subs1.awk" &&
+++echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
++ _ACEOF
++ 
++ 
++@@ -14091,18 +14369,18 @@ _ACEOF
++   echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
++   echo "_ACEOF"
++ } >conf$$subs.sh ||
++-  as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
+++  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
+++ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
++ ac_delim='%!_!# '
++ for ac_last_try in false false false false false :; do
++   . ./conf$$subs.sh ||
++-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++ 
++   ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
++   if test $ac_delim_n = $ac_delim_num; then
++     break
++   elif $ac_last_try; then
++-    as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
+++    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
++   else
++     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++   fi
++@@ -14110,7 +14388,7 @@ done
++ rm -f conf$$subs.sh
++ 
++ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
+++cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
++ _ACEOF
++ sed -n '
++ h
++@@ -14124,7 +14402,7 @@ s/'"$ac_delim"'$//
++ t delim
++ :nl
++ h
++-s/\(.\{148\}\).*/\1/
+++s/\(.\{148\}\)..*/\1/
++ t more1
++ s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
++ p
++@@ -14138,7 +14416,7 @@ s/.\{148\}//
++ t nl
++ :delim
++ h
++-s/\(.\{148\}\).*/\1/
+++s/\(.\{148\}\)..*/\1/
++ t more2
++ s/["\\]/\\&/g; s/^/"/; s/$/"/
++ p
++@@ -14158,7 +14436,7 @@ t delim
++ rm -f conf$$subs.awk
++ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ _ACAWK
++-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
+++cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
++   for (key in S) S_is_set[key] = 1
++   FS = ""
++ 
++@@ -14190,21 +14468,29 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
++   sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
++ else
++   cat
++-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
++-  || as_fn_error "could not setup config files machinery" "$LINENO" 5
+++fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
+++  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
++ _ACEOF
++ 
++-# VPATH may cause trouble with some makes, so we remove $(srcdir),
++-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+++# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
+++# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
++ # trailing colons and then remove the whole line if VPATH becomes empty
++ # (actually we leave an empty line to preserve line numbers).
++ if test "x$srcdir" = x.; then
++-  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
++-s/:*\$(srcdir):*/:/
++-s/:*\${srcdir}:*/:/
++-s/:*@srcdir@:*/:/
++-s/^\([^=]*=[	 ]*\):*/\1/
+++  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
+++h
+++s///
+++s/^/:/
+++s/[	 ]*$/:/
+++s/:\$(srcdir):/:/g
+++s/:\${srcdir}:/:/g
+++s/:@srcdir@:/:/g
+++s/^:*//
++ s/:*$//
+++x
+++s/\(=[	 ]*\).*/\1/
+++G
+++s/\n//
++ s/^[^=]*=[	 ]*$//
++ }'
++ fi
++@@ -14216,7 +14502,7 @@ fi # test -n "$CONFIG_FILES"
++ # No need to generate them if there are no CONFIG_HEADERS.
++ # This happens for instance with `./config.status Makefile'.
++ if test -n "$CONFIG_HEADERS"; then
++-cat >"$tmp/defines.awk" <<\_ACAWK ||
+++cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
++ BEGIN {
++ _ACEOF
++ 
++@@ -14228,11 +14514,11 @@ _ACEOF
++ # handling of long lines.
++ ac_delim='%!_!# '
++ for ac_last_try in false false :; do
++-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
++-  if test -z "$ac_t"; then
+++  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+++  if test -z "$ac_tt"; then
++     break
++   elif $ac_last_try; then
++-    as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
+++    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
++   else
++     ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++   fi
++@@ -14317,7 +14603,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ _ACAWK
++ _ACEOF
++ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++-  as_fn_error "could not setup config headers machinery" "$LINENO" 5
+++  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
++ fi # test -n "$CONFIG_HEADERS"
++ 
++ 
++@@ -14330,7 +14616,7 @@ do
++   esac
++   case $ac_mode$ac_tag in
++   :[FHL]*:*);;
++-  :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
+++  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
++   :[FH]-) ac_tag=-:-;;
++   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
++   esac
++@@ -14349,7 +14635,7 @@ do
++     for ac_f
++     do
++       case $ac_f in
++-      -) ac_f="$tmp/stdin";;
+++      -) ac_f="$ac_tmp/stdin";;
++       *) # Look for the file first in the build tree, then in the source tree
++ 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
++ 	 # because $ac_f cannot contain `:'.
++@@ -14358,7 +14644,7 @@ do
++ 	   [\\/$]*) false;;
++ 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
++ 	   esac ||
++-	   as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
+++	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
++       esac
++       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
++       as_fn_append ac_file_inputs " '$ac_f'"
++@@ -14384,8 +14670,8 @@ $as_echo "$as_me: creating $ac_file" >&6;}
++     esac
++ 
++     case $ac_tag in
++-    *:-:* | *:-) cat >"$tmp/stdin" \
++-      || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
+++    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
++     esac
++     ;;
++   esac
++@@ -14515,23 +14801,24 @@ s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
++ s&@INSTALL@&$ac_INSTALL&;t t
++ $ac_datarootdir_hack
++ "
++-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
++-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+++eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
+++  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
++ 
++ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
++-  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
++-  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+++  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
+++  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
+++      "$ac_tmp/out"`; test -z "$ac_out"; } &&
++   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++-which seems to be undefined.  Please make sure it is defined." >&5
+++which seems to be undefined.  Please make sure it is defined" >&5
++ $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++-which seems to be undefined.  Please make sure it is defined." >&2;}
+++which seems to be undefined.  Please make sure it is defined" >&2;}
++ 
++-  rm -f "$tmp/stdin"
+++  rm -f "$ac_tmp/stdin"
++   case $ac_file in
++-  -) cat "$tmp/out" && rm -f "$tmp/out";;
++-  *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
+++  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
+++  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
++   esac \
++-  || as_fn_error "could not create $ac_file" "$LINENO" 5
+++  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
++  ;;
++   :H)
++   #
++@@ -14540,21 +14827,21 @@ which seems to be undefined.  Please make sure it is defined." >&2;}
++   if test x"$ac_file" != x-; then
++     {
++       $as_echo "/* $configure_input  */" \
++-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
++-    } >"$tmp/config.h" \
++-      || as_fn_error "could not create $ac_file" "$LINENO" 5
++-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+++      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+++    } >"$ac_tmp/config.h" \
+++      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
+++    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
++       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
++ $as_echo "$as_me: $ac_file is unchanged" >&6;}
++     else
++       rm -f "$ac_file"
++-      mv "$tmp/config.h" "$ac_file" \
++-	|| as_fn_error "could not create $ac_file" "$LINENO" 5
+++      mv "$ac_tmp/config.h" "$ac_file" \
+++	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
++     fi
++   else
++     $as_echo "/* $configure_input  */" \
++-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
++-      || as_fn_error "could not create -" "$LINENO" 5
+++      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
+++      || as_fn_error $? "could not create -" "$LINENO" 5
++   fi
++  ;;
++   :L)
++@@ -14574,19 +14861,19 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;}
++ $as_echo "$as_me: linking $ac_source to $ac_file" >&6;}
++ 
++     if test ! -r "$ac_source"; then
++-      as_fn_error "$ac_source: file not found" "$LINENO" 5
+++      as_fn_error $? "$ac_source: file not found" "$LINENO" 5
++     fi
++     rm -f "$ac_file"
++ 
++     # Try a relative symlink, then a hard link, then a copy.
++-    case $srcdir in
+++    case $ac_source in
++     [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;;
++ 	*) ac_rel_source=$ac_top_build_prefix$ac_source ;;
++     esac
++     ln -s "$ac_rel_source" "$ac_file" 2>/dev/null ||
++       ln "$ac_source" "$ac_file" 2>/dev/null ||
++       cp -p "$ac_source" "$ac_file" ||
++-      as_fn_error "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
+++      as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5
++   fi
++  ;;
++   :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
++@@ -15256,7 +15543,7 @@ _ACEOF
++ ac_clean_files=$ac_clean_files_save
++ 
++ test $ac_write_fail = 0 ||
++-  as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
+++  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
++ 
++ 
++ # configure is writing to config.log, and then calls config.status.
++@@ -15277,7 +15564,7 @@ if test "$no_create" != yes; then
++   exec 5>>config.log
++   # Use ||, not &&, to avoid exiting from the if with $? = 1, which
++   # would make configure fail if this is the last instruction.
++-  $ac_cs_success || as_fn_exit $?
+++  $ac_cs_success || as_fn_exit 1
++ fi
++ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
++   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
++diff --git a/sim/erc32/configure.ac b/sim/erc32/configure.ac
++index bc46091..1646cc5 100644
++--- a/sim/erc32/configure.ac
+++++ b/sim/erc32/configure.ac
++@@ -32,4 +32,5 @@ else
++ 	       AC_ERROR([the required "readline" library is missing]), $TERMCAP)
++ fi
++ AC_SUBST(READLINE)
+++AC_C_BIGENDIAN
++ SIM_AC_OUTPUT
++diff --git a/sim/erc32/end.c b/sim/erc32/end.c
++deleted file mode 100644
++index 9337198..0000000
++--- a/sim/erc32/end.c
+++++ /dev/null
++@@ -1,27 +0,0 @@
++-#include "config.h"
++-#include <stdio.h>
++-
++-int
++-main()
++-{
++-
++-    unsigned int    u1;
++-    char           *c;
++-    double          d1;
++-    float          *f1;
++-
++-    c = (char *) &u1;
++-    u1 = 0x0F;
++-    if (c[0] == 0x0F)
++-	puts("#define HOST_LITTLE_ENDIAN\n");
++-    else
++-	puts("#define HOST_BIG_ENDIAN\n");
++-
++-    d1 = 1.0;
++-    f1 = (float *) &d1;
++-    if (*((int *) f1) != 0x3ff00000)
++-	puts("#define HOST_LITTLE_ENDIAN_FLOAT\n");
++-    else
++-	puts("#define HOST_BIG_ENDIAN_FLOAT\n");
++-    return 0;
++-}
++diff --git a/sim/erc32/erc32.c b/sim/erc32/erc32.c
++index 4d4177e..0846bab 100644
++--- a/sim/erc32/erc32.c
+++++ b/sim/erc32/erc32.c
++@@ -22,6 +22,7 @@
++ /* The control space devices */
++ 
++ #include "config.h"
+++#include <errno.h>
++ #include <sys/types.h>
++ #include <stdio.h>
++ #include <string.h>
++@@ -30,16 +31,9 @@
++ #include <sys/file.h>
++ #include <unistd.h>
++ #include "sis.h"
++-#include "end.h"
++ #include "sim-config.h"
++ 
++-extern int      ctrl_c;
++-extern int32    sis_verbose;
++-extern int32    sparclite, sparclite_board;
++-extern int      rom8,wrp,uben;
++-extern char     uart_dev1[], uart_dev2[];
++-
++-int dumbio = 0; /* normal, smart, terminal oriented IO by default */
+++static int tty_setup = 1; /* default setup if not a tty */
++ 
++ /* MEC registers */
++ #define MEC_START 	0x01f80000
++@@ -55,11 +49,6 @@ int dumbio = 0; /* normal, smart, terminal oriented IO by default */
++ extern int errmec;
++ #endif
++ 
++-/* The target's byte order is big-endian by default until we load a
++-   little-endian program.  */
++-
++-int	current_target_byte_order = BIG_ENDIAN;
++-
++ #define MEC_WS	0		/* Waitstates per MEC access (0 ws) */
++ #define MOK	0
++ 
++@@ -297,26 +286,24 @@ static void	gpt_reload_set (uint32 val);
++ static void	timer_ctrl (uint32 val);
++ static unsigned char *
++ 		get_mem_ptr (uint32 addr, uint32 size);
+++static void	store_bytes (unsigned char *mem, uint32 waddr,
+++			uint32 *data, int sz, int32 *ws);
++ 
++-static void	fetch_bytes (int asi, unsigned char *mem,
++-			     uint32 *data, int sz);
++-
++-static void	store_bytes (unsigned char *mem, uint32 *data, int sz);
++-
++-extern int	ext_irl;
+++static host_callback *callback;
++ 
++ 
++ /* One-time init */
++ 
++-void
+++static void
++ init_sim()
++ {
+++    callback = sim_callback;
++     port_init();
++ }
++ 
++ /* Power-on reset init */
++ 
++-void
+++static void
++ reset()
++ {
++     mec_reset();
++@@ -396,7 +383,7 @@ mecparerror()
++ 
++ /* IU error mode manager */
++ 
++-void
+++static void
++ error_mode(pc)
++     uint32          pc;
++ {
++@@ -467,7 +454,7 @@ decode_mcr()
++ 
++ /* Flush ports when simulator stops */
++ 
++-void
+++static void
++ sim_halt()
++ {
++ #ifdef FAST_UART
++@@ -475,13 +462,6 @@ sim_halt()
++ #endif
++ }
++ 
++-int
++-sim_stop(SIM_DESC sd)
++-{
++-  ctrl_c = 1;
++-  return 1;
++-}
++-
++ static void
++ close_port()
++ {
++@@ -491,7 +471,7 @@ close_port()
++ 	fclose(f2in);
++ }
++ 
++-void
+++static void
++ exit_sim()
++ {
++     close_port();
++@@ -743,6 +723,14 @@ mec_read(addr, asi, data)
++ 	*data = read_uart(addr);
++ 	break;
++ 
+++    case 0xF4:		/* simulator RAM size in bytes */
+++	*data = 4096*1024;
+++	break;
+++
+++    case 0xF8:		/* simulator ROM size in bytes */
+++	*data = 1024*1024;
+++	break;
+++
++     default:
++ 	set_sfsr(MEC_ACC, addr, asi, 1);
++ 	return (1);
++@@ -935,32 +923,38 @@ mec_write(addr, data)
++ 
++ static int      ifd1 = -1, ifd2 = -1, ofd1 = -1, ofd2 = -1;
++ 
++-void
+++static void
++ init_stdio()
++ {
++     if (dumbio)
++         return; /* do nothing */
++-    if (!ifd1)
+++    if (ifd1 == 0 && f1open) {
++ 	tcsetattr(0, TCSANOW, &ioc1);
++-    if (!ifd2)
+++        tcflush(ifd1, TCIFLUSH);
+++    }
+++    if (ifd2 == 0 && f1open) {
++ 	tcsetattr(0, TCSANOW, &ioc2);
+++        tcflush(ifd2, TCIFLUSH);
+++    }
++ }
++ 
++-void
+++static void
++ restore_stdio()
++ {
++     if (dumbio)
++         return; /* do nothing */
++-    if (!ifd1)
+++    if (ifd1 == 0 && f1open && tty_setup)
++ 	tcsetattr(0, TCSANOW, &iocold1);
++-    if (!ifd2)
+++    if (ifd2 == 0 && f2open && tty_setup)
++ 	tcsetattr(0, TCSANOW, &iocold2);
++ }
++ 
++ #define DO_STDIO_READ( _fd_, _buf_, _len_ )          \
++-             ( dumbio                                \
+++             ( dumbio || nouartrx \
++                ? (0) /* no bytes read, no delay */   \
++-               : read( _fd_, _buf_, _len_ ) )
+++               : (_fd_) == 1 && callback ? \
+++                 callback->read_stdin (callback, _buf_, _len_) :  \
+++                 read( _fd_, _buf_, _len_ ) )
++ 
++ 
++ static void
++@@ -990,21 +984,26 @@ port_init()
++ 	}
++     if (f1in) ifd1 = fileno(f1in);
++     if (ifd1 == 0) {
+++        if (callback && !callback->isatty(callback, ifd1)) {
+++            tty_setup = 0;
+++        }
++ 	if (sis_verbose)
++ 	    printf("serial port A on stdin/stdout\n");
++         if (!dumbio) {
++             tcgetattr(ifd1, &ioc1);
+++            if (tty_setup) {
++             iocold1 = ioc1;
++             ioc1.c_lflag &= ~(ICANON | ECHO);
++             ioc1.c_cc[VMIN] = 0;
++             ioc1.c_cc[VTIME] = 0;
++         }
+++        }
++ 	f1open = 1;
++     }
++ 
++     if (f1out) {
++ 	ofd1 = fileno(f1out);
++-    	if (!dumbio && ofd1 == 1) setbuf(f1out, NULL);
+++    	if (!dumbio && tty_setup && ofd1 == 1) setbuf(f1out, NULL);
++     }
++ 
++     if (uart_dev2[0] != 0)
++@@ -1023,17 +1022,19 @@ port_init()
++ 	    printf("serial port B on stdin/stdout\n");
++         if (!dumbio) {
++             tcgetattr(ifd2, &ioc2);
+++            if (tty_setup) {
++             iocold2 = ioc2;
++             ioc2.c_lflag &= ~(ICANON | ECHO);
++             ioc2.c_cc[VMIN] = 0;
++             ioc2.c_cc[VTIME] = 0;
++         }
+++        }
++ 	f2open = 1;
++     }
++ 
++     if (f2out) {
++ 	ofd2 = fileno(f2out);
++-        if (!dumbio && ofd2 == 1) setbuf(f2out, NULL);
+++        if (!dumbio && tty_setup && ofd2 == 1) setbuf(f2out, NULL);
++     }
++ 
++     wnuma = wnumb = 0;
++@@ -1062,6 +1063,9 @@ read_uart(addr)
++ 	    if (f1open) {
++ 	        anum = DO_STDIO_READ(ifd1, aq, UARTBUF);
++ 	    }
+++      else {
+++          anum = 0;
+++      }
++ 	    if (anum > 0) {
++ 		aind = 0;
++ 		if ((aind + 1) < anum)
++@@ -1094,6 +1098,9 @@ read_uart(addr)
++ 	    if (f2open) {
++ 		bnum = DO_STDIO_READ(ifd2, bq, UARTBUF);
++ 	    }
+++	    else {
+++		bnum = 0;
+++	    }
++ 	    if (bnum > 0) {
++ 		bind = 0;
++ 		if ((bind + 1) < bnum)
++@@ -1126,6 +1133,9 @@ read_uart(addr)
++ 	    if (f1open) {
++ 	        anum = DO_STDIO_READ(ifd1, aq, UARTBUF);
++             }
+++	    else {
+++		anum = 0;
+++	    }
++ 	    if (anum > 0) {
++ 		Ucontrol |= 0x00000001;
++ 		aind = 0;
++@@ -1138,6 +1148,9 @@ read_uart(addr)
++ 	    if (f2open) {
++ 		bnum = DO_STDIO_READ(ifd2, bq, UARTBUF);
++ 	    }
+++	    else {
+++		bnum = 0;
+++	    }
++ 	    if (bnum > 0) {
++ 		Ucontrol |= 0x00010000;
++ 		bind = 0;
++@@ -1178,8 +1191,12 @@ write_uart(addr, data)
++ 	    if (wnuma < UARTBUF)
++ 	        wbufa[wnuma++] = c;
++ 	    else {
++-	        while (wnuma)
+++	        while (wnuma) {
+++              if (ofd1 == 1 && callback)
+++                  wnuma -= callback->write_stdout(callback, wbufa, wnuma);
+++              else
++ 		    wnuma -= fwrite(wbufa, 1, wnuma, f1out);
+++          }
++ 	        wbufa[wnuma++] = c;
++ 	    }
++ 	}
++@@ -1202,8 +1219,12 @@ write_uart(addr, data)
++ 	    if (wnumb < UARTBUF)
++ 		wbufb[wnumb++] = c;
++ 	    else {
++-		while (wnumb)
+++          while (wnumb) {
+++              if (ofd1 == 1 && callback)
+++                  wnumb -= callback->write_stdout(callback, wbufb, wnumb);
+++              else
++ 		    wnumb -= fwrite(wbufb, 1, wnumb, f2out);
+++          }
++ 		wbufb[wnumb++] = c;
++ 	    }
++ 	}
++@@ -1241,19 +1262,37 @@ write_uart(addr, data)
++ static void
++ flush_uart()
++ {
++-    while (wnuma && f1open)
+++    while (wnuma && f1open) {
+++        if (ofd1 == 1 && callback) {
+++            wnuma -= callback->write_stdout(callback, wbufa, wnuma);
+++            callback->flush_stdout(callback);
+++        }
+++        else
++ 	wnuma -= fwrite(wbufa, 1, wnuma, f1out);
++-    while (wnumb && f2open)
+++    }
+++    while (wnumb && f2open) {
+++        if (ofd2 == 1 && callback) {
+++            wnuma -= callback->write_stdout(callback, wbufb, wnuma);
+++            callback->flush_stdout(callback);
+++        }
+++        else
++ 	wnumb -= fwrite(wbufb, 1, wnumb, f2out);
++ }
+++}
++ 
++ 
++ 
++ static void
++ uarta_tx()
++ {
++-
++-    while (f1open && fwrite(&uarta_sreg, 1, 1, f1out) != 1);
+++    while (f1open) {
+++        if (ofd1 == 1 && callback) {
+++            while (callback->write_stdout(callback, &uarta_sreg, 1) != 1);
+++        }
+++        else {
+++            while (fwrite(&uarta_sreg, 1, 1, f1out) != 1);
+++        }
+++    }
++     if (uart_stat_reg & UARTA_HRE) {
++ 	uart_stat_reg |= UARTA_SRE;
++     } else {
++@@ -1267,7 +1306,14 @@ uarta_tx()
++ static void
++ uartb_tx()
++ {
++-    while (f2open && fwrite(&uartb_sreg, 1, 1, f2out) != 1);
+++    while (f2open) {
+++        if (ofd2 == 1 && callback) {
+++            while (callback->write_stdout(callback, &uarta_sreg, 1) != 1);
+++        }
+++        else {
+++            while (fwrite(&uartb_sreg, 1, 1, f2out) != 1);
+++        }
+++    }
++     if (uart_stat_reg & UARTB_HRE) {
++ 	uart_stat_reg |= UARTB_SRE;
++     } else {
++@@ -1289,6 +1335,8 @@ uart_rx(arg)
++     rsize = 0;
++     if (f1open)
++         rsize = DO_STDIO_READ(ifd1, &rxd, 1);
+++    else
+++        rsize = 0;
++     if (rsize > 0) {
++ 	uarta_data = UART_DR | rxd;
++ 	if (uart_stat_reg & UARTA_HRE)
++@@ -1305,6 +1353,8 @@ uart_rx(arg)
++     rsize = 0;
++     if (f2open)
++         rsize = DO_STDIO_READ(ifd2, &rxd, 1);
+++    else
+++        rsize = 0;
++     if (rsize) {
++ 	uartb_data = UART_DR | rxd;
++ 	if (uart_stat_reg & UARTB_HRE)
++@@ -1517,143 +1567,89 @@ timer_ctrl(val)
++ 	gpt_start();
++ }
++ 
++-
++-/* Retrieve data from target memory.  MEM points to location from which
++-   to read the data; DATA points to words where retrieved data will be
++-   stored in host byte order.  SZ contains log(2) of the number of bytes
++-   to retrieve, and can be 0 (1 byte), 1 (one half-word), 2 (one word),
++-   or 3 (two words). */
+++/* Store data in host byte order.  MEM points to the beginning of the
+++   emulated memory; WADDR contains the index the emulated memory,
+++   DATA points to words in host byte order to be stored.  SZ contains log(2)
+++   of the number of bytes to retrieve, and can be 0 (1 byte), 1 (one half-word),
+++   2 (one word), or 3 (two words); WS should return the number of wait-states. */
++ 
++ static void
++-fetch_bytes (asi, mem, data, sz)
++-    int		    asi;
+++store_bytes (mem, waddr, data, sz, ws)
++     unsigned char  *mem;
+++    uint32	   waddr;
++     uint32	   *data;
++-    int		    sz;
+++    int32	    sz;
+++    int32	   *ws;
++ {
++-    if (CURRENT_TARGET_BYTE_ORDER == BIG_ENDIAN
++-	|| asi == 8 || asi == 9) {
++-	switch (sz) {
++-	case 3:
++-	    data[1] =  (((uint32) mem[7]) & 0xff) |
++-		      ((((uint32) mem[6]) & 0xff) <<  8) |
++-		      ((((uint32) mem[5]) & 0xff) << 16) |
++-		      ((((uint32) mem[4]) & 0xff) << 24);
++-	    /* Fall through to 2 */
++-	case 2:
++-	    data[0] =  (((uint32) mem[3]) & 0xff) |
++-		      ((((uint32) mem[2]) & 0xff) <<  8) |
++-		      ((((uint32) mem[1]) & 0xff) << 16) |
++-		      ((((uint32) mem[0]) & 0xff) << 24);
+++    switch (sz) {
+++	case 0:
+++#ifdef HOST_LITTLE_ENDIAN
+++	    waddr ^= 3;
+++#endif
+++	    mem[waddr] = *data & 0x0ff;
+++	    *ws = mem_ramw_ws + 3;
++ 	    break;
++ 	case 1:
++-	    data[0] =  (((uint32) mem[1]) & 0xff) |
++-		      ((((uint32) mem[0]) & 0xff) << 8);
++-	    break;
++-	case 0:
++-	    data[0] = mem[0] & 0xff;
+++#ifdef HOST_LITTLE_ENDIAN
+++	    waddr ^= 2;
+++#endif
+++	    *((unsigned short *) &(mem[waddr])) = *data & 0x0ffff;
+++	    *ws = mem_ramw_ws + 3;
++ 	    break;
++-	    
++-	}
++-    } else {
++-	switch (sz) {
++-	case 3:
++-	    data[1] = ((((uint32) mem[7]) & 0xff) << 24) |
++-		      ((((uint32) mem[6]) & 0xff) << 16) |
++-		      ((((uint32) mem[5]) & 0xff) <<  8) |
++-		       (((uint32) mem[4]) & 0xff);
++-	    /* Fall through to 4 */
++ 	case 2:
++-	    data[0] = ((((uint32) mem[3]) & 0xff) << 24) |
++-		      ((((uint32) mem[2]) & 0xff) << 16) |
++-		      ((((uint32) mem[1]) & 0xff) <<  8) |
++-		       (((uint32) mem[0]) & 0xff);
++-	    break;
++-	case 1:
++-	    data[0] = ((((uint32) mem[1]) & 0xff) <<  8) |
++-		       (((uint32) mem[0]) & 0xff);
+++	    *((uint32 *) &(mem[waddr])) = *data;
+++	    *ws = mem_ramw_ws;
++ 	    break;
++-	case 0:
++-	    data[0] = mem[0] & 0xff;
+++	case 3:
+++	    *((uint32 *) &(mem[waddr])) = data[0];
+++	    *((uint32 *) &(mem[waddr + 4])) = data[1];
+++	    *ws = 2 * mem_ramw_ws + STD_WS;
++ 	    break;
++-	}
++     }
++ }
++ 
++ 
++-/* Store data in target byte order.  MEM points to location to store data;
++-   DATA points to words in host byte order to be stored.  SZ contains log(2)
++-   of the number of bytes to retrieve, and can be 0 (1 byte), 1 (one half-word),
++-   2 (one word), or 3 (two words). */
+++/* Memory emulation */
++ 
++-static void
++-store_bytes (mem, data, sz)
++-    unsigned char  *mem;
++-    uint32	   *data;
++-    int		    sz;
+++static int
+++memory_iread(addr, data, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32          *ws;
++ {
++-    if (CURRENT_TARGET_BYTE_ORDER == LITTLE_ENDIAN) {
++-	switch (sz) {
++-	case 3:
++-	    mem[7] = (data[1] >> 24) & 0xff;
++-	    mem[6] = (data[1] >> 16) & 0xff;
++-	    mem[5] = (data[1] >>  8) & 0xff;
++-	    mem[4] = data[1] & 0xff;
++-	    /* Fall through to 2 */
++-	case 2:
++-	    mem[3] = (data[0] >> 24) & 0xff;
++-	    mem[2] = (data[0] >> 16) & 0xff;
++-	    /* Fall through to 1 */
++-	case 1:
++-	    mem[1] = (data[0] >>  8) & 0xff;
++-	    /* Fall through to 0 */
++-	case 0:
++-	    mem[0] = data[0] & 0xff;
++-	    break;
++-	}
++-    } else {
++-	switch (sz) {
++-	case 3:
++-	    mem[7] = data[1] & 0xff;
++-	    mem[6] = (data[1] >>  8) & 0xff;
++-	    mem[5] = (data[1] >> 16) & 0xff;
++-	    mem[4] = (data[1] >> 24) & 0xff;
++-	    /* Fall through to 2 */
++-	case 2:
++-	    mem[3] = data[0] & 0xff;
++-	    mem[2] = (data[0] >>  8) & 0xff;
++-	    mem[1] = (data[0] >> 16) & 0xff;
++-	    mem[0] = (data[0] >> 24) & 0xff;
++-	    break;
++-	case 1:
++-	    mem[1] = data[0] & 0xff;
++-	    mem[0] = (data[0] >> 8) & 0xff;
++-	    break;
++-	case 0:
++-	    mem[0] = data[0] & 0xff;
++-	    break;
++-	    
++-	}
+++    uint32          asi;
+++    if ((addr >= mem_ramstart) && (addr < (mem_ramstart + mem_ramsz))) {
+++        *data = *((uint32 *) & (ramb[addr & mem_rammask & ~3]));
+++	*ws = mem_ramr_ws;
+++	return (0);
+++    } else if (addr < mem_romsz) {
+++        *data = *((uint32 *) & (romb[addr & ~3]));
+++	*ws = mem_romr_ws;
+++	return (0);
++     }
++-}
++-
++ 
++-/* Memory emulation */
+++    printf("Memory exception at %x (illegal address)\n", addr);
+++    if (sregs.psr & 0x080) asi = 9; else asi = 8;
+++    set_sfsr(UIMP_ACC, addr, asi, 1);
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
++ 
++-int
++-memory_read(asi, addr, data, sz, ws)
++-    int32           asi;
+++static int
+++memory_read(addr, data, sz, ws)
++     uint32          addr;
++     uint32         *data;
++     int32           sz;
++     int32          *ws;
++ {
++     int32           mexc;
+++    int32           asi;
++ 
++ #ifdef ERRINJ
++     if (errmec) {
++ 	if (sis_verbose)
++ 	    printf("Inserted MEC error %d\n",errmec);
+++        if (sregs.psr & 0x080) asi = 11; else asi = 10;
++ 	set_sfsr(errmec, addr, asi, 1);
++ 	if (errmec == 5) mecparerror();
++ 	if (errmec == 6) iucomperr();
++@@ -1663,10 +1659,11 @@ memory_read(asi, addr, data, sz, ws)
++ #endif
++ 
++     if ((addr >= mem_ramstart) && (addr < (mem_ramstart + mem_ramsz))) {
++-	fetch_bytes (asi, &ramb[addr & mem_rammask], data, sz);
+++        *data = *((uint32 *) & (ramb[addr & mem_rammask & ~3]));
++ 	*ws = mem_ramr_ws;
++ 	return (0);
++     } else if ((addr >= MEC_START) && (addr < MEC_END)) {
+++        if (sregs.psr & 0x080) asi = 11; else asi = 10;
++ 	mexc = mec_read(addr, asi, data);
++ 	if (mexc) {
++ 	    set_sfsr(MEC_ACC, addr, asi, 1);
++@@ -1681,7 +1678,7 @@ memory_read(asi, addr, data, sz, ws)
++     } else if (era) {
++     	if ((addr < 0x100000) || 
++ 	    ((addr>= 0x80000000) && (addr < 0x80100000))) {
++-	    fetch_bytes (asi, &romb[addr & ROM_MASK], data, sz);
+++            *data = *((uint32 *) & (romb[addr & ROM_MASK & ~3]));
++ 	    *ws = 4;
++ 	    return (0);
++ 	} else if ((addr >= 0x10000000) && 
++@@ -1692,13 +1689,13 @@ memory_read(asi, addr, data, sz, ws)
++ 	}
++ 	
++     } else  if (addr < mem_romsz) {
++-	    fetch_bytes (asi, &romb[addr], data, sz);
+++            *data = *((uint32 *) & (romb[addr & ~3]));
++ 	    *ws = mem_romr_ws;
++ 	    return (0);
++ 
++ #else
++     } else if (addr < mem_romsz) {
++-	fetch_bytes (asi, &romb[addr], data, sz);
+++        *data = *((uint32 *) & (romb[addr & ~3]));
++ 	*ws = mem_romr_ws;
++ 	return (0);
++ #endif
++@@ -1706,19 +1703,30 @@ memory_read(asi, addr, data, sz, ws)
++     }
++ 
++     printf("Memory exception at %x (illegal address)\n", addr);
+++    if (sregs.psr & 0x080) asi = 11; else asi = 10;
++     set_sfsr(UIMP_ACC, addr, asi, 1);
++     *ws = MEM_EX_WS;
++     return (1);
++ }
++ 
++-int
++-memory_write(asi, addr, data, sz, ws)
+++static int
+++memory_read_asi(asi, addr, data, sz, ws)
++     int32           asi;
++     uint32          addr;
++     uint32         *data;
++     int32           sz;
++     int32          *ws;
++ {
+++    return(memory_read(addr, data, sz, ws));
+++}
+++
+++static int
+++memory_write(addr, data, sz, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
++     uint32          byte_addr;
++     uint32          byte_mask;
++     uint32          waddr;
++@@ -1726,11 +1734,13 @@ memory_write(asi, addr, data, sz, ws)
++     int32           mexc;
++     int             i;
++     int             wphit[2];
+++    int32           asi;
++ 
++ #ifdef ERRINJ
++     if (errmec) {
++ 	if (sis_verbose)
++ 	    printf("Inserted MEC error %d\n",errmec);
+++        if (sregs.psr & 0x080) asi = 11; else asi = 10;
++ 	set_sfsr(errmec, addr, asi, 0);
++ 	if (errmec == 5) mecparerror();
++ 	if (errmec == 6) iucomperr();
++@@ -1743,6 +1753,7 @@ memory_write(asi, addr, data, sz, ws)
++ 	if (mem_accprot) {
++ 
++ 	    waddr = (addr & 0x7fffff) >> 2;
+++            if (sregs.psr & 0x080) asi = 11; else asi = 10;
++ 	    for (i = 0; i < 2; i++)
++ 		wphit[i] =
++ 		    (((asi == 0xa) && (mec_wpr[i] & 1)) ||
++@@ -1761,22 +1772,12 @@ memory_write(asi, addr, data, sz, ws)
++ 	    }
++ 	}
++ 
++-	store_bytes (&ramb[addr & mem_rammask], data, sz);
++-
++-	switch (sz) {
++-	case 0:
++-	case 1:
++-	    *ws = mem_ramw_ws + 3;
++-	    break;
++-	case 2:
++-	    *ws = mem_ramw_ws;
++-	    break;
++-	case 3:
++-	    *ws = 2 * mem_ramw_ws + STD_WS;
++-	    break;
++-	}
+++	waddr = addr & mem_rammask;
+++	store_bytes (ramb, waddr, data, sz, ws);
++ 	return (0);
+++
++     } else if ((addr >= MEC_START) && (addr < MEC_END)) {
+++        if (sregs.psr & 0x080) asi = 11; else asi = 10;
++ 	if ((sz != 2) || (asi != 0xb)) {
++ 	    set_sfsr(MEC_ACC, addr, asi, 0);
++ 	    *ws = MEM_EX_WS;
++@@ -1798,7 +1799,7 @@ memory_write(asi, addr, data, sz, ws)
++ 	((addr < 0x100000) || ((addr >= 0x80000000) && (addr < 0x80100000)))) {
++ 	    addr &= ROM_MASK;
++ 	    *ws = sz == 3 ? 8 : 4;
++-	    store_bytes (&romb[addr], data, sz);
+++	    store_bytes (romb, addr, data, sz, ws);
++             return (0);
++ 	} else if ((addr >= 0x10000000) && 
++ 		   (addr < (0x10000000 + (512 << (mec_iocr & 0x0f)))) &&
++@@ -1814,7 +1815,7 @@ memory_write(asi, addr, data, sz, ws)
++ 	*ws = mem_romw_ws + 1;
++ 	if (sz == 3)
++ 	    *ws += mem_romw_ws + STD_WS;
++-	store_bytes (&romb[addr], data, sz);
+++	store_bytes (romb, addr, data, sz, ws);
++         return (0);
++ 
++ #else
++@@ -1825,7 +1826,7 @@ memory_write(asi, addr, data, sz, ws)
++ 	*ws = mem_romw_ws + 1;
++ 	if (sz == 3)
++             *ws += mem_romw_ws + STD_WS;
++-	store_bytes (&romb[addr], data, sz);
+++	store_bytes (romb, addr, data, sz, ws);
++         return (0);
++ 
++ #endif
++@@ -1833,10 +1834,22 @@ memory_write(asi, addr, data, sz, ws)
++     }
++ 	
++     *ws = MEM_EX_WS;
+++    if (sregs.psr & 0x080) asi = 11; else asi = 10;
++     set_sfsr(UIMP_ACC, addr, asi, 0);
++     return (1);
++ }
++ 
+++static int
+++memory_write_asi(asi, addr, data, sz, ws)
+++    int32           asi;
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    return(memory_write(addr, data, sz, ws));
+++}
+++
++ static unsigned char  *
++ get_mem_ptr(addr, size)
++     uint32          addr;
++@@ -1858,7 +1871,7 @@ get_mem_ptr(addr, size)
++     return ((char *) -1);
++ }
++ 
++-int
+++static int
++ sis_memory_write(addr, data, length)
++     uint32               addr;
++     const unsigned char *data;
++@@ -1873,13 +1886,19 @@ sis_memory_write(addr, data, length)
++     return (length);
++ }
++ 
++-int
+++static int
++ sis_memory_read(addr, data, length)
++     uint32          addr;
++     char           *data;
++     uint32          length;
++ {
++     char           *mem;
+++    int            ws;
+++
+++    if (length == 4) {
+++      memory_read(addr, data, length, &ws);
+++      return(4);
+++    }
++ 
++     if ((mem = get_mem_ptr(addr, length)) == ((char *) -1))
++ 	return (0);
++@@ -1887,3 +1906,35 @@ sis_memory_read(addr, data, length)
++     memcpy(data, mem, length);
++     return (length);
++ }
+++
+++static void
+++boot_init ()
+++{
+++    mec_write(MEC_WCR, 0);	/* zero waitstates */
+++    mec_write(MEC_TRAPD, 0);	/* turn off watch-dog */
+++    mec_write(MEC_RTC_SCALER, sregs.freq-1); /* generate 1 MHz RTC tick */
+++    mec_write(MEC_MEMCFG, (3 << 18) | (4 << 10)); /* 1 MB ROM, 4 MB RAM */
+++    sregs.wim = 2;
+++    sregs.psr = 0x110010e0;
+++    sregs.r[30] = RAM_END;
+++    sregs.r[14] = sregs.r[30] - 96*4;
+++    mec_mcr |= 1;		/* power-down enabled */
+++}
+++
+++struct memsys erc32sys = {
+++    init_sim,
+++    reset,
+++    error_mode,
+++    sim_halt,
+++    exit_sim,
+++    init_stdio,
+++    restore_stdio,
+++    memory_iread,
+++    memory_read,
+++    memory_read_asi,
+++    memory_write,
+++    memory_write_asi,
+++    sis_memory_write,
+++    sis_memory_read,
+++    boot_init
+++};
++diff --git a/sim/erc32/exec.c b/sim/erc32/exec.c
++index dc86ba3..f812ad9 100644
++--- a/sim/erc32/exec.c
+++++ b/sim/erc32/exec.c
++@@ -21,11 +21,9 @@
++ 
++ #include "config.h"
++ #include "sis.h"
++-#include "end.h"
++ #include <math.h>
++ #include <stdio.h>
++ 
++-extern int32    sis_verbose, sparclite;
++ int ext_irl = 0;
++ 
++ /* Load/store interlock delay */
++@@ -229,10 +227,6 @@ static int	fpexec (uint32 op3, uint32 rd, uint32 rs1, uint32 rs2,
++ 			struct pstate *sregs);
++ static int	chk_asi (struct pstate *sregs, uint32 *asi, uint32 op3);
++ 
++-
++-extern struct estate ebase;
++-extern int32    nfp,ift;
++-
++ #ifdef ERRINJ
++ extern uint32 errtt, errftt;
++ #endif
++@@ -371,6 +365,36 @@ div64 (uint32 n1_hi, uint32 n1_low, uint32 n2, uint32 *result, int msigned)
++ }
++ 
++ 
+++static int
+++extract_short(uint32 data, uint32 address)
+++{
+++    return((data>>((2 - (address & 2))*8)) & 0xffff);
+++}
+++
+++static int
+++extract_short_signed(uint32 data, uint32 address)
+++{
+++    uint32 tmp;
+++    tmp = ((data>>((2 - (address & 2))*8)) & 0xffff);
+++    if (tmp & 0x8000) tmp |= 0xffff0000;
+++    return(tmp);
+++}
+++
+++static int
+++extract_byte(uint32 data, uint32 address)
+++{
+++    return((data>>((3 - (address & 3))*8)) & 0xff);
+++}
+++
+++static int
+++extract_byte_signed(uint32 data, uint32 address)
+++{
+++    uint32 tmp;
+++    tmp = ((data>>((3 - (address & 3))*8)) & 0xff);
+++    if (tmp & 0x80) tmp |= 0xffffff00;
+++    return(tmp);
+++}
+++
++ int
++ dispatch_instruction(sregs)
++     struct pstate  *sregs;
++@@ -1041,17 +1065,17 @@ dispatch_instruction(sregs)
++ 		*rdd = sregs->psr;
++ 		break;
++ 	    case RDY:
++-                if (!sparclite)
+++                if ((!sparclite) && (cputype != CPU_LEON3))
++                     *rdd = sregs->y;
++                 else {
++                     int rs1_is_asr = (sregs->inst >> 14) & 0x1f;
++                     if ( 0 == rs1_is_asr )
++                         *rdd = sregs->y;
++-                    else if ( 17 == rs1_is_asr )
+++                    else if ( 17 == rs1_is_asr ) {
++                         *rdd = sregs->asr17;
+++                    }
++                     else {
++                         sregs->trap = TRAP_UNIMP;
++-                        break;
++                     }
++                 }
++ 		break;
++@@ -1078,7 +1102,8 @@ dispatch_instruction(sregs)
++ 		    sregs->trap = TRAP_PRIVI;
++ 		    break;
++ 		}
++-		sregs->psr = (rs1 ^ operand2) & 0x00f03fff;
+++		sregs->psr = (sregs->psr & 0xff000000) |
+++			(rs1 ^ operand2) & 0x00f03fff;
++ 		break;
++ 	    case WRWIM:
++ 		if (!(sregs->psr & PSR_S)) {
++@@ -1096,13 +1121,19 @@ dispatch_instruction(sregs)
++ 		    ((rs1 ^ operand2) & 0xfffff000);
++ 		break;
++ 	    case WRY:
++-                if (!sparclite)
+++                if ((!sparclite) && (cputype != CPU_LEON3))
++                     sregs->y = (rs1 ^ operand2);
++                 else {
++                     if ( 0 == rd )
++                         sregs->y = (rs1 ^ operand2);
++-                    else if ( 17 == rd )
++-                        sregs->asr17 = (rs1 ^ operand2);
+++                    else if ( 17 == rd ) {
+++                        if (sparclite)
+++                            sregs->asr17 = (rs1 ^ operand2);
+++                    }
+++                    else if ( 19 == rd ) {
+++                        if (cputype == CPU_LEON3)
+++                            wait_for_irq();
+++                    }
++                     else {
++                         sregs->trap = TRAP_UNIMP;
++                         break;
++@@ -1202,6 +1233,32 @@ dispatch_instruction(sregs)
++ 	switch (op3) {
++ 	case LDDA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x7) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    if (rd & 1) {
+++		rd &= 0x1e;
+++		if (rd > 7)
+++		    rdd = &(sregs->r[(cwp + rd) & 0x7f]);
+++		else
+++		    rdd = &(sregs->g[rd]);
+++	    }
+++	    mexc = ms->memory_read_asi(asi, address, ddata, 2, &ws);
+++	    sregs->hold += ws;
+++	    mexc |= ms->memory_read_asi(asi, address+4, &ddata[1], 2, &ws);
+++	    sregs->hold += ws;
+++	    sregs->icnt = T_LDD;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++	    } else {
+++		rdd[0] = ddata[0];
+++		rdd[1] = ddata[1];
+++#ifdef STAT
+++		sregs->nload++;	/* Double load counts twice */
+++#endif
+++	    }
+++	    break;
++ 	case LDD:
++ 	    if (address & 0x7) {
++ 		sregs->trap = TRAP_UNALI;
++@@ -1214,8 +1271,10 @@ dispatch_instruction(sregs)
++ 		else
++ 		    rdd = &(sregs->g[rd]);
++ 	    }
++-	    mexc = memory_read(asi, address, ddata, 3, &ws);
++-	    sregs->hold += ws * 2;
+++	    mexc = ms->memory_read(address, ddata, 2, &ws);
+++	    sregs->hold += ws;
+++	    mexc |= ms->memory_read(address+4, &ddata[1], 2, &ws);
+++	    sregs->hold += ws;
++ 	    sregs->icnt = T_LDD;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1230,12 +1289,24 @@ dispatch_instruction(sregs)
++ 
++ 	case LDA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x3) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    mexc = ms->memory_read_asi(asi, address, &data, 2, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++	    } else {
+++		*rdd = data;
+++	    }
+++	    break;
++ 	case LD:
++ 	    if (address & 0x3) {
++ 		sregs->trap = TRAP_UNALI;
++ 		break;
++ 	    }
++-	    mexc = memory_read(asi, address, &data, 2, &ws);
+++	    mexc = ms->memory_read(address, &data, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1245,17 +1316,37 @@ dispatch_instruction(sregs)
++ 	    break;
++ 	case LDSTUBA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    mexc = ms->memory_read_asi(asi, address, &data, 0, &ws);
+++	    sregs->hold += ws;
+++	    sregs->icnt = T_LDST;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++		break;
+++	    }
+++	    data = extract_byte(data, address);
+++	    *rdd = data;
+++	    data = 0x0ff;
+++	    mexc = ms->memory_write_asi(asi, address, &data, 0, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++	    }
+++#ifdef STAT
+++	    sregs->nload++;
+++#endif
+++	    break;
++ 	case LDSTUB:
++-	    mexc = memory_read(asi, address, &data, 0, &ws);
+++	    mexc = ms->memory_read(address, &data, 0, &ws);
++ 	    sregs->hold += ws;
++ 	    sregs->icnt = T_LDST;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++ 		break;
++ 	    }
+++	    data = extract_byte(data, address);
++ 	    *rdd = data;
++ 	    data = 0x0ff;
++-	    mexc = memory_write(asi, address, &data, 0, &ws);
+++	    mexc = ms->memory_write(address, &data, 0, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1267,35 +1358,67 @@ dispatch_instruction(sregs)
++ 	case LDSBA:
++ 	case LDUBA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    mexc = ms->memory_read_asi(asi, address, &data, 0, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++		break;
+++	    }
+++	    if (op3 == LDSB)
+++	        data = extract_byte_signed(data, address);
+++	    else
+++	        data = extract_byte(data, address);
+++	    *rdd = data;
+++	    break;
++ 	case LDSB:
++ 	case LDUB:
++-	    mexc = memory_read(asi, address, &data, 0, &ws);
+++	    mexc = ms->memory_read(address, &data, 0, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++ 		break;
++ 	    }
++-	    if ((op3 == LDSB) && (data & 0x80))
++-		data |= 0xffffff00;
+++	    if (op3 == LDSB)
+++	        data = extract_byte_signed(data, address);
+++	    else
+++	        data = extract_byte(data, address);
++ 	    *rdd = data;
++ 	    break;
++ 	case LDSHA:
++ 	case LDUHA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x1) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    mexc = ms->memory_read_asi(asi, address, &data, 1, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++		break;
+++	    }
+++	    if (op3 == LDSH)
+++	        data = extract_short_signed(data, address);
+++	    else
+++	        data = extract_short(data, address);
+++	    *rdd = data;
+++	    break;
++ 	case LDSH:
++ 	case LDUH:
++ 	    if (address & 0x1) {
++ 		sregs->trap = TRAP_UNALI;
++ 		break;
++ 	    }
++-	    mexc = memory_read(asi, address, &data, 1, &ws);
+++	    mexc = ms->memory_read(address, &data, 1, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++ 		break;
++ 	    }
++-	    if ((op3 == LDSH) && (data & 0x8000))
++-		data |= 0xffff0000;
+++	    if (op3 == LDSH)
+++	        data = extract_short_signed(data, address);
+++	    else
+++	        data = extract_short(data, address);
++ 	    *rdd = data;
++ 	    break;
++ 	case LDF:
++@@ -1312,7 +1435,7 @@ dispatch_instruction(sregs)
++ 		    (sregs->frs2 == rd))
++ 		    sregs->fhold += (sregs->ftime - ebase.simtime);
++ 	    }
++-	    mexc = memory_read(asi, address, &data, 2, &ws);
+++	    mexc = ms->memory_read(address, &data, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    sregs->flrd = rd;
++ 	    sregs->ltime = ebase.simtime + sregs->icnt + FLSTHOLD +
++@@ -1338,8 +1461,10 @@ dispatch_instruction(sregs)
++ 		    ((sregs->frs2 >> 1) == (rd >> 1)))
++ 		    sregs->fhold += (sregs->ftime - ebase.simtime);
++ 	    }
++-	    mexc = memory_read(asi, address, ddata, 3, &ws);
++-	    sregs->hold += ws * 2;
+++	    mexc = ms->memory_read(address, ddata, 2, &ws);
+++	    sregs->hold += ws;
+++	    mexc |= ms->memory_read(address+4, &ddata[1], 2, &ws);
+++	    sregs->hold += ws;
++ 	    sregs->icnt = T_LDD;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1367,7 +1492,7 @@ dispatch_instruction(sregs)
++ 		sregs->trap = TRAP_UNALI;
++ 		break;
++ 	    }
++-	    mexc = memory_read(asi, address, &data, 2, &ws);
+++	    mexc = ms->memory_read(address, &data, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1389,7 +1514,7 @@ dispatch_instruction(sregs)
++ 	    if (ebase.simtime < sregs->ftime) {
++ 		sregs->fhold += (sregs->ftime - ebase.simtime);
++ 	    }
++-	    mexc = memory_write(asi, address, &sregs->fsr, 2, &ws);
+++	    mexc = ms->memory_write(address, &sregs->fsr, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1398,12 +1523,22 @@ dispatch_instruction(sregs)
++ 
++ 	case STA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x3) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    mexc = ms->memory_write_asi(asi, address, rdd, 2, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++	    }
+++	    break;
++ 	case ST:
++ 	    if (address & 0x3) {
++ 		sregs->trap = TRAP_UNALI;
++ 		break;
++ 	    }
++-	    mexc = memory_write(asi, address, rdd, 2, &ws);
+++	    mexc = ms->memory_write(address, rdd, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1411,8 +1546,14 @@ dispatch_instruction(sregs)
++ 	    break;
++ 	case STBA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    mexc = ms->memory_write_asi(asi, address, rdd, 0, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++	    }
+++	    break;
++ 	case STB:
++-	    mexc = memory_write(asi, address, rdd, 0, &ws);
+++	    mexc = ms->memory_write(address, rdd, 0, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1420,6 +1561,28 @@ dispatch_instruction(sregs)
++ 	    break;
++ 	case STDA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x7) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    if (rd & 1) {
+++		rd &= 0x1e;
+++		if (rd > 7)
+++		    rdd = &(sregs->r[(cwp + rd) & 0x7f]);
+++		else
+++		    rdd = &(sregs->g[rd]);
+++	    }
+++	    mexc = ms->memory_write_asi(asi, address, rdd, 3, &ws);
+++	    sregs->hold += ws;
+++	    sregs->icnt = T_STD;
+++#ifdef STAT
+++	    sregs->nstore++;	/* Double store counts twice */
+++#endif
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++		break;
+++	    }
+++	    break;
++ 	case STD:
++ 	    if (address & 0x7) {
++ 		sregs->trap = TRAP_UNALI;
++@@ -1432,7 +1595,7 @@ dispatch_instruction(sregs)
++ 		else
++ 		    rdd = &(sregs->g[rd]);
++ 	    }
++-	    mexc = memory_write(asi, address, rdd, 3, &ws);
+++	    mexc = ms->memory_write(address, rdd, 3, &ws);
++ 	    sregs->hold += ws;
++ 	    sregs->icnt = T_STD;
++ #ifdef STAT
++@@ -1461,7 +1624,7 @@ dispatch_instruction(sregs)
++ 		break;
++ 	    }
++ 	    rdd = &(sregs->fpq[0]);
++-	    mexc = memory_write(asi, address, rdd, 3, &ws);
+++	    mexc = ms->memory_write(address, rdd, 3, &ws);
++ 	    sregs->hold += ws;
++ 	    sregs->icnt = T_STD;
++ #ifdef STAT
++@@ -1477,12 +1640,22 @@ dispatch_instruction(sregs)
++ 	    break;
++ 	case STHA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x1) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    mexc = ms->memory_write_asi(asi, address, rdd, 1, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++	    }
+++	    break;
++ 	case STH:
++ 	    if (address & 0x1) {
++ 		sregs->trap = TRAP_UNALI;
++ 		break;
++ 	    }
++-	    mexc = memory_write(asi, address, rdd, 1, &ws);
+++	    mexc = ms->memory_write(address, rdd, 1, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1501,7 +1674,7 @@ dispatch_instruction(sregs)
++ 		if (sregs->frd == rd)
++ 		    sregs->fhold += (sregs->ftime - ebase.simtime);
++ 	    }
++-	    mexc = memory_write(asi, address, &sregs->fsi[rd], 2, &ws);
+++	    mexc = ms->memory_write(address, &sregs->fsi[rd], 2, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++@@ -1521,7 +1694,7 @@ dispatch_instruction(sregs)
++ 		if ((sregs->frd == rd) || (sregs->frd + 1 == rd))
++ 		    sregs->fhold += (sregs->ftime - ebase.simtime);
++ 	    }
++-	    mexc = memory_write(asi, address, &sregs->fsi[rd], 3, &ws);
+++	    mexc = ms->memory_write(address, &sregs->fsi[rd], 3, &ws);
++ 	    sregs->hold += ws;
++ 	    sregs->icnt = T_STD;
++ #ifdef STAT
++@@ -1533,18 +1706,40 @@ dispatch_instruction(sregs)
++ 	    break;
++ 	case SWAPA:
++ 	    if (!chk_asi(sregs, &asi, op3)) break;
+++	    if (address & 0x3) {
+++		sregs->trap = TRAP_UNALI;
+++		break;
+++	    }
+++	    mexc = ms->memory_read_asi(asi, address, &data, 2, &ws);
+++	    sregs->hold += ws;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++		break;
+++	    }
+++	    mexc = ms->memory_write_asi(asi, address, rdd, 2, &ws);
+++	    sregs->hold += ws;
+++	    sregs->icnt = T_LDST;
+++	    if (mexc) {
+++		sregs->trap = TRAP_DEXC;
+++		break;
+++	    } else
+++		*rdd = data;
+++#ifdef STAT
+++	    sregs->nload++;
+++#endif
+++	    break;
++ 	case SWAP:
++ 	    if (address & 0x3) {
++ 		sregs->trap = TRAP_UNALI;
++ 		break;
++ 	    }
++-	    mexc = memory_read(asi, address, &data, 2, &ws);
+++	    mexc = ms->memory_read(address, &data, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    if (mexc) {
++ 		sregs->trap = TRAP_DEXC;
++ 		break;
++ 	    }
++-	    mexc = memory_write(asi, address, rdd, 2, &ws);
+++	    mexc = ms->memory_write(address, rdd, 2, &ws);
++ 	    sregs->hold += ws;
++ 	    sregs->icnt = T_LDST;
++ 	    if (mexc) {
++@@ -1696,7 +1891,7 @@ fpexec(op3, rd, rs1, rs2, sregs)
++        but what about machines where float values are different endianness
++        from integer values? */
++ 
++-#ifdef HOST_LITTLE_ENDIAN_FLOAT
+++#ifdef HOST_LITTLE_ENDIAN
++     rs1 &= 0x1f;
++     switch (opf) {
++ 	case FADDd:
++@@ -1780,7 +1975,7 @@ fpexec(op3, rd, rs1, rs2, sregs)
++ 	sregs->ftime += T_FDIVd;
++ 	break;
++     case FMOVs:
++-	sregs->fs[rd] = sregs->fs[rs2];
+++	sregs->fsi[rd] = sregs->fsi[rs2];
++ 	sregs->ftime += T_FMOVs;
++ 	sregs->frs1 = 32;	/* rs1 ignored */
++ 	break;
++@@ -1874,7 +2069,7 @@ fpexec(op3, rd, rs1, rs2, sregs)
++ 
++     accex = get_accex();
++ 
++-#ifdef HOST_LITTLE_ENDIAN_FLOAT
+++#ifdef HOST_LITTLE_ENDIAN
++     switch (opf) {
++     case FADDd:
++     case FDIVd:
++@@ -1962,7 +2157,7 @@ execute_trap(sregs)
++ 	sregs->pc = sregs->tbr;
++ 	sregs->npc = sregs->tbr + 4;
++ 
++-        if ( 0 != (1 & sregs->asr17) ) {
+++        if ( 0 != (1 & (sregs->asr17 >> 13)) ) {
++             /* single vector trapping! */
++             sregs->pc = sregs->tbr & 0xfffff000;
++             sregs->npc = sregs->pc + 4;
++@@ -1978,8 +2173,6 @@ execute_trap(sregs)
++ 
++ }
++ 
++-extern struct irqcell irqarr[16];
++-
++ int
++ check_interrupts(sregs)
++     struct pstate  *sregs;
++@@ -2011,7 +2204,13 @@ init_regs(sregs)
++     sregs->npc = 4;
++     sregs->trap = 0;
++     sregs->psr &= 0x00f03fdf;
++-    sregs->psr |= 0x080;	/* Set supervisor bit */
+++    if (cputype == CPU_LEON3)
+++      sregs->psr |= 0xF3000080;	/* Set supervisor bit */
+++    else
+++    if (cputype == CPU_LEON2)
+++      sregs->psr |= 0x00000080;	/* Set supervisor bit */
+++    else
+++      sregs->psr |= 0x11000080;	/* Set supervisor bit */
++     sregs->breakpoint = 0;
++     sregs->annul = 0;
++     sregs->fpstate = FP_EXE_MODE;
++@@ -2021,7 +2220,7 @@ init_regs(sregs)
++     sregs->err_mode = 0;
++     ext_irl = 0;
++     sregs->g[0] = 0;
++-#ifdef HOST_LITTLE_ENDIAN_FLOAT
+++#ifdef HOST_LITTLE_ENDIAN
++     sregs->fdp = (float32 *) sregs->fd;
++     sregs->fsi = (int32 *) sregs->fs;
++ #else
++@@ -2040,4 +2239,8 @@ init_regs(sregs)
++ 
++     sregs->rett_err = 0;
++     sregs->jmpltime = 0;
+++    if (cputype == CPU_LEON3) {
+++        sregs->asr17 = 0x107;
+++        if (!nfp) sregs->asr17 |= (3 << 10);  /* Meiko FPU */
+++    } 
++ }
++diff --git a/sim/erc32/float.c b/sim/erc32/float.c
++index 598b7cc..ce92a39 100644
++--- a/sim/erc32/float.c
+++++ b/sim/erc32/float.c
++@@ -38,7 +38,6 @@
++ 
++ extern uint32	_get_sw (void);
++ extern uint32	_get_cw (void);
++-static void	__setfpucw (unsigned short fpu_control);
++ 
++ /* This host dependent routine should return the accrued exceptions */
++ int
++@@ -46,7 +45,7 @@ get_accex()
++ {
++ #ifdef sparc
++     return ((_get_fsr_raw() >> 5) & 0x1F);
++-#elif i386
+++#elif defined(i386) || defined(__x86_64__)
++     uint32 accx;
++ 
++     accx = _get_sw() & 0x3f;
++@@ -66,7 +65,7 @@ clear_accex()
++ {
++ #ifdef sparc
++     set_fsr((_get_fsr_raw() & ~0x3e0));
++-#elif i386
+++#elif defined(i386) || defined(__x86_64__)
++     asm("\n"
++ ".text\n"
++ "	fnclex\n"
++@@ -84,9 +83,8 @@ uint32 fsr;
++ {
++ #ifdef sparc
++ 	_set_fsr_raw(fsr & ~0x0f800000);
++-#elif i386
++-     void __setfpucw(unsigned short fpu_control);
++-     uint32 rawfsr;
+++#elif defined(i386) || defined(__x86_64__)
+++     unsigned short rawfsr;
++ 
++      fsr >>= 30;
++      switch (fsr) {
++@@ -102,9 +100,8 @@ uint32 fsr;
++ 	  fsr = 1;
++ 	  break;
++      }
++-     rawfsr = _get_cw();
++-     rawfsr |= (fsr << 10) | 0x3ff;
++-     __setfpucw(rawfsr);
+++     rawfsr = (fsr << 10) | 0x2FF; /* double precision, all traps masked */
+++    __asm__ volatile ("fldcw %0" :: "m" (rawfsr));
++ #else
++ #warning no fpu trap support for this target
++ #endif
++@@ -175,45 +172,36 @@ uint32 fsr;
++ "\n"
++ "    ");
++ 
+++#elif defined(__x86_64__)
+++     asm ("\n"
+++"\n"
+++".text\n"
+++".align 8\n"
+++".globl _get_sw, __get_sw\n"
+++"__get_sw:\n"
+++"_get_sw:\n"
+++"	  pushq %rbp\n"
+++"	  movq %rsp, %rbp\n"
+++"	  movl $0, %eax\n"
+++"	  fnstsw %ax\n"
+++"	  movq %rbp, %rsp\n"
+++"	  popq %rbp\n"
+++"	  ret\n"
+++".align 8\n"
+++".globl _get_cw, __get_cw\n"
+++"__get_cw:\n"
+++"_get_cw:\n"
+++"	  pushq %rbp\n"
+++"	  movq %rsp, %rbp\n"
+++"	  subq $2, %rsp\n"
+++"	  fnstcw -2(%rbp)\n"
+++"	  movw -2(%rbp), %ax\n"
+++"	  movq %rbp, %rsp\n"
+++"	  popq %rbp\n"
+++"	  ret\n"
+++"	  ");
++ 
++ #else
++ #warning no fpu trap support for this target
++ #endif
++ 
++-#if i386
++-/* #if defined _WIN32 || defined __GO32__ */
++-/* This is so floating exception handling works on NT
++-   These definitions are from the linux fpu_control.h, which
++-   doesn't exist on NT.
++-
++-   default to:
++-     - extended precision
++-     - rounding to nearest
++-     - exceptions on overflow, zero divide and NaN
++-*/
++-#define _FPU_DEFAULT  0x1372 
++-#define _FPU_RESERVED 0xF0C0  /* Reserved bits in cw */
++-
++-static void
++-__setfpucw(unsigned short fpu_control)
++-{
++-  volatile unsigned short cw;
++-
++-  /* If user supplied _fpu_control, use it ! */
++-  if (!fpu_control)
++-  { 
++-    /* use defaults */
++-    fpu_control = _FPU_DEFAULT;
++-  }
++-  /* Get Control Word */
++-  __asm__ volatile ("fnstcw %0" : "=m" (cw) : );
++-  
++-  /* mask in */
++-  cw &= _FPU_RESERVED;
++-  cw = cw | (fpu_control & ~_FPU_RESERVED);
++-
++-  /* set cw */
++-  __asm__ volatile ("fldcw %0" :: "m" (cw));
++-}
++-/* #endif */
++-#endif
++diff --git a/sim/erc32/func.c b/sim/erc32/func.c
++index d001c58..6f985a1 100644
++--- a/sim/erc32/func.c
+++++ b/sim/erc32/func.c
++@@ -26,20 +26,26 @@
++ #include <stdlib.h>
++ #include <ctype.h>
++ #include "sis.h"
++-#include "end.h"
++ #include <dis-asm.h>
++ #include "sim-config.h"
++ 
++ 
++ #define	VAL(x)	strtoul(x,(char **)NULL,0)
++ 
++-extern int	current_target_byte_order;
+++/* The target's byte order is big-endian by default until we load a
+++   little-endian program.  */
+++int	current_target_byte_order = BIG_ENDIAN;
+++
+++int dumbio = 0; /* normal, smart, terminal oriented IO by default */
++ struct disassemble_info dinfo;
++ struct pstate   sregs;
++-extern struct estate ebase;
+++struct estate   ebase;
+++struct evcell   evbuf[EVENT_MAX];
+++struct irqcell  irqarr[16];
+++
++ int             ctrl_c = 0;
++ int             sis_verbose = 0;
++-char           *sis_version = "2.7.5";
+++char           *sis_version = "2.8";
++ int             nfp = 0;
++ int             ift = 0;
++ int             wrp = 0;
++@@ -50,8 +56,11 @@ int             sparclite = 0;		/* emulating SPARClite instructions? */
++ int             sparclite_board = 0;	/* emulating SPARClite board RAM? */
++ char            uart_dev1[128] = "";
++ char            uart_dev2[128] = "";
++-extern	int	ext_irl;
++ uint32		last_load_addr = 0;
+++int		nouartrx = 0;
+++host_callback 	*sim_callback;
+++struct memsys *ms = &erc32sys;
+++int		cputype = 0;		/* 0 = erc32, 3 = leon3 */
++ 
++ #ifdef ERRINJ
++ uint32		errcnt = 0;
++@@ -81,6 +90,7 @@ batch(sregs, fname)
++ {
++     FILE           *fp;
++     char            lbuf[1024];
+++    char           *tmp;
++ 
++     if ((fp = fopen(fname, "r")) == NULL) {
++ 	fprintf(stderr, "couldn't open batch file %s\n", fname);
++@@ -88,7 +98,7 @@ batch(sregs, fname)
++     }
++     while (!feof(fp)) {
++ 	lbuf[0] = 0;
++-	fgets(lbuf, 1023, fp);
+++	tmp = fgets(lbuf, 1023, fp);
++ 	if ((strlen(lbuf) > 0) && (lbuf[strlen(lbuf) - 1] == '\n'))
++ 	    lbuf[strlen(lbuf) - 1] = 0;
++ 	printf("sis> %s\n", lbuf);
++@@ -382,7 +392,7 @@ exec_cmd(sregs, cmd)
++ {
++     char           *cmd1, *cmd2;
++     int32           stat;
++-    uint32          len, i, clen, j;
+++    uint32          len, i, clen, j, tmp;
++     static uint32   daddr = 0;
++     char           *cmdsave;
++ 
++@@ -426,7 +436,7 @@ exec_cmd(sregs, cmd)
++ 		stat = run_sim(sregs, VAL(cmd1), 0);
++ 	    }
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "debug", clen) == 0) {
++ 	    if ((cmd1 = strtok(NULL, " \t\n\r")) != NULL) {
++ 		sis_verbose = VAL(cmd1);
++@@ -468,6 +478,7 @@ exec_cmd(sregs, cmd)
++ 	    }
++ 	    sregs->pc = len & ~3;
++ 	    sregs->npc = sregs->pc + 4;
+++	    if ((sregs->pc != 0) && (ebase.simtime == 0)) ms->boot_init();
++ 	    printf("resuming at 0x%08x\n",sregs->pc);
++ 	    if ((cmd2 = strtok(NULL, " \t\n\r")) != NULL) {
++ 		stat = run_sim(sregs, VAL(cmd2), 0);
++@@ -475,7 +486,7 @@ exec_cmd(sregs, cmd)
++ 		stat = run_sim(sregs, UINT64_MAX, 0);
++ 	    }
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "help", clen) == 0) {
++ 	    gen_help();
++ 	} else if (strncmp(cmd1, "history", clen) == 0) {
++@@ -543,26 +554,31 @@ exec_cmd(sregs, cmd)
++ 	    ebase.simtime = 0;
++ 	    reset_all();
++ 	    reset_stat(sregs);
+++            if (last_load_addr != 0) {
+++	        sregs->pc = last_load_addr & ~3;
+++	        sregs->npc = sregs->pc + 4;
+++            }
+++	    if ((sregs->pc != 0) && (ebase.simtime == 0)) ms->boot_init();
++ 	    if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) {
++ 		stat = run_sim(sregs, UINT64_MAX, 0);
++ 	    } else {
++ 		stat = run_sim(sregs, VAL(cmd1), 0);
++ 	    }
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "shell", clen) == 0) {
++ 	    if ((cmd1 = strtok(NULL, " \t\n\r")) != NULL) {
++-		system(&cmdsave[clen]);
+++		tmp = system(&cmdsave[clen]);
++ 	    }
++ 	} else if (strncmp(cmd1, "step", clen) == 0) {
++ 	    stat = run_sim(sregs, 1, 1);
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "tcont", clen) == 0) {
++ 	    sregs->tlimit = limcalc(sregs->freq);
++ 	    stat = run_sim(sregs, UINT64_MAX, 0);
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "tgo", clen) == 0) {
++ 	    if ((cmd1 = strtok(NULL, " \t\n\r")) == NULL) {
++ 		len = last_load_addr;
++@@ -575,7 +591,7 @@ exec_cmd(sregs, cmd)
++ 	    printf("resuming at 0x%08x\n",sregs->pc);
++ 	    stat = run_sim(sregs, UINT64_MAX, 0);
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "tlimit", clen) == 0) {
++ 	   sregs->tlimit = limcalc(sregs->freq);
++ 	   if (sregs->tlimit != (uint32) -1)
++@@ -589,15 +605,20 @@ exec_cmd(sregs, cmd)
++ 	    }
++ 	    printf("\n");
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else if (strncmp(cmd1, "trun", clen) == 0) {
++ 	    ebase.simtime = 0;
++ 	    reset_all();
++ 	    reset_stat(sregs);
+++            if (last_load_addr != 0) {
+++	        sregs->pc = last_load_addr & ~3;
+++	        sregs->npc = sregs->pc + 4;
+++            }
+++	    if ((sregs->pc != 0) && (ebase.simtime == 0)) ms->boot_init();
++ 	    sregs->tlimit = limcalc(sregs->freq);
++ 	    stat = run_sim(sregs, UINT64_MAX, 0);
++ 	    daddr = sregs->pc;
++-	    sim_halt();
+++	    ms->sim_halt();
++ 	} else
++ 	    printf("syntax error\n");
++     }
++@@ -611,7 +632,7 @@ void
++ reset_stat(sregs)
++     struct pstate  *sregs;
++ {
++-    sregs->tottime = 0;
+++    sregs->tottime = 0.0;
++     sregs->pwdtime = 0;
++     sregs->ninst = 0;
++     sregs->fholdt = 0;
++@@ -629,10 +650,10 @@ void
++ show_stat(sregs)
++     struct pstate  *sregs;
++ {
++-    uint32          iinst;
++-    uint32          stime, tottime;
+++    uint64          iinst;
+++    uint64          stime;
++ 
++-    if (sregs->tottime == 0) tottime = 1; else tottime = sregs->tottime;
+++    if (sregs->tottime == 0.0) sregs->tottime +=1E-6;
++     stime = ebase.simtime - sregs->simstart;	/* Total simulated time */
++ #ifdef STAT
++ 
++@@ -640,39 +661,39 @@ show_stat(sregs)
++ 	sregs->nbranch;
++ #endif
++ 
++-    printf("\n Cycles       : %9d\n\r", ebase.simtime - sregs->simstart);
++-    printf(" Instructions : %9d\n", sregs->ninst);
+++    printf("\n Cycles       : %9llu\n\r", ebase.simtime - sregs->simstart);
+++    printf(" Instructions : %9llu\n", sregs->ninst);
++ 
++ #ifdef STAT
++-    printf("   integer    : %9.2f %%\n", 100.0 * (float) iinst / (float) sregs->ninst);
+++    printf("   integer    : %9.2f %%\n", 100.0 * (double) iinst / (double) sregs->ninst);
++     printf("   load       : %9.2f %%\n",
++-	   100.0 * (float) sregs->nload / (float) sregs->ninst);
+++	   100.0 * (double) sregs->nload / (double) sregs->ninst);
++     printf("   store      : %9.2f %%\n",
++-	   100.0 * (float) sregs->nstore / (float) sregs->ninst);
+++	   100.0 * (double) sregs->nstore / (double) sregs->ninst);
++     printf("   branch     : %9.2f %%\n",
++-	   100.0 * (float) sregs->nbranch / (float) sregs->ninst);
+++	   100.0 * (double) sregs->nbranch / (double) sregs->ninst);
++     printf("   float      : %9.2f %%\n",
++-	   100.0 * (float) sregs->finst / (float) sregs->ninst);
+++	   100.0 * (double) sregs->finst / (double) sregs->ninst);
++     printf(" Integer CPI  : %9.2f\n",
++-	   ((float) (stime - sregs->pwdtime - sregs->fholdt - sregs->finst))
+++	   ((double) (stime - sregs->pwdtime - sregs->fholdt - sregs->finst))
++ 	   /
++-	   (float) (sregs->ninst - sregs->finst));
+++	   (double) (sregs->ninst - sregs->finst));
++     printf(" Float CPI    : %9.2f\n",
++-	   ((float) sregs->fholdt / (float) sregs->finst) + 1.0);
+++	   ((double) sregs->fholdt / (double) sregs->finst) + 1.0);
++ #endif
++     printf(" Overall CPI  : %9.2f\n",
++-	   (float) (stime - sregs->pwdtime) / (float) sregs->ninst);
++-    printf("\n ERC32 performance (%4.1f MHz): %5.2f MOPS (%5.2f MIPS, %5.2f MFLOPS)\n",
++-	   sregs->freq, sregs->freq * (float) sregs->ninst / (float) (stime - sregs->pwdtime),
++-	   sregs->freq * (float) (sregs->ninst - sregs->finst) /
++-	   (float) (stime - sregs->pwdtime),
++-     sregs->freq * (float) sregs->finst / (float) (stime - sregs->pwdtime));
++-    printf(" Simulated ERC32 time        : %5.2f ms\n", (float) (ebase.simtime - sregs->simstart) / 1000.0 / sregs->freq);
++-    printf(" Processor utilisation       : %5.2f %%\n", 100.0 * (1.0 - ((float) sregs->pwdtime / (float) stime)));
++-    printf(" Real-time / simulator-time  : 1/%.2f \n",
++-      ((float) sregs->tottime) / ((float) (stime) / (sregs->freq * 1.0E6)));
++-    printf(" Simulator performance       : %d KIPS\n",sregs->ninst/tottime/1000);
++-    printf(" Used time (sys + user)      : %3d s\n\n", sregs->tottime);
+++	   (double) (stime - sregs->pwdtime) / (double) sregs->ninst);
+++    printf("\n CPU performance (%4.1f MHz)  : %5.2f MOPS (%5.2f MIPS, %5.2f MFLOPS)\n",
+++	   sregs->freq, sregs->freq * (double) sregs->ninst / (double) (stime - sregs->pwdtime),
+++	   sregs->freq * (double) (sregs->ninst - sregs->finst) /
+++	   (double) (stime - sregs->pwdtime),
+++     sregs->freq * (double) sregs->finst / (double) (stime - sregs->pwdtime));
+++    printf(" Simulated CPU time          : %.2f s\n", (double) (ebase.simtime - sregs->simstart) / 1000000.0 / sregs->freq);
+++    printf(" Processor utilisation       : %.2f %%\n", 100.0 * (1.0 - ((double) sregs->pwdtime / (double) stime)));
+++    printf(" Real-time performance       : %.2f %%\n", 100.0/
+++      ((sregs->tottime) / ((double) (stime) / (sregs->freq * 1.0E6))));
+++    printf(" Simulator performance       : %.2f MIPS\n",(double)(sregs->ninst)/sregs->tottime/1E6);
+++    printf(" Used time (sys + user)      : %.2f s\n\n", sregs->tottime);
++ }
++ 
++ 
++@@ -708,12 +729,6 @@ init_signals()
++ }
++ 
++ 
++-extern struct disassemble_info dinfo;
++-
++-struct estate   ebase;
++-struct evcell   evbuf[EVENT_MAX];
++-struct irqcell  irqarr[16];
++-
++ static int
++ disp_fpu(sregs)
++     struct pstate  *sregs;
++@@ -724,7 +739,7 @@ disp_fpu(sregs)
++ 
++     printf("\n fsr: %08X\n\n", sregs->fsr);
++ 
++-#ifdef HOST_LITTLE_ENDIAN_FLOAT
+++#ifdef HOST_LITTLE_ENDIAN
++     for (i = 0; i < 32; i++)
++       sregs->fdp[i ^ 1] = sregs->fs[i];
++ #endif
++@@ -759,21 +774,32 @@ disp_regs(sregs,cwp)
++     }
++ }
++ 
+++static void print_insn_sparc_sis(uint32 addr, struct disassemble_info *info)
+++{
+++    unsigned char           i[4];
+++
+++    ms->sis_memory_read(addr, i, 4);
+++    dinfo.buffer_vma = addr;
+++    dinfo.buffer_length = 4;
+++    dinfo.buffer = i;
+++    print_insn_sparc(addr, info);
+++}
+++
++ static void
++ disp_ctrl(sregs)
++     struct pstate  *sregs;
++ {
++ 
++-    unsigned char           i[4];
+++    uint32           i;
++ 
++     printf("\n psr: %08X   wim: %08X   tbr: %08X   y: %08X\n",
++ 	   sregs->psr, sregs->wim, sregs->tbr, sregs->y);
++-    sis_memory_read(sregs->pc, i, 4);
++-    printf("\n  pc: %08X = %02X%02X%02X%02X    ", sregs->pc,i[0],i[1],i[2],i[3]);
++-    print_insn_sparc(sregs->pc, &dinfo);
++-    sis_memory_read(sregs->npc, i, 4);
++-    printf("\n npc: %08X = %02X%02X%02X%02X    ",sregs->npc,i[0],i[1],i[2],i[3]);
++-    print_insn_sparc(sregs->npc, &dinfo);
+++    ms->sis_memory_read(sregs->pc, (char *) &i, 4);
+++    printf("\n  pc: %08X = %08X    ", sregs->pc, i);
+++    print_insn_sparc_sis(sregs->pc, &dinfo);
+++    ms->sis_memory_read(sregs->npc, (char *) &i, 4);
+++    printf("\n npc: %08X = %08X    ", sregs->npc, i);
+++    print_insn_sparc_sis(sregs->npc, &dinfo);
++     if (sregs->err_mode)
++ 	printf("\n IU in error mode");
++     printf("\n\n");
++@@ -787,21 +813,28 @@ disp_mem(addr, len)
++ 
++     uint32          i;
++     unsigned char   data[4];
+++    uint32          *wdata = (uint32 *) data;
++     uint32          mem[4], j;
++     char           *p;
+++    int		   end;
++ 
+++#ifdef HOST_LITTLE_ENDIAN
+++    end = 3;
+++#else
+++    end = 0;
+++#endif
++     for (i = addr & ~3; i < ((addr + len) & ~3); i += 16) {
++ 	printf("\n %8X  ", i);
++ 	for (j = 0; j < 4; j++) {
++-	    sis_memory_read((i + (j * 4)), data, 4);
++-	    printf("%02x%02x%02x%02x  ", data[0],data[1],data[2],data[3]);
+++	    ms->sis_memory_read((i + (j * 4)), data, 4);
+++	    printf("%08x  ", *wdata);
++ 	    mem[j] = *((int *) &data);
++ 	}
++ 	printf("  ");
++ 	p = (char *) mem;
++ 	for (j = 0; j < 16; j++) {
++-	    if (isprint(p[j]))
++-		putchar(p[j]);
+++	    if (isprint(p[j^end]))
+++		putchar(p[j^end]);
++ 	    else
++ 		putchar('.');
++ 	}
++@@ -817,11 +850,12 @@ dis_mem(addr, len, info)
++ {
++     uint32          i;
++     unsigned char   data[4];
+++    uint32          *wdata = (uint32 *) data;
++ 
++     for (i = addr & -3; i < ((addr & -3) + (len << 2)); i += 4) {
++-	sis_memory_read(i, data, 4);
++-	printf(" %08x  %02x%02x%02x%02x  ", i, data[0],data[1],data[2],data[3]);
++-	print_insn_sparc(i, info);
+++	ms->sis_memory_read(i, data, 4);
+++	printf(" %08x  %08x  ", i, *wdata);
+++	print_insn_sparc_sis(i, info);
++         if (i >= 0xfffffffc) break;
++ 	printf("\n");
++     }
++@@ -983,7 +1017,7 @@ reset_all()
++ {
++     init_event();		/* Clear event queue */
++     init_regs(&sregs);
++-    reset();
+++    ms->reset();
++ #ifdef ERRINJ
++     errinjstart();
++ #endif
++@@ -1019,6 +1053,7 @@ bfd_load(fname)
++     asection       *section;
++     bfd            *pbfd;
++     const bfd_arch_info_type *arch;
+++    int            i;
++ 
++     pbfd = bfd_openr(fname, 0);
++ 
++@@ -1092,14 +1127,18 @@ bfd_load(fname)
++ 		fptr = 0;
++ 
++ 		while (section_size > 0) {
++-		    char            buffer[1024];
++ 		    int             count;
+++		    char            buffer[1024];
+++		    uint32          *wbuffer = (uint32 *) buffer;
++ 
++ 		    count = min(section_size, 1024);
++ 
++ 		    bfd_get_section_contents(pbfd, section, buffer, fptr, count);
++ 
++-		    sis_memory_write(section_address, buffer, count);
+++#ifdef HOST_LITTLE_ENDIAN
+++		    for (i=0;i<count/4;i++) wbuffer[i] = ntohl(wbuffer[i]); // endian swap
+++#endif
+++		    ms->sis_memory_write(section_address, buffer, count);
++ 
++ 		    section_address += count;
++ 		    fptr += count;
++@@ -1115,3 +1154,16 @@ bfd_load(fname)
++ 
++     return(bfd_get_start_address (pbfd));
++ }
+++
+++
+++double get_time (void)
+++{
+++    double usec;
+++
+++    struct timeval tm;
+++
+++    gettimeofday (&tm, NULL);
+++    usec = ((double) tm.tv_sec) * 1E6 + ((double) tm.tv_usec);
+++    return (usec / 1E6);
+++
+++}
++diff --git a/sim/erc32/grlib.c b/sim/erc32/grlib.c
++new file mode 100644
++index 0000000..42a3ed0
++--- /dev/null
+++++ b/sim/erc32/grlib.c
++@@ -0,0 +1,98 @@
+++/*
+++ * This file is part of SIS.
+++ * 
+++ * SIS, SPARC instruction simulator. Copyright (C) 2014 Jiri Gaisler
+++ * 
+++ * This program is free software; you can redistribute it and/or modify it under
+++ * the terms of the GNU General Public License as published by the Free
+++ * Software Foundation; either version 3 of the License, or (at your option)
+++ * any later version.
+++ * 
+++ * This program is distributed in the hope that it will be useful, but WITHOUT
+++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+++ * more details.
+++ * 
+++ * You should have received a copy of the GNU General Public License along with
+++ * this program; if not, see <http://www.gnu.org/licenses/>.
+++ * 
+++ */
+++
+++
+++#include "sis.h"
+++#include "grlib.h"
+++
+++
+++/* APB PNP */
+++
+++static uint32 apbppmem[32*2];    /* 32-entry APB PP AREA */
+++static int apbppindex;
+++
+++int grlib_apbpp_add(uint32 id, uint32 addr)
+++{
+++    apbppmem[apbppindex++] = id;
+++    apbppmem[apbppindex++] = addr;
+++    if(apbppindex >= (32*2)) apbppindex = 0; /* prevent overflow of area */
+++    return(apbppindex);
+++}
+++
+++uint32 grlib_apbpnp_read(uint32 addr)
+++{
+++    uint32 read_data;
+++    addr &= 0xff;
+++    read_data = apbppmem[addr>>2];
+++
+++    return read_data;
+++}
+++
+++/* AHB PNP */
+++
+++static uint32 ahbppmem[128*8];    /* 128-entry AHB PP AREA */
+++static int ahbmppindex;
+++static int ahbsppindex = 64*8;
+++
+++int grlib_ahbmpp_add(uint32 id)
+++{
+++    ahbppmem[ahbmppindex] = id;
+++    ahbmppindex += 8;
+++    if(ahbmppindex >= (64*8)) ahbmppindex = 0; /* prevent overflow of area */
+++    return(ahbmppindex);
+++}
+++
+++int grlib_ahbspp_add(uint32 id, uint32 addr1, uint32 addr2,
+++                     uint32 addr3, uint32 addr4)
+++{
+++    ahbppmem[ahbsppindex] = id;
+++    ahbsppindex += 4;
+++    ahbppmem[ahbsppindex++] = addr1;
+++    ahbppmem[ahbsppindex++] = addr2;
+++    ahbppmem[ahbsppindex++] = addr3;
+++    ahbppmem[ahbsppindex++] = addr4;
+++    if(ahbsppindex >= (128*8)) ahbsppindex = 64*8; /* prevent overflow of area */
+++    return(ahbsppindex);
+++}
+++
+++uint32 grlib_ahbpnp_read(uint32 addr)
+++{
+++    uint32 read_data;
+++
+++    addr &= 0xfff;
+++    read_data = ahbppmem[addr>>2];
+++    return read_data;
+++
+++}
+++
+++void grlib_init()
+++{
+++    /* Add PP records for Leon3, APB bridge and interrupt controller
+++       as this is not done elsewhere */
+++
+++    grlib_ahbmpp_add(GRLIB_PP_ID(VENDOR_GAISLER, GAISLER_LEON3, 0, 0));
+++    grlib_ahbspp_add(GRLIB_PP_ID(VENDOR_GAISLER, GAISLER_APBMST, 0, 0),
+++                     GRLIB_PP_AHBADDR(0x80000000, 0xFFF, 0, 0, 2),
+++                     0, 0, 0);
+++
+++    grlib_apbpp_add(GRLIB_PP_ID(VENDOR_GAISLER, GAISLER_IRQMP, 2, 0),
+++                    GRLIB_PP_APBADDR(0x80000200, 0xFFF));
+++
+++}
++diff --git a/sim/erc32/grlib.h b/sim/erc32/grlib.h
++new file mode 100644
++index 0000000..4d52211
++--- /dev/null
+++++ b/sim/erc32/grlib.h
++@@ -0,0 +1,57 @@
+++/*
+++ * This file is part of SIS.
+++ * 
+++ * SIS, SPARC instruction simulator. Copyright (C) 2014 Jiri Gaisler
+++ * 
+++ * This program is free software; you can redistribute it and/or modify it under
+++ * the terms of the GNU General Public License as published by the Free
+++ * Software Foundation; either version 3 of the License, or (at your option)
+++ * any later version.
+++ * 
+++ * This program is distributed in the hope that it will be useful, but WITHOUT
+++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+++ * more details.
+++ * 
+++ * You should have received a copy of the GNU General Public License along with
+++ * this program; if not, see <http://www.gnu.org/licenses/>.
+++ *
+++ */
+++
+++
+++/* Definitions for AMBA PNP in Gaisler Research GRLIB SOC */
+++
+++/* Vendors */
+++#define VENDOR_GAISLER    1
+++#define VENDOR_PENDER     2
+++#define VENDOR_ESA        4
+++#define VENDOR_DLR       10
+++
+++/* Devices */
+++#define GAISLER_LEON3    0x003
+++#define GAISLER_APBMST   0x006
+++#define GAISLER_SRCTRL   0x008
+++#define GAISLER_APBUART  0x00C
+++#define GAISLER_IRQMP    0x00D
+++#define GAISLER_GPTIMER  0x011
+++#define ESA_MCTRL        0x00F
+++
+++/* How to build entries in the plug&play area */
+++#define GRLIB_PP_ID(v, d, x, i) ((v & 0xff) << 24) | ((d & 0x3ff) << 12) |\
+++                                ((x & 0x1f) << 5) | (i & 0x1f)
+++#define GRLIB_PP_AHBADDR(a, m, p, c, t) (a & 0xfff00000) | ((m & 0xfff) << 4) |\
+++                         ((p & 1) << 17) | ((c & 1) << 16) | (t & 0x3)
+++#define GRLIB_PP_APBADDR(a, m) ((a & 0xfff00)<< 12) | ((m & 0xfff) << 4) | 1
+++
+++#define AHBPP_START   0xFFFFF000
+++#define AHBPP_END     0xFFFFFFFF
+++#define APBPP_START   0x800FF000
+++#define APBPP_END     0x800FFFFF
+++
+++int grlib_apbpp_add(uint32 id, uint32 addr);
+++int grlib_ahbmpp_add(uint32 id);
+++int grlib_ahbspp_add(uint32 id, uint32 addr1, uint32 addr2,
+++                     uint32 addr3, uint32 addr4);
+++uint32 grlib_ahbpnp_read(uint32 addr);
+++uint32 grlib_apbpnp_read(uint32 addr);
+++void grlib_init();
++diff --git a/sim/erc32/help.c b/sim/erc32/help.c
++index 21c2a77..6d74e79 100644
++--- a/sim/erc32/help.c
+++++ b/sim/erc32/help.c
++@@ -7,8 +7,8 @@ usage()
++ {
++ 
++     printf("usage: sis [-uart1 uart_device1] [-uart2 uart_device2]\n");
+++    printf("[-sparclite] [-dumbio] [-v] [-vv]\n");
++     printf("[-nfp] [-freq frequency] [-c batch_file] [files]\n");
++-    printf("[-sparclite] [-dumbio]\n");
++ }
++ 
++ void
++diff --git a/sim/erc32/interf.c b/sim/erc32/interf.c
++index e2db44e..259c8f3 100644
++--- a/sim/erc32/interf.c
+++++ b/sim/erc32/interf.c
++@@ -24,7 +24,6 @@
++ #include <string.h>
++ #include <stdio.h>
++ #include <stdlib.h>
++-#include <time.h>
++ #include <sys/fcntl.h>
++ #include "sis.h"
++ #include "libiberty.h"
++@@ -36,34 +35,10 @@
++ #include "gdb/signals.h"
++ 
++ #define PSR_CWP 0x7
++-
++-extern struct disassemble_info dinfo;
++-extern struct pstate sregs;
++-extern struct estate ebase;
++-
++-extern int	current_target_byte_order;
++-extern int      ctrl_c;
++-extern int      nfp;
++-extern int      ift;
++-extern int      rom8;
++-extern int      wrp;
++-extern int      uben;
++-extern int      sis_verbose;
++-extern char    *sis_version;
++-extern struct estate ebase;
++-extern struct evcell evbuf[];
++-extern struct irqcell irqarr[];
++-extern int      irqpend, ext_irl;
++-extern int      sparclite;
++-extern int      dumbio;
++-extern int      sparclite_board;
++-extern int      termsave;
++-extern char     uart_dev1[], uart_dev2[];
+++#define SOFT_BREAK 0x91d02001
++ 
++ int             sis_gdb_break = 1;
++ 
++-host_callback *sim_callback;
++-
++ int
++ run_sim(sregs, icount, dis)
++     struct pstate  *sregs;
++@@ -75,9 +50,10 @@ run_sim(sregs, icount, dis)
++     if (sis_verbose)
++ 	(*sim_callback->printf_filtered) (sim_callback, "resuming at %x\n",
++ 					  sregs->pc);
++-   init_stdio();
++-   sregs->starttime = time(NULL);
+++   ms->init_stdio();
+++   sregs->starttime = get_time();
++    irq = 0;
+++   if ((sregs->pc != 0) && (ebase.simtime == 0)) ms->boot_init();
++    while (!sregs->err_mode & (icount > 0)) {
++ 
++ 	sregs->fhold = 0;
++@@ -94,9 +70,8 @@ run_sim(sregs, icount, dis)
++             if (sregs->pc == 0 || sregs->npc == 0)
++                 printf ("bogus pc or npc\n");
++ #endif
++-        mexc = memory_read(sregs->asi, sregs->pc, &sregs->inst,
++-                           2, &sregs->hold);
++-#if 1	/* DELETE ME! for debugging purposes only */
+++        mexc = ms->memory_iread(sregs->pc, &sregs->inst, &sregs->hold);
+++#if 0	/* DELETE ME! for debugging purposes only */
++         if (sis_verbose > 2)
++             printf("pc %x, np %x, sp %x, fp %x, wm %x, cw %x, i %08x\n",
++                    sregs->pc, sregs->npc,
++@@ -117,12 +92,12 @@ run_sim(sregs, icount, dis)
++ 		if (mexc) {
++ 		    sregs->trap = I_ACC_EXC;
++ 		} else {
++-		    if ((sis_gdb_break) && (sregs->inst == 0x91d02001)) {
+++		    if ((sis_gdb_break) && (sregs->inst == SOFT_BREAK)) {
++ 			if (sis_verbose)
++ 			    (*sim_callback->printf_filtered) (sim_callback,
++ 							      "SW BP hit at %x\n", sregs->pc);
++-                        sim_halt();
++-			restore_stdio();
+++                        ms->sim_halt();
+++			ms->restore_stdio();
++ 			clearerr(stdin);
++ 			return (BPT_HIT);
++ 		    } else
++@@ -140,12 +115,12 @@ run_sim(sregs, icount, dis)
++ 	    icount = 0;
++ 	}
++     }
++-    sim_halt();
++-    sregs->tottime += time(NULL) - sregs->starttime;
++-    restore_stdio();
+++    ms->sim_halt();
+++    sregs->tottime += get_time() - sregs->starttime;
+++    ms->restore_stdio();
++     clearerr(stdin);
++     if (sregs->err_mode)
++-	error_mode(sregs->pc);
+++	ms->error_mode(sregs->pc);
++     if (sregs->err_mode)
++ 	return (ERROR);
++     if (sregs->bphit) {
++@@ -210,6 +185,17 @@ sim_open (kind, callback, abfd, argv)
++             if (strcmp(argv[stat], "-dumbio") == 0) {
++ 		dumbio = 1;
++ 	    } else
+++            if (strcmp(argv[stat], "-nouartrx") == 0) {
+++		nouartrx = 1;
+++	    } else
+++            if (strcmp(argv[stat], "-leon2") == 0) {
+++		ms = &leon2;
+++                cputype = CPU_LEON2;
+++            } else
+++            if (strcmp(argv[stat], "-leon3") == 0) {
+++		ms = &leon3;
+++                cputype = CPU_LEON3;
+++            } else
++             if (strcmp(argv[stat], "-wrp") == 0) {
++                 wrp = 1;
++ 	    } else
++@@ -247,9 +233,24 @@ sim_open (kind, callback, abfd, argv)
++ 	stat++;
++     }
++ 
+++    if ((cputype == CPU_LEON3) || (cputype == CPU_LEON2))
+++        sregs.freq = freq ? freq : 50;
+++    else
+++        sregs.freq = freq ? freq : 14;
+++
++     if (sis_verbose) {
++ 	(*sim_callback->printf_filtered) (sim_callback, "\n SIS - SPARC instruction simulator %s\n", sis_version);
++-	(*sim_callback->printf_filtered) (sim_callback, " Bug-reports to Jiri Gaisler ESA/ESTEC (jgais at wd.estec.esa.nl)\n");
+++	(*sim_callback->printf_filtered) (sim_callback, " Bug-reports to Jiri Gaisler (jiri at gaisler.se)\n\n");
+++        switch (cputype) {
+++        case CPU_LEON2:
+++            (*sim_callback->printf_filtered) (sim_callback, "LEON2 emulation enabled\n");
+++            break;
+++        case CPU_LEON3:
+++            (*sim_callback->printf_filtered) (sim_callback, "LEON3 emulation enabled\n");
+++            break;
+++        default:
+++            (*sim_callback->printf_filtered) (sim_callback, "ERC32 emulation enabled\n");
+++        }
++ 	if (nfp)
++ 	  (*sim_callback->printf_filtered) (sim_callback, "no FPU\n");
++ 	if (sparclite)
++@@ -258,17 +259,19 @@ sim_open (kind, callback, abfd, argv)
++ 	  (*sim_callback->printf_filtered) (sim_callback, "dumb IO (no input, dumb output)\n");
++ 	if (sis_gdb_break == 0)
++ 	  (*sim_callback->printf_filtered) (sim_callback, "disabling GDB trap handling for breakpoints\n");
++-	if (freq)
++-	  (*sim_callback->printf_filtered) (sim_callback, " ERC32 freq %d Mhz\n", freq);
+++	  (*sim_callback->printf_filtered) (sim_callback, "CPU freq %3.1f MHz\n", sregs.freq);
++     }
++ 
++-    sregs.freq = freq ? freq : 15;
++     termsave = fcntl(0, F_GETFL, 0);
++     INIT_DISASSEMBLE_INFO(dinfo, stdout,(fprintf_ftype)fprintf);
+++#ifdef HOST_LITTLE_ENDIAN
+++    dinfo.endian = BFD_ENDIAN_LITTLE;
+++#else
++     dinfo.endian = BFD_ENDIAN_BIG;
+++#endif
++     reset_all();
++     ebase.simtime = 0;
++-    init_sim();
+++    ms->init_sim();
++     init_bpt(&sregs);
++     reset_stat(&sregs);
++ 
++@@ -282,7 +285,7 @@ sim_close(sd, quitting)
++      int quitting;
++ {
++ 
++-    exit_sim();
+++    ms->exit_sim();
++     fcntl(0, F_SETFL, termsave);
++ 
++ };
++@@ -355,7 +358,19 @@ sim_write(sd, mem, buf, length)
++     const unsigned char  *buf;
++     int             length;
++ {
++-    return (sis_memory_write(mem, buf, length));
+++#ifdef HOST_LITTLE_ENDIAN
+++    int *ibufp = (int *) buf;
+++    int ibuf[8192];
+++    int i, len;
+++
+++    if (length >= 4)
+++      for (i=0; i<length; i+=4) {
+++        ibuf[i] = ntohl(ibufp[i]);
+++      }
+++    return (ms->sis_memory_write(mem, (char *) ibuf, length));
+++#else
+++    return (ms->sis_memory_write(mem, buf, length));
+++#endif
++ }
++ 
++ int
++@@ -365,7 +380,20 @@ sim_read(sd, mem, buf, length)
++      unsigned char *buf;
++      int length;
++ {
++-    return (sis_memory_read(mem, buf, length));
+++#ifdef HOST_LITTLE_ENDIAN
+++    int *ibuf = (int *) buf;
+++    int i, len;
+++
+++    len = ms->sis_memory_read(mem, buf, length);
+++    if (length >= 4)
+++      for (i=0; i<length; i+=4) {
+++        *ibuf = htonl(*ibuf);
+++        ibuf++;
+++      }
+++    return (len);
+++#else
+++    return (ms->sis_memory_read(mem, buf, length));
+++#endif
++ }
++ 
++ void
++@@ -451,7 +479,7 @@ flush_windows ()
++ #endif
++ 
++       for (i = 0; i < 16; i++)
++-	memory_write (11, sp + 4 * i, &sregs.r[(win * 16 + 16 + i) & 0x7f], 2,
+++	ms->memory_write (sp + 4 * i, &sregs.r[(win * 16 + 16 + i) & 0x7f], 2,
++ 		      &ws);
++ 
++       if (win == cwp)
++@@ -481,7 +509,7 @@ sim_do_command(sd, cmd)
++      SIM_DESC sd;
++     char           *cmd;
++ {
++-    exec_cmd(&sregs, cmd);
+++    exec_cmd(&sregs, (char *) cmd);
++ }
++ 
++ char **
++@@ -490,6 +518,13 @@ sim_complete_command (SIM_DESC sd, const char *text, const char *word)
++   return NULL;
++ }
++ 
+++int
+++sim_stop(SIM_DESC sd)
+++{
+++  ctrl_c = 1;
+++  return 1;
+++}
+++
++ #if 0 /* FIXME: These shouldn't exist.  */
++ 
++ int
++diff --git a/sim/erc32/leon2.c b/sim/erc32/leon2.c
++new file mode 100644
++index 0000000..5ab3f79
++--- /dev/null
+++++ b/sim/erc32/leon2.c
++@@ -0,0 +1,1041 @@
+++/*
+++ * This file is part of SIS.
+++ * 
+++ * SIS, SPARC instruction simulator V2.5 Copyright (C) 1995 Jiri Gaisler,
+++ * European Space Agency
+++ * 
+++ * This program is free software; you can redistribute it and/or modify it under
+++ * the terms of the GNU General Public License as published by the Free
+++ * Software Foundation; either version 3 of the License, or (at your option)
+++ * any later version.
+++ * 
+++ * This program is distributed in the hope that it will be useful, but WITHOUT
+++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+++ * more details.
+++ * 
+++ * You should have received a copy of the GNU General Public License along with
+++ * this program; if not, see <http://www.gnu.org/licenses/>.
+++ * 
+++ * Leon2 emulation, based on leon3.c .
+++ */
+++
+++/* The control space devices */
+++
+++#include "config.h"
+++#include <errno.h>
+++#include <sys/types.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <termios.h>
+++#include <sys/fcntl.h>
+++#include <sys/file.h>
+++#include <unistd.h>
+++#include "sis.h"
+++#include "sim-config.h"
+++
+++static int tty_setup = 1; /* default setup if not a tty */
+++
+++/* APB registers */
+++#define APBSTART	0x80000000
+++#define APBEND  	0x80000100
+++
+++/* Memory exception waitstates */
+++#define MEM_EX_WS 	1
+++
+++#define MOK	0
+++
+++/* LEON2 APB register addresses */
+++
+++#define IRQCTRL_IPR	0x094
+++#define IRQCTRL_IMR 	0x090
+++#define IRQCTRL_ICR 	0x09C
+++#define IRQCTRL_IFR 	0x098
+++#define TIMER_SCALER	0x060
+++#define TIMER_SCLOAD	0x064
+++#define LEON2_CONFIG 	0x024
+++#define TIMER_TIMER1 	0x040
+++#define TIMER_RELOAD1	0x044
+++#define TIMER_CTRL1 	0x048
+++#define TIMER_TIMER2 	0x050
+++#define TIMER_RELOAD2	0x054
+++#define TIMER_CTRL2 	0x058
+++#define CACHE_CTRL  	0x014
+++#define POWER_DOWN  	0x018
+++
+++#define APBUART_RXTX	0x070
+++#define APBUART_STATUS  0x074
+++
+++/* Size of UART buffers (bytes) */
+++#define UARTBUF	1024
+++
+++/* Number of simulator ticks between flushing the UARTS. 	 */
+++/* For good performance, keep above 1000			 */
+++#define UART_FLUSH_TIME	  3000
+++
+++
+++/* New uart defines */
+++#define UART_TX_TIME	1000
+++#define UART_RX_TIME	1000
+++#define UARTA_DR	0x1
+++#define UARTA_SRE	0x2
+++#define UARTA_HRE	0x4
+++#define UARTA_OR	0x10
+++
+++/* IRQCTRL registers */
+++
+++static uint32   irqctrl_ipr;
+++static uint32   irqctrl_imr;
+++static uint32   irqctrl_ifr;
+++
+++/* TIMER registers */
+++
+++#define NTIMERS  2
+++#define TIMER_IRQ 8
+++
+++static uint32   gpt_scaler;
+++static uint32   gpt_scaler_start;
+++static uint32   gpt_counter[NTIMERS];
+++static uint32   gpt_reload[NTIMERS];
+++static uint32   gpt_ctrl[NTIMERS];
+++
+++/* ROM size 16 Mbyte */
+++#define ROM_START 	0x00000000
+++#define ROM_MASK 	0x00ffffff
+++#define ROM_END 	(ROM_START + ROM_MASK + 1)
+++
+++/* RAM size 16 Mbyte */
+++#define RAM_START 	0x40000000
+++#define RAM_MASK 	0x00ffffff
+++#define RAM_END 	(RAM_START + RAM_MASK + 1)
+++
+++/* Memory */
+++
+++static unsigned char	romb[ROM_END - ROM_START];
+++static unsigned char	ramb[RAM_END - RAM_START];
+++static uint32   cache_ctrl;
+++
+++
+++/* UART support variables */
+++
+++static int32    fd1, fd2;	/* file descriptor for input file */
+++static int32    Ucontrol;	/* UART status register */
+++static unsigned char aq[UARTBUF], bq[UARTBUF];
+++static int32    anum, aind = 0;
+++static int32    bnum, bind = 0;
+++static char     wbufa[UARTBUF], wbufb[UARTBUF];
+++static unsigned wnuma;
+++static unsigned wnumb;
+++static FILE    *f1in, *f1out;
+++static struct termios ioc1, ioc2, iocold1, iocold2;
+++static int      f1open = 0;
+++
+++static char     uarta_sreg, uarta_hreg;
+++static uint32   uart_stat_reg;
+++static uint32   uarta_data;
+++
+++/* Forward declarations */
+++
+++static void	mem_init (void);
+++static void	close_port (void);
+++static void	leon2_reset (void);
+++static void	irqctrl_intack (int32 level);
+++static void	chk_irq (void);
+++static void	set_irq (int32 level);
+++static int32	apb_read (uint32 addr, uint32 *data);
+++static int	apb_write (uint32 addr, uint32 data);
+++static void	port_init (void);
+++static uint32	grlib_read_uart (uint32 addr);
+++static void	grlib_write_uart (uint32 addr, uint32 data);
+++static void	flush_uart (void);
+++static void	uarta_tx (void);
+++static void	uart_rx (caddr_t arg);
+++static void	uart_intr (caddr_t arg);
+++static void	uart_irq_start (void);
+++static void	gpt_intr (caddr_t arg);
+++static void	gpt_init (void);
+++static void	gpt_reset (void);
+++static void	gpt_scaler_set (uint32 val);
+++static void	timer_ctrl (uint32 val, int i);
+++static unsigned char *
+++		get_mem_ptr (uint32 addr, uint32 size);
+++static void	store_bytes (unsigned char *mem, uint32 waddr,
+++			uint32 *data, int sz, int32 *ws);
+++
+++static host_callback *callback;
+++
+++
+++/* One-time init */
+++
+++static void
+++init_sim()
+++{
+++    callback = sim_callback;
+++    grlib_init();
+++    mem_init();
+++    port_init();
+++    gpt_init();
+++}
+++
+++/* Power-on reset init */
+++
+++static void
+++reset()
+++{
+++    leon2_reset();
+++    uart_irq_start();
+++    gpt_reset();
+++}
+++
+++/* IU error mode manager */
+++
+++static void
+++error_mode(pc)
+++    uint32          pc;
+++{
+++
+++}
+++
+++
+++/* Memory init */
+++
+++static void
+++mem_init()
+++{
+++
+++    if (sis_verbose)
+++	printf("RAM start: 0x%x, RAM size: %d K, ROM size: %d K\n",
+++	       RAM_START, (RAM_MASK+1)/1024, (ROM_MASK+1)/1024);
+++}
+++
+++/* Flush ports when simulator stops */
+++
+++static void
+++sim_halt()
+++{
+++#ifdef FAST_UART
+++    flush_uart();
+++#endif
+++}
+++
+++static void
+++close_port()
+++{
+++    if (f1open && f1in != stdin)
+++	fclose(f1in);
+++}
+++
+++static void
+++exit_sim()
+++{
+++    close_port();
+++}
+++
+++static void
+++leon2_reset()
+++{
+++    int             i;
+++
+++    irqctrl_ipr = 0;
+++    irqctrl_imr = 0;
+++    irqctrl_ifr = 0;
+++
+++    wnuma = wnumb = 0;
+++    anum = aind = bnum = bind = 0;
+++
+++    uart_stat_reg = UARTA_SRE | UARTA_HRE;
+++
+++    gpt_counter[0] = 0xffffffff;
+++    gpt_reload[0] = 0xffffffff;
+++    gpt_scaler = 0xffff;
+++    gpt_ctrl[0] = 0;
+++    gpt_ctrl[1] = 0;
+++
+++}
+++
+++
+++
+++static void
+++irqctrl_intack(level)
+++    int32           level;
+++{
+++    int             irq_test;
+++
+++    if (sis_verbose > 2)
+++	printf("interrupt %d acknowledged\n", level);
+++    if (irqctrl_ifr & (1 << level))
+++	irqctrl_ifr &= ~(1 << level);
+++    else
+++	irqctrl_ipr &= ~(1 << level);
+++   chk_irq();
+++}
+++
+++static void
+++chk_irq()
+++{
+++    int32           i;
+++    uint32          itmp;
+++    int		    old_irl;
+++
+++    old_irl = ext_irl;
+++    itmp = ((irqctrl_ipr | irqctrl_ifr) & irqctrl_imr) & 0x0fffe;
+++    ext_irl = 0;
+++    if (itmp != 0) {
+++	for (i = 15; i > 0; i--) {
+++	    if (((itmp >> i) & 1) != 0) {
+++		if ((sis_verbose > 2) && (i > old_irl)) 
+++		    printf("IU irl: %d\n", i);
+++		ext_irl = i;
+++	        set_int(i, irqctrl_intack, i);
+++		break;
+++	    }
+++	}
+++    }
+++}
+++
+++static void
+++set_irq(level)
+++    int32           level;
+++{
+++    irqctrl_ipr |= (1 << level);
+++    chk_irq();
+++}
+++
+++static int32
+++apb_read(addr, data)
+++    uint32          addr;
+++    uint32         *data;
+++{
+++
+++    switch (addr & 0xfff) {
+++
+++    case APBUART_RXTX:		/* 0x100 */
+++    case APBUART_STATUS:	/* 0x104 */
+++	*data = grlib_read_uart(addr);
+++	break;
+++
+++    case IRQCTRL_IPR:		/* 0x204 */
+++	*data = irqctrl_ipr;
+++	break;
+++
+++    case IRQCTRL_IFR:		/* 0x208 */
+++	*data = irqctrl_ifr;
+++	break;
+++
+++    case IRQCTRL_IMR:		/* 0x240 */
+++	*data = irqctrl_imr;
+++	break;
+++
+++    case TIMER_SCALER:	/* 0x300 */
+++	*data = gpt_scaler - (now() - gpt_scaler_start);
+++	break;
+++
+++    case TIMER_SCLOAD:	/* 0x304 */
+++	*data = gpt_scaler;
+++	break;
+++
+++    case LEON2_CONFIG:	/* 0x308 */
+++	*data = 0x700310;
+++	break;
+++
+++    case TIMER_TIMER1:	/* 0x310 */
+++	*data = gpt_counter[0];
+++	break;
+++
+++    case TIMER_RELOAD1:	/* 0x314 */
+++	*data = gpt_reload[0];
+++	break;
+++
+++    case TIMER_CTRL1:		/* 0x318 */
+++	*data = gpt_ctrl[0];
+++	break;
+++
+++    case TIMER_TIMER2:	/* 0x320 */
+++	*data = gpt_counter[1];
+++	break;
+++
+++    case TIMER_RELOAD2:	/* 0x324 */
+++	*data = gpt_reload[1];
+++	break;
+++
+++    case TIMER_CTRL2:		/* 0x328 */
+++	*data = gpt_ctrl[1];
+++	break;
+++
+++    case CACHE_CTRL:		/* 0x328 */
+++        *data = cache_ctrl;
+++	break;
+++
+++    default:
+++	*data = 0;
+++	break;
+++    }
+++
+++    if (sis_verbose > 1)
+++	printf("APB read  a: %08x, d: %08x\n", addr, *data);
+++
+++    return (MOK);
+++}
+++
+++static int
+++apb_write(addr, data)
+++    uint32          addr;
+++    uint32          data;
+++{
+++    if (sis_verbose > 1)
+++	printf("APB write a: %08x, d: %08x\n",addr,data);
+++    switch (addr & 0xff) {
+++
+++    case APBUART_RXTX:		/* 0x100 */
+++    case APBUART_STATUS:	/* 0x104 */
+++	grlib_write_uart(addr, data);
+++	break;
+++
+++    case IRQCTRL_IFR:		/* 0x208 */
+++	irqctrl_ifr = data & 0xfffe;
+++	chk_irq();
+++	break;
+++
+++    case IRQCTRL_ICR:		/* 0x20C */
+++	irqctrl_ipr &= ~data & 0x0fffe;
+++	chk_irq();
+++	break;
+++
+++    case IRQCTRL_IMR:		/* 0x240 */
+++	irqctrl_imr = data & 0x7ffe;
+++	chk_irq();
+++	break;
+++
+++    case TIMER_SCLOAD:	/* 0x304 */
+++	gpt_scaler_set(data);
+++	break;
+++
+++    case TIMER_TIMER1:	/* 0x310 */
+++	gpt_counter[0] = data;
+++	break;
+++
+++    case TIMER_RELOAD1:	/* 0x314 */
+++        gpt_reload[0] = data;
+++	break;
+++
+++    case TIMER_CTRL1:		/* 0x318 */
+++	timer_ctrl(data, 0);
+++	break;
+++
+++    case TIMER_TIMER2:	/* 0x320 */
+++	gpt_counter[1] = data;
+++	break;
+++
+++    case TIMER_RELOAD2:	/* 0x324 */
+++        gpt_reload[1] = data;
+++	break;
+++
+++    case TIMER_CTRL2:		/* 0x328 */
+++	timer_ctrl(data, 1);
+++	break;
+++
+++    case POWER_DOWN:		/* 0x328 */
+++        wait_for_irq();
+++	break;
+++
+++    case CACHE_CTRL:		/* 0x328 */
+++        cache_ctrl = data & 0x1000f;
+++	break;
+++
+++    default:
+++	break;
+++    }
+++    return (MOK);
+++}
+++
+++
+++/* APBUART */
+++
+++static int      ifd1 = -1, ofd1 = -1;
+++
+++static void
+++init_stdio()
+++{
+++    if (dumbio)
+++        return; /* do nothing */
+++    if (ifd1 == 0 && f1open) {
+++	tcsetattr(0, TCSANOW, &ioc1);
+++        tcflush(ifd1, TCIFLUSH);
+++    }
+++}
+++
+++static void
+++restore_stdio()
+++{
+++    if (dumbio)
+++        return; /* do nothing */
+++    if (ifd1 == 0 && f1open && tty_setup)
+++	tcsetattr(0, TCSANOW, &iocold1);
+++}
+++
+++#define DO_STDIO_READ( _fd_, _buf_, _len_ )          \
+++             ( dumbio || nouartrx \
+++               ? (0) /* no bytes read, no delay */   \
+++               : (_fd_) == 1 && callback ? \
+++                 callback->read_stdin (callback, _buf_, _len_) :  \
+++                 read( _fd_, _buf_, _len_ ) )
+++
+++
+++static void
+++port_init()
+++{
+++
+++    f1in = stdin;
+++    f1out = stdout;
+++    if (uart_dev1[0] != 0)
+++	if ((fd1 = open(uart_dev1, O_RDWR | O_NONBLOCK)) < 0) {
+++	    printf("Warning, couldn't open output device %s\n", uart_dev1);
+++	} else {
+++	    if (sis_verbose)
+++		printf("serial port A on %s\n", uart_dev1);
+++	    f1in = f1out = fdopen(fd1, "r+");
+++	    setbuf(f1out, NULL);
+++	    f1open = 1;
+++	}
+++    if (f1in) ifd1 = fileno(f1in);
+++    if (ifd1 == 0) {
+++        if (callback && !callback->isatty(callback, ifd1)) {
+++            tty_setup = 0;
+++        }
+++	if (sis_verbose)
+++	    printf("serial port A on stdin/stdout\n");
+++        if (!dumbio) {
+++            tcgetattr(ifd1, &ioc1);
+++            if (tty_setup) {
+++            iocold1 = ioc1;
+++            ioc1.c_lflag &= ~(ICANON | ECHO);
+++            ioc1.c_cc[VMIN] = 0;
+++            ioc1.c_cc[VTIME] = 0;
+++        }
+++        }
+++	f1open = 1;
+++    }
+++
+++    if (f1out) {
+++	ofd1 = fileno(f1out);
+++    	if (!dumbio && tty_setup && ofd1 == 1) setbuf(f1out, NULL);
+++    }
+++
+++    wnuma = 0;
+++
+++}
+++
+++static uint32
+++grlib_read_uart(addr)
+++    uint32          addr;
+++{
+++
+++    unsigned        tmp;
+++
+++    tmp = 0;
+++    switch (addr & 0xfff) {
+++
+++    case 0x070:			/* UART 1 RX/TX */
+++#ifndef _WIN32
+++#ifdef FAST_UART
+++
+++	if (aind < anum) {
+++	    if ((aind + 1) < anum)
+++		set_irq(3);
+++	    return ((uint32) aq[aind++]);
+++	} else {
+++	    if (f1open) {
+++	        anum = DO_STDIO_READ(ifd1, aq, UARTBUF);
+++	    }
+++      else {
+++          anum = 0;
+++      }
+++	    if (anum > 0) {
+++		aind = 0;
+++		if ((aind + 1) < anum)
+++		    set_irq(3);
+++		return ((uint32) aq[aind++]);
+++	    } else {
+++		return ((uint32) aq[aind]);
+++	    }
+++
+++	}
+++#else
+++	tmp = uarta_data;
+++	uarta_data &= ~UART_DR;
+++	uart_stat_reg &= ~UARTA_DR;
+++	return tmp;
+++#endif
+++#else
+++	return(0);
+++#endif
+++	break;
+++
+++    case 0x074:			/* UART status register	 */
+++#ifndef _WIN32
+++#ifdef FAST_UART
+++
+++	Ucontrol = 0;
+++	if (aind < anum) {
+++	    Ucontrol |= 0x00000001;
+++	} else {
+++	    if (f1open) {
+++	        anum = DO_STDIO_READ(ifd1, aq, UARTBUF);
+++            }
+++	    else {
+++		anum = 0;
+++	    }
+++	    if (anum > 0) {
+++		Ucontrol |= 0x00000001;
+++		aind = 0;
+++		set_irq(3);
+++	    }
+++	}
+++	Ucontrol |= 0x00000006;
+++	return (Ucontrol);
+++#else
+++	return (uart_stat_reg);
+++#endif
+++#else
+++	return(0x00060006);
+++#endif
+++	break;
+++    default:
+++	if (sis_verbose)
+++	    printf("Read from unimplemented LEON2 register (%x)\n", addr);
+++
+++    }
+++    return (0);
+++}
+++
+++static void
+++grlib_write_uart(addr, data)
+++    uint32          addr;
+++    uint32          data;
+++{
+++    unsigned char   c;
+++
+++    c = (unsigned char) data;
+++    switch (addr & 0xfff) {
+++
+++    case 0x070:			/* UART A */
+++#ifdef FAST_UART
+++	if (f1open) {
+++	    if (wnuma < UARTBUF)
+++	        wbufa[wnuma++] = c;
+++	    else {
+++	        while (wnuma) {
+++              if (ofd1 == 1 && callback)
+++                  wnuma -= callback->write_stdout(callback, wbufa, wnuma);
+++              else
+++		    wnuma -= fwrite(wbufa, 1, wnuma, f1out);
+++          }
+++	        wbufa[wnuma++] = c;
+++	    }
+++	}
+++	set_irq(3);
+++#else
+++	if (uart_stat_reg & UARTA_SRE) {
+++	    uarta_sreg = c;
+++	    uart_stat_reg &= ~UARTA_SRE;
+++	    event(uarta_tx, 0, UART_TX_TIME);
+++	} else {
+++	    uarta_hreg = c;
+++	    uart_stat_reg &= ~UARTA_HRE;
+++	}
+++#endif
+++	break;
+++
+++    case 0x074:			/* UART status register */
+++#ifndef FAST_UART
+++        uart_stat_reg &= 1;
+++#endif
+++	break;
+++    default:
+++	if (sis_verbose)
+++	    printf("Write to unimplemented APB register (%x)\n", addr);
+++
+++    }
+++}
+++
+++static void
+++flush_uart()
+++{
+++    while (wnuma && f1open) {
+++        if (ofd1 == 1 && callback) {
+++            wnuma -= callback->write_stdout(callback, wbufa, wnuma);
+++            callback->flush_stdout(callback);
+++        }
+++        else
+++	wnuma -= fwrite(wbufa, 1, wnuma, f1out);
+++    }
+++}
+++
+++
+++
+++static void
+++uarta_tx()
+++{
+++    while (f1open) {
+++        if (ofd1 == 1 && callback) {
+++            while (callback->write_stdout(callback, &uarta_sreg, 1) != 1);
+++        }
+++        else {
+++            while (fwrite(&uarta_sreg, 1, 1, f1out) != 1);
+++        }
+++    }
+++    if (uart_stat_reg & UARTA_HRE) {
+++	uart_stat_reg |= UARTA_SRE;
+++    } else {
+++	uarta_sreg = uarta_hreg;
+++	uart_stat_reg |= UARTA_HRE;
+++	event(uarta_tx, 0, UART_TX_TIME);
+++    }
+++    set_irq(3);
+++}
+++
+++static void
+++uart_rx(arg)
+++    caddr_t         arg;
+++{
+++    int32           rsize;
+++    char            rxd;
+++
+++
+++    rsize = 0;
+++    if (f1open)
+++        rsize = DO_STDIO_READ(ifd1, &rxd, 1);
+++    else
+++        rsize = 0;
+++    if (rsize > 0) {
+++	uarta_data = rxd;
+++	if (uart_stat_reg & UARTA_DR) {
+++	    uart_stat_reg |= UARTA_OR;
+++	}
+++	uart_stat_reg |= UARTA_DR;
+++	set_irq(3);
+++    }
+++    event(uart_rx, 0, UART_RX_TIME);
+++}
+++
+++static void
+++uart_intr(arg)
+++    caddr_t         arg;
+++{
+++    grlib_read_uart(APBUART_STATUS);	/* Check for UART interrupts every 1000 clk */
+++    flush_uart();		/* Flush UART ports      */
+++    event(uart_intr, 0, UART_FLUSH_TIME);
+++}
+++
+++
+++static void
+++uart_irq_start()
+++{
+++#ifdef FAST_UART
+++    event(uart_intr, 0, UART_FLUSH_TIME);
+++#else
+++#ifndef _WIN32
+++    event(uart_rx, 0, UART_RX_TIME);
+++#endif
+++#endif
+++}
+++
+++/* TIMER */
+++
+++static void
+++gpt_intr(arg)
+++    caddr_t         arg;
+++{
+++    int i;
+++
+++    for (i=0; i<NTIMERS; i++) {
+++	if (gpt_ctrl[i] & 1) {
+++            gpt_counter[i] -= 1;
+++            if (gpt_counter[i] == -1) {
+++	        set_irq(TIMER_IRQ + i);
+++	        if (gpt_ctrl[i] & 2)
+++	            gpt_counter[i] = gpt_reload[i];
+++            }
+++        }
+++    }
+++    event(gpt_intr, 0, gpt_scaler + 1);
+++    gpt_scaler_start = now();
+++}
+++
+++static void
+++gpt_init()
+++{
+++    if (sis_verbose)
+++	printf("GPT started (period %d)\n\r", gpt_scaler + 1);
+++}
+++
+++static void
+++gpt_reset()
+++{
+++    event(gpt_intr, 0, gpt_scaler + 1);
+++    gpt_scaler_start = now();
+++}
+++
+++static void
+++gpt_scaler_set(val)
+++    uint32          val;
+++{
+++    gpt_scaler = val & 0x0ffff;	/* 16-bit scaler */
+++}
+++
+++static void
+++timer_ctrl(val, i)
+++    uint32       val;
+++    int          i;
+++{
+++    if (val & 4) {  /* reload */
+++        gpt_counter[i] = gpt_reload[i];
+++    }
+++    gpt_ctrl[i] = val & 0xb;
+++}
+++
+++/* Store data in host byte order.  MEM points to the beginning of the
+++   emulated memory; WADDR contains the index the emulated memory,
+++   DATA points to words in host byte order to be stored.  SZ contains log(2)
+++   of the number of bytes to retrieve, and can be 0 (1 byte), 1 (one half-word),
+++   2 (one word), or 3 (two words); WS should return the number of wait-states. */
+++
+++static void
+++store_bytes (mem, waddr, data, sz, ws)
+++    unsigned char  *mem;
+++    uint32	   waddr;
+++    uint32	   *data;
+++    int32	    sz;
+++    int32	   *ws;
+++{
+++    switch (sz) {
+++	case 0:
+++#ifdef HOST_LITTLE_ENDIAN
+++	    waddr ^= 3;
+++#endif
+++	    mem[waddr] = *data & 0x0ff;
+++	    *ws = 0;
+++	    break;
+++	case 1:
+++#ifdef HOST_LITTLE_ENDIAN
+++	    waddr ^= 2;
+++#endif
+++	    *((unsigned short *) &(mem[waddr])) = *data & 0x0ffff;
+++	    *ws = 0;
+++	    break;
+++	case 2:
+++	    *((uint32 *) &(mem[waddr])) = *data;
+++	    *ws = 0;
+++	    break;
+++	case 3:
+++	    *((uint32 *) &(mem[waddr])) = data[0];
+++	    *((uint32 *) &(mem[waddr + 4])) = data[1];
+++	    *ws = 0;
+++	    break;
+++    }
+++}
+++
+++
+++/* Memory emulation */
+++
+++static int
+++memory_iread(addr, data, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32          *ws;
+++{
+++    if ((addr >= RAM_START) && (addr < RAM_END)) {
+++        *data = *((uint32 *) & (ramb[addr & RAM_MASK]));
+++	*ws = 0;
+++	return (0);
+++    } else if (addr < ROM_END) {
+++        *data = *((uint32 *) & (romb[addr]));
+++	*ws = 0;
+++	return (0);
+++    }
+++
+++    printf("Memory exception at %x (illegal address)\n", addr);
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
+++
+++static int
+++memory_read(addr, data, sz, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    int32           mexc;
+++
+++    if ((addr >= RAM_START) && (addr < RAM_END)) {
+++        *data = *((uint32 *) & (ramb[addr & RAM_MASK & ~3]));
+++	*ws = 0;
+++	return (0);
+++    } else if ((addr >= APBSTART) && (addr < APBEND)) {
+++	mexc = apb_read(addr, data);
+++	if (mexc) {
+++	    *ws = MEM_EX_WS;
+++	} else {
+++	    *ws = 0;
+++	}
+++	return (mexc);
+++    } else if (addr < ROM_END) {
+++        *data = *((uint32 *) & (romb[addr & ~3]));
+++	*ws = 0;
+++	return (0);
+++    }
+++
+++    printf("Memory exception at %x (illegal address)\n", addr);
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
+++
+++static int
+++memory_read_asi(asi, addr, data, sz, ws)
+++    int32           asi;
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    return(memory_read(addr, data, sz, ws));
+++}
+++
+++static int
+++memory_write(addr, data, sz, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    uint32          byte_addr;
+++    uint32          byte_mask;
+++    uint32          waddr;
+++    uint32         *ram;
+++    int32           mexc;
+++    int             i;
+++    int             wphit[2];
+++
+++    if ((addr >= RAM_START) && (addr < RAM_END)) {
+++	waddr = addr & RAM_MASK;
+++	store_bytes (ramb, waddr, data, sz, ws);
+++	return (0);
+++
+++    } else if ((addr >= APBSTART) && (addr < APBEND)) {
+++	if (sz != 2) {
+++	    *ws = MEM_EX_WS;
+++	    return (1);
+++	}
+++	apb_write(addr, *data);
+++	*ws = 0;
+++	return (0);
+++
+++    } else if (addr < ROM_END) {
+++//        return (1);
+++	*ws = 0;
+++	store_bytes (romb, addr, data, sz, ws);
+++        return (0);
+++    }
+++	
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
+++
+++static int
+++memory_write_asi(asi, addr, data, sz, ws)
+++    int32           asi;
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    return(memory_write(addr, data, sz, ws));
+++}
+++
+++static unsigned char  *
+++get_mem_ptr(addr, size)
+++    uint32          addr;
+++    uint32          size;
+++{
+++    if ((addr + size) < ROM_END) {
+++	return (&romb[addr]);
+++    } else if ((addr >= RAM_START) && ((addr + size) < RAM_END)) {
+++	return (&ramb[addr & RAM_MASK]);
+++    }
+++
+++    return ((char *) -1);
+++}
+++
+++static int
+++sis_memory_write(addr, data, length)
+++    uint32               addr;
+++    const unsigned char *data;
+++    uint32               length;
+++{
+++    char           *mem;
+++
+++    if ((mem = get_mem_ptr(addr, length)) == ((char *) -1))
+++	return (0);
+++
+++    memcpy(mem, data, length);
+++    return (length);
+++}
+++
+++static int
+++sis_memory_read(addr, data, length)
+++    uint32          addr;
+++    char           *data;
+++    uint32          length;
+++{
+++    char           *mem;
+++    int            ws;
+++
+++    if (length == 4) {
+++      memory_read(addr, data, length, &ws);
+++      return(4);
+++    }
+++
+++    if ((mem = get_mem_ptr(addr, length)) == ((char *) -1))
+++	return (0);
+++
+++    memcpy(data, mem, length);
+++    return (length);
+++}
+++
+++static void
+++boot_init ()
+++{
+++//    mec_write(MEC_WCR, 0);	/* zero waitstates */
+++//    mec_write(MEC_TRAPD, 0);	/* turn off watch-dog */
+++    apb_write(TIMER_SCALER, sregs.freq-1); /* generate 1 MHz RTC tick */
+++    apb_write(TIMER_SCLOAD, sregs.freq-1);
+++    apb_write(TIMER_TIMER1, -1);
+++    apb_write(TIMER_RELOAD1, -1);
+++    apb_write(TIMER_CTRL1, 0x7);
+++//    mec_write(MEC_MEMCFG, (3 << 18) | (4 << 10)); /* 1 MB ROM, 4 MB RAM */
+++    sregs.wim = 2;
+++    sregs.psr = 0x000010e0;
+++    sregs.r[30] = RAM_END;
+++    sregs.r[14] = sregs.r[30] - 96*4;
+++    cache_ctrl = 0x01000f;
+++
+++}
+++
+++struct memsys leon2 = {
+++    init_sim,
+++    reset,
+++    error_mode,
+++    sim_halt,
+++    exit_sim,
+++    init_stdio,
+++    restore_stdio,
+++    memory_iread,
+++    memory_read,
+++    memory_read_asi,
+++    memory_write,
+++    memory_write_asi,
+++    sis_memory_write,
+++    sis_memory_read,
+++    boot_init
+++};
++diff --git a/sim/erc32/leon3.c b/sim/erc32/leon3.c
++new file mode 100644
++index 0000000..e79169e
++--- /dev/null
+++++ b/sim/erc32/leon3.c
++@@ -0,0 +1,1066 @@
+++/*
+++ * This file is part of SIS.
+++ * 
+++ * SIS, SPARC instruction simulator V2.5 Copyright (C) 1995 Jiri Gaisler,
+++ * European Space Agency
+++ * 
+++ * This program is free software; you can redistribute it and/or modify it under
+++ * the terms of the GNU General Public License as published by the Free
+++ * Software Foundation; either version 3 of the License, or (at your option)
+++ * any later version.
+++ * 
+++ * This program is distributed in the hope that it will be useful, but WITHOUT
+++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+++ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+++ * more details.
+++ * 
+++ * You should have received a copy of the GNU General Public License along with
+++ * this program; if not, see <http://www.gnu.org/licenses/>.
+++ * 
+++ * Leon3 emulation, loosely based on erc32.c .
+++ */
+++
+++/* The control space devices */
+++
+++#include "config.h"
+++#include <errno.h>
+++#include <sys/types.h>
+++#include <stdio.h>
+++#include <string.h>
+++#include <termios.h>
+++#include <sys/fcntl.h>
+++#include <sys/file.h>
+++#include <unistd.h>
+++#include "sis.h"
+++#include "grlib.h"
+++#include "sim-config.h"
+++
+++static int tty_setup = 1; /* default setup if not a tty */
+++
+++/* APB registers */
+++#define APBSTART	0x80000000
+++#define APBEND  	0x80100000
+++
+++/* Memory exception waitstates */
+++#define MEM_EX_WS 	1
+++
+++#define MOK	0
+++
+++/* LEON3 APB register addresses */
+++
+++#define IRQMP_IPR		0x204
+++#define IRQMP_IMR 	0x240
+++#define IRQMP_ICR 	0x20C
+++#define IRQMP_IFR 	0x208
+++#define GPTIMER_SCALER  0x300
+++#define GPTIMER_SCLOAD  0x304
+++#define GPTIMER_CONFIG  0x308
+++#define GPTIMER_TIMER1 	0x310
+++#define GPTIMER_RELOAD1	0x314
+++#define GPTIMER_CTRL1 	0x318
+++#define GPTIMER_TIMER2 	0x320
+++#define GPTIMER_RELOAD2	0x324
+++#define GPTIMER_CTRL2 	0x328
+++
+++#define APBUART_RXTX	0x100
+++#define APBUART_STATUS  0x104
+++
+++/* Size of UART buffers (bytes) */
+++#define UARTBUF	1024
+++
+++/* Number of simulator ticks between flushing the UARTS. 	 */
+++/* For good performance, keep above 1000			 */
+++#define UART_FLUSH_TIME	  3000
+++
+++
+++/* New uart defines */
+++#define UART_TX_TIME	1000
+++#define UART_RX_TIME	1000
+++#define UARTA_DR	0x1
+++#define UARTA_SRE	0x2
+++#define UARTA_HRE	0x4
+++#define UARTA_OR	0x10
+++
+++/* IRQMP registers */
+++
+++static uint32   irqmp_ipr;
+++static uint32   irqmp_imr;
+++static uint32   irqmp_ifr;
+++
+++/* GPTIMER registers */
+++
+++#define NGPTIMERS  2
+++#define GPTIMER_IRQ 8
+++
+++static uint32   gpt_scaler;
+++static uint32   gpt_scaler_start;
+++static uint32   gpt_counter[NGPTIMERS];
+++static uint32   gpt_reload[NGPTIMERS];
+++static uint32   gpt_ctrl[NGPTIMERS];
+++
+++/* ROM size 16 Mbyte */
+++#define ROM_START 	0x00000000
+++#define ROM_MASK 	0x00ffffff
+++#define ROM_END 	(ROM_START + ROM_MASK + 1)
+++
+++/* RAM size 16 Mbyte */
+++#define RAM_START 	0x40000000
+++#define RAM_MASK 	0x00ffffff
+++#define RAM_END 	(RAM_START + RAM_MASK + 1)
+++
+++/* Memory */
+++
+++static unsigned char	romb[ROM_END - ROM_START];
+++static unsigned char	ramb[RAM_END - RAM_START];
+++static uint32   cache_ctrl;
+++
+++
+++/* UART support variables */
+++
+++static int32    fd1, fd2;	/* file descriptor for input file */
+++static int32    Ucontrol;	/* UART status register */
+++static unsigned char aq[UARTBUF], bq[UARTBUF];
+++static int32    anum, aind = 0;
+++static int32    bnum, bind = 0;
+++static char     wbufa[UARTBUF], wbufb[UARTBUF];
+++static unsigned wnuma;
+++static unsigned wnumb;
+++static FILE    *f1in, *f1out;
+++static struct termios ioc1, ioc2, iocold1, iocold2;
+++static int      f1open = 0;
+++
+++static char     uarta_sreg, uarta_hreg;
+++static uint32   uart_stat_reg;
+++static uint32   uarta_data;
+++
+++/* Forward declarations */
+++
+++static void	mem_init (void);
+++static void	close_port (void);
+++static void	leon3_reset (void);
+++static void	irqmp_intack (int32 level);
+++static void	chk_irq (void);
+++static void	set_irq (int32 level);
+++static int32	apb_read (uint32 addr, uint32 *data);
+++static int	apb_write (uint32 addr, uint32 data);
+++static void	port_init (void);
+++static uint32	grlib_read_uart (uint32 addr);
+++static void	grlib_write_uart (uint32 addr, uint32 data);
+++static void	flush_uart (void);
+++static void	uarta_tx (void);
+++static void	uart_rx (caddr_t arg);
+++static void	uart_intr (caddr_t arg);
+++static void	uart_irq_start (void);
+++static void	gpt_intr (caddr_t arg);
+++static void	gpt_init (void);
+++static void	gpt_reset (void);
+++static void	gpt_scaler_set (uint32 val);
+++static void	timer_ctrl (uint32 val, int i);
+++static unsigned char *
+++		get_mem_ptr (uint32 addr, uint32 size);
+++static void	store_bytes (unsigned char *mem, uint32 waddr,
+++			uint32 *data, int sz, int32 *ws);
+++
+++static host_callback *callback;
+++
+++
+++/* One-time init */
+++
+++static void
+++init_sim()
+++{
+++    callback = sim_callback;
+++    grlib_init();
+++    mem_init();
+++    port_init();
+++    gpt_init();
+++}
+++
+++/* Power-on reset init */
+++
+++static void
+++reset()
+++{
+++    leon3_reset();
+++    uart_irq_start();
+++    gpt_reset();
+++}
+++
+++/* IU error mode manager */
+++
+++static void
+++error_mode(pc)
+++    uint32          pc;
+++{
+++
+++}
+++
+++
+++/* Memory init */
+++
+++static void
+++mem_init()
+++{
+++
+++/* Add AMBA P&P record for SRCTRL memory controller */
+++
+++    grlib_ahbspp_add(GRLIB_PP_ID(VENDOR_GAISLER, GAISLER_SRCTRL, 0, 0),
+++                     GRLIB_PP_AHBADDR(0x00000000, 0xE00, 1, 1, 2),
+++                     GRLIB_PP_AHBADDR(0x40000000, 0xC00, 1, 1, 2),
+++                     GRLIB_PP_AHBADDR(0x20000000, 0xE00, 0, 0, 2),
+++                     0);
+++    if (sis_verbose)
+++	printf("RAM start: 0x%x, RAM size: %d K, ROM size: %d K\n",
+++	       RAM_START, (RAM_MASK+1)/1024, (ROM_MASK+1)/1024);
+++}
+++
+++/* Flush ports when simulator stops */
+++
+++static void
+++sim_halt()
+++{
+++#ifdef FAST_UART
+++    flush_uart();
+++#endif
+++}
+++
+++static void
+++close_port()
+++{
+++    if (f1open && f1in != stdin)
+++	fclose(f1in);
+++}
+++
+++static void
+++exit_sim()
+++{
+++    close_port();
+++}
+++
+++static void
+++leon3_reset()
+++{
+++    int             i;
+++
+++    irqmp_ipr = 0;
+++    irqmp_imr = 0;
+++    irqmp_ifr = 0;
+++
+++    wnuma = wnumb = 0;
+++    anum = aind = bnum = bind = 0;
+++
+++    uart_stat_reg = UARTA_SRE | UARTA_HRE;
+++
+++    gpt_counter[0] = 0xffffffff;
+++    gpt_reload[0] = 0xffffffff;
+++    gpt_scaler = 0xffff;
+++    gpt_ctrl[0] = 0;
+++    gpt_ctrl[1] = 0;
+++
+++}
+++
+++
+++
+++static void
+++irqmp_intack(level)
+++    int32           level;
+++{
+++    int             irq_test;
+++
+++    if (sis_verbose > 2)
+++	printf("interrupt %d acknowledged\n", level);
+++    if (irqmp_ifr & (1 << level))
+++	irqmp_ifr &= ~(1 << level);
+++    else
+++	irqmp_ipr &= ~(1 << level);
+++   chk_irq();
+++}
+++
+++static void
+++chk_irq()
+++{
+++    int32           i;
+++    uint32          itmp;
+++    int		    old_irl;
+++
+++    old_irl = ext_irl;
+++    itmp = ((irqmp_ipr | irqmp_ifr) & irqmp_imr) & 0x0fffe;
+++    ext_irl = 0;
+++    if (itmp != 0) {
+++	for (i = 15; i > 0; i--) {
+++	    if (((itmp >> i) & 1) != 0) {
+++		if ((sis_verbose > 2) && (i > old_irl)) 
+++		    printf("IU irl: %d\n", i);
+++		ext_irl = i;
+++	        set_int(i, irqmp_intack, i);
+++		break;
+++	    }
+++	}
+++    }
+++}
+++
+++static void
+++set_irq(level)
+++    int32           level;
+++{
+++    irqmp_ipr |= (1 << level);
+++    chk_irq();
+++}
+++
+++static int32
+++apb_read(addr, data)
+++    uint32          addr;
+++    uint32         *data;
+++{
+++
+++    switch (addr & 0xfff) {
+++
+++    case APBUART_RXTX:		/* 0x100 */
+++    case APBUART_STATUS:	/* 0x104 */
+++	*data = grlib_read_uart(addr);
+++	break;
+++
+++    case IRQMP_IPR:		/* 0x204 */
+++	*data = irqmp_ipr;
+++	break;
+++
+++    case IRQMP_IFR:		/* 0x208 */
+++	*data = irqmp_ifr;
+++	break;
+++
+++    case IRQMP_IMR:		/* 0x240 */
+++	*data = irqmp_imr;
+++	break;
+++
+++    case GPTIMER_SCALER:	/* 0x300 */
+++	*data = gpt_scaler - (now() - gpt_scaler_start);
+++	break;
+++
+++    case GPTIMER_SCLOAD:	/* 0x304 */
+++	*data = gpt_scaler;
+++	break;
+++
+++    case GPTIMER_CONFIG:	/* 0x308 */
+++	*data = 0x100 | (GPTIMER_IRQ << 3) | NGPTIMERS;
+++	break;
+++
+++    case GPTIMER_TIMER1:	/* 0x310 */
+++	*data = gpt_counter[0];
+++	break;
+++
+++    case GPTIMER_RELOAD1:	/* 0x314 */
+++	*data = gpt_reload[0];
+++	break;
+++
+++    case GPTIMER_CTRL1:		/* 0x318 */
+++	*data = gpt_ctrl[0];
+++	break;
+++
+++    case GPTIMER_TIMER2:	/* 0x320 */
+++	*data = gpt_counter[1];
+++	break;
+++
+++    case GPTIMER_RELOAD2:	/* 0x324 */
+++	*data = gpt_reload[1];
+++	break;
+++
+++    case GPTIMER_CTRL2:		/* 0x328 */
+++	*data = gpt_ctrl[1];
+++	break;
+++
+++    default:
+++	*data = 0;
+++	break;
+++    }
+++
+++    if (sis_verbose > 1)
+++	printf("APB read  a: %08x, d: %08x\n", addr, *data);
+++
+++    return (MOK);
+++}
+++
+++static int
+++apb_write(addr, data)
+++    uint32          addr;
+++    uint32          data;
+++{
+++    if (sis_verbose > 1)
+++	printf("APB write a: %08x, d: %08x\n",addr,data);
+++    switch (addr & 0xfff) {
+++
+++    case APBUART_RXTX:		/* 0x100 */
+++    case APBUART_STATUS:	/* 0x104 */
+++	grlib_write_uart(addr, data);
+++	break;
+++
+++    case IRQMP_IFR:		/* 0x208 */
+++	irqmp_ifr = data & 0xfffe;
+++	chk_irq();
+++	break;
+++
+++    case IRQMP_ICR:		/* 0x20C */
+++	irqmp_ipr &= ~data & 0x0fffe;
+++	chk_irq();
+++	break;
+++
+++    case IRQMP_IMR:		/* 0x240 */
+++	irqmp_imr = data & 0x7ffe;
+++	chk_irq();
+++	break;
+++
+++    case GPTIMER_SCLOAD:	/* 0x304 */
+++	gpt_scaler_set(data);
+++	break;
+++
+++    case GPTIMER_TIMER1:	/* 0x310 */
+++	gpt_counter[0] = data;
+++	break;
+++
+++    case GPTIMER_RELOAD1:	/* 0x314 */
+++        gpt_reload[0] = data;
+++	break;
+++
+++    case GPTIMER_CTRL1:		/* 0x318 */
+++	timer_ctrl(data, 0);
+++	break;
+++
+++    case GPTIMER_TIMER2:	/* 0x320 */
+++	gpt_counter[1] = data;
+++	break;
+++
+++    case GPTIMER_RELOAD2:	/* 0x324 */
+++        gpt_reload[1] = data;
+++	break;
+++
+++    case GPTIMER_CTRL2:		/* 0x328 */
+++	timer_ctrl(data, 1);
+++	break;
+++
+++    default:
+++	break;
+++    }
+++    return (MOK);
+++}
+++
+++
+++/* APBUART */
+++
+++static int      ifd1 = -1, ofd1 = -1;
+++
+++static void
+++init_stdio()
+++{
+++    if (dumbio)
+++        return; /* do nothing */
+++    if (ifd1 == 0 && f1open) {
+++	tcsetattr(0, TCSANOW, &ioc1);
+++        tcflush(ifd1, TCIFLUSH);
+++    }
+++}
+++
+++static void
+++restore_stdio()
+++{
+++    if (dumbio)
+++        return; /* do nothing */
+++    if (ifd1 == 0 && f1open && tty_setup)
+++	tcsetattr(0, TCSANOW, &iocold1);
+++}
+++
+++#define DO_STDIO_READ( _fd_, _buf_, _len_ )          \
+++             ( dumbio || nouartrx \
+++               ? (0) /* no bytes read, no delay */   \
+++               : (_fd_) == 1 && callback ? \
+++                 callback->read_stdin (callback, _buf_, _len_) :  \
+++                 read( _fd_, _buf_, _len_ ) )
+++
+++
+++static void
+++port_init()
+++{
+++
+++    f1in = stdin;
+++    f1out = stdout;
+++    if (uart_dev1[0] != 0)
+++	if ((fd1 = open(uart_dev1, O_RDWR | O_NONBLOCK)) < 0) {
+++	    printf("Warning, couldn't open output device %s\n", uart_dev1);
+++	} else {
+++	    if (sis_verbose)
+++		printf("serial port A on %s\n", uart_dev1);
+++	    f1in = f1out = fdopen(fd1, "r+");
+++	    setbuf(f1out, NULL);
+++	    f1open = 1;
+++	}
+++    if (f1in) ifd1 = fileno(f1in);
+++    if (ifd1 == 0) {
+++        if (callback && !callback->isatty(callback, ifd1)) {
+++            tty_setup = 0;
+++        }
+++	if (sis_verbose)
+++	    printf("serial port A on stdin/stdout\n");
+++        if (!dumbio) {
+++            tcgetattr(ifd1, &ioc1);
+++            if (tty_setup) {
+++            iocold1 = ioc1;
+++            ioc1.c_lflag &= ~(ICANON | ECHO);
+++            ioc1.c_cc[VMIN] = 0;
+++            ioc1.c_cc[VTIME] = 0;
+++        }
+++        }
+++	f1open = 1;
+++    }
+++
+++    if (f1out) {
+++	ofd1 = fileno(f1out);
+++    	if (!dumbio && tty_setup && ofd1 == 1) setbuf(f1out, NULL);
+++    }
+++
+++    wnuma = 0;
+++
+++
+++    grlib_apbpp_add(GRLIB_PP_ID(VENDOR_GAISLER, GAISLER_APBUART, 1, 3),
+++                    GRLIB_PP_APBADDR(0x80000100, 0xFFF));
+++}
+++
+++static uint32
+++grlib_read_uart(addr)
+++    uint32          addr;
+++{
+++
+++    unsigned        tmp;
+++
+++    tmp = 0;
+++    switch (addr & 0xff) {
+++
+++    case 0x00:			/* UART 1 RX/TX */
+++#ifndef _WIN32
+++#ifdef FAST_UART
+++
+++	if (aind < anum) {
+++	    if ((aind + 1) < anum)
+++		set_irq(3);
+++	    return ((uint32) aq[aind++]);
+++	} else {
+++	    if (f1open) {
+++	        anum = DO_STDIO_READ(ifd1, aq, UARTBUF);
+++	    }
+++      else {
+++          anum = 0;
+++      }
+++	    if (anum > 0) {
+++		aind = 0;
+++		if ((aind + 1) < anum)
+++		    set_irq(3);
+++		return ((uint32) aq[aind++]);
+++	    } else {
+++		return ((uint32) aq[aind]);
+++	    }
+++
+++	}
+++#else
+++	tmp = uarta_data;
+++	uarta_data &= ~UART_DR;
+++	uart_stat_reg &= ~UARTA_DR;
+++	return tmp;
+++#endif
+++#else
+++	return(0);
+++#endif
+++	break;
+++
+++    case 0x04:			/* UART status register	 */
+++#ifndef _WIN32
+++#ifdef FAST_UART
+++
+++	Ucontrol = 0;
+++	if (aind < anum) {
+++	    Ucontrol |= 0x00000001;
+++	} else {
+++	    if (f1open) {
+++	        anum = DO_STDIO_READ(ifd1, aq, UARTBUF);
+++            }
+++	    else {
+++		anum = 0;
+++	    }
+++	    if (anum > 0) {
+++		Ucontrol |= 0x00000001;
+++		aind = 0;
+++		set_irq(3);
+++	    }
+++	}
+++	Ucontrol |= 0x00000006;
+++	return (Ucontrol);
+++#else
+++	return (uart_stat_reg);
+++#endif
+++#else
+++	return(0x00060006);
+++#endif
+++	break;
+++    default:
+++	if (sis_verbose)
+++	    printf("Read from unimplemented MEC register (%x)\n", addr);
+++
+++    }
+++    return (0);
+++}
+++
+++static void
+++grlib_write_uart(addr, data)
+++    uint32          addr;
+++    uint32          data;
+++{
+++    unsigned char   c;
+++
+++    c = (unsigned char) data;
+++    switch (addr & 0xff) {
+++
+++    case 0x00:			/* UART A */
+++#ifdef FAST_UART
+++	if (f1open) {
+++	    if (wnuma < UARTBUF)
+++	        wbufa[wnuma++] = c;
+++	    else {
+++	        while (wnuma) {
+++              if (ofd1 == 1 && callback)
+++                  wnuma -= callback->write_stdout(callback, wbufa, wnuma);
+++              else
+++		    wnuma -= fwrite(wbufa, 1, wnuma, f1out);
+++          }
+++	        wbufa[wnuma++] = c;
+++	    }
+++	}
+++	set_irq(3);
+++#else
+++	if (uart_stat_reg & UARTA_SRE) {
+++	    uarta_sreg = c;
+++	    uart_stat_reg &= ~UARTA_SRE;
+++	    event(uarta_tx, 0, UART_TX_TIME);
+++	} else {
+++	    uarta_hreg = c;
+++	    uart_stat_reg &= ~UARTA_HRE;
+++	}
+++#endif
+++	break;
+++
+++    case 0x04:			/* UART status register */
+++#ifndef FAST_UART
+++        uart_stat_reg &= 1;
+++#endif
+++	break;
+++    default:
+++	if (sis_verbose)
+++	    printf("Write to unimplemented APB register (%x)\n", addr);
+++
+++    }
+++}
+++
+++static void
+++flush_uart()
+++{
+++    while (wnuma && f1open) {
+++        if (ofd1 == 1 && callback) {
+++            wnuma -= callback->write_stdout(callback, wbufa, wnuma);
+++            callback->flush_stdout(callback);
+++        }
+++        else
+++	wnuma -= fwrite(wbufa, 1, wnuma, f1out);
+++    }
+++}
+++
+++
+++
+++static void
+++uarta_tx()
+++{
+++    while (f1open) {
+++        if (ofd1 == 1 && callback) {
+++            while (callback->write_stdout(callback, &uarta_sreg, 1) != 1);
+++        }
+++        else {
+++            while (fwrite(&uarta_sreg, 1, 1, f1out) != 1);
+++        }
+++    }
+++    if (uart_stat_reg & UARTA_HRE) {
+++	uart_stat_reg |= UARTA_SRE;
+++    } else {
+++	uarta_sreg = uarta_hreg;
+++	uart_stat_reg |= UARTA_HRE;
+++	event(uarta_tx, 0, UART_TX_TIME);
+++    }
+++    set_irq(3);
+++}
+++
+++static void
+++uart_rx(arg)
+++    caddr_t         arg;
+++{
+++    int32           rsize;
+++    char            rxd;
+++
+++
+++    rsize = 0;
+++    if (f1open)
+++        rsize = DO_STDIO_READ(ifd1, &rxd, 1);
+++    else
+++        rsize = 0;
+++    if (rsize > 0) {
+++	uarta_data = rxd;
+++	if (uart_stat_reg & UARTA_DR) {
+++	    uart_stat_reg |= UARTA_OR;
+++	}
+++	uart_stat_reg |= UARTA_DR;
+++	set_irq(3);
+++    }
+++    event(uart_rx, 0, UART_RX_TIME);
+++}
+++
+++static void
+++uart_intr(arg)
+++    caddr_t         arg;
+++{
+++    grlib_read_uart(APBUART_STATUS); /* Check for UART interrupts every 1000 clk */
+++    flush_uart();		/* Flush UART ports      */
+++    event(uart_intr, 0, UART_FLUSH_TIME);
+++}
+++
+++
+++static void
+++uart_irq_start()
+++{
+++#ifdef FAST_UART
+++    event(uart_intr, 0, UART_FLUSH_TIME);
+++#else
+++#ifndef _WIN32
+++    event(uart_rx, 0, UART_RX_TIME);
+++#endif
+++#endif
+++}
+++
+++/* GPTIMER */
+++
+++static void
+++gpt_intr(arg)
+++    caddr_t         arg;
+++{
+++    int i;
+++
+++    for (i=0; i<NGPTIMERS; i++) {
+++	if (gpt_ctrl[i] & 1) {
+++            gpt_counter[i] -= 1;
+++            if (gpt_counter[i] == -1) {
+++	        if (gpt_ctrl[i] & 8)
+++	            set_irq(GPTIMER_IRQ + i);
+++	        if (gpt_ctrl[i] & 2)
+++	            gpt_counter[i] = gpt_reload[i];
+++            }
+++        }
+++    }
+++    event(gpt_intr, 0, gpt_scaler + 1);
+++    gpt_scaler_start = now();
+++}
+++
+++static void
+++gpt_init()
+++{
+++    if (sis_verbose)
+++	printf("GPT started (period %d)\n\r", gpt_scaler + 1);
+++
+++    grlib_apbpp_add(GRLIB_PP_ID(VENDOR_GAISLER, GAISLER_GPTIMER, 0, 8),
+++                    GRLIB_PP_APBADDR(0x80000300, 0xFFF));
+++}
+++
+++static void
+++gpt_reset()
+++{
+++    event(gpt_intr, 0, gpt_scaler + 1);
+++    gpt_scaler_start = now();
+++}
+++
+++static void
+++gpt_scaler_set(val)
+++    uint32          val;
+++{
+++    gpt_scaler = val & 0x0ffff;	/* 16-bit scaler */
+++}
+++
+++static void
+++timer_ctrl(val, i)
+++    uint32       val;
+++    int          i;
+++{
+++    if (val & 4) {  /* reload */
+++        gpt_counter[i] = gpt_reload[i];
+++    }
+++    gpt_ctrl[i] = val & 0xb;
+++}
+++
+++/* Store data in host byte order.  MEM points to the beginning of the
+++   emulated memory; WADDR contains the index the emulated memory,
+++   DATA points to words in host byte order to be stored.  SZ contains log(2)
+++   of the number of bytes to retrieve, and can be 0 (1 byte), 1 (one half-word),
+++   2 (one word), or 3 (two words); WS should return the number of wait-states. */
+++
+++static void
+++store_bytes (mem, waddr, data, sz, ws)
+++    unsigned char  *mem;
+++    uint32	   waddr;
+++    uint32	   *data;
+++    int32	    sz;
+++    int32	   *ws;
+++{
+++    switch (sz) {
+++	case 0:
+++#ifdef HOST_LITTLE_ENDIAN
+++	    waddr ^= 3;
+++#endif
+++	    mem[waddr] = *data & 0x0ff;
+++	    *ws = 0;
+++	    break;
+++	case 1:
+++#ifdef HOST_LITTLE_ENDIAN
+++	    waddr ^= 2;
+++#endif
+++	    *((unsigned short *) &(mem[waddr])) = *data & 0x0ffff;
+++	    *ws = 0;
+++	    break;
+++	case 2:
+++	    *((uint32 *) &(mem[waddr])) = *data;
+++	    *ws = 0;
+++	    break;
+++	case 3:
+++	    *((uint32 *) &(mem[waddr])) = data[0];
+++	    *((uint32 *) &(mem[waddr + 4])) = data[1];
+++	    *ws = 0;
+++	    break;
+++    }
+++}
+++
+++
+++/* Memory emulation */
+++
+++static int
+++memory_iread(addr, data, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32          *ws;
+++{
+++    if ((addr >= RAM_START) && (addr < RAM_END)) {
+++        *data = *((uint32 *) & (ramb[addr & RAM_MASK]));
+++	*ws = 0;
+++	return (0);
+++    } else if (addr < ROM_END) {
+++        *data = *((uint32 *) & (romb[addr]));
+++	*ws = 0;
+++	return (0);
+++    }
+++
+++    printf("Memory exception at %x (illegal address)\n", addr);
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
+++
+++static int
+++memory_read(addr, data, sz, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    int32           mexc;
+++
+++    if ((addr >= RAM_START) && (addr < RAM_END)) {
+++        *data = *((uint32 *) & (ramb[addr & RAM_MASK & ~3]));
+++	*ws = 0;
+++	return (0);
+++    } else if ((addr >= APBPP_START) && (addr <= APBPP_END)) {
+++        *data = grlib_apbpnp_read(addr);
+++        if (sis_verbose > 1)
+++	     printf("APB PP read a: %08x, d: %08x\n",addr, *data);
+++	*ws = 4;
+++	return (0);
+++    } else if ((addr >= APBSTART) && (addr < APBEND)) {
+++	mexc = apb_read(addr, data);
+++	if (mexc) {
+++	    *ws = MEM_EX_WS;
+++	} else {
+++	    *ws = 0;
+++	}
+++	return (mexc);
+++    } else if ((addr >= AHBPP_START) && (addr <= AHBPP_END)) {
+++        if (sis_verbose > 1)
+++	     printf("AHB PP read a: %08x, d: %08x\n",addr, *data);
+++        *data = grlib_ahbpnp_read(addr);
+++	*ws = 4;
+++	return (0);
+++    } else if (addr < ROM_END) {
+++        *data = *((uint32 *) & (romb[addr & ~3]));
+++	*ws = 0;
+++	return (0);
+++    }
+++
+++    printf("Memory exception at %x (illegal address)\n", addr);
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
+++
+++static int
+++memory_read_asi(asi, addr, data, sz, ws)
+++    int32           asi;
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    if (asi == 2) {
+++        if (addr == 0)
+++            *data = cache_ctrl;
+++        else
+++            *data = 0;
+++        return MOK;
+++    } else
+++        return(memory_read(addr, data, sz, ws));
+++}
+++
+++static int
+++memory_write(addr, data, sz, ws)
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    uint32          byte_addr;
+++    uint32          byte_mask;
+++    uint32          waddr;
+++    uint32         *ram;
+++    int32           mexc;
+++    int             i;
+++    int             wphit[2];
+++
+++    if ((addr >= RAM_START) && (addr < RAM_END)) {
+++	waddr = addr & RAM_MASK;
+++	store_bytes (ramb, waddr, data, sz, ws);
+++	return (0);
+++
+++    } else if ((addr >= APBSTART) && (addr < APBEND)) {
+++	if (sz != 2) {
+++	    *ws = MEM_EX_WS;
+++	    return (1);
+++	}
+++	apb_write(addr, *data);
+++	*ws = 0;
+++	return (0);
+++
+++    } else if (addr < ROM_END) {
+++//        return (1);
+++	*ws = 0;
+++	store_bytes (romb, addr, data, sz, ws);
+++        return (0);
+++    }
+++	
+++    *ws = MEM_EX_WS;
+++    return (1);
+++}
+++
+++static int
+++memory_write_asi(asi, addr, data, sz, ws)
+++    int32           asi;
+++    uint32          addr;
+++    uint32         *data;
+++    int32           sz;
+++    int32          *ws;
+++{
+++    if (asi == 2) {
+++        cache_ctrl = *data & 0x81000f;
+++        if (sis_verbose)
+++            printf("cache ctrl reg : 0x%08x\n", cache_ctrl);
+++        return MOK;
+++    } else
+++        return(memory_write(addr, data, sz, ws));
+++}
+++
+++static unsigned char  *
+++get_mem_ptr(addr, size)
+++    uint32          addr;
+++    uint32          size;
+++{
+++    if ((addr + size) < ROM_END) {
+++	return (&romb[addr]);
+++    } else if ((addr >= RAM_START) && ((addr + size) < RAM_END)) {
+++	return (&ramb[addr & RAM_MASK]);
+++    }
+++
+++    return ((char *) -1);
+++}
+++
+++static int
+++sis_memory_write(addr, data, length)
+++    uint32               addr;
+++    const unsigned char *data;
+++    uint32               length;
+++{
+++    char           *mem;
+++
+++    if ((mem = get_mem_ptr(addr, length)) == ((char *) -1))
+++	return (0);
+++
+++    memcpy(mem, data, length);
+++    return (length);
+++}
+++
+++static int
+++sis_memory_read(addr, data, length)
+++    uint32          addr;
+++    char           *data;
+++    uint32          length;
+++{
+++    char           *mem;
+++    int            ws;
+++
+++    if (length == 4) {
+++      memory_read(addr, data, length, &ws);
+++      return(4);
+++    }
+++
+++    if ((mem = get_mem_ptr(addr, length)) == ((char *) -1))
+++	return (0);
+++
+++    memcpy(data, mem, length);
+++    return (length);
+++}
+++
+++static void
+++boot_init ()
+++{
+++//    mec_write(MEC_WCR, 0);	/* zero waitstates */
+++//    mec_write(MEC_TRAPD, 0);	/* turn off watch-dog */
+++    apb_write(GPTIMER_SCALER, sregs.freq-1); /* generate 1 MHz RTC tick */
+++    apb_write(GPTIMER_SCLOAD, sregs.freq-1);
+++    apb_write(GPTIMER_TIMER1, -1);
+++    apb_write(GPTIMER_RELOAD1, -1);
+++    apb_write(GPTIMER_CTRL1, 0x7);
+++//    mec_write(MEC_MEMCFG, (3 << 18) | (4 << 10)); /* 1 MB ROM, 4 MB RAM */
+++    sregs.wim = 2;
+++    sregs.psr = 0xF30010e0;
+++    sregs.r[30] = RAM_END;
+++    sregs.r[14] = sregs.r[30] - 96*4;
+++    cache_ctrl = 0x81000f;
+++}
+++
+++struct memsys leon3 = {
+++    init_sim,
+++    reset,
+++    error_mode,
+++    sim_halt,
+++    exit_sim,
+++    init_stdio,
+++    restore_stdio,
+++    memory_iread,
+++    memory_read,
+++    memory_read_asi,
+++    memory_write,
+++    memory_write_asi,
+++    sis_memory_write,
+++    sis_memory_read,
+++    boot_init
+++};
++diff --git a/sim/erc32/sis.c b/sim/erc32/sis.c
++index 89e6f02..f21ddde 100644
++--- a/sim/erc32/sis.c
+++++ b/sim/erc32/sis.c
++@@ -26,7 +26,6 @@
++ #include <stdlib.h>
++ #endif
++ #include <stdio.h>
++-#include <time.h>
++ #include <sys/fcntl.h>
++ #include "sis.h"
++ #include <dis-asm.h>
++@@ -36,44 +35,12 @@
++ 
++ /* Structures and functions from readline library */
++ 
++-typedef struct {
++-  char *line;
++-  char *data;
++-} HIST_ENTRY;
++-
++-extern char *	readline (char *prompt);
++-extern void	using_history (void);
++-extern void	add_history (char *string);
++-extern HIST_ENTRY *remove_history (int which);
++-
++-
+++#include "readline/readline.h"
+++#include "readline/history.h"
++ 
++ /* Command history buffer length - MUST be binary */
++ #define HIST_LEN	64
++ 
++-extern struct disassemble_info dinfo;
++-extern struct pstate sregs;
++-extern struct estate ebase;
++-
++-extern int      ctrl_c;
++-extern int      nfp;
++-extern int      ift;
++-extern int      wrp;
++-extern int      rom8;
++-extern int      uben;
++-extern int      sis_verbose;
++-extern char    *sis_version;
++-extern struct estate ebase;
++-extern struct evcell evbuf[];
++-extern struct irqcell irqarr[];
++-extern int      irqpend, ext_irl;
++-extern int      termsave;
++-extern int      sparclite;
++-extern int      dumbio;
++-extern char     uart_dev1[];
++-extern char     uart_dev2[];
++-extern uint32   last_load_addr;
++-
++ #ifdef ERA
++ extern int era;
++ #endif
++@@ -84,20 +51,16 @@ run_sim(sregs, icount, dis)
++     uint64          icount;
++     int             dis;
++ {
++-    int             irq, mexc, deb, asi;
+++    int             irq, mexc, deb;
++ 
++-    sregs->starttime = time(NULL);
++-    init_stdio();
+++    sregs->starttime = get_time();
+++    ms->init_stdio();
++     if (sregs->err_mode) icount = 0;
++     deb = dis || sregs->histlen || sregs->bptnum;
++     irq = 0;
++     while (icount > 0) {
++ 
++-	if (sregs->psr & 0x080)
++-	    asi = 9;
++-   	else
++-	    asi = 8;
++-	mexc = memory_read(asi, sregs->pc, &sregs->inst, 2, &sregs->hold);
+++	mexc = ms->memory_iread(sregs->pc, &sregs->inst, &sregs->hold);
++ 	sregs->icnt = 1;
++ 	if (sregs->annul) {
++ 	    sregs->annul = 0;
++@@ -112,7 +75,7 @@ run_sim(sregs, icount, dis)
++ 		} else {
++ 		    if (deb) {
++ 	    		if ((sregs->bphit = check_bpt(sregs)) != 0) {
++-            		    restore_stdio();
+++            		    ms->restore_stdio();
++ 	    		    return (BPT_HIT);
++ 	    		}
++ 		        if (sregs->histlen) {
++@@ -123,7 +86,7 @@ run_sim(sregs, icount, dis)
++ 			        sregs->histind = 0;
++ 		        }
++ 		        if (dis) {
++-			    printf(" %8u ", ebase.simtime);
+++			    printf(" %8llu ", ebase.simtime);
++ 			    dis_mem(sregs->pc, 1, &dinfo);
++ 		        }
++ 		    }
++@@ -135,7 +98,7 @@ run_sim(sregs, icount, dis)
++ 		irq = 0;
++ 		sregs->err_mode = execute_trap(sregs);
++         	if (sregs->err_mode) {
++-	            error_mode(sregs->pc);
+++	            ms->error_mode(sregs->pc);
++ 	            icount = 0;
++ 	        }
++ 	    }
++@@ -146,8 +109,8 @@ run_sim(sregs, icount, dis)
++ 	    if (sregs->tlimit <= ebase.simtime) sregs->tlimit = -1;
++ 	}
++     }
++-    sregs->tottime += time(NULL) - sregs->starttime;
++-    restore_stdio();
+++    sregs->tottime += get_time() - sregs->starttime;
+++    ms->restore_stdio();
++     if (sregs->err_mode)
++ 	return (ERROR);
++     if (ctrl_c) {
++@@ -172,12 +135,13 @@ main(argc, argv)
++     char           *cmdq[HIST_LEN];
++     int             cmdi = 0;
++     int             i;
+++    int             lfile = 0;
++ 
++     cfile = 0;
++     for (i = 0; i < 64; i++)
++ 	cmdq[i] = 0;
++     printf("\n SIS - SPARC instruction simulator %s,  copyright Jiri Gaisler 1995\n", sis_version);
++-    printf(" Bug-reports to jgais at wd.estec.esa.nl\n\n");
+++    printf(" Bug-reports to jiri at gaisler.se\n\n");
++     while (stat < argc) {
++ 	if (argv[stat][0] == '-') {
++ 	    if (strcmp(argv[stat], "-v") == 0) {
++@@ -214,26 +178,53 @@ main(argc, argv)
++ #endif
++             } else if (strcmp(argv[stat], "-dumbio") == 0) {
++ 		dumbio = 1;
+++            } else if (strcmp(argv[stat], "-nouartrx") == 0) {
+++		nouartrx = 1;
+++            } else if (strcmp(argv[stat], "-leon2") == 0) {
+++		ms = &leon2;
+++                if (freq == 14) freq = 50;
+++                cputype = CPU_LEON2;
+++            } else if (strcmp(argv[stat], "-leon3") == 0) {
+++		ms = &leon3;
+++                if (freq == 14) freq = 50;
+++                cputype = CPU_LEON3;
+++            } else if (strcmp(argv[stat], "-v") == 0) {
+++		sis_verbose = 1;
+++            } else if (strcmp(argv[stat], "-vv") == 0) {
+++		sis_verbose = 2;
++ 	    } else {
++ 		printf("unknown option %s\n", argv[stat]);
++ 		usage();
++ 		exit(1);
++ 	    }
++ 	} else {
++-	    last_load_addr = bfd_load(argv[stat]);
+++	    lfile = stat;
++ 	}
++ 	stat++;
++     }
+++
+++    switch (cputype) {
+++    case CPU_LEON2:	
+++	printf(" LEON2 emulation enabled\n");
+++	break;
+++    case CPU_LEON3:	
+++	printf(" LEON3 emulation enabled\n");
+++	break;
+++    default:
+++	printf(" ERC32 emulation enabled\n");
+++    }
+++
++     if (nfp)
++-	printf("FPU disabled\n");
++-#ifdef ERA
++-    if (era)
++-	printf("ERA ECC emulation enabled\n");
++-#endif
+++	printf(" FPU disabled\n");
++     sregs.freq = freq;
+++    printf("\n");
++ 
++     INIT_DISASSEMBLE_INFO(dinfo, stdout, (fprintf_ftype) fprintf);
+++#ifdef HOST_LITTLE_ENDIAN
+++    dinfo.endian = BFD_ENDIAN_LITTLE;
+++#else
++     dinfo.endian = BFD_ENDIAN_BIG;
+++#endif
++ 
++     termsave = fcntl(0, F_GETFL, 0);
++     using_history();
++@@ -241,7 +232,8 @@ main(argc, argv)
++     ebase.simtime = 0;
++     reset_all();
++     init_bpt(&sregs);
++-    init_sim();
+++    ms->init_sim();
+++    if (lfile) last_load_addr = bfd_load(argv[lfile]);
++ #ifdef STAT
++     reset_stat(&sregs);
++ #endif
++@@ -278,7 +270,7 @@ main(argc, argv)
++ 	case CTRL_C:
++ 	    printf("\b\bInterrupt!\n");
++ 	case TIME_OUT:
++-	    printf(" Stopped at time %d (%.3f ms)\n", ebase.simtime, 
+++	    printf(" Stopped at time %llu (%.3f ms)\n", ebase.simtime,
++ 	      ((double) ebase.simtime / (double) sregs.freq) / 1000.0);
++ 	    break;
++ 	case BPT_HIT:
++@@ -288,7 +280,7 @@ main(argc, argv)
++ 	case ERROR:
++ 	    printf("IU in error mode (%d)\n", sregs.trap);
++ 	    stat = 0;
++-	    printf(" %8d ", ebase.simtime);
+++	    printf(" %8llu ", ebase.simtime);
++ 	    dis_mem(sregs.pc, 1, &dinfo);
++ 	    break;
++ 	default:
++diff --git a/sim/erc32/sis.h b/sim/erc32/sis.h
++index f49d45d..637549a 100644
++--- a/sim/erc32/sis.h
+++++ b/sim/erc32/sis.h
++@@ -24,7 +24,11 @@
++ #include "gdb/callback.h"
++ #include "gdb/remote-sim.h"
++ 
++-#include "end.h"
+++#ifdef WORDS_BIGENDIAN
+++#define HOST_BIG_ENDIAN
+++#else
+++#define HOST_LITTLE_ENDIAN
+++#endif
++ 
++ #define I_ACC_EXC 1
++ 
++@@ -60,7 +64,7 @@ typedef long long int64;	   /* 64-bit signed int */
++ struct pstate {
++ 
++     float64         fd[16];	/* FPU registers */
++-#ifdef HOST_LITTLE_ENDIAN_FLOAT
+++#ifdef HOST_LITTLE_ENDIAN
++     float32         fs[32];
++     float32        *fdp;
++ #else
++@@ -110,14 +114,14 @@ struct pstate {
++     float32         freq;	/* Simulated processor frequency */
++ 
++ 
++-    uint64          tottime;
+++    double          tottime;
++     uint64          ninst;
++     uint64          fholdt;
++     uint64          holdt;
++     uint64          icntt;
++     uint64          finst;
++     uint64          simstart;
++-    uint64          starttime;
+++    double          starttime;
++     uint64          tlimit;	/* Simulation time limit */
++     uint64          pwdtime;	/* Cycles in power-down mode */
++     uint64          nstore;	/* Number of load instructions */
++@@ -149,6 +153,30 @@ struct irqcell {
++     int32           arg;
++ };
++ 
+++struct memsys {
+++    void	(*init_sim) ();
+++    void	(*reset) (void);
+++    void	(*error_mode) (uint32 pc);
+++    void	(*sim_halt) (void);
+++    void	(*exit_sim) (void);
+++    void	(*init_stdio) (void);
+++    void	(*restore_stdio) (void);
+++    int	        (*memory_iread) (uint32 addr, uint32 *data, int32 *ws);
+++    int	        (*memory_read) (uint32 addr, uint32 *data,
+++			     int32 sz, int32 *ws);
+++    int	        (*memory_read_asi) (int32 asi, uint32 addr, uint32 *data,
+++			     int32 sz, int32 *ws);
+++    int	        (*memory_write) (uint32 addr, uint32 *data,
+++			      int32 sz, int32 *ws);
+++    int	        (*memory_write_asi) (int32 asi, uint32 addr, uint32 *data,
+++			      int32 sz, int32 *ws);
+++    int	        (*sis_memory_write) (uint32 addr,
+++				  const unsigned char *data, uint32 length);
+++    int	        (*sis_memory_read) (uint32 addr, char *data,
+++				 uint32 length);
+++    void	(*boot_init) (void);
+++};
+++
++ 
++ #define OK 0
++ #define TIME_OUT 1
++@@ -156,26 +184,37 @@ struct irqcell {
++ #define ERROR 3
++ #define CTRL_C 4
++ 
+++#define CPU_LEON2  2
+++#define CPU_LEON3  3
+++
++ /* Prototypes  */
++ 
++ /* erc32.c */
++-extern void	init_sim (void);
++-extern void	reset (void);
++-extern void	error_mode (uint32 pc);
++-extern void	sim_halt (void);
++-extern void	exit_sim (void);
++-extern void	init_stdio (void);
++-extern void	restore_stdio (void);
++-extern int	memory_read (int32 asi, uint32 addr, uint32 *data,
++-			     int32 sz, int32 *ws);
++-extern int	memory_write (int32 asi, uint32 addr, uint32 *data,
++-			      int32 sz, int32 *ws);
++-extern int	sis_memory_write (uint32 addr,
++-				  const unsigned char *data, uint32 length);
++-extern int	sis_memory_read (uint32 addr, char *data,
++-				 uint32 length);
+++extern struct memsys erc32sys;
++ 
++ /* func.c */
+++extern struct   pstate  sregs;
+++extern struct   estate ebase;
+++extern struct   evcell evbuf[];
+++extern struct   irqcell irqarr[];
+++extern int      nfp;
+++extern int      ift;
+++extern int      ctrl_c;
+++extern int      sis_verbose;
+++extern char    *sis_version;
+++extern int      sparclite;
+++extern int      sparclite_board;
+++extern uint32   last_load_addr;
+++extern int      wrp;
+++extern int      rom8;
+++extern int      uben;
+++extern int      irqpend;
+++extern int      ext_irl;
+++extern int      termsave;
+++extern int      dumbio;
+++extern char     uart_dev1[];
+++extern char     uart_dev2[];
+++
++ extern void	set_regi (struct pstate *sregs, int32 reg,
++ 			  uint32 rval);
++ extern void	get_regi (struct pstate *sregs, int32 reg, char *buf);
++@@ -186,6 +225,7 @@ extern void	init_bpt (struct pstate  *sregs);
++ extern void	init_signals (void);
++ 
++ struct disassemble_info;
+++extern struct   disassemble_info dinfo;
++ extern void	dis_mem (uint32 addr, uint32 len,
++ 			 struct disassemble_info *info);
++ extern void	event (void (*cfunc) (), int32 arg, uint64 delta);
++@@ -197,7 +237,12 @@ extern int	check_bpt (struct pstate *sregs);
++ extern void	reset_all (void);
++ extern void	sys_reset (void);
++ extern void	sys_halt (void);
++-extern int	bfd_load (char *fname);
+++extern double	get_time (void);
+++extern int	nouartrx;
+++extern          host_callback *sim_callback;
+++extern int	current_target_byte_order;
+++extern int      dumbio;
+++extern int      cputype;
++ 
++ /* exec.c */
++ extern int	dispatch_instruction (struct pstate *sregs);
++@@ -217,3 +262,11 @@ extern void	set_fsr (uint32 fsr);
++ /* help.c */
++ extern void	usage (void);
++ extern void	gen_help (void);
+++
+++extern struct memsys *ms;
+++
+++/* leon2.c */
+++extern struct memsys leon2;
+++
+++/* leon3.c */
+++extern struct memsys leon3;
++diff --git a/sim/erc32/startsim b/sim/erc32/startsim
++deleted file mode 100644
++index 1b9b41c..0000000
++--- a/sim/erc32/startsim
+++++ /dev/null
++@@ -1,4 +0,0 @@
++-#
++-xterm -e sis $* &
++-xterm -e tip /dev/ttypc &
++-
+-- 
+1.9.1
+




More information about the vc mailing list