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

	* psim.c (psim_options): Fix length of comparison when checking
	for --sysroot= option.

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

	* psim.c (psim_options): Add option that cause the error
	in invalid-option error messages. Print the usage when
	detecting an invalid long-name option.

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

	* psim.c (psim_options): Accept and ignore `--sysroot=...'.

2011-06-03  Joel Brobecker  <brobecker@adacore.com>  (obvious fix)

	From Stephen Kitt  <steve@sk2.org>
	* vm.c (vm_synchronize_context): Spelling fix in function
	documentation.

2011-04-16  Mike Frysinger  <vapier@gentoo.org>

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

2011-02-14  Mike Frysinger  <vapier@gentoo.org>

	* cap.c (cap_remove): Change zfree to free.
	* corefile.c (core_init): Likewise.
	* device.c (detach_device_interrupt_edge): Likewise.
	(clean_device_interrupt_edges): Likewise.
	(device_instance_delete): Likewise.
	(device_set_property): Likewise.
	(clean_device_properties): Likewise.
	(device_add_range_array_property): Likewise.
	(device_add_reg_array_property): Likewise.
	* emul_bugapi.c (emul_bugapi_do_read): Likewise.
	(emul_bugapi_do_write)
	* emul_netbsd.c (write_direntries): Likewise.
	(do_read): Likewise.
	(do_write): Likewise.
	(do_getdirentries): Likewise.
	* emul_unix.c (do_unix_read): Likewise.
	(do_unix_write): Likewise.
	* events.c (event_queue_init): Likewise.
	(event_queue_deschedule): Likewise.
	(event_queue_process): Likewise.
	* hw_disk.c (open_disk_image): Likewise.
	(hw_disk_instance_delete): Likewise.
	* hw_eeprom.c (hw_eeprom_instance_delete): Likewise.
	* hw_htab.c (htab_dma_binary): Likewise.
	* hw_init.c (update_for_binary_section): Likewise.
	* hw_memory.c (hw_memory_set_available): Likewise.
	(hw_memory_init_address): Likewise.
	(hw_memory_instance_release): Likewise.
	* pk_disklabel.c (disklabel_delete): Likewise.
	* table.c (table_push): Likewise.
	* tree.c (parse_reg_property): Likewise.
	(parse_ranges_property): Likewise.
	(parse_string_property): Likewise.
	* main.c (zfree): Delete.
	* sim_calls.c (zfree): Likewise.
	* sim_callbacks.h (zfree): Likewise.

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

	* gdb-sim.c (sim_store_register): Update return value to
	match new API.

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

	* psim.texinfo: Copyright year update.

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

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

2010-02-14  Andreas Schwab  <schwab@linux-m68k.org>

	* ppc-instructions: Fix missing assignment in last change.

2010-02-05  Andreas Schwab  <schwab@linux-m68k.org>

	* ppc-instructions: Fix aliasing bugs when calling
	invalid_arithemetic_operation.

2009-11-13  Nathan Froyd  <froydnj@codesourcery.com>

	* configure.ac: If build != host, create a separate build-config.h
	file desecribing the build machine.
	* configure: Regenerate.
	* lf.c: Include build-config.h instead of config.h.
	* dgen.c: Likewise.
	* igen.c: Likewise.
	* misc.c: Likewise.
	* misc.h: Likewise.
	* filter.c: Likewise.
	* table.c: Likewise.

2009-10-15  Joel Sherrill <joel.sherrill@oarcorp.com>

	* std-config.h: Fix spelling error.

2009-09-22  Joel Sherrill  <joel.sherrill@oarcorp.com>

	* main.c: Fix spelling error.

2009-09-15  Andreas Tobler <andreast-list@fgznet.ch>
	    Doug Evans  <dje@google.com>

	* configure.ac (sim_hwflags): Use AC_DEFINE to define HAVE_UNION_SEMUN.
	* configure: Regenerate.
	* config.in: Regenerate.
	* hw_sem.c: (HAVE_UNION_SEMUN): Renamed from HAS_UNION_SEMUN.

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

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

	* configure: Regenerate.

2009-07-30  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* Makefile.in (datarootdir): New variable.

2009-01-12  Nathan Froyd  <froydnj@codesourcery.com>

	* ppc-instructions (sync): Add L field.

2008-12-15 Joel Sherrill <joel.sherrill@oarcorp.com>

	* ppc-instructions, ppc-spr-table: Add ability
	to read tbrl and tbru special registers.

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

	* configure: Regenerated.
	* configure.ac: Add test for System V shared memory and semaphore.
	* debug.c, debug.h: Add trace support for new devices.
	* hw_sem.c, hw_shm.c: New files.
	* Makefile.in: Add hw_sem.c and hw_shm.c.

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

	* configure.ac: Add test for libz and zlib.h.
	* Makefile.in (LIBS): Set from @LIBS@.
	* configure: Regenerate.
	* config.in: Ditto.

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

	* configure.ac: Use ACX_PKGVERSION and ACX_BUGURL.
	* configure, config.in: Regenerated.
	* Makefile.in (LIB_OBJ): Add version.o.
	(version.c, version.o): New rules.
	* psim.c (psim_usage): Add help parameter.  Print the bug URL.
	Exit with code 0 for help.
	(psim_options): Update calls to psim_usage.  Handle --help and
	--version.
	* psim.h (psim_usage): Update prototype.
	* main.c (main): Update psim_usage call.

2008-03-14  Nick Hudson  <nick.hudson@dsl.pipex.com

        * configure.ac: Pass ../../intl to ZW_GNU_GETTEXT_SISTER_DIR.
        * configure: Regenerate.

2007-10-15  Daniel Jacobowitz  <dan@codesourcery.com>

	* gdb-sim.c (regnum2spr): Rename to...
	(sim_spr_register_name): ... this.  Make global.

2007-09-04  Jerome Guitton  <guitton@adacore.com>

	* sim/ppc/emul_bugapi.c (emul_bugapi_create): quote the file
	name property before parsing it.

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

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

2006-11-22  Tom Marn <tom.marn@telargo.com>

	Committed by Andrew Cagney.
	* ppc-instructions: Implement optional PowerPC stfiwx instruction.
	
2006-07-12  Fred Fish  <fnf@specifix.com>

	* sim-endian.h (asm/byteorder.h): Don't include private kernel
	header.

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

	* configure: Regenerated.

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

	* Makefile.in: Replace INTLLIBS and INTLDEPS with LIBINTL
	and LIBINTL_DEP everywhere.
	(INTL_DIR, INTL_SRC): Remove.
	(INTL_CFLAGS): Use INCINTL.
	* configure.ac: Use ZW_GNU_GETTEXT_SISTER_DIR.
	* configure: Regenerated.

2006-05-05  Andreas Schwab  <schwab@suse.de>

	* configure.ac (CFLAGS_FOR_BUILD): Set and substitute.
	* configure: Regenerate.

	* Makefile.in (CFLAGS_FOR_BUILD): Define.
	(BUILD_CFLAGS): Use it instead of hardcoding "-g -O".
	(gentmap): Fix typo BUILD_FLAGS -> BUILD_CFLAGS.

2006-04-23  Andreas Schwab  <schwab@suse.de>

	* Makefile.in (tmp-ld-decode): Fix dependencies.
	(tmp-ld-cache): Likewise.
	(tmp-ld-insn): Likewise.

2006-02-01  Mark Mitchell  <mark@codesourcery.com>

	* emul_netbsd.c (emul_netbsd_create): Quote file-name property.
	* emul_unix.c (emul_unix_create): Likewise.
	* tree.c (libiberty.h): Include it.
	(tree_quote_property): New function.
	* tree.h (tree_quote_property): Declare.

2006-01-25  Mark Mitchell  <mark@codesourcery.com>

	* words.h (natural32): Define as "int".

2006-01-23  Mark Mitchell  <mark@codesourcery.com>

	* words.h (signed32): Define as "int".
	(unsigned32): Define as "unsigned int".

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

	* configure.ac (USE_WIN32API): Define it.
	* configure.in: Regenerate.
	* config.in: Likewise.
	* emul_netbsd.c (write_timezone): Guard with HAVE_GETTIMEOFDAY.
	* emul_unix.c (do_unix_mkdir): Handle Win32 1-argument mkdir.

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

	* psim.c: Include gdb/signals.h.
	
	* sim_calls.c (gdb/signals.h): Include it.
	(sim_stop_reason): Use TARGET_SIGNAL_*.
	* psim.c (cntrl_c_simulation): Use TARGET_SIGNAL_*.

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

	* hw_htab.c (bfd_get_section_lma): Remove macro; use BFD's.

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

	* hw_init.c: Comment out tokens after #endif directive.
	* hw_register.c: Likewise.
	* hw_trace.c: Likewise.
	* hw_vm.c: Likewise.

2005-04-20  Manoj Iyer  <manjo@austin.ibm.com>

	* psim.c: Added libiberty.h header file.

2005-04-18  Manoj Iyer  <manjo@austin.ibm.com>

	* configure.ac: Added check for long long.
	* config.in: Regenerated.
	* configure: Regenerated.
	* words.h: Modified logic to check for HAVE_LONG_LONG instead of
	__GNUC__, added config.h header file.

2005-03-25  Anthony Green  <green@redhat.com>

	* tree.c (parse_reg_property): Fix memset usage.

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

	* configure: Regenerate.

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

	* configure.ac: Delete AC_CONFIG_AUX_DIR.
	* configure: Re-generate.

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

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

2005-01-03  Andreas Schwab  <schwab@suse.de>

	* Makefile.in (hw_com.o, hw_eeprom.o): Depend on
	$(DEVICE_TABLE_H).

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

	* Makefile.in (defines.h): Depend on tmp-defines.
	(hw.c hw.h): Depend on tmp-hw.
	(pk.h): Depend on tmp-pk.

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

	* sim_calls.c: Include "libiberty.h".

2004-09-24  Ian Lance Taylor <ian@wasabisystems.com>

	Committed by Andrew Cagney.
	* configure.in: Check for sys/mount.h, sys/vfs.h, sys/statfs.h.
	Check for struct statfs.
	* emul_netbsd.c: If not HAVE_STRUCT_STATFS, #undef HAVE_FSTATFS.
	* configure, config.in: Regenerate.

2004-08-05  Nathanael Nerode  <neroden@gcc.gnu.org>

	* Makefile.in (GDB_INCLUDES): Remove bogus reference to mmalloc.

2004-08-04  Andrew Cagney  <cagney@gnu.org>
	    Jim Blandy <jimb@redhat.com>

	* sim_callbacks.h (simulator): Declare.
	* Makefile.in (gdb-sim.o): New rule.
	(MAIN_SRC, GDB_OBJ): Add gdb-sim.o, gdb-sim.c.
	(DEFS_H): Delete.
	(GDB_SIM_PPC_H): Define.
	* gdb-sim.c: New file.
	* sim_calls.c: Do not include "defs.h".
	(simulator): Drop static.
	(sim_store_register, sim_fetch_register): Delete.

2004-08-04  Andrew Cagney  <cagney@gnu.org>

	* Back out accidently committed change.

2004-08-04  Jim Blandy  <jimb@redhat.com>

	Use a fixed register numbering when communicating with the PowerPC
	simulator.
	* sim_calls.c: #include "registers.h" and "gdb/sim-ppc.h"; do not
	include GDB's "defs.h".
	(gdb_register_name_table): New variable.
	(gdb_register_name_table_size): New enum constant.
	(gdb_register_name): New function.
	(sim_fetch_register, sim_store_register): Use gdb_register_name,
	instead of calling gdbarch_register_name.
	* Makefile.in (GDB_SIM_PPC_H): New variable.
	(DEFS_H): Delete variable.
	(sim_calls.o): Update dependencies.

2004-07-26  Andrew Cagney  <cagney@gnu.org>

	Problem from Olaf Hering <olh@suse.de>.
	* Makefile.in (install, installdirs): Add DESTDIR.

2004-07-10  Ben Elliston  <bje@au.ibm.com>

	* tree.c (parse_integer_property): Comment typo fix.

2004-07-06  Jim Blandy  <jimb@redhat.com>

	* Makefile.in: Update all dependency information.
	(BASICS_H, CPU_H, IDECODE_H, PSIM_H, REGISTERS_H, DEVICE_TABLE_H)
	(EMUL_GENERIC_H): Values updated.
	(ACCONFIG_H, ALTIVEC_EXPRESSION_H, ALTIVEC_REGISTERS_H)
	(ANSIDECL_H, BFD_H, BITS_H, CAP_H, COMMON_SIM_BASE_H)
	(COMMON_SIM_BASICS_H, COMMON_SIM_FPU_H, COMMON_SIM_INLINE_H)
	(COMMON_SIM_SIGNAL_H, CONFIG_H, COREFILE_H, COREFILE_N_H, DEBUG_H)
	(DEFINES_H, DEFS_H, DEVICE_H, E500_EXPRESSION_H, E500_REGISTERS_H)
	(EMUL_BUGAPI_H, EMUL_CHIRP_H, EMUL_NETBSD_H, EMUL_UNIX_H, EVENTS_H)
	(FILTER_FILENAME_H, FILTER_H, GDB_CALLBACK_H, GDB_REMOTE_SIM_H)
	(GEN_ICACHE_H, GEN_IDECODE_H, GEN_ITABLE_H, GEN_MODEL_H)
	(GEN_SEMANTICS_H, GEN_SUPPORT_H, HW_CPU_H, HW_H, HW_PHB_H)
	(ICACHE_H, IDECODE_BRANCH_H, IDECODE_EXPRESSION_H)
	(IDECODE_FIELDS_H, IGEN_H, INLINE_H, INTERRUPTS_H, ITABLE_H)
	(LD_CACHE_H, LD_DECODE_H, LD_INSN_H, LF_H, MISC_H, MODEL_H, MON_H)
	(OPTIONS_H, OS_EMUL_H, PK_H, PPC_CONFIG_H, SEMANTICS_H)
	(SIM_CALLBACKS_H, SIM_ENDIAN_H, SIM_ENDIAN_N_H, SIM_MAIN_H)
	(SPREG_H, STD_CONFIG_H, SUPPORT_H, TABLE_H, TARG_VALS_H, TCONFIG_H)
	(TREE_H, VM_H, VM_N_H, WORDS_H): New variables.
	(callback.o, cap.o, corefile.o, debug.o, device.o, device_table.o)
	(dgen.o, emul_bugapi.o, emul_chirp.o, emul_netbsd.o, emul_unix.o)
	(events.o, filter.o, filter_filename.o, filter_host.o)
	(gen-icache.o, gen-idecode.o, gen-itable.o, gen-model.o)
	(gen-semantics.o, gen-support.o, hw_core.o, hw_cpu.o, hw_disk.o)
	(hw_htab.o, hw_init.o, hw_phb.o, hw_register.o, icache.o)
	(idecode.o, igen.o, interrupts.o, itable.o, ld-cache.o)
	(ld-decode.o, ld-insn.o, lf.o, main.o, misc.o, model.o, mon.o)
	(options.o, os_emul.o, pk_disklabel.o, psim.o, registers.o)
	(semantics.o, sim-endian.o, sim-fpu.o, sim_calls.o, spreg.o)
	(support.o, table.o, targ-map.o, tree.o, vm.o): Update dependencies.

2004-06-28  Jim Blandy  <jimb@redhat.com>

	* e500_registers.h (EVR): Cast the 32-bit value of the GPR to an
	unsigned type before or-ing it with a 64-bit value.

2004-06-15  Alan Modra  <amodra@bigpond.net.au>

	* hw_htab.c (htab_sum_binary(bfd): Use bfd_get_section_size
	instead of bfd_get_section_size_before_reloc.
	(htab_dma_binary(bfd): Likewise.
	* hw_init.c (update_for_binary_section(bfd): Likewise.

2004-05-10  Daniel Jacobowitz  <dan@debian.org>

	* configure.in (sim_fpu_cflags): Add -I../common.
	* configure: Regenerated.

2004-01-27  Andrew Cagney  <cagney@redhat.com>

	* ppc-instructions: Update copyright.
	(convert_to_integer): Add trailing ";" to label.

2003-10-16  Michael Snyder  <msnyder@redhat.com>

	* emul_netbsd.c: Only a comment may follow an #endif.

2003-10-15  Michael Snyder  <msnyder@redhat.com>

	* Makefile.in (sim_calls.o): No longer depends on gdb/tm.h.

2003-06-22  Andrew Cagney  <cagney@redhat.com>

	Written by matthew green <mrg@redhat.com>, with fixes from Aldy
	Hernandez <aldyh@redhat.com>, Jim Wilson <wilson@redhat.com>, and
	Nick Clifton <nickc@redhat.com>.
	
	* ppc-instructions: Include altivec.igen and e500.igen.
	(model_busy, model_data): Add vr_busy and vscr_busy.
	(model_trace_release): Trace vr_busy and vscr_busy.
	(model_new_cycle): Update vr_busy and vscr_busy.
	(model_make_busy): Update vr_busy and vscr_busy.
	* registers.c (register_description): Add Altivec and e500
	registers.
	* psim.c (psim_read_register, psim_read_register): Handle Altivec
	and e500 registers.
	* ppc-spr-table (SPEFSCR): Add VRSAVE and SPEFSCR registers.
	* configure.in (sim_filter): When *altivec* add "av".  When *spe*
	or *simd* add e500.
	(sim_float): When *altivec* define WITH_ALTIVEC.  When *spe* add
	WITH_E500.
	* configure: Re-generate.
	* e500.igen, altivec.igen: New files.
	* e500_expression.h, altivec_expression.h: New files.
	* idecode_expression.h: Update copyright.  Include
	"e500_expression.h" and "altivec_expression.h".
	* e500_registers.h, altivec_registers.h: New files.
	* registers.h: Update copyright.  Include "e500_registers.h" and
	"altivec_registers.h".
	(registers): Add Altivec and e500 specific registers.
	* Makefile.in (IDECODE_H): Add "idecode_e500.h" and
	"idecode_altivec.h".
	(REGISTERS_H): Add "e500_registers.h" and "altivec_registers.h".
	(tmp-igen): Add dependencies on altivec.igen and e500.igen .

2003-06-22  Andrew Cagney  <cagney@redhat.com>

	Problems reported by Joshua LeVasseur.
	* emul_chirp.c: Update copyright.
	(chirp_emul_nextprop): Return the first property.
	* hw_htab.c: Update copyright.
	(htab_decode_hash_table): Fix check for htab size.

2003-06-21  Andrew Cagney  <cagney@redhat.com>

	* interrupts.c: Update copyright.
	(external_interrupt): Fix test for already pending interrupt.
	Problem found by Joshua LeVasseur.

	* ppc-instructions: Add missing +8 line.  Found by blofeldus at
	yahoo.com.
	
2003-06-21  Andrew Cagney  <cagney@redhat.com>

	From Ian Lance Taylor <ian@airs.com>: * hw_nvram.c
	(hw_nvram_init_address): Correct call to memset--swap second and
	third arguments.

2003-06-21  Andrew Cagney  <cagney@redhat.com>

	* hw_com.c (hw_com_device_init_data): Check that the output, and
	not input file opened.  Pointed out by masahino tky3.3web.ne.jp.

2003-06-20  Andrew Cagney  <cagney@redhat.com>

	* sim_calls.c (sim_create_inferior): Assert that
	psim_write_register succeeded.
	(sim_fetch_register, sim_store_register): Make "regname" constant.
	Delete Altivec hack.  Return result from psim_read_register /
	psim_write_register.
	* psim.h (psim_read_register, psim_write_register): Change return
	type to int.  Update comments.
	* psim.c: Update copyright.
	(psim_stack): Assert that the psim_read_register worked.
	(psim_read_register, psim_read_register): Return the register's
	size.  Allocate the cooked buffer dynamically.
	* hw_register.c: Update copyright.
	(do_register_init): Check that psim_write_register succeeded.
	* hw_init.c: Update copyright.
	(create_ppc_elf_stack_frame, create_ppc_aix_stack_frame): Assert
	that the register transfer worked.

2003-06-19  Andrew Cagney  <cagney@redhat.com>

	* ld-insn.h: Update copyright.
	(cache_fields): Define.
	(insn_table_fields): Add insn_field_6 and insn_field_7.
	(load_insn_table): Pass in the "cache_rules".
	* ld-insn.c: Update copyright.
	(load_insn_table): Add parameter "cache_rules".  Handle "cache",
	"computed" and "scratch" fields.
	(main): Pass "cache_rules" to load_insn_table.
	* ld-cache.h: Update copyright.
	(append_cache_table): Declare.
	* ld-cache.c: Update copyright.
	(append_cache_table): New function.
	(load_cache_table): Call.
	* gen-model.c: Include "ld-cache.h".
	* gen-itable.c: Include "ld-cache.h".
	* igen.c: Move #include "ld-cache.h" to earlier.  Update
	copyright.
	(main): Permit a NULL "cache_rules".  Pass address of
	"cache_rules" to load_insn_table.
	* Makefile.in (tmp-ld-insn): Add "ld-cache.o".
	(tmp-igen): Do not include ppc-cache-rules.
	(gen-itable.o, gen-model.o): Add "ld-cache.h".
	* ppc-cache-rules: Delete file.
	* ppc-instructions: Add cache rules.

2003-06-19  Andrew Cagney  <cagney@redhat.com>

	* Makefile.in (ICACHE_CFLAGS, SEMANTICS_CFLAGS): Delete.
	(SIM_FPU_FLAGS): Define.
	(icache.o): Delete explicit compile command.
	(semantics.o, idecode.o): Delete explicit compile command.
	(NOWARN_CFLAGS, STD_CFLAGS): Append SIM_FPU_CFLAGS.
	* gen-support.c (gen_support_c): Generate #include of
	"sim-inline.h" and "sim-fpu.h", but conditional on
	HAVE_COMMON_FPU.
	* gen-idecode.c (gen_idecode_c): Ditto.
	* igen.c (gen_icache_c, gen_semantics_c): Wrap #include of
	"sim-inline.h" and "sim-fpu.h" in HAVE_COMMON_FPU conditional.
	Move to before "support.h".
	* Makefile.in, gen-support.c, gen-idecode.c, igen.c: Update
	copyright.
	
2003-05-16  Ian Lance Taylor  <ian@airs.com>

	* Makefile.in (various): Use $(SHELL) whenever we invoke
	move-if-change.

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

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

2002-09-27  Andrew Cagney  <ac131313@redhat.com>

	* hw_disk.c (hw_disk_init_address): Set device type to "block",
	not "disk".

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

	* Makefile.in (INTL_SRC): Define.
	(INTL_CFLAGS): Define.
	(INTL_DIR): Define.
	(STD_CFLAGS): Add INTL_CFLAGS.

2002-06-17  Elena Zannoni  <ezannoni@redhat.com>

	* psim.c (psim_options): Don't choke when gdb invokes us with
	the --architecture option, just ignore it.

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

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

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

	* main.c: Include "gdb/callback.h" and "gdb/remote-sim.h".
	* sim_calls.c: Ditto.

2002-05-30  DJ Delorie  <dj@redhat.com>

	* lf.c (lf_print__gnu_copyleft): Convert multiline strings to
	compatible format.
	* gen-idecode.c (print_run_until_stop_body): Likewise.
	* gen-model.c (gen_model_c): Likewise.

2002-04-15  Elena Zannoni  <ezannoni@redhat.com>

        * sim_calls.c (sim_fetch_register, sim_store_register): Return -1 for
        AltiVec registers as a temporary stopgap.

2002-03-24  David O'Brien  <obrien@FreeBSD.org>

	* ppc/hw_disk.c: Export a disk device property.

2002-03-23  Andrew Cagney  <ac131313@redhat.com>

	From 2001-12-09 Julien Ducourthial <jducourt@noos.fr>:
	* ppc-instructions (lswx): Do the register control with the
	register count.  Initialize the right register in the loop.
	(mtfsfi) : Correct prefix for the instruction.

2002-02-24  Andrew Cagney  <ac131313@redhat.com>

	From wiz at danbala:
	* std-config.h: Fix grammar and typos.  Update copyright.
	Fix PR gdb/287.

2002-01-12  matthew green  <mrg@redhat.com>

	* Makefile.in (tmp-igen): Pass -I $(srcdir) to igen.
	* igen.c (main): Change -I to add include paths for :include:
	files.
	Implement -G as per sim/igen, with just gen-icache=N support.
	Call load_insn_table() with the built include path.

	* ld-insn.c (parse_include_entry): New. Load an :include: file.
	(load_insn_table): New `includes' argument.  Look for :include:
	entries and call parse_include_entry() for them.
	(main): Adjust load_insn_table() call.
	* ld-insn.h (model_include_fields): New enum.
	(load_insn_table): Update prototype.
	* table.c (struct _open_table, struct _table): Rework
	structures to handle included files.
	(table_push): Move the guts of table_open() here.

	* table.c (struct _open table, struct table): Make table object an
	indirect ptr to the current table file.
	(current_line, new_table_entry, next_line): Make file arg type
	open_table.
	(table_open): Use table_push.
	(table_entry_read): Point variable file at current table, at eof, pop
	last open table.

	* misc.h (NZALLOC): New macro. From sim/igen.

	* table.h, table.c (table_push): New function.

2002-01-04  matthew green  <mrg@redhat.com>

	* bits.c (LSMASKED64): New inline function.
	(LSEXTRACTED64): Likewise.
	* bits.h (_LSB_POS, _LSMASKn, LSMASK64): New macros from
	sim/common/sim-bits.h
	(LSMASKED64, LSEXTRACTED64): New functions definitions.
	* Makefile.in (sim-bits.o): Remove target.

	* main.c (zalloc): Fix typo in error message.

2001-12-16  Andrew Cagney  <ac131313@redhat.com>

	* configure.in (sim_fpu): Don't add sim-bits.o.
	* configure: Re-generate.

2001-12-15  matthew green  <mrg@redhat.com>

	* main.c: Include "defs.h", "bfd.h", "callback.h" and "remote-sim.h".
	(sim_io_error): New function.
	* sim_calls.c: (sim_io_error): New function.

2001-12-14  matthew green  <mrg@redhat.com>

	* Makefile.in (LIB_OBJ): Add @sim_fpu@.
	(ICACHE_CFLAGS, SEMANTICS_CFLAGS): New variables.
	(icache.o, semantics.o): Add new ICACHE_FLAGS & SEMANTICS_FLAGS.
	(sim-fpu.o, sim-bits.o, tconfig.h): New targets.
	* configure.in: Rename INLINE_LOCALS to PSIM_INLINE_LOCALS.  Add a
	check for sim/common/sim-fpu.c.  Output sim_fpu and sim_fpu_cflags.
	* configure: Regenerate.
	* device.h (device_find_integer_array_property): Match function definition.
	* gen-icache.c (print_icache_internal_function_declaration): Rename
	INLINE_ICACHE to PSIM_INLINE_ICACHE.
	* gen-idecode.c (print_idecode_run_function_header): Rename INLINE_IDECODE
	to PSIM_INLINE_IDECODE.
	* gen-semantics.c (print_semantic_function_header): Rename
	EXTERN_SEMANTICS to PSIM_EXTERN_SEMANTICS.
	* gen-support.c (print_support_function_name): Rename INLINE_SUPPORT to
	PSIM_INLINE_SUPPORT.
	* igen.c (print_function_name): Also escape `(' and `)'.
	(gen_semantics_h): Rename EXTERN_SEMANTICS to PSIM_EXTERN_SEMANTICS.
	(gen_semantics_c): Likewise.  Also output includes for "sim-fpu.h"
	* inline.h (INLINE_SIM_ENDIAN): Renamed INLINE_PSIM_ENDIAN.
	(EXTERN_SIM_ENDIAN): Renamed EXTERN_PSIM_ENDIAN.
	(STATIC_INLINE_SIM_ENDIAN): Renamed STATIC_INLINE_PSIM_ENDIAN.
	(INLINE_LOCALS): Renamed PSIM_INLINE_LOCALS.
	(EXTERN_SUPPORT): Renamed PSIM_EXTERN_SUPPORT.
	(INLINE_SUPPORT): Renamed PSIM_INLINE_SUPPORT.
	(EXTERN_SEMANTICS): Renamed PSIM_EXTERN_SEMANTICS.
	(INLINE_SEMANTICS): Renamed PSIM_INLINE_SEMANTICS.
	(EXTERN_IDECODE): Renamed PSIM_EXTERN_IDECODE.
	(INLINE_IDECODE): Renamed PSIM_INLINE_IDECODE.
	(EXTERN_ICACHE): Renamed PSIM_EXTERN_ICACHE.
	(INLINE_ICACHE): Renamed PSIM_INLINE_ICACHE.
	* options.c (options_inline): Fix names.
	* sim-endian-n.h: Change INLINE_SIM_ENDIAN to INLINE_PSIM_ENDIAN.
	* sim-endian.h: Likewise.
	* sim-main.h: New file.
	* std-config.h: Rename INLINE_LOCALS to PSIM_INLINE_LOCALS.

2001-12-01  Andrew Cagney  <ac131313@redhat.com>

	From Mark Peek.
	* ppc-spr-table: Add SDA and PIR.

2001-10-29  Andrew Cagney  <ac131313@redhat.com>

	* tree.c (parse_size): Assert #size-cells > 0.
	(parse_address): Ditto for #address-cells.
	(parse_reg_property): Only parse the size when #size-cells is
	non-zero.

2001-10-25  Andrew Cagney  <ac131313@redhat.com>

	* emul_generic.c (OEA_MEMORY_SIZE): Increase to 4mb.
	* hw_htab.c (htab_map_binary): Don't try to map the text section
	when it is empty.
	* emul_chirp.c (map_over_chirp_note): Default load-base to -1 not
	CHIRP_LOAD_BASE.
	(emul_chirp_create): Map in the interrupt table.

2001-07-16  Daniel Jacobowitz  <drow@mvista.com>

	* Makefile.in: Add dependencies on $(CPU_H).

Wed Mar  7 10:45:12 HST 2001  Glen Nakamura  <gen@lava.net>

	* hw_init.c (dma_file): Fixed problem with loading last 1KB of
	file.
	
2001-03-04  Andrew Cagney  <ac131313@redhat.com>

	* emul_netbsd.c [WITH_NetBSD_HOST]: Include <sys/mount.h> and
	<errno.h>.
	(do_stat): Only do SYS test when SYS_stat defined.
	(do_sigprocmask): Ditto for SYS_sigprocmask.
	(do_fstat): Ditto for SYS_fstat.
	(do_getdirentries): Ditto for SYS_getdirentries.
	(do_lstat): Ditto for SYS_lstat.

2001-01-15  Geoffrey Keating  <geoffk@redhat.com>

	* emul_netbsd.c (do_open): Translate the flag parameter to the
	open syscall to the numbers supported by the host.

2000-12-12  Geoffrey Keating  <geoffk@redhat.com>

	* sim-endian.h: Don't have parameters on macro definitions which
	are simply renaming functions, to permit use of XCONCAT2 in both
	the macro name and the arguments in a use of such a definition.

2000-11-15  Jim Blandy  <jimb@redhat.com>

	* sim_calls.c: Doc fix.
	(sim_fetch_register, sim_store_register): Call
	gdbarch_register_name directly, instead of going through
	REGISTER_NAME macro.

2000-10-24  Geoff Keating  <geoffk@cygnus.com>

	* ppc-instructions (lfsux): Correct XO field of lfsux instruction.

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

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

Fri Apr 28 15:59:27 2000  Andrew Cagney  <cagney@b1.cygnus.com>

	* events.c (event_queue_process): Call update_time_from_event
 	every time an event is removed from the queue.
	(update_time_from_event): Delete assertion that a negative
 	time_from_event implies an empty event queue.

Fri Apr 28 15:53:54 2000  Andrew Cagney  <cagney@b1.cygnus.com>

	* interrupts.c (deliver_hardware_interrupt): Print time trace in
 	decimal.
	* events.c (event_queue_process): Cleanup trace message.
	(update_time_from_event): Trace full event queue.

2000-03-25  Geoff Keating  <geoffk@cygnus.com>

	* ppc-instructions (Disabled_Exponent_Underflow): Increment
	the exponent when denormalizing.

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

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

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

        * configure.in: Use AC_EXEEXT instead of AM_EXEEXT.
	* configure: Regenerated to track ../common/aclocal.m4 changes.
	
1999-04-02  Keith Seitz  <keiths@cygnus.com>

	* sim_calls.c (POLL_QUIT_INTERVAL): Define. Used to tweak
	the frequency at which the poll_quit callback is called.
	(poll_quit_count): New global.
	(sim_io_poll_quit): Only call the poll_quit callback
	after the specified POLL_QUIT_INTERVAL.

1999-02-22  Jim Lemke  <jlemke@cygnus.com>

	* dc-complex: Force expansion on all bits of field BO.
	Previously, the least-significant (prediction) bit was ignored.
	* ppc-instructions (conditional branches): Implement mpc860c0 option.
	* igen.c (gen_semantics_[ch]): Setup for mpc860c0 option.
	* psim.c (is_num, psim_options): Added parsing for mpc860c0 option.
	* interrupts.h: Added "mpc860c0_instruction_program_interrupt".
	* interrupts.c (program_interrupt): Added handling for above interrupt.

1999-02-01  Jim Blandy  <jimb@zwingli.cygnus.com>

	Make the simulator compatible with the MPC750.  It would be nicer
	to make this a real multi-sim, but that's more work than we have
	time for.
	* emul_generic.c (emul_add_tree_options): Only require strict
	alignment if it was explicitly requested at configuration time.
	Don't make it the default for little-endian machines.
	* ppc-spr-table (UMMCR0, UMMCR1, UPMC1, UPMC2, USIA, UPMC3, UPMC4,
 	MMCR0, PMC1, PMC2, SIA, MMCR1, PMC3, PMC4, L2CR, ICTC, THRM1,
 	THRM2, THRM3): Plop in the MPC750 SPR registers.
	(DABR): This is weird.  This was HID5, but the PPC spec says this
 	should be DABR; why did some random processor use it for something
 	else?  The HID5 entry dates back to the original checkin of the
	simulator code in 1995, so remove it.
	* sim_calls.c (register_names): Delete this; since the user can
	now change GDB's list of register names dynamically, we can't
	pretend there's a static mapping here.
	(sim_fetch_register, sim_store_register): Call GDB's REGISTER_NAME
 	function to get the register name.  That ought to be accurate.
  	However, we're changing a compile-time dependency (using the
 	REGISTER_NAMES macro) into a link- and run-time dependency
	(calling REGISTER_NAME, which happens to be a function call on the
	PPC).

1999-01-22  Jim Lemke <jlemke@cygnus.com>

	* igen.c(gen_semantics_[ch]): setup/use of new option
	(-o mpc860c0[=n]).
	interrupts.[ch](mpc860c0_instruction_program_interrupt): added.
	ppc-instructions(the four branch insn groups): detect problematic br's.
	psim.c(is_num - added, psim_options): Parse and init new option.
	These changes are currently under #ifdef WITH_OPTION_MPC860C0.

1998-12-01  Ken Raeburn  <raeburn@cygnus.com>

	* hw_nvram.c (hw_nvram_bcd): Force value to fit in 0..99.

Fri Nov 20 12:17:28 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* main.c (sim_io_poll_quit): Stub function.

	* events.c (SIM_EVENTS_POLL_RATE): Define.
	(sim_events_poll): Copy function from common/sim-events.c.
	(event_queue_init): Copy scheduling of sim_events_poll from same.

	* sim_callbacks.h, sim_calls.c (sim_io_poll_quit): New function,
 	poll the external environment.

1998-11-19  Michael Meissner  <meissner@cygnus.com>

	* ppc-instructions (is_{NaN,inf}): Use unsigned64 to get the
	fractional type, so that quiet NaN's aren't treated like
	Infinities.

Mon Sep 28 09:42:45 1998  Drew Moseley  <dmoseley@cygnus.com>

	* table.c (table_open): For cygwin hosts, we need to use the
 	return value from the read routine as the number of bytes to
 	process.  This apparently is due to text-mode vs binary-mode.  If
 	the mounts are done text-mode, then the size returnedby fstat()
 	may be different than the number of bytes "read" in text mode.

Sun Oct  4 00:50:47 1998  Felix Lee  <flee@cygnus.com>

	* emul_netbsd.c (do_open): fix order-of-evaluation problem.
	(do_close): ditto.
	(do_fstat): ditto.
	(do_lstat): ditto.

1998-09-03  Michael Meissner  <meissner@cygnus.com>

	* emul_{netbsd,unix}.c: Update copyright year.

Mon Jun 29 10:57:36 1998  Michael Snyder  <msnyder@cleaver.cygnus.com>

	* sim_calls.c (sim_fetch_register, sim_store_register):
	return zero when nothing to do.

1998-06-26  Michael Meissner  <meissner@cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Don't check for sys/mount.h.
	* configure: Regenerate.
	* emul_{netbsd,unix}.c (toplevel): No longer try to include
	sys/mount.h. It conflicts on Linux when gnu libc2 is used.

Tue May 12 12:10:33 PDT 1998  James Ingham  <jingham@leda.cygnus.com>

	* Makefile.in: The run target depended on a target psim$(EXEEXT),
	but there was no such target, only plain psim.  So I changed the
	run target to depend on psim.

Sat May  2 01:10:12 1998  Stu Grossman  <grossman@babylon-5.cygnus.com>

	* aclocal.m4:  Remove defs of AM_EXEEXT and AM_CYGWIN32.  These are
	now defined in ../common/aclocal.m4, and the double definition causes
	problems with AC_SUBST of EXEEXT.
	* configure:  Regenerate.
	
Wed Apr 29 15:44:52 1998  Geoffrey Noer  <noer@cygnus.com>

	* aclocal.m4: new file for AM_EXEEXT macro
	* configure.in: call AM_EXEEXT
	* configure: regenerate with autoconf 2.12.1.
	* Makefile.in: add EXEEXT support

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

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

Sun Apr 26 15:19:51 1998  Tom Tromey  <tromey@cygnus.com>

	* acconfig.h: New file.
	* configure.in: Reverted change of Apr 24; use sinclude again.
	Don't call AC_C_CROSS.

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

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

Fri Apr 24 11:18:46 1998  Tom Tromey  <tromey@cygnus.com>

	* Makefile.in (top_builddir): New macro.
	(INTLLIBS): New macro.
	(INTLDEPS): Likewise.
	(psim): Depend on INTLDEPS; link against INTLLIBS.
	* configure.in: Call CY_GNU_GETTEXT.

Wed Apr 22 14:28:48 1998  Michael Meissner  <meissner@cygnus.com>

	* configure: Regenerate with autoconf 2.12.1.

Fri Mar 13 09:25:58 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* psim.c (psim_read_register, psim_write_register): Handle updates
 	for FPSCR.

	* registers.c (register_description): Reconize "FPSCR".

	* emul_netbsd.c (emul_netbsd_create): When FP available, enable
 	MSR FP exception mode. Do not enable FPSCR bits.
	* emul_unix.c (emul_unix_create): Ditto.

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

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

Mon Feb  9 14:13:14 1998  Andrew Cagney  <cagney@b1.cygnus.com>

	* ppc-instructions (fdiv, fdivs): Check for divide by zero.
	(is_invalid_zero_divide, invalid_zero_divide_operation): New
 	functions.
	
Wed Dec 10 17:38:28 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (sim_load): Do not parse PROG using buildargv, use
 	raw value instead.

1997-11-05  Felix Lee  <flee@cygnus.com>

	* emul_chirp.c: #ifdef HAVE_UNISTD_H

Wed Oct 15 08:50:54 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* corefile.c (core_attach): Pad out allocated memory regions so
 	that they are always correctly aligned.
	(struct _core_mapping, core_map_attach, core_init,
 	new_core_mapping): Change free_buffer to type void*.

Mon Oct  6 18:09:26 1997  Michael Meissner  <meissner@cygnus.com>

	* sim_calls.c (zfree): Call free correctly.

Mon Sep 29 10:05:01 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (zfree): Use free, not mfree.
	(sim_io_flush_stdoutput): Replace gdb_flush with callback ->
 	flush_stdout.

Fri Sep 26 09:50:29 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* ppc-instructions (sraw, slw, srw): From Charles Lefurgy, Fix
 	mask extracting shift amount. Correctly condition for setting XER
 	in sraw.
 	(ldhau): From Johannes Reisinger, update rA after load.

Tue Sep  9 22:13:23 1997  Felix Lee  <flee@cygnus.com>

	* basics.h (CONCAT*): token-pasting macros, if ALMOST_STDC,
 	for MSVC.
	* words.h: __int64 instead of long long for MSVC.

Wed Aug 27 10:24:15 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (sim_create_inferior): Check the simulator was
 	initialized before creating inferior.

	* idecode_expression.h (ALU_END): From Charles Lefurgy - Extract
 	sign bit using 64 bit and not a 32 bit mask.

Wed Aug 27 10:15:48 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (sim_load): From Ian Lance Taylor - free argv after
 	it has been used, not before.
	
Tue Aug 26 10:41:35 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (sim_kill): Delete.
	(sim_create_inferior): Add ABFD argument.
	(entry_point): Delete variable.
	(sim_load): Move setting of PC from here.
	(sim_create_inferior): To here.

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

	* sim_calls.c (sim_open): Add ABFD argument.

Thu Jul  3 10:18:06 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* ppc-instructions (PPC_INSN_INT): From Michael Thies - Monitoring
 	CR register updates dependant on RC value had logic backwards.

	* ppc-instructions (Load String Word Immediate): From Brad Parker
 	- sense of wrap test in check for overwriting RA wrong.
	(Load String Word Indexed): Ditto.
	
	* configure.in: From Erik Landry - set sim_default_model not
 	sim_model for sim-default-model option.
	* configure: Regenerate.
	
	* interrupts.c (check_masked_interrupts): Schedule a hardware
 	interrupt delivery when FP interrupts get enabled.
	(program_interrupt): Generate FP exceptions instead of aborting.
	(deliver_hardware_interrupt): Deliver a FP exception if so
 	enabled.

	* registers.h: Add definition of fpscr_vx_bits.

	* idecode_expression.h (FPSCR_END): Always update FEX and VX bits
 	in FPSCR.
	(FPSCR_END): Explicitly check for possible floating point
 	exception conditions.
	(FPSCR_BEGIN): Simplify.
	
	* ppc-instructions (Move From FPSCR): Enable.
	(Move To FPSCR Bit 1): Ditto.
	(Move To FPSCR Bit 0): Ditto.
	(Move To FPSCR Field Immediate): Ditto.
	(Move to Condition Register from FPSCR): Simplify.
	(invalid_arithemetic_operation): Generate a QNaN when invalid
 	operation exception disabled.
	
Tue May 20 10:22:50 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (sim_open): Add callback argument.
	(sim_set_callbacks): Delete.

Tue Apr 22 22:36:57 1997  Mike Meissner  <meissner@cygnus.com>

	* sim_callbacks.h (error): Make declaration match gdb's.
	* main.c (error): Ditto.

Fri Apr 18 17:03:09 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* sim_calls.c (sim_stop_reason): Simplify.  Was running implies
 	stopped/SIGINT. Exit implies a status code.

	* psim.c (cntrl_c_simulation): From main.c.  Event function that
 	halts the simulator.
	(psim_stop): New. Asynchronously schedule a stop simulator event.
	(psim_run_until_stop): Delete. Made redundant by psim_stop.

	* main.c (cntrl_c): Update.
	(cntrl_c_simulation): Moved to psim.c.

	* sim_calls.c (sim_stop): New function. Use psim_stop which
 	schedules a stop event.
	(sim_resume): Drop SIGINT handler, now in gdb/main.c.
	(sim_resume): Use psim_run as stop variable no longer needed.

Fri Apr 18 17:03:08 1997  Andrew Cagney  <cagney@b1.cygnus.com>

	* psim.c (psim_options): Handle -E option correctly.
	(psim_usage): Document.

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

	* psim.c (psim_options): Ignore -E option (sets endianness).
	* sim_calls.c: #include bfd.h.
	(entry_point): New static local.
	(sim_load): Return SIM_RC.  New arg abfd.  Set start address from bfd.
	(sim_create_inferior): Return SIM_RC.  Delete arg start_address.

Tue Apr 15 14:57:18 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (INSTALL): Set to @INSTALL@.
	(INSTALL_XFORM, INSTALL_XFORM1): Remove.
	(install): Depend upon installdirs.  Use $(program_transform_name)
	directly, rather than using $(INSTALL_XFORM).
	(installdirs): New target.

Fri Apr  4 17:54:36 1997  Jim Wilson  <wilson@cygnus.com>

	* Makefile.in (tmp-hw, tmp-pk): Use for loop to eliminate duplicates
	rather than the non-portable cat -n.

Mon Apr 14 16:29:51 1997  Ian Lance Taylor  <ian@cygnus.com>

	* Makefile.in (INSTALL): Change install.sh to install-sh.

Tue Apr  1 18:15:14 1997  Jim Wilson  <wilson@cygnus.com>

	* ppc-instructions: Change milhwu to mulhwu.

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

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

Wed Apr  2 14:51:17 1997  Ian Lance Taylor  <ian@cygnus.com>

	* COPYING: Update FSF address.

Tue Mar 25 16:17:59 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* main.c (sim_io_read_stdin): Only compile unbuffered IO code if
 	all the required features are supported by the host OS.

Tue Mar 25 12:13:02 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* emul_bugapi.c (emul_bugapi_create): Guard against NULL images.

	* configure.in (enable-sim-endain): Correct typo in usage (from
 	Erik Landry <landry@ENGR.ORST.EDU>).
	* configure: Re-generate.

Fri Mar 14 18:23:02 1997  Andrew Cagney  <cagney@kremvax.cygnus.com>

	* Makefile.in (targ-vals.def): Re-do rule so that it works with
 	FreeBSD's make.  Didn't like $<.

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

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

Thu Feb 13 10:35:14 1997  Andrew Cagney  <cagney@phydeaux.cygnus.com>

	* ppc-opcode-simple-array, ppc-opcode-simple-goto,
 	ppc-opcode-simple-switch, ppc-opcode-complex-array,
 	ppc-opcode-complex-goto, ppc-opcode-complex-switch,
 	ppc-opcode-jump, ppc-opcode-goto, ppc-opcode-flat: Delete,
 	superseeded by --sim-decode-mechanism option.

	* ppc-opcode-simple, dc-simple: Rename to be 8.3
	* ppc-opcode-complex, dc-complex: Ditto.
	* ppc-opcode-stupid, dc-stupid: Ditto.
	* ppc-opcode-test-1, dc-test.01: Ditto.
	* ppc-opcode-test-2, dc-test.02: Ditto.

	* configure.in (--enable-sim-opcode): Change prefix to dc- instead
 	of ppc-opcode-.

Wed Feb 12 19:33:45 1997  Andrew Cagney  <cagney@phydeaux.cygnus.com>

	* Many of the ppc-opcode-* files are identical baring the type of
 	lookup table.  Instead of having multiple tables, igen can do this
	via an additional option.
	
	* ld-decode.h, ld-decode.c (force_decode_gen_type): New function,
 	allow the type of generated table specified in the decode file to
 	be overridden.

	* ld-decode.c (load_decode_table): Allow the table type to be
 	overridden.

	* igen.c (main): Add -T <mechanism> option so that an overriding
 	instruction decode mechanism can be specified.

	* configure.in: New option --sim-decode-mechanism to control
 	igen's new -T <mechanism> flag.
	* Makefile.in (IGEN_FLAGS): Add IGEN_IDECODE_MECHANISM set by the
 	configure script.
	* configure: Regenerate.
	
Tue Feb 11 13:49:10 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* events.c (event_queue_create): Don't use NULL to initialize an
	integer field.
	(even_queue_{init,schedule_after_signal,tick}): Conditionalize use
	of sigprocmask to appropriate autoconf test.

	* main.c ({cntrl_c,main}): Use RETSIGTYPE for signal return type,
	don't assume void.
	* sim_calls.c (sim_{ctrl_c,resume}): Ditto.

	* Makefile.in (callback.o): Define HAVE_CONFIG_H, so callback.c
	includes our config.h.

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

	* configure.in: Fix typo in test for callback.c.
	* configure: Regenerated.

Fri Feb  7 10:04:25 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* emul_chirp.c (emul_chirp_create): Handle a virtbase of -1 being
 	found in the device tree.

Wed Feb  5 10:56:27 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* Property create/initialization still wasn't correctly ordered.
  	Should be delaying everything related to ihandle creation until
 	after the rest of the tree has been established.
	
	* device.c (device_find_ihandle_runtime_property): Update.
	(device_add_ihandle_runtime_property): Update.

	* tree.c (parse_ihandle_property): Delay lookup of the device to
 	be opened until the ihandle initialization phase.
	* tree.c (print_properties): Update.

Wed Feb  5 10:56:27 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>
	
	* gen-icache.c (print_icache_extraction): Add a reason parameter.
  	Augment each extracted field with a comment citing the codes
 	origin.  Should simplify tracking down incorrect cache
 	extractions.

Tue Feb  4 17:44:51 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* gen-icache.c: Generalize code handling XXX_is_NNN so that it
 	works for normal and boolean table entries.

	* psim.c (psim_write_memory): last_cpu == -1 or nr_cpus is now
 	valid.  Handle this just like *_{read,write}_register now handles
 	it.

Mon Feb  3 17:18:16 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* events.c (insert_event_entry): Correct loop termination
 	assertions.

Fri Jan 31 16:20:26 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* psim.c (psim_options): Add new option -c for max-iterations or
 	count.
	(psim_usage): Document.
	(psim_max_iterations_exceeded): New function, abort simulation if
 	max iterations exceeded.

	* gen-idecode.c: Re-work the table lookup code so that it assumes
 	that the entry is a leaf by default.  Simplify the boolean table
 	entry code so that it involves a mask + test instead of shift +
 	shift + mask + test.

	* gen-idecode.c: Correct generated igen body so that it no drops
 	or doubles clock interrupts.

	
Thu Jan 30 11:23:20 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* Makefile.in (BUILT_SRC_WO_CONFIG): Change targ-vals.* to
 	@sim_targ_vals@

	* configure.in (sim_callback, sim_targ_vals): Set sim_targ_valls
 	if common callback is present.

Wed Jan 29 12:32:41 1997  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (sim_callback): If the gdb is post 4.16, configure
	callback support from the common directory.
	* configure: Regenerate.

	* Makefile.in (BUILT_SRC_WO_CONFIG): Add targ-vals.{h,def} and
	targ-map.c.
	(GDB_OBJ): Add callback support configured in.
	(gentmap,targ-vals.def): Build from common directory.
	(targ-vals.h,targ-map.c): Build by running gentmap.
	(callback.o): Build from source in common directory.
	(targ-map.o): Add dependency.
	(clean): Remove gentmap.

Wed Jan 29 12:14:19 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* igen wasn't aborting if the opcode table contained no valid
 	fields.
	
	* misc.c (name2i): Possibly abort if an invalid name is
 	encountered.
	* ld-decode.c: Abort if the table type isn't found.

Wed Jan 29 12:14:19 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* When performance monitoring is disabled, it is still possible to
 	determine the simulation speed by looking at the number of elapsed
 	ticks recorded by the event queue.
	
	* psim.c (psim_write_register, psim_read_register): Force the cpu
 	to zero when it is either of `-1' or `nr_cpus'.  In both cases the
 	next cpu would be zero any way.

	* mon.c (mon_print_info): If possible, print the system cycle
 	performance.  This is an indication of the number of instructions
 	per second.

Wed Jan 29 12:14:19 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* The code to allow an event queue to be updated during a signal
 	was missing.  For main.c, a cntrl-c simulation termination wasn't
 	handled cleanly.
	
	* The simulation would not correctly restart if an event requested
 	that the simulation be halted.
	
	* psim.c (psim_options): Add hack to -i option to optionally
 	include a level vis -i2.
	(psim_usage): Document.

	* main.c (cntrl_c, cntrl_c_simulation): New functions.  When a
 	cntrl-c occures schedule an event to halt the simulation.
	(main): Catch CNTRL-C signals with the function cntrl_c.

	* events.c (event_queue_process): Mask interrupts while
 	manipulating the async event queue.
	(event_queue_init): Ditto.
	(event_queue_schedule_after_signal): Ditto.

	* events.c (event_queue_process): Mark the event queue as being in
 	the processing state when processing has started.  Adjust code
	so that it is tolerant of halts.
	(event_queue_init): Start the event queue out with processing
 	false.
	(event_queue_tick): Check that processing isn't still being
 	performed.
	
	* gen-idecode.c (print_run_until_stop_body): Call
 	event_queue_process_events to clear possibly pending events before
 	starting a simulation run.  Re-arange main loop so that simulator
 	is correctly restarted when an event halts the simulation.

	* psim.c (psim_halt): Handle an event halting the simulation.
	* psim.c (psim_init): Adjust initial cpu - == -1 - to match
 	reworked idecode.

Wed Jan 29 12:14:19 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* ppc-opcode-complex: Correct typo - was expanding ORA instead of
 	RA.  Based on instruction frequency stats, expand additional
 	instructions.
	* ppc-instructions: Change all `RA == 0' to RA_is_0.
	
	* ppc-opcode-stupid: Move all but the basic table in -complex into
 	here.  Update to new format.
	
	* Makefile.in (tmp-defines): New target. Force defines.h to always
 	be built.  Hence get ppc-opcode-goto to build.

Tue Jan 28 13:00:19 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* hw_com.c (hw_com_instance_read, hw_com_instance_write):
 	Implement.
	
Thu Jan 23 09:07:26 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* hw_trace.c (hw_trace_init_data): Delete.  The trace options need
 	to be initialized independant of the rest of the simulation
 	initalization.  Otherwize a trace option explictly set from gdb
 	could be overridden by hw_trace.

	* psim.c (psim_options): Clarify reason why the trace ioctl occures.

	* FIXME: The trace code is too scattered - hw_trace.c, psim.c,
 	debug.c.  It could be much simpler.

Thu Jan 23 09:07:26 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>
	
	* Some devices support removable media.  Add hooks to the disk
 	device so that it supports this.
	
	* device.c (device_add_string_array_property,
 	device_find_string_array_property): New functions, manipulate
 	properties containing an array of strings.
	(device_find_string_property): Allow a string array.
	(device_init_static_properties): Update.
	(device_init_runtime_properties): Update.

	* hw_disk.c (hw_disk_ioctl): Add ioctl for changing the disk
 	media.  If no file image is specified, use the next one in the
 	image property list.
	(hw_disk_init_address): Change the file property so that it is a
 	string array - use the first entry for the initial file image.

	* tree.c (print_string_aray_property): New function - print a
 	string array.
	(print_properties): Adjust.
	(print_string): Write a string, handling double quotes.

	* device.h: Define an ioctl to `change-media' with an optional new
 	media image.
	
	* hw_disk.c: Allow floppy disk devices to be specified.

	* psim.c (psim_command): New function, parse more complex psim
 	commands such as "change-media" and "trace".
	* sim_calls.c (sim_do_command): Use.

Wed Jan 22 09:38:33 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* For expressions like (RA == 0) that are entered in to the cache
 	as RA_is_0. If possible generate the result of the expression so
 	that the compiler gets a better chance of eliminating dead
 	branches.

	* gen-icache.c (print_icache_extraction): For a cache entry of
 	the form <name>_is_<const> where it is a boolean field, generate
 	the result of the expression instead of the expression its self.
	(print_icache_body): Remove code that was looking for *_is_0 and
 	then generating corresponding definitions.

	* gen-icache.c (print_icache_struct): If there is no cache, do not
 	output expressions in idecode.h file.
	
	* gen-icache.c (print_icache_body): Output them here.
	
	* ppc-opcode-complex: Clarify constant values for SPR==LR register
 	expansion.

	* ppc-cache-rules (RA_is_0, SPR_is_256): Two new cache entries.

Wed Jan 22 12:24:52 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* The code that put values in and extracted values from the cache
 	was too compilicated.  The cache table did not allow values to be
 	computed from cache entries.  #defines could only be used when a
 	cache was present, remove the restriction.

	* ld-cache.h, ld-cache.c: Add a new cache entry type - SCRATCH.  A
 	scratch variable is defined when a cache entry is beinf
 	filled. Change the definition of a COMPUTE variable to be defined
 	when the cache entry is being used.
	* gen-icache.c: Update.
	
	* ld-cache.h, ld-cache.c: Change field names so that their meaning
 	is more obvious.  old_name->field_name, new_name->derived_name.
	* gen-icache.c: Update
	
	* gen-icache.h, gen-icache.c (print_icache_body): Make the three
 	different types of cache code - put into cache, extract from
 	cache, no cache - an explicit argument to print_icache_body.
	* gen-icache.c (print_icache_extraction): Ditto.
	
	* gen-semantics.c (print_c_semantic): Update use.
	* gen-idecode.c (print_jump_insn): Update use.
	* gen-icache.c (print_icache_function): Update use.

	* igen.c (main): Change 'R' option so that it does not force the
 	cache.

	* configure.in (enable-sim-icache): Clarify description.  Make
 	#define one of the defaults regardless of the cache.  Probably
 	should revamp and add a separate option.

Tue Jan 21 13:26:10 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* pk_disklabel.c (block_is_fdisk): Tidy up traces - use dos
 	partition numbering.
	(pk_disklabel_create_instance): Partition 1..4 are valid - not
 	1..3.
	(is_iso9660): New function, verify a CD9660 File system.
	(pk_disklabel_create_instance): Start expanding so that active
 	partition selection is supported.

Mon Jan 20 11:20:15 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* The cap object was retaining a reference to the instance of a
 	device after it was deleted. Instead add and remove cap's from the
 	cap db as they are created and deleted.  This ensuring that a
 	capibility is only used during the lifetime of the corresponding
 	object.
	
	* cap.h, cap.c: Correct cap type - was signed32 should be
 	signed_cell.
	
	* cap.c (cap_add, cap_remove): New methods for cap object that
 	allow the explicit addition and removal of internal objects that
 	the cap knows about.
	
	* cap.c (cap_init): Rewrite.  Verify that the only objects
 	remaining in the cap data base are those that were entered first.
  	Thse objects will be the permenant ones.
	* device.c (device_init_address): Remember to initialize the cap
 	database.
	
	* device.c (device_create_instance_from): Explicitly add device
 	instances to the cap database.  Simplify create code.
	(device_instance_delete): Explicitly remove device instances from
 	the cap database.
	
	* device.c (device_create_from): Explicitly add a device to the
 	cap data base.
	
	* device.c (device_create_from): Always set the cap members.

	* hw_disk.c: Output the instance when tracing.
	
Sun Jan 19 16:44:29 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* tree.c (split_device_specifier): Add support for aliases when
 	looking up a device. Now needs a device as an argument.
	(split_property_specifier): Ditto.

Sun Jan 19 15:28:23 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* The memory "claim" and "release" methods take an address and
 	size as arguments.  These may be multi cell values. Initially fix
 	the memory code so that they check/detect this.  Leave the
 	adjustment of any clients to later.
	
	* hw_memory.c (hw_memory_instance_claim,
 	hw_memory_instance_release): Handle multi-cell memory devices.
	
	* hw_memory.c (hw_memory_instance_claim): Be tolerant towards the
 	release of memory regions that were not claimed.

Fri Jan 17 12:01:07 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* device.h, device.c (device_instance_call_method): Correct return
 	type - can return either 0 or -1, hence should be a signed type.
	* device_table.h: Ditto.
	
	* hw_memory.c (hw_memory_instance_claim,
 	hw_memory_instance_release): Update.
	* hw_disk.c (hw_disk_max_transfer, hw_disk_block_size,
 	hw_disk_nr_blocks): Ditto.
	
Fri Jan 17 11:50:13 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* emul_chirp.c (chirp_emul_claim): Implement using the "claim"
 	method belonging to "/chosen/memory".
	(chirm_emul_release): Ditto.
	
	* Makefile.in (LIB_INLINE_SRC): Remove emul_* from list of files
 	that are inlined.  These modules are called via a table and are
 	not made inline.

	* hw_init.c (update_for_binary_section): Fix failure to allocate
 	memory used by the binary in real-mode executions. If "claim"
 	property is present, allocate memory from the "/chosen/memory"
 	device.

	* emul_chirp.c (emul_chirp_create): Specify that memory should be
 	claimed when loading a real image.

	* hw_memory.c (hw_memory_instance_claim): Don't page align memory
 	allocations.

	* hw_memory.c (hw_memory_instance_release): Avoid infinite loop
 	when merging adjacent memory chunks.

Thu Jan 16 08:51:25 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* vm.h (vm_data_map_read_buffer, vm_data_map_write_buffer): Add
 	optional PROCESSOR & CIA args so that this routine also abort an
 	access.

	* vm_n.h (vm_data_map_read_N, vm_data_map_write_N): For a
 	miss-aligned access when a transfer fails abort.
	
	* emul_bugapi.c (emul_bugapi_do_write): Use emul_read_buffer
 	instead of the vm_read_buffer.
	* emul_netbsd.c (do_write): Ditto.
	* emul_unix.c (do_unix_write): Ditto.

Wed Jan 15 14:38:25 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* configure.in (--enable-sim-jump): Default is NULL and not -E.
	* configure: Regenerate.
	
	* basics.h (__attribute__): Enable attributes if GCC >= 2.6.
	(UNUSED): Only enable UNUSED if GCC >= 2.7.
	
	* gen-icache.c (print_icache_extraction): Print UNUSED macro
 	instead of explicit __unused__ attribute.
	(print_icache_body): Ditto.
	* idecode_expression.h (FPSCR_BEGIN): Use UNUSED.

Wed Jan 15 13:54:50 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* cpu.h, cpu.c (cpu_synchronize_context): Add CIA argument as
 	reference point.

	* vm.c (vm_synchronize_context): Add PROCESSOR and CIA as
 	arguments so that there is a reference point for recovery.
	(vm_synchronize_context): Pass processor+cia for errors.
	(om_unpack_sr): Ditto.
	(om_unpack_srs): Ditto.
	* vm.c (vm_create): Review error messages.

	* vm.c: Include "cpu.h" so that cpu_error is visible.

	* ppc-instructions (Return From Interrupt): Pass CIA.
	(Instruction Synchronize): Ditto.
	* psim.c (psim_init): Ditto.

Wed Jan 15 12:25:11 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* cpu.h, cpu.c (cpu_error): Aborts simulation with error message,
 	but also saves current processor state.
	
	* basics.h: Move #include <stdarg.h> to here from device_table.h.

	* interrupts.c (perform_oea_interrupt): Use.  No longer loose CIA
 	when simulation aborted.
	(program_interrupt): Ditto.
	(floating_point_unavailable_interrupt): Ditto.
	(alignment_interrupt): Ditto.
	(floating_point_assist_interrupt): Ditto.
	(perform_oea_interrupt): Ditto.
	(machine_check_interrupt): Ditto.

Tue Jan 14 12:19:10 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* ppc-instructions (Move from Special Purpose Register): Support
 	move from DEC.

Mon Jan 13 16:58:12 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* debug.h, debug.c: Add "interrupts" trace option.

	* interrupts.c (data_storage_interrupt): Add tracing.
	(machine_check_interrupt): Ditto.
	(instruction_storage_interrupt): Ditto.
	(alignment_interrupt): Ditto.
	(program_interrupt): Ditto.
	(floating_point_unavailable_interrupt): Ditto.
	(system_call_interrupt): Ditto.
	(floating_point_assist_interrupt): Ditto.
	(deliver_hardware_interrupt): Ditto.
	
	* interrupts.c (program_interrupt): For UEA mode, halt the
 	processor - so that the current state is saved - instead of
 	aborting.
	(floating_point_unavailable_interrupt): Ditto.
	(floating_point_assist_interrupt): Ditto.

Thu Jan  2 09:10:41 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* interrupts.c (perform_oea_interrupt): Halt rather than abort on
 	a double interrupt.

Wed Jan  1 22:54:52 1997  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* ppc-instructions (Store Multiple Word, Load Multiple Word):
 	Enable.

	* tree.c (print_properties): For an array consider printing it out
 	as an integer array.

	* hw_memory.c (hw_memory_init_address): If an "available" property
 	is present, use that to initialize the available memory instead of
 	using the reg property.

	* emul_generic.c (emul_add_tree_hardware): Add "available"
 	property to memory device.

Fri Dec 20 13:19:07 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* ppc-instructions (Rotate Left Word then AND with Mask): Enable.

	* device.c (device_instance_call_method): Was only looking at the
 	first method.

	* hw_disk.c (hw_disk_nr_blocks): Implement #blocks method.
	(hw_disk_block_size): Implement block-size method.
	(hw_disk_max_transfer): Implement max-transfer method.

	* hw_phb.c (hw_phb_init_address): Reinit the rest of the PHB.

	* emul_chirp.c (chirp_emul_instance_to_path): Recover from an
 	invalid ihandle.
	(chirp_emul_instance_to_package): Ditto.
	(chirp_emul_method): Ditto.
	(chirp_emul_read): Ditto.
	(chirp_emul_write): Ditto.
	(chirp_emul_close): Ditto.
	(chirp_emul_seek): Ditto.
	(chirp_emul_package_to_path): Ditto (for phandle).
	(chirp_emul_package_to_path): Return the length.

	* psim.c (psim_merge_device_file): Allow continuation lines.

Thu Dec 19 11:09:43 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* emul_chirp.c (chirp_emul_boot): Implement. Well report the new
 	string and exit.
	
	* emul_chirp.c (chirp_emul_exit): Correct type of args struct
 	members - *_cell not host dependant int.

Wed Dec 18 17:49:59 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* interrupts.c (perform_oea_interrupt): Print additional
 	information if a double interrupt is encountered.

Wed Dec 18 17:49:59 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>
	
	* psim.c (psim_merge_device_file): Tolerate an incorrect file-name
 	being specified with the -f option.
	(psim_merge_device_file): Correct check for end of string.

Wed Dec 18 17:49:59 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>
	
	* emul_chirp.c (chirp_emul_peer): Was falling off the end of the
 	list of devices. Return zero to the client instead.
	* emul_chirp.c (chirp_emul_child): Ditto
	* emul_chirp.c (chirp_emul_parent): Ditto

	* device.c (device_root): Assert assumption about the device being
 	valid.

Tue Dec 17 15:12:38 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* emul_chirp.c (emul_chirp_create): Add description property to
 	each significant node in the device tree.
	* emul_bugapi.c (emul_bugapi_create): Ditto.

Fri Dec 13 14:30:31 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* main.c (sim_io_read_stdin): For a single byte STDIO read, use a
 	tempoary two byte buffer.  Single byte read with fgets will not
 	work.
	* main.c: Include errno.h.
	(sim_io_read_stdin): For non-STDIO, make it work.

	* emul_chirp.c (chirp_emul_read): Return the correct error status.

Fri Dec 13 14:30:31 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* std-config.h (WITH_STDIO): Don't hard-wire the STDIO mechanism.
  	Instead have each emulation default it to DO_USE_STDIO.

	* emul_generic.c (emul_add_tree_options): Select the STDIO I/O
 	mechanism as the default if enabled or if nothing selected.

	* sim_calls.c (sim_io_read_stdin): Passify GCC's desire for a
 	return value.
	(sim_io_write_stdout): Ditto.
	(sim_io_write_stderr): Ditto.
	* main.c (sim_io_write_stdout): Ditto.
	(sim_io_write_stderr): Ditto.
	(sim_io_read_stdin): Ditto.

Tue Dec 10 10:31:48 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_chirp.c (emul_chirp_instruction_call): Make *printf calls
	type correct.
	* vm.c (om_effective_to_virtual): Ditto.
	* events.c (event_queue_schedule{,_after_signal}): Ditto.
	(event_queue_{deschedule,process}): Ditto.
	* hw_htab.c (htab_decode_hash_table): Ditto.
	(htab_map_{page,binary}): Ditto.
	* hw_opic.c (hw_opic_init_data): Ditto.
	(handle_interrupt): Ditto.
	(do_processor_init_register_{read,write}): Ditto.
	(write_vector_priority_register): Ditto.
	({read,write}_destination_register): Ditto.
	(do_suprious_vector_register_{read,write}): Ditto.
	(do_current_task_priority_register_N_{read,write}): Ditto.
	(do_timer_frequency_reporting_register_{read,write}): Ditto.
	(do_timer_N_{current,base}_count_register_{read,write}): Ditto.
	(do_ipi_N_dispatch_register_write): Ditto.
	(do_vendor_identification_register_read): Ditto.
	(do_feature_reporting_register_N_read): Ditto.
	(do_global_configuration_register_N_{read,write}): Ditto.
	* hw_phb.c (hw_phb_attach_address): Ditto.
	(hw_phb_unit_decode): Ditto.
	(hw_phb_address_to_attach_address): Ditto.
	(hw_phb_io_{read,write}_buffer): Ditto.
	* hw_ide.c (setup_fifo): Ditto.

	* sim_calls.c ({defs,callback,remote-sim}.h): Find gdb include
	files via -I<dir> instead of using "../../gdb/" prefixes.

Tue Dec 10 10:12:44 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* debug.h: Add tracing for the pal device.
	* hw_pal.c: Update.

	* emul_chirp.c (chirp_emul_getprop): More tracing.

Tue Dec 10 10:12:44 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* device.h, device.c (device_find_ihandle_runtime_property): New
 	function. Reverse of add_ihandle_runtime property.
	(device_init_runtime_properties): Use it.
	
	* device.c (find_property_entry): New function returns the
 	internal property spec.
	(device_set_property): Use.
	(device_find_property): Use.

Tue Dec 10 10:12:44 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* psim.c (psim_merge_device_file): Strip newline from device
 	specs.
	
Tue Dec 10 10:12:44 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* hw_htab.c (htab_map_binary): For overlapping text / data maps
 	merge the two.  Also check that the merge is safe.

	* emul_chirp.c (emul_chirp_create): Add a description property to
 	the pte's so that they are easier to identify.
	
	(emul_chirp_create): Don't specify a load address for the CHRP
 	image.  Always use the values specified by the executable.

	* hw_htab.c (htab_map_page): Abort if a duplicate map is
 	encountered.

Mon Dec  9 12:08:46 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* hw_htab.c (htab_map_page): Formatting.

	* emul_chirp.c (emul_chirp_instruction_call): Check for a NULL
 	method name when handling the client call. Also check for other
 	bad call arguments.
	
	* emul_chirp.c (emul_chirp_create): Allow real-mode?, real-base,
 	etc to be overriden.

Mon Dec  9 12:08:46 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* os_emul.c (os_emul_create): Use tree find property instead of
 	device find property - sigh.

Thu Dec  5 10:46:42 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* 961205: Release snapshot 961205.
	
Thu Dec  5 10:46:42 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* configure.in (hostbitsize, bitsize): Fix typo in error message -
 	cannot contain a comma.
	(sim-warnings): Check for more potential errors.

	* psim.c (psim_usage): Add -f <file> option.  Specifies a file
 	containing device tree specifications that should be merged into
 	the device tree.

	* configure.in: Sort options.
	* configure: Rebuild
	
Wed Dec  4 13:57:31 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* psim.c (psim_usage): Add -n option - specify number of
 	processors.

	* emul_chirp.c: Add description.
	* emul_bugapi.c: Ditto.
	* emul_unix.c: Ditto.
	* emul_netbsd.c: Ditto.

Fri Nov 29 11:12:22 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* hw_pal.c (hw_pal_attach_address): New function, if an attach is
 	encountered, assume that it is the single disk.
	* hw_pal.c: Add generic device/size decode methods.
	
	* hw_nvram.c (hw_nvram_init_address): Use the first nonzero reg
 	property entry when determining the nvram size.

	* hw_core.c: Add generic address/size decode methods.

	* emul_chirp.c (emul_chirp_instruction_call): Return and trace
 	nonzero status from client functions.

	* main.c (error): Always include a cariage return when writing out
	errors.

Wed Nov 20 00:36:55 1996  Doug Evans  <dje@canuck.cygnus.com>

	* sim_calls.c (sim_resume): Reset sim_should_run if single
 	stepping.

Thu Nov 28 13:19:46 1996  Andrew Cagney  <cagney@kremvax.tpgi.com.au>

	* emul_bugapi.c (emul_bugapi_do_diskio): Add support for multiple
 	optional disks.

	* emul_generic.c (emul_add_tree_hardware): Drop the dummy eeprom.
  	Attach the pal - for I/O - as a pseudo device haning from the
 	firmware sub tree.

	* emul_bugapi.c (emul_bugapi_create): Add a small memory device to
 	the device tree at the address of the hi-mem interrupt vector
 	addreses.  Used by bugapi to establish its trap instructions.
	
	* debug.h: Add a new macro DITRACE for tracing device instances.
	
	* debug.h: Extend the DTRACE macro so that it can also tests for
 	device specific tracint.
	
	* device.h, device.c (device_trace): Add method to determine
 	device specific tracing.
	(device_init_address): Set the devices tracing level.
	
Thu Nov 21 12:05:32 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* tree.h, tree.c (tree_device): New files - separate out the
 	device parser and other tree operations from the device.
	
	* inline.h, inline.c (INLINE_TREE): Add.
	* device.h, device.c (device_tree_add_parsed): Delete.
	* Makefile.in (tree.c): Add rules for new file.
	* Makefile.in: Better order the emul_* files.
	
	* emul_generic.c (emul_add_tree_hardware): Update.
	* emul_netbsd.c (emul_netbsd_create): Update.
	* emul_unix.c (emul_unix_create): Ditto.
	* emul_chirp.c (emul_chirp_create): Ditto.
	* emul_bugapi.c (emul_bugapi_create): Ditto.
	* psim.c (psim_tree): Ditto.
	* hw_init.c: Ditto.
	
	* emul_generic.h: Include tree.h
	* Makefile.in: Add to EMUL_GENERIC_H dependencies.
	
	* device.h, device.c (device_root): New function - returns the
 	root of the tree.
	* corefile.c: Use.
	
	* device.h, device.c (device_clean): New function, clean up device
 	ready for next simulation run. This includes things like deleting
 	interrupt edges and properties created during the simulation and
 	also scrubbing any pre-defined properties.
	* tree.c (tree_init): Use.
	
	* device.h, device.c (device_init_static_properties): New
 	function.  Initialize any static predefined properties.  By static
 	we mean those that have values that can be determined before the
 	device tree initialization has started.
	* tree.c (tree_init): Use.

	* device.h, device.c (device_init_address): Add code to
 	check/verify the devices #address-cells and #size-cells.
	(device_add_integer_property): Delete corresponding code.
	(device_nr_address_cells, device_nr_data_cells): Check for
	property when returning value.
	
	* device.h, device.c (device_init_runtime_properties): New
 	function.  Initialize those properties that are not `static'.  At
 	present the only such property is the ihandle.
	* tree.c (tree_init): Use.
	
	* device.h, device.c (reg, ranges): Rework these so that they use
 	an array of the fundamental type - single reg or single range
 	entry.
	
	* device.h, device.c (device_add_ihandle_runtime_property):
 	Re-implement the adding of an ihandle during tree construction so
 	that it better fits in with device initialization.
	
Thu Nov 21 12:05:32 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.h, device.c (device_ioctl): Add additional argument -
 	request - so that the caller must always specify the type of
 	the ioctl request.

	* device_table.h: Update.
	* hw_trace.c (hw_trace_ioctl): Ditto.
	* hw_vm.c (hw_vm_ioctl_callback): Ditto.
	* hw_init.c (hw_stack_ioctl_callback): Ditto.
	* psim.c (psim_options): Ditto.
	
Thu Nov 21 12:05:32 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>
	
	* BUGS: Updated a bit.

Wed Nov 20 14:06:37 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_opic.c: Finish - third round.

Wed Nov 20 12:02:08 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_glue.c (hw_glue_io_read_buffer_callback): Fix miscalc of glue
 	reg index.
	(hw_glue_io_write_buffer_callback): Ditto.

Tue Nov 19 21:17:08 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* events.c (event_queue_process): Was incorrectly consuming future
 	events on the queue when they should be left alone.

	* debug.h, debug.c (events): Add support for event queue tracing.
	* events.c: Add event tracing.
	
	* debug.h, debug.c: Order device trace options.
	
Fri Nov 15 15:23:39 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* pk_disklabel.c (pk_disklabel_create_instance): Fix up some
	warnings generated by GCC.

Sun Nov 17 17:59:14 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* sim-endian.h: Add LE versions of byte swap macros.  Needed for
 	PCI devices which are little-endian.
	
	* sim-endian-n.h (endian_le2h_N, endian_h2le_N): Ditto

Sun Nov 17 17:59:14 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_iobus.c (hw_iobus_attach_address_callback): Change the iobus
 	so that it is implementing a 1-1 address map.
	
	* emul_generic.c (emul_add_tree_hardware): Adjust.

	* emul_generic.c (emul_add_tree_hardware): Don't add the nvram as
 	a default.

Sun Nov 17 17:59:14 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>
	
	* device.c (split_find_device): Be tolerant of missing unit
 	addresses.

Fri Nov 15 16:49:49 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* basics.h (port_direction): New type, specify the direction of
 	any `port'.
	
	* device.h, device.c (device_interrupt_decode): Include
 	specification of port direction in operations.
 	(device_interrupt_encode): Ditto.
	
	* device_table.h: Add a direction field to the interrupt port
 	table.

	* device.c (device_tree_add_parsed): Specify port direction.
	
Thu Nov 14 21:38:13 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_opic.c: Finish - second round.

Thu Nov  7 00:18:59 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_htab.c (htab_init_data_callback): Allow the virtual-address
 	to be specified as an array which allows 64bit addresses.

	* device.c (device_find_integer_array_property): New function.
  	Simplify the querying of elements of an integer array.
	(device_add_integer_property, device_find_integer_property):
 	Update to correctly use the cell type.

	* vm.c (om_unpack_sr): Clarify shifting comment.
	(om_pte_0_masked_vsid): Ditto. Add 64bit version.

	* emul_chirp.c (emul_chirp_create): Initialize the segment
 	registers.

	* vm.c (om_effective_to_virtual): Trace segment register use.

	* hw_htab.c (htab_map_page): Print out the pteg base address to
 	simplify cross checking between vm and the htab.
	(htab_decode_hash_table): Use device_error instead of error.
	(htab_map_page): Ditto.
	(htab_dma_binary): Ditto.
	(htab_map_binary): Ditto.
	(htab_init_data_callback): Ditto.

Wed Nov  6 20:20:58 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* interrupts.h: Clarify what the optional instruction program
 	interrupt is - a subset of illegal instruction program interrupt.

	* interrupts.c (program_interrupt): For UEA mode, clarify what an
 	optional instruction program interrupt is.
	(program_interrupt): For OEA mode, as per spec, generate an
 	illegal instruction program interrupt when an optional instruction
 	is encountered.
	
	* gen-semantics.c (print_semantic_body): Delete code
 	differentiating between an unimplemented floating point and normal
 	instruction.  Instead, such a case can be handled explicitly.

	* ppc-instructions (store floating-point as integer word indexed):
 	Mark as optional.
	(Floating Convert to Integer Doubleword): Make the floating point
 	assist interrupt explicit.
	(Floating Convert To Integer Doubleword with round towards Zero):
 	Ditto.
	(Floating Convert To Integer Word): Ditto
	(Move From FPSCR): Ditto.
	(Move to Condition Register from FPSCR): Ditto.
	(Move To FPSCR Fields): Ditto.
	(Move To FPSCR Field Immediate): Ditto.
	(Move To FPSCR Bit 0): Ditto.
	(Move To FPSCR Bit 1): Ditto.
	
Mon Nov  4 12:49:13 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* corefile.c (core_map_read_buffer, core_map_write_buffer): Avoid
 	breaking up transfers.

	* corefile.c: Adjust arguments so that the client server
	relationship is clarified.
	
	* hw_glue.c (hw_glue_init_address): Update so it can be attached
 	to a PCI bus.

	* hw_disk.c (hw_disk_instance_write): Add more checks to disk IO -
 	looking for things like overflow/underflow.

Sun Nov  3 18:45:20 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_generic.c (emul_add_tree_hardware): Hang the disk off the
 	PAL device instead of the IOBUS.  The disk must be attached to a
 	logical bus.

	* hw_disk.c (hw_disk_init_address): Just use the unit address
 	directly in the attach - the rest isn't relevant.

Sat Nov  2 21:48:57 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* configure.in (sim-hardware, sim-packages): Allow additional
 	hardware and packages to be prefixed as well as appended.

	* Makefile.in (tmp-hw, tmp-pk): Retain the user specified order of
 	packages when building them.  Consequently, a user can override a
 	standard device by prefixing their own version.
	
	* Makefile.in (hw_opic.o, hw_pci.o, hw_ide.o): Add dependencies.

Fri Nov  1 14:42:57 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* mon.c (_cpu_mon): Add fields for counting 1, 2, 4, and 8 byte
	reads and writes.
	(mon_{read,write}): Count 1, 2, 4, and 8 byte reads/writes.
	(mon_print_info): Correct typo regarding # of unaligned reads and
	writes.  Print out how many 1, 2, 4, and 8 byte reads/writes there
	are.

Tue Oct 29 17:55:43 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (AC_CHECK_FUNCS): Add access.
	* config{.in,ure}: Regenerate.

	* emul_unix.c (do_unix_nop): System call that always succeeds.
	(do_unix_access): Support access system call.
	(solaris_descriptors): Make sigaltstack and sigaction nops.
	({solaris,linux}_descriptors): Add support for access.

Tue, 8 Oct 18:42:26 1996  Jason Molenda <crash@cygnus.co.jp>
        
	* Makefile.in (clean): Move config.log to distclean.

Fri Nov  1 16:44:28 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* corefile-n.h (core_map_write_N): Improve abort messages.

	* device.h, device.c (device_attach_address): Remove unused name
 	parameter.
 	(device_detach_address): Ditto.
	* device_table.h, device_table.c: Update.
	* hw_iobus.c (hw_iobus_attach_address_callback): Ditto.
	* hw_nvram.c (hw_nvram_init_address): Ditto.
	* hw_memory.c (hw_memory_init_address): Ditto.
	* hw_vm.c (hw_vm_init_address_callback): Ditto.
	(hw_vm_attach_address): Ditto.
	(hw_vm_add_space): Ditto.
	* hw_init.c (update_for_binary_section): Ditto.
	* hw_core.c (hw_core_attach_address_callback): Ditto.

	* hw_iobus.c (hw_iobus_attach_address_callback): Rewrite to handle
 	configurable parent busses.

Wed Oct 30 18:46:32 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device_table.c (generic_device_size_to_attach_size): Provide
 	limited support for multi-cell sizes.
	(generic_device_address_to_attach_address): Ditto for addresses.

Tue Oct 29 02:01:29 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_add_integer_property): Check for setting of
 	#address-cells and #size-cells properties.  For these, update the
 	corresponding device values.
	(device_nr_address_cells, device_nr_size_cells): Use the value
 	from the device instead of the property.

	* hw_core.c: Use generic address and size conversions for the top
 	bus.

	* hw_memory.c (hw_memory_init_address): Tolerate case where
 	#address and #size cells is greater than 1.

	* device.c (device_tree_print_device): Clean out printing of
 	properties.
	
	* device.c (split_device_specifier): Don't detect comments here -
 	"#" can be a valid prefix - eg #size-cells.

	* psim.c (psim_merge_device_file): Suppress comments and blank
 	lines here.

	* emul_generic.c (emul_add_tree_hardware): Fix typo of incorrect
 	pal unit address.  Add the property /#address-cells to the root of
 	the tree.

	* device.c (device_template_create_device): Check that the unit
 	address was successfully parsed.

	* device_table.c (generic_device_unit_decode): Rewrite to better
 	handle multi-cell addresses.
	(generic_device_unit_encode): Ditto.

	* emul_generic.c (emul_add_tree_hardware): "reg" properties no
 	longer need the explicit array type - the parser takes care of it.

	* pk_disklabel.c (pk_disklabel_create_instance): Add NULL return
 	to keep GCC happy.

Mon Oct 28 22:55:48 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_ide.c: New file.  Model of a basic IDE interface attached to
 	a PCI bus.
	
	* configure.in (hardware): Add the ide device to the default
 	configuration.
	* configure: Regenerate.
	
	* debug.h, debug.c: Add tracing option for the IDE device.
	
Fri Oct 25 21:28:25 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_phb.c, hw_phb.h: New files - implement a PHB.

	* configure.in (hardware): Add the phb to the list of devices to
 	build by default.

Fri Oct 25 21:28:25 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_com.c: Review description.
	* hw_disk.c: Ditto.
	* hw_htab.c: Ditto.
	* hw_eeprom.c: Ditto.
	* hw_init.c: Ditto.
	* hw_cpu.c: Ditto.
	
	* hw_com.c: Update event handling.

	* hw_disk.c: Implement tracing.
	
Fri Oct 25 21:28:25 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device_table.c (generic_device_init_address): Use
 	assigned-addresses property in preference to any other reg
 	property.

Fri Oct 25 21:28:25 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.h, device.c (device_find_ranges_property): New function.
  	Simplify the manipulation of "ranges" properties.
	
	* device.c (device_add_parsed): Extend to include support for the
 	ranges property.

	* device.c (device_add_parsed): Add assigned-addresses to the list
 	of reg type properties.
	
	* device.c (device_tree_print_device): Add code to format and
 	print a ranges property.
	
	* device.h, device.c (device_nr_address_cells,
 	device_nr_size_cells): New functions. Determine the values of the
 	standard properties #address-cells and #size-cells.  Both of which
 	are optional and have default values of two and one respectfuly.
  	Previously, code that determined #address-cells was incorrectly
 	using a value of one.

Fri Oct 25 21:28:25 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* debug.h, debug.c: Sort debug options, Add entries for the
 	comming PHB device.
	
Fri Oct 18 12:12:21 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* ppc-instructions (Floating Select): Add support for fsel unless
	model is 601.  Allow user to filter out instruction unless -Fs is
	passed to igen.
	(Store Floating-Point as Integer Word Indexed): Raise optional
	instruction program abort.  Allow user to filter out instruction
	unless -Fs is passed to igen.
	(Floating Square Root{, Single}): Ditto.
	(Floating Reciprocal Estimate Single): Ditto.
	(Floating Reciprocal Square Root Estimate): Ditto.

	* configure.in (--enable-sim-filter): If not passed, pass 32,f,s
	to igen.
	* configure: Regenerate.

	* interrupts.h (program_interrupt_reasons): Add
	optional_instruction_program_interrupt.

	* interrupts.c (program_interrupt): Call error with more detailed
	information on program interrupts, particularly in user mode.  Add
	support for optional_instruction_program_interrupt.

Wed Sep 25 10:20:29 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_glue.c: New device.  Hooks for manipulating interrupt ports.

	* debug.h, debug.c (trace_glue_device): Add tracing support for
        the interrupt glue logic device.

	* configure.in (hardware): Add glue device.
	* configure: Regenerate.

Tue Sep 24 20:55:38 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_tree_parse_integer_property): New function,
        parse a list of integers as an array property.
	(device_tree_add_parsed): Call it.

	* device.c (device_tree_parse_string_property): New function,
        parse a list of strings as a string property (with embeded
        null's).  For moment, don't try to implement a complext string
        parser.
	(device_tree_add_parsed): Call it.

Tue Sep 24 16:30:48 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_opic.c: New file.  OpenPIC interrupt controller.

	* configure.in (hardware): Add opic device.
	* configure: re-generate.

	* hw_pic.c: Delete, replaced with hw_opic.c.

	* debug.h, debug.c: Add debug option for OpenPIC device. -
        opic-device.

Tue Sep 24 16:30:48 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* Makefile.in (psim.o, idecode.o): Since idecode and not psim is
        now the file that does all the inlining.

	* Makefile.in (LIB_SRC, LIB_INLINE_SRC, idecode.o): Break out the
        library source code that could be involved in an inlining.  Make
        idecode.o only dependant on the inlined library source code.

	* Makefile.in (LIB_OBJ): Put options last on the list so that it
        is compiled last.

	* std-config.h (DEVICE_INLINE): Only inline locals when the
        default is to inline.

Mon Sep 23 00:37:49 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_htab.c (htab_sum_binary): Determine the real-base for the
        binary.

	* hw_htab.c (htab_map_binary): Depending on the value of the
        load-base, either map the program in as a contiguous section or as
        separate sections controled by th binaries lma values.
	(htab_init_data_callback): Ditto.

Sun Sep 22 15:56:22 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_generic.c (emul_add_tree_options): Remove load-base option.

	* emul_chirp.c (map_over_chirp_note): Add load_base field to note
        struct.  Don't require the load_base field to be present - just
        issue warning - it is a recent addition.
	(emul_chirp_create): Support both virtual and physical modes.

	* emul_chirp.c (emul_chirp_create): Add a stack initialization
        property so that any arguments specified on the command line can
        be passed on to user programs.

	* hw_init.c (create_ppc_chirp_bootargs): Add support for chirp
        argument passing to the pseudo device stack.

Sat Sep 21 19:39:56 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_error): Make it more tolerant to incomplete
        devices.

	* hw_init.c (hw_data_init_data_callback): Extend the data device
        so that it can perform initialization operations either dma or a
        more complex instance open, seek, write operation.
	* hw_init.c: Update the description of the data device to reflect
        this.

Sat Sep 21 00:13:02 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_event_queue_schedule,
        device_event_queue_deschedule, device_event_queue_time): Have the
        device object export the event operations.  Making these available
        from the device object should hopefully simplify writing device
        models.

Fri Sep 20 14:04:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* configure.in (sim-hardware): Add eeprom device to default build.

	* hw_eeprom.c: Rewrite so it works.

	* debug.h, debug.c: Add tracing support for the eeprom and com
        devices.

Thu Sep 19 14:40:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* debug.h: Add disklabel-package and disk-device trace options.
	debug.h (PTRACE): Add macro to simplify tracing in packages.

Thu Sep 19 14:40:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_create_instance_from): Tighten up loop
        searching for device instances.
	(device_instance_delete): Ditto.
	(device_instance_delete): Only leaf instances need to be removed
        from a devices list of active instances.

Thu Sep 19 14:40:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_disk.c: Add the cdrom as an alias.

	* pk_disklabel.c (disklabel_delete): Implement, remembering to
        delete the raw disk instance while we're at it.

	* pk_disklabel.c (pk_disklabel_create_instance): Implement a
        little bit more - still a long way to go.

	* pk_disklabel.c (disklabel_write, disklabel_read): Remember the
        new head position after a read or write.

Thu Sep 19 13:05:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_chirp.c (chirp_emul_read): Allow reads to be longer then
        the internal buffer.

Thu Sep 19 13:05:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_chirp.c (chirp_read_t2h_args): Call memset-0 with the args
        in the correct order.

	* emul_chirp.c (chirp_emul_call_method): Correct computation for
        the address of the first stack argument passed in from the client
        program.

Wed Sep 18 19:33:54 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* words.h: Add new types signed_cell and unsigned_cell which
        correspond to the signed and unsigned IEEE 1275 memory locations.
	* device.h, device.c, emul_chirp.c: Where refering to an IEEE 1275
        memory cell, replace uses of unsigned32 with unsigned_cell.
	* device_table.h: Ditto.

	* sim-endian.h: Add new macros H2BE_cell and BE2H_cell which
        convert cell sized values to from big endian.
	* device.c, emul_chirp.c: Where refering to IEEE 1275 memory cells
        use these new macros.

Tue Sep 17 15:57:44 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_tree_add_parsed): Detect and report an
        interrupt being attached to an invalid device. Was dumping core.

Mon Sep 16 23:09:12 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.h, device.c (device_address_to_attach_address,
        device_size_to_attach_size): New functions.  Convert a devices
        unit address or unit size structure into a form suitable for
        passing on to the attach and detach functions.
	* device_table.h: Add extra methods to device table.

	* device.h, device.c (device_find_reg_property): New function.
        For a reg type property, return the selected address + size
        tupple, along with a positive success status.  Add a reg_property
        to the list of property types.
	* (device_tree_add_parsed): Make array properties with the name
        reg or alternate-reg of type reg_property.

	* hw_memory.c (hw_memory_init_address): Rewrite to use new
        find_reg_property method.
	* hw_nvram.c (hw_nvram_init_address): Ditto.

	* device.c (device_tree_print_device): Add code to print out a reg
        property.

	* device_table.c (generic_device_address_to_attach_address,
        generic_device_size_to_attach_size ): New functions.  Generic
        functions for converting between unit and attach address or size.

	* device_table.c (generic_device_init_address): Rewrite to use the
        new find_reg and address convert functions.  Look for both reg and
        alternate-reg properties.

Mon Sep 16 23:09:12 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_com.c: New file.  A '550 serial device that can quickly be
        attached to any bus.
	* configure.in (enable-sim-hardware): Add the com device.
	* configure: re-generate.

Thu Sep 12 17:30:56 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_tree_verify_reg_unit_address): New
        function. Check that the unit address as specified by the reg
        property correctly corresponds to any unit address previously
        specified by the devices name.
	(device_tree_add_parsed): When adding a reg property, verify
	that the unit-address - first value of property - correctly
	matches any previous value specified when creating the device
	node.

Thu Sep 12 17:30:56 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* mon.c (mon_event): Remove assertion that an unsigned is >= 0.

Fri Aug 16 12:05:24 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* device.c (device_full_name): Cast strdup to char *, since AIX
	3.2.5 mistakenly declares the function to be const char *.
	(device_create_from): Ditto.
	(device_create_instance_from): Ditto.
	(device_add_property): Ditto.

Tue Aug 13 11:40:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* debug.c (trace_option): For -t all, do not set the
	trace_dump_device_tree flag, so that the simulator is run.

Tue Aug 13 11:40:14 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in (options.o): Depend on defines.h.
	(defines.h): New rule, go through config.h and make strings of all
	of the #define HAVE_xxx macros.
	(distclean): Remove defines.h.

	* options.c (print_options): Print whether many of the
	configuration macros are defined.

	* main.c (main): If -t options and no filename, just print the
	options, and don't print the usage message.

Mon Aug 12 18:42:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Test whether /dev/zero works on the system, and if
	it does, define HAVE_DEVZERO.
	* configure: Regenerate.

	* emul_generic.c (emul_add_tree_hardware): Do not add /iobus/disk
	if we don't have a working /dev/zero on the system.

	* emul_bugapi.c (emul_bugapi_init): If HAVE_DEVZERO is not
	defined, don't add disk support.
	(emul_bugapi_do_diskio): Ditto.
	(emul_bugapi_instruction_call): Ditto.

Wed Aug  7 14:34:20 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_unix.c (HAVE_TCGETATTR): If HAVE_TERMIOS_STRUCTURE is not
	defined, make sure HAVE_TCGETATTR is #undef'ed

Wed Aug  7 14:34:20 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* std-config.h (REGPARM): Only define REGPARM attributes if using
	GNU C.  Test for __i686__ in case GCC ever defines it.  If not on
	a x86 platform, define REGPARM as nothing.

	* sim-endian.h (WITH_HOST_BYTE_ORDER): Test for i686 and __i686__
	also.

Wed Aug  7 20:19:55 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* ld-decode.h, ld-decode.c: Rename goto_gen to the more correct
 	goto_switch_gen.
	* gen-idecode.c: Ditto.

	* gen-idecode.c (print_idecode_table): Comment out check for
 	switch/table combination until a bug with it is fixed.

	* ppc-opcode-goto: New file.  Like complex and flat but uses
 	goto-switch instead of padded-switch for the tables.

	* gen-idecode.c (print_goto_switch_name): New function.
	(print_goto_switch_table_leaf): New function.
	(print_goto_switch_break): New function.
	(print_goto_switch_table): New function. Prints a jump table
	that can be jumped into instead of a switch statement.

	* gen-idecode.c (*switch_*): As an option output a switch that is
 	implemented using a jump table but only if the switch is not
 	boolean.
	
Tue Aug  6 09:28:22 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (--enable-sim-{hardware,packages}): Fix typos.
	* configure: Regenerate.

	* device.c (device_instance_call_method): Fixup format message in
	error case.  Return 0 in case of error to shut up compiler
	warnings.

Wed Aug  7 00:17:37 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device_table.c (generic_device_unit_decode): Require a comma
        between elements of a unit address.

	* device.c (device_tree_print_device): For reg, alternate-reg and
        ranges properties use special print functions.
	(device_print_ranges_property): Print formatted ranges property.
	(device_print_reg_property): Print formatted reg property.

Tue Aug  6 21:35:18 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_tree_add_parsed): For reg, ranges and
        alternate-reg properties use a special parser.
	(device_tree_parse_reg_property): New function to parse a reg
	property.
	(device_tree_parse_ranges_property): New function to parse a
	ranges property.
	(device_encode_unit): Wrapper for encode_unit callback.
	(device_decoce_unit): Wrapper for decode_unit callback.

Wed Jul 31 00:02:30 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device_table.h (device_instance_callbacks): Relace the claim and
        release methods with a more general table mapping from method-name
        to method-function.

	* device.c (device_instance_call_method): New function.  Implement
        the OpenBoot call-method client interface.  Attempts to locate the
        instances method in the callback table.
	(device_instance_claim, device_instance_release): Delete.
        Replaced with call-method and a lookup table.

	* emul_chirp.c (chirp_emul_call_method): Use the new device
        instance call method and let that handle a client claim call.

	* hw_htab.c (claim_memory): Wrapper function to call the memory
        devices "claim" method using the new device-instance call-method
        interface.  Replaces the previous direct calls to claim.
	(htab_map_region): Use claim_memory.
	(htab_init_data_callback): Ditto.

	* hw_memory.c (hw_memory_instance_claim): Update function
        interface so that it is compatible with call-method.
	(hw_memory_instance_release): Ditto.
	(hw_memory_instance_methods): New table of memory specific
        methods claim and release.  Add to the hw_memory_callback
	table.

Tue Jul 30 21:26:14 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* psim.c (psim_init): Back out of change to initial value of
        system->last_cpu.

Tue Jul 30 21:12:24 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* sim_callbacks.h (sim_io_printf_filtered): Replace
	printf_filtered with a local simulator specific version.  Add
	#define printf_filtered to simplify updating of existing code.

	* sim_callbacks.h (sim_io_write_stdout, sim_io_read_stdin,
        sim_io_write_stderr): New functions.  Read / write to the
        simulations stdin and stdout and stderr interfaces.  Merge in code
        from hw_pal that previously handled async I/O.
	(sim_io_flush_stdoutput): Rename flush_stdoutput.  Add #define
	flush_stdoutput to simplify updating of existing code.

	* hw_pal.c (scan_hw_pal, write_hw_pal,
        hw_pal_instance_write_callback): Use the new sim_io functions.

	* main.c: Implement standalone versions of the new sim_io
        functions.  Include support for async I/O.
	* sim_calls.c: Ditto.  This time using the gdb callback table.

	* std-config.h (CURRENT_STDIO, current_stdio): New macro. Set up
        stdio configuration so that it works in the same way as the rest
        of the simulation.
	* psim.c (psim_create): Initialize current_stdio from the device
        tree.
	* emul_generic.c (emul_add_tree_options): Enter a default value
        for use-stdio in the device tree.

Fri Jul 26 19:43:03 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* gen-idecode.c (print_jump): Was always generating a jump back to
 	idecode.  Only necessary at tail of semantic code.
	(print_jump): Was always setting the processor's cia, even during
 	startup when the processor was still undefined.
	(print_jump): For safety, restart smp loop when cpu_nr >= nr_cpus,
 	not just equal.
	
	* options.c (print_options): Add printing of WITH_REGPARM and
 	WITH_STDCALL.

	* std-config.h (WITH_REGPARM, WITH_STDCALL): Provide default
 	(disabled) values if not defined.

Fri Jul 26 00:36:35 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* ppc-cache-rules (cache): Change RS and RB to cache instead of
        compute.  The block move instructions use them.

	* idecode_expression.h (FPSCR_SET): New macro, set specific FPSCR
        register.
	(CR_FIELD): New macro, extract specific CR register.
	(FPSCR_FIELD): New macro, extract specific FPSCR register.

	* registers.h (GPR): New macro, simplify accesses to GPR[i].

	* bits.c (INSERTED): Covert INSERTED macro into a function.
	(EXTRACTED): Conditionally compile on correct bit size macro.

	* bits.h (BIT8): New macro, set a single bit in an 8 bit byte.

	* ppc-instructions: With hints from Paul Martin, type in missing
	some instruction semantics.  Leave disabled for the moment.
	(Load Multiple Word): Ditto.
	(Store Multiple Word): Ditto.
	(Load String Word Immediate): Ditto.
	(Load String Word Indexed): Ditto.
	(Store String Word Immedate): Ditto.
	(Store String Word Indexed): Ditto.
	(Move to Condition Register from XER): Ditto.
	(Move From Condition Register): Ditto.
	(Move From FPSCR): Ditto.
	(Move to Condition Register from FPSCR): Ditto.
	(Move To FPSCR Field Immediate): Ditto.
	(Move To FPSCR Fields): Ditto.
	(Move To FPSCR Bit 0): Ditto.
	(Move To FPSCR Bit 1): Ditto.

Thu Jul 25 22:10:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* std-config.h (SEMANTICS_INLINE): By default, mask out the
        inlining of semantic functions from DEFAULT_INLINE.  Almost all
        configurations call the semantic code via a pointer so there is
        little benefit.

	* std-config.h (ICACHE_INLINE): Ditto.

Thu Jul 25 20:07:30 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* configure.in (sim_regparm): Add configuration option for
        enabling GCC's regparm attribute.
	* (sim_stdcall): Add configuration option for enabling GCC's
        stdcall attribute.

	* Makefile.in (REGPARM_CFLAGS): Pass regparam configuration onto
        compilations.
	* (STDCALL_CFLAGS): Pass stdcall configuration onto compilations.

	* std-config.h (REGPARM): Extend construction of REGPARM macro so
        that it can include __stdcall__ function attribute.

Wed Jul 24 19:04:20 1996  Andrew Cagney  <cagney@sawnoff>

	* options.c (print_options): Include SUPPORT_INLINE in information
 	dump.

	* gen-idecode.c (print_run_until_stop_body): Only generate loop
 	termination test if creating idecode_run_until_stop.  Push the
 	loop termination test back into each alternative branch.

Wed Jul 24 15:47:09 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* gen-icache.c (print_icache_function): Have the cache function
 	always update the cache_entries semantic and address fields.

	* gen-idecode.c (print_idecode_switch_illegal): Include a break
 	when generating illegal instructions.  This was commented out
 	which is a hangover from looking a at switch statements generated
 	using indirect jumps.

Tue Jul 23 20:57:01 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* igen.c (print_my_defines): Replaces print_define_my_index.
        Print both a definition for MY_INDEX and MY_PREFIX.
	* gen-icache.c (print_icache_function): Adjust.
	* gen-idecode.c (print_jump_insn): Adjust.
	* gen-semantics.c (print_c_semantic): Adjust.

	* gen-support.c (gen_support_h): Add optional include to created
        support.h so that, like cpu, it is optionally inlined for all
        modules that include it.
	* inline.h, inline.c: Adjust so that support.[hc] is handled the
        same as cpu.[hc].

	* idecode_fields.h (LABEL, GOTO): Macro's that create a unique
        name for a lable and then branch to it.

	* ppc-instructions (convert_to_integer, Floating Round to
        Single-Precision, Floating Convert from Integer Doubleword): Use
        LABEL and GOTO instead of the recently added switch statements.

Wed Jul 24 14:02:42 1996  Andrew Cagney  <cagney@sawnoff.highland.com.au>

	* gen-idecode.c (print_run_until_stop_body): Too many rparen in
 	generated code.

Tue Jul 23 20:57:01 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* configure.in (--enable-sim-line-nr): Typo - sim_line-nr.
	* (--enable-sim-inline): Reorder patern matching of arguments so
        that SUPPORT=ALL_INLINE is reconized as *=* and not *_INLINE.

	* configure: rebuild.

Mon Jul 22 23:25:08 1996  Andrew Cagney  <cagney@highland.com.au>

	* configure.in (--enable-sim-hardware, --enable-sim-packages): New
        configuration options.  Let the user specify the packages or
        hardware devices that are to be included in the build.  Makes it
        possible for user packages to be specified.

	* Makefile.in (tmp-pk, tmp-hw): Just use the list of packages and
	hardware instead of checking it using ls.  configure.in should
	have taken care of any problems.
	(HW_SRC, HW_OBJ, PACKAGE_SRC, PACKAGE_OBJ): Set by configure.

Mon Jul 22 22:38:59 1996  Andrew Cagney  <cagney@highland.com.au>

	* psim.c (psim_options): Enter the argument to the memory size
        option directly into the device tree.  Was using atol() which is
        dangerously non portable.

Mon Jul 22 22:17:08 1996  Andrew Cagney  <cagney@highland.com.au>

	* configure.in (icache): Extend icache flag to include an insn
        option.  If specifyed the insn - aka instruction - is included in
        the instruction cache.  Make this the default.
	* configure: re-generate.

	* igen.c (main), igen.h: Add option -S - inSn - for specifying
        that the instruction should be included in the icache.

	* gen-icache.c (print_icache_body): If enabled, output code to put
        the instruction into the icache.
	(print_icache_struct): If enabled, add insn to the icache struct.

Mon Jul 22 20:46:12 1996  Andrew Cagney  <cagney@highland.com.au>

	* Makefile.in (BUILD_CFLAGS): Include -g when building the
        generators.

Mon Jul 22 20:00:25 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_generic.c (emul_add_tree_options): Was incorrectly setting
        the strict-alignment option when hardwired for non-strict
        alignment.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* gen-semantics.c: Make the my_index variable a macro MY_INDEX.

	* ppc-instructions: Adjust so that references are to MY_INDEX and
        not my_index.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* gen-idecode.c: Output the complete run_until_stop function
        instead of just the code to handle a single instruction issue.
	* : Have the generated idecode.c include inline.c (instead of psim.c).

	* std-config.h: Change psim.c so that it isn't inlined (as this is
        no longer needed).

	* psim.c (run_until_stop): Delete the old run_until_stop function
        instead calling the idecode_run and idecode_run_until_stop
        functions that gen-idecode.c is now creating.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* dgen.c: Maintenance - update to use new features found in lf.c.

	* filter_filename.c (filter_filename): Maintenance - make the
        string constant.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* debug.c (TRACE, ITRACE, DTRACE): Have GCC instead of CPP
        eliminate trace statements.

	* debug.c: Change trace format so that it is consistent
        (file:line-nr) with CC's error output.

	* gen-itable.c (itable_c_insn): Add the source file name and
        source line number to the instruction's informational entry.

	* debug.c (ITRACE): Use the itable (and my_index) to get the
        current instructions name and source line number.

	* gen-semantics.c, gen-icache.c: Adjust generated ITRACE calls to
        match new interface.

	* emul_bugapi.c (emul_bugapi_instruction_call): Adjust
        corresponding call to ITRACE so that it still matches.

	* idecode_expression.h (ALU_END, CR0_COMPARE): Use TRACE instead
        of ITRACE.  The CPP line directives would have previously set the
        line-nr and file name so ITRACE isn't needed.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* gen-idecode.c (print_jump_until_stop_body): New function and
        idecode generation option.  Instead of generating and calling
        separate functions containing the semantic and icache code
        generate a single monolythic function and use goto's (and GCC's
        indirect jump) to move between code blocks.

	* Makefile.in: Add sim_jump flag to those passed to igen.

	* configure.in: New option --enable-sim-jump (default disabled)

	* ppc-instructions: Eliminate any uses of labels and goto's.
        These result in duplicate declarations when a single flat function
        is being create.

	* ppc-opcode-jump: New file.  Set of opcode rules useful when
        testing jumping idecodes.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* gen-idecode.c: Optionally include the semantic code for an
        instruction in the function that is doing the decoding.

	* igen.c: Add option (-C) to generate semantics in the instruction
        decode functions.

	* configure.in (--enable-sim-icache): Accept an option list such
        as 1024,define.  Add a new choice to the list - semantic - which
        will cause igen to generate instruction decode functions that
        include the corresponding semantic code.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* configure.in: New option --enable-sim-line-nr (default enabled).
        Enable/disable the inclusion of CPP line directives in the
        generated files.  Such directives refer back to the source files
        used when generating the simulator code.

	* Makefile.in (sim_line_nr): Pass to igen.

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* igen.c (main): Revamp the options so that more letters are
        available.

	* configure.in: Adjust to match igen's revamped options

Sun Jul 21 21:18:05 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* Makefile.in (pk.h, hw.h): Rewrite depenencies for hw.h (etc) so
        that they use the same technique as igen (ie a dummy targets
        tmp-pk and tmp-hw are created).

Mon Jun 24 22:28:00 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* Makefile.in (BUILD_CFLAGS): Include WARNING_CFLAGS.

Wed Jun 19 21:45:28 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* ld-cache.[hc], ld-decode.[hc], ld-insn.[hc]: New files. Separate
        out the loading of each of the tables from the rest of igen.
	* Makefile.in: Adjust.
	* igen.c: Adjust.

	* gen-icache.[hc], gen-idecode.[hc], gen-itable.[hc],
        gen-model.[hc], gen-semantics.[hc]: New files. Separate out the
        code creating each separate set of generated files.
	* Makefile.in: Adjust.
	* igen.c: Adjust.

	* gen-support.[ch]: New files. Output the support functions (found
        in the ppc-instructions file) into a separate file.
	* Makefile.in: Add.
	* inline.h, inline.c: Add.
	* std-config.h: Add.

	* ld-cache.c: Re-design the cache table format.
	* ppc-cache-rules: Update to new format.

	* ld-decode.c: Re-design the decode table format.
	* ppc-opcode-simple: Update to new format
	* ppc-opcode-complex: Ditto
	* ppc-opcode-flat: Ditto

	* filter.h, filter.c: New files. Separate the opcode filter table
        reading code from the rest of igen.c.  Re-design the filter so that
	it works inclusivly not exclusivly.
	* igen.c: Remove the opcode filter table loading code.
	* Makefile.in (filter.o): Adjust
	* configure.in: Adjust filter flag so that default includes 32bit
	and floating point.
	* ppc-instructions: Clean up filter fields so that only in use
        entries are specified (ie delete `be').

	* misc.c (name2i, i2name): New function.  Map between a string and
        an integer value.

Mon Jun 17 20:08:03 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* sim_calls.c (sim_close): If simulator not created, skip printing
        of run information.

Mon Jun 17 20:08:03 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* registers.c (register_description): Typo, insns not insn.

	* ppc-instructions (model_get_number_of_stalls): New model function,
	returns number of stalls for the specified processor.
	* psim.c (psim_read_register): Add call to new function
	model_get_number_of_stalls().

	* ppc-instructions (model_get_number_of_cycles): New model function,
	returns number of stalls for the specified processor.
	* psim.c (psim_read_register): Add call to new function
	model_get_number_of_cycles().

Fri Jun 14 00:11:56 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device_table.h: Don't pass the parent device into a devices
        create function.  This makes the create function consistent with
        the documentation.
	* device.c (device_template_create_device): Ditto
	* hw_pal.c (hw_pal_create): Ditto
	* hw_core.c (hw_core_create): Ditto
	* hw_vm.c (hw_vm_create): Ditto
	* hw_disk.c (hw_disk_create): Ditto
	* hw_nvram.c (hw_nvram_create): Ditto
	* hw_memory.c (hw_memory_create): Ditto
	* hw_cpu.c (hw_cpu_create): Ditto.

	* device.c (split_find_device): Allow a null initial parent device.
	(device_template_create_device): Ditto.

	* device.c (device_create_from): Make local (static) only used
        within device.c.
	* device_table.h: typedef device_callbacks moved here (from
        device.h) where it belongs.

	* hw_core.c: New file. Implements just the core device using the
        core object.

	* corefile.c: Moved all core device functions into the new
        hw_core.c file. core_device_create() disapears.

	* psim.c (psim_tree): Use device_tree_add_parsed() to create the
        core device.

Thu Jun 13 00:09:29 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_init.c: Correct typo in comment.

	* corefile.c (core_init): Remove any remaining references to a
        default map.
	(core_map_find_mapping): Ditto.

Wed Jun 12 22:30:32 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* corefile.c (core_init): Make function global so that other
        devices are able to use the full core object.

	* corefile.c (core_create, core_from_device): Break core_create
        into two functions.  The first creates a core object, the second
        returns the core object associated with a core device.

	* corefile.c (core_device_create): Use core_create to make the
        core object.

	* psim.c (psim_create): Use core_from_device() instead of
        core_create().

	* device.c (device_template_create_device): Make static as only
        needed by functions internal to device.c.

Fri Jun  7 23:47:18 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* ppc-opcode-test-2: Remove description of fields.
	* ppc-opcode-complex: Ditto
	* ppc-opcode-flat: Ditto
	* ppc-opcode-simple: Ditto
	* ppc-opcode-stupid: Ditto
	* ppc-opcode-test-1: Ditto
	* ppc-cache-rules: Ditto

	* igen.c: Add description of files as a comment at the front.

Wed Jun 26 12:50:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in: Check for whether the termios and termio
	structures are really defined, and whether or not, they define the
	c_line field.
	* configure: Regenerate.

	* Makefile.in ({,TERMIO_}CFLAGS): Add TERMIO_CFLAGS options set by
	configure.

	* emul_unix.c: Various changes to allow for building on systems
	with different termio and termios structures.  If host has both
	termio and termios, just use termios.  No longer include
	sys/ioctl.h.

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

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

Wed Jun  5 23:53:42 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* corefile.h: Rewrite documentation so that it can be extracted and
        converted into texinfo (and hence ready for translation into html,
        tex or nroff).
	* device.h: Ditto

Thu Jun  6 09:52:37 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* hw_disk.c (SEEK_SET): If SEEK_SET is not defined, define as 0.

Wed Jun  5 11:46:52 1996  Andrew Cagney  <cagney@puddin>

	* hw_disk.c: Include <unistd.h> if available.  Under SunOS, that
 	is the source of SEEK_SET.

Wed Jun  5 01:39:07 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* psim.c (psim_options): Correct type of dummy arguments being
        passed to a device_ioctl call.

	* hw_init.c (hw_data_init_data_callback): Adjust printf arguments.
	(write_stack_arguments): Ditto.
	* hw_trace.c: Instance callback entry no longer a table.

Wed Jun  5 01:39:07 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_unix.c (do_unix_umask): Cast printf argument.
	(convert_to_linux_termios): Use LINUX_VSWTC not LINUX_VSWCH

Mon Jun  3 15:02:04 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* hw_init.c (update_for_binary_section): Abort if we find an
	.interp section, which indicates the need for shared libraries to
	be loaded.

Mon Jun  3 15:02:04 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_unix.c (do_unix_{time,gettimeofday,getrusage}): Add support
	for time, gettimeofday, and getrusage system calls.
	({solaris,linux}_descriptors): Add new system calls.
	(do_get{,e}{uid,gid}): Use gid_t/uid_t types.
	(do_get{,p}pid): Use pic_t types.

	* configure.in (AC_TYPE_{GETGROUPS,SIGNAL}): Define.
	(AC_TYPE_{MODE,OFF,PID,SIZE,UID}_T): Define.
	* config{.in,ure}: Regenerate.

Mon Jun  3 23:19:57 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_netbsd.c (emul_netbsd_create): Use the more specific names
        `ppc-elf' and `ppc-xcoff' for the stack-type.
	* emul_unix.c (emul_unix_create): Ditto.
	* emul_bugapi.c (emul_bugapi_create): Ditto.
	* hw_init.c: Reconize the new names.

	* emul_unix.c (do_unix_break): Adjust so that the updated ioctl
	call is used (no system parameter).

Sun Jun  2 11:21:17 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_unix.{h,c}: New files to provide Solaris and Linux system
	call emulations.

	* Makefile.in (LIB_{SRC,OBJ}): Add emul_unix.{c,o}.
	(os_emul.o): Depend on emul_unix.h.
	(emul_unix.o): New dependency.

	* configure.in (--enable-sim-alignment): Add 0|default to mean set
	alignment to 0, which means use appropriate alignment for mode.
	(AC_CHECK_FUNCS): Add new functions needed by emul_unix.c.
	(AC_CHECK_HEADERS): Add new include files needed by emul_unix.c.
	* config.in: Regenerate.
	* configure: Regenerate.

	* emul_generic.c (emul_write2_status): New function to return
	results in r3 and r4 for Solaris system calls.
	(emul_do_system_call): If the system call is not support, but
	there is a string for the system call name, print out the string
	instead of the system call number.

	* emul_generic.h (emul_write2_status): Declare it.

	* emul_netbsd.c: Use /* */ around comment on #endif.

	* os_emul.c: Include emul_unix.h.
	(os_emulations): Add emulations for Solaris, and Linux.

	* psim.c (psim_usage): Add message about solaris, linux
	emulations.

Thu May 30 00:00:10 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_iobus.c: Tidy up notes so that they can be auto-extracted.

	* README: Correct PSIM's title

Wed May 29 23:50:26 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* basics.h: New global type object_disposition, used to indicate
        the status of objects when things are restarted.

Fri May 17 17:28:52 1996  Andrew Cagney  <cagney@benjimen.highland.com.au>

	* device_table.h: Change the interrupt descriptor structure so
        that it includes an additional member - an upper bound on the
        interrupts by that name.

	* device.c (device_interrupt_decode): Allow a range of interrupt
        ports (eg rst0 .. rst6) if the port descriptors bound is non zero.

	* device.c (device_tree_print_device): Include a list of valid
        interrupt ports when listing supported devices.

	* device.h, device.c (device_child_interrupt_*): Delete. Not used.

	* emul_generic.c (emul_add_tree_hardware): Modify the creation of
        the interrupt net so that it uses int0 .. intN.

Tue May 14 23:03:53 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.h, device.c (device_ioctl): Drop the system argument.
        Devices can not obtain this using the device_system() call.
	* device_table.h: Adjust accordingly.
	* hw_*.c: Adjust accordingly.
	* emul_netbsd.c (do_break): Adjust call to vm device accordingly.
	* psim.c (psim_options): Use a device_ioctl call to force the
        hw_trace device to update the trace options.
	* hw_trace.c: Replace the init function with an ioctl call.  Adjust
	doc accordingly.

	* psim.c (psim_init): Re-order initialization so that the
        os-emulation is initialized after the device tree.  Without this,
        os-emul's are not able to create instances or access properties
        that contain an instance handle.

	* device.h, device.c (device_add_*_property): Make these functions
        internal to device.c.  The user has access to the more generic
        device_tree_add_parsed function.  Differentiate between the initial
	and current value for each property.
	* (clean_device_properties): New function that deletes any
	properties created after the start of a simulation and restores
	the initial value of any others (ignoring ihandles).
	* (init_device_properties): (Re)Initialize any properties that
	contain ihandles. create

	* (device_tree_init): Include calls to clean the device tree's
        properties and then initialize them.  Document this in the device.h
	file.

Mon May  6 17:36:15 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* interrupts.c (decrementer_interrupt): Always pend a decrementer
        interrupt even if it is not yet possible to deliver it.

Wed May  1 12:26:51 1996  Andrew Cagney  <cagney@benjimen>

	* mon.h, mon.c (mon_get_number_of_insns): Make this externally
 	visable adjusting the arguments so that the interface is correct.
	(mon_print_info): Adjust calls.
	
	* registers.h, registers.c (register_description): Add phony
 	cycle, insn and stall registers.

	* psim.c (psim_read_register): Return nr of instructions for given
 	processor.

Tue Apr 30 22:09:09 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_htab.c: New file. Extract contents from disk_table.c.
        Contains a device that, during initialization will create a
        PowerPC htab in memory.
	* hw_register.c: New file. Extract contents from disk_table.c.
        Contains a device that, during initialization, will parse its
        property list and use that to initialize various processor
        registers (not target specific).
	* hw_vm.c: New file. Extract contents from disk_table.c.  Contains
        a device that handles accesses to invalid virtual memory addresses
        (in user mode).
	* hw_init.c: New file. Extract contents from disk_table.c.  Misc
        devices that can initialize memory from a file.
	* hw_trace.c: New file. Extract contents from disk_table.c.
        Configure trace options from property values.

	* Makefile.in (hw_htab.o, hw_register.o, hw_vm.o, hw_init.o,
        hw_trace.c): Add new device files.

	* device_table.c: Remove above code, now in separate independant
        files.

Fri Apr 26 00:00:07 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_disk.c: New file.  Disk and CDROM device.

	* Makefile.in (hw_disk.o): Add device hw_disk.c.

	* pk_disklabel.c: New file.  Implement the miss-named disk-label
        package.

	* Makefile.in (pk.h): Create the file pk.h that contains a list of all
	the packages.

	* Makefile.in (hw.h, hw.c): Add dependancy on Makefile so that
        they are re-created when the makefile is updated.

	* emul_generic.c (emul_add_tree_hardware): Add a disk device
        (below the iobus) to the device tree.  Include an ihandle of
	the disk as /chosen/disk.

	* emul_bugapi.c (emul_bugapi_create): Don't initialize the input,
        output and (new) disk handles yet.
	* (emul_bugapi_init): Initialize the input, output (and just added)
	disk ihandles here.
	* (emul_bugapi_do_diskio): New.  Performs disk i/o (well at least
	what I think the behavour is).
	* emul_bugapi.c (emul_bugapi_instruction_call): Add hook to disk
	i/o bug call.  For RETURN call, exit using gpr[3]'s status even
	though this isn't part of the spec - makes it possible for machine
	code to signal the aporting of a simulation run.

	* emul_chirp.c (chirp_emul_call_method): Add support for the
	claim/release methods.
	* (chirp_emul_exit): Add an optional exit status argument to
	the exit method.  Makes it possible for chirp emul simulations
	to abort upon an error.
	* device.h, device.c (device_instance_claim,
        device_instance_release): New methods for claiming and releasing
	memory.
	* hw_memory.c: add claim and release memory methods.
	* hw_*: Use the claim memory method when allocating physical
	memory.

Thu Apr 18 23:38:10 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_nvram.c (hw_nvram_update_clock): Use the current not previous
        time when updating the clock.

	* hw_nvram.c: Tidy up documentation

Fri May 24 10:08:10 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (AC_STRUCT_ST_{BLKSIZE,BLOCKS,RDEV}): Use these
	macros to determine whether or not the appropriate st_<xxx> fields
	exist in the stat structure.
	(AC_CHECK_FUNCS): Check for all unix system calls used, except for
	the real basic ones like open, read, write, etc.
	* config{.in,ure}: Regenerate.

	* emul_netbsd.c: Add support for missing system calls, and/or
	missing stat fields.
	(MAXPATHLEN): Undefine if including unistd.h, since sys/param.h
	might define it.

	* hw_pal.c (WITH_STDIO): Redefine if O_NDELAY, F_GETFL, or F_SETFL
	are not defined.
	(scan_hw_pal): Do not cause syntax error if O_NDELAY, F_GETFL, or
	F_SETFL not defined.

Tue May 21 17:24:45 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* emul_netbsd.c (write_stat): Don't convert st_blocks unless the
	host is netbsd.

Thu May 16 10:56:45 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (AC_CHECK_HEADERS): Add sys/ioctl.h.
	* config{.in,ure}: Regenerate.
	* emul_netbsd.c: If HAVE_SYS_IOCTL_H is not defined, don't include
	sys/ioctl.h.

Tue May  7 17:28:12 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* hw_pal.c (hw_pal_instance_read_callback): Remove unused
	variable.

	* misc.c ({,target_}a2i): Rewrite to not use strtoul.

	* Makefile.in ({spreg,misc}.o): Add dependency on .c file.
	({i,d}gen): Don't link in liberity.  Use BUILD_LIBS instead of
	LIBS.

Mon May  6 11:31:43 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* hw_pal.c (hw_pal_instance_read_callback): If using stdio, use
	fgets to read line.  If not using stdio, do a simple blocking read
	of len bytes.

Fri May  3 15:07:42 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* Makefile.in: Correctly build simulator for build machine != host
	machine.

Tue Apr 30 18:46:05 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* configure.in (--enable-hostendian): Rework so the default uses
	the AC_C_BIGENDIAN results.  Only run AC_C_BIGENDIAN if not cross
	compiling.
	* configure: Regenerate.
	
	* sim-endian.h: Add more tests for host endian to support more
	platforms in a cross compilation environment.

Wed Apr 17 14:38:06 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* hw_pal.c ({scan,write}_hw_pal): If WITH_STDIO == DO_USE_STDIO,
	use stdio, instead of unpended read/printf_filtered.
	(hw_pal_instance_write_callback): If WITH_STDIO == DO_USE_STDIO,
	flush stdout after writing the characters.

	* options.c (print_options): Print out WITH_STDIO.

	* Makefile.in (STDIO_CFLAGS): Pass on result of @sim_stdio@
	configuration variable.
	(CONFIG_CFLAGS): Include STDIO_CFLAGS.
	(hw.{c,h}): Allow for source dir != build dir, and for HW_SRC
	files to contain directory pieces.

	* std-config.h (DO{,NT}_USE_STDIO): New flags for whether we
	should use stdio for console input.
	(WITH_STDIO): If not defined, define as DONT_USE_STDIO.

	* configure.in (--enable-sim-stdio): Add new switch to control
	whether stdio is used for console I/O.
	* configure: Regenerate.

	* interrupts.c (external_interrupt): Declare it to be
	INLINE_INTERRUPTS, not INLINE_CPU.

Mon Apr 15 23:30:56 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* events.c (insert_event_entry): Allow events to be scheduled
        *NOW* (at delta time 0).  Add assertions to clarify behavour of
        event queue.

	* events.c (update_time_from_event): New function. Calculates the
        number of ticks from the next event.  Use this.

Sun Apr 14 21:39:45 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_netbsd.c (do_break): Return 0 if success (instead of
        adjusted break).

	* device_table.c (vm_ioctl_callback): Don't return adjusted break
        (isn't needed).

Sun Apr 14 21:32:41 1996  Andrew Cagney  <cagney@highland.com.au>

	* device_table.h: Change type of the device ioctl so that it
	returns an int (status).
	* device.h (device_ioctl): Ditto.
	* device.c (device_ioctl): Ditto.

	* device_table.c (stack_ioctl_callback): Return 0 status.
	(vm_ioctl_callback): Ditto

Sat Apr 13 00:00:24 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_netbsd.c (do_read): Correctly set the return value.
	(do_getpid): Ditto.
	(do_getuid): Ditto.
	(do_geteuid): Ditto.
	(do_dup): Ditto.
	(do_getegid): Ditto.
	(do_getgid): Ditto.
	(do_sigprocmask): Ditto.
	(do_umask): Ditto.
	(do_dup2): Ditto.
	(do_gettimeofday): Ditto.
	(do_getrusage): Ditto.
	(do_fstat): Ditto.
	(do_stat): Ditto.
	(do_lseek): Ditto.
	(do___sysctl): Ditto.

Fri Apr 12 20:56:47 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device_table.c (vm_ioctl_callback): Don't access the processor
        registers directly, instead leave it to the caller to handle this.

	* emul_netbsd.c (do_break): Which calls vm_ioctl_callback to
        perform a break.  Pass in the new break value and set the
        registers according to the result.

	* emul_generic.c (emul_write_status): Change so that r3 contains
        either status or errno and failure is indicated by SO.

Thu Apr  4 23:03:38 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_bugapi.c (emul_bugapi_create): More strict check of OEA
        address.

Thu Apr  4 20:58:05 1996  Andrew Cagney  <cagney@highland.com.au>

	* interrupts.h (interrupts): New structure contains state of
        pending interrupts.

	* cpu.c (cpu_interrupts): New function.  Pending interrupt status
        in the cpu and grant access to it.  Add interrupts to cpu
        structure.

Fri Mar 29 22:09:25 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.c (device_tree_add_parsed): Check that the creation of a
        device instance worked before using it.

	* psim.c (psim_halt): Remove cia argument from psim_halt.  This
        function does not save the CIA so do not pass it in.

Fri Mar 29 21:30:56 1996  Andrew Cagney  <cagney@highland.com.au>

	* hw_pal.c (hw_pal): Merge the halt and icu and console devices
        found in device_table.c into a single hack pal.

	* device_table.c (halt, icu, console): Delete.

	* Makefile.in (hw_pal.o): New dependency.

	* emul_generic.c (emul_add_tree_hardware): Re-arange device tree
        so that it uses the pal instead of the icu/halt/console devices.
        Wire the pal's interrupt ports up to the cpu nodes.

Fri Mar 29 20:17:17 1996  Andrew Cagney  <cagney@highland.com.au>

	* hw_iobus.c (hw_iobus_attach_address_callback): Move from
        device_table.c to here.

	* Makefile.in (hw_iobus.o): New dependency.

Fri Mar 29 12:17:58 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* emul_bugapi.c (_os_emul_data): Add fields for output, input.
        (emul_bugapi_create): Create input, output from /chosen/stdin and
        /chosen/stdout.
        (emul_bugapi_do_{read,write}): Switch to use device_instance
        interface.
        (emul_bugapi_instruction_call): Change calls to
        emul_bugapi_do_{read,write} to pass device instance argument.

Tue Mar 26 14:57:58 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* igen.c (idecode_switch_end): Fix 2/26 change so that an extra
        default is not written out if a default was already written.

	* psim.c (psim_{read,write}_register): Use sizeof unsigned_8 to
        size cooked_buf, not sizeof natural_word, since floating point
        registers are 8 bytes.

Mon Mar 25 22:07:13 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* configure: Regenerate with autoconf 2.9.

Thu Mar 21 00:14:26 1996  Andrew Cagney  <cagney@highland.com.au>

	* device_table.h: Always include string headers.

Thu Mar 21 00:06:09 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* main.c (error): Be careful to not try to print out statistics
        when the simulation was never created.

Sun Mar 17 22:40:57 1996  Andrew Cagney  <cagney@highland.com.au>

	* basics.h: Move the event queue's definition to here so that it
        can be refered to globally with out importing all of events.h.

	* psim.h, psim.c (psim_event_queue): New function.  Grant access
        to the simulation event queue.  Will make this the single point of
        access (there is after all only one event queue in the
        simulation).

	* cpu.c (cpu_create): Use psim_event_queue to obtain the event
        queue instead of it being passed in.  No longer allow access to
        the cpu's copy of the event queue.

Sun Mar 17 22:40:57 1996  Andrew Cagney  <cagney@highland.com.au>

	* events.h, events.c (event_handler): Remove event_queue from
        arguments passed to an event handler.  That argument is redundant
        - the `data' should refer to a data structure that contains the
        event queue if queing is needed.

	* cpu.c (cpu_decrement_event): adjust

	* events.c (event_queue_process): adjust

Sun Mar 17 22:40:57 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.h, device.c (device_system): New, returns a handle for
        the system given the device.

	* device.c (device_address_init): Store a pointer back to the
        system in each devices node.

	* device_table.h: Don't pass `system' into each device when it is
        being initialized, this is now available using device_system(me).

	* device.c (device_address_init, device_data_init): Adjust.

	* hw_cpu.c, hw_nvram.c, hw_memory.c, hw_eeprom.c, device_table.c:
        Adjust.

Sun Mar 17 22:40:57 1996  Andrew Cagney  <cagney@highland.com.au>

	* interrupts.c (decrementer_interrupt, external_interrupt):
        Remember that an interrupt wasn't delivered so that it can be
        tried again later.

	* interrupts.c (check_masked_interrupt): New function.  (re)
        checks for the posibility that a recent change to the MSR may have
        made it possible to deliver an interrupt that was previously
        masked be the EE bit.

	* ppc-instructions (mtmsr, mfmsr, rfi): Check for posibility of
	a pending interrupt being delivered using check_masked_interrupt().

	* cpu.c (cpu_decrement_event): Just call decrementer_interrupt()
        leaving it to that module to handle both interrupt synchronization
        and masking.

	* cpu.c (struct _cpu): remove variables that were going to record
        pending decrementer and external interrupts.

Sun Mar 17 22:40:57 1996  Andrew Cagney  <cagney@highland.com.au>

	* hw_cpu.c, hw_cpu.h: New files.  Implement a device that sits
        between the interrupt controller and the simulators internal
        processor model.  Maps device interrupts onto the processor
	interrupt function calls.

Mon Mar  4 06:06:54 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* hw_nvram.c: NVRAM device that includes a real-time clock that is
        updated each second.

Mon Mar  4 04:18:50 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.h (attach_type): Remove attach_default type address
        spaces.  Will replace with levels of callback memory.

	* corefile.h, corefile.c (new_core_mapping), corefile.c
        (core_map_attach): Replace default attach with a layerd callback
        approach.

Sun Mar  3 03:58:46 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (split_property_specifier): ensure that only a single
        property is found.
	(split_value): New function, parses the value part of a device
	spec.

	* device.c (device_tree_add_parsed): Use the interrupt conversion
        functions to determine the interrupt port numbers.

	* device_table.h: Add table that maps between an interrupts
        symbolic name and its port number.

	* device.h, device.c (device_interrupt_decode,
        device_interrupt_encode): new functions use the recently added
        interrupt port name/number tables to perform conversion.

Sun Mar  3 03:23:59 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.h, device.c (device_set_array_property,
        device_set_boolean_property, device_set_ihandle_property,
        device_set_integer_property, device_set_string_property): New
        functions - allow the value of a given property to be changed.

	* device.h, device.c: Re-order declaration and definition of
        property functions.

Sun Mar  3 03:10:22 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* device.c (device_tree_print_device, device_tree_add_parsed):
        Remove references to phandle properties.

Wed Feb 28 00:43:07 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* Makefile.in (corefile.o): missing dependency on device_table.h
        etc.

Tue Feb 27 23:59:35 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* device_table.h: Revamp device init callbacks so that they are a
        sub structure.
	* device.c (device_init_data, device_init_address): If an init
        callback is NULL assume it should do nothing.
	* device_table.c (ignore_device_init, unimp_device_init): delete
        as redundant.
	* device_table.c, hw_memory.c: adjust.

	* (io): ditto.
	* (dma): ditto.
	* (device_instance): ditto.
	* (ioctl): ditto.
	* (address nee config_address): ditto.
	* (interrupt): ditto.

Mon Feb 26 21:11:20 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* igen.c (idecode_switch_end): Output a default entry when the
        switch statement is perfect.  Firstly stops GCC complaining about
        an incomplete switch and secondly it will be eliminated by a good
        compiler any way.

Mon Feb 26 22:47:15 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* Makefile.in (hw.h, hw.c): New targets. Create from the list of
        hw_*.c files. hw.h declares a device descriptor table for each hw
        device while hw.c lists those tables in a form suitable for the
        construction of a top leveltable in device_table.c.

	* Makefile.in (device_table.o): now depends on hw.c a generated
        table of hw.

	* device_table.c (device_table): Re-arange the table of devices so
        that two levels are possible.  Make use of hw.c.
	* device_table.h: ditto.

	* device.c (device_template_create_device): Handle new two level
        device lookup table.
	* device.c (device_usage): ditto.

Mon Feb 26 22:24:00 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* device_table.c: Delete the memory device (moved to hw_memory.c).

	* hw_memory.c: New file.  Just an OpenBoot memory device.

Wed Jan 17 21:47:34 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.c (device_init_address): New.  Split initialization into
        two stages, address and address spaces
	* device.c (device_init_data): New. ... and data or other work.
        With out this, devices try to modify memory before it as been
        attached.

	* device.c (device_tree_init): Update to perform staged
        initialization.

	* device.c (device_init): Delete.

Wed Jan 17 21:43:09 1996  Andrew Cagney  <cagney@highland.com.au>

	* device_table.c (data_*): Rewrite to make heaver use of property
        nodes. Allow initialization by different data types.
	* device_table.c (htab_* pte_*): Rewrite to use properties.

	* emul_chirp.c (emul_chirp_create): Use
	* emul_bugapi.c (emul_bugapi_create): Ditto
	* emul_netbsd.c (emul_netbsd_create): Ditto

Wed Jan 17 21:24:50 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_generic.c (emul_add_tree_options): Annotate existing tree
        with options that haven't yet been specified.
	* emul_generic.c (emul_add_tree_hardware): Annotate existing tree
        with demo devices and properties.

	* emul_chirp.c (emul_chirp_create): Update to use new
        device_tree_add_parsed call and additional information now
        included in the device tree.  Use emul_add_tree* functions to add
        any missing details.
	* emul_bugapi.c (emul_bugapi_create): Ditto
	* emul_netbsd.c (emul_netbsd_create): Ditto

Wed Jan 17 21:18:27 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.c (device_instance_create): New. Create/delete and
        operate on instances of a device.
	* device.c (device_instance_delete): Ditto
	* device.c (device_instance_read): Ditto
	* device.c (device_instance_write): Ditto
	* device.c (device_instance_seek): Ditto
	* device.c (device_instance_data): Ditto
	* device.c (device_instance_name): Ditto
	* device.c (device_instance_path): Ditto

	* emul_chirp.c (chirp_emul_open): Implement using device_instance.
	* emul_chirp.c (chirp_emul_close): Ditto
	* emul_chirp.c (chirp_emul_read): Ditto
	* emul_chirp.c (chirp_emul_write): Ditto
	* emul_chirp.c (chirp_emul_seek): Ditto

	* emul_chirp.c (chirp_read_t2h_args): Read arguments from device.
        Being careful to convert all from target to host byte order.
	* emul_chirp.c (chirp_write_h2t_args): Converse.

Wed Jan 17 20:07:15 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.c (device_tree_add_parsed): New.  Rewrite code to add
        devices to the device tree so that a single printf style function
        is used.

	* device.c (device_tree_add_*): Delete. Replaced by above.

	* device.c (split_device_specifier): Functions to manipulate a
        device specifier (path) breaking it into its components
	* device.c (split_property_specifier): Ditto
	* device.c (split_device_name): Ditto
	* device.c (split_find_device): Ditto

	* device.c (scan_*): Delete

	* device.c (device_tree_find_device): Rewrite to use above.
	* device.c (device_add_property): Ditto

Wed Jan 17 19:51:56 1996  Andrew Cagney  <cagney@highland.com.au>

	* psim.c(psim_options): Parse the psim options, installing their
        value in the device tree.  Options are now first entered into a
        device tree and then extracted out again when needed.  This allows
        greater flexability in configuration.

	* psim.c (psim_tree): Returns a basic device tree ready for
        parsing by psim_options.
	* psim.c (psim_usage): New.  Give usage to varing levels of detail
        according to the verbosity.  In turn output device and trace
        usage.

	* main.c (main): Update to use new system
	* sim_calls.c (sim_open, sim_do_command): Ditto

	* psim.c (psim_options): Add `r' option - ram size.
	* psim.c (psim_options): Add `o' option - openboot tree entry.
	* psim.c (psim_options): Add `h'/`H' options - more help.

	* debug.c (trace_usage): Add more detailed help.
	* device.c (device_usage): New. Output help including a list of
        the devices currently available in the device table.
	* device_table.c: Add usage operator to each device.

	* corefile.c (core_create, core_device_create): Adjust so that the
        core device is created earlier for psim_tree().  Core can later be
        created from it.

	* psim.c (psim_create): Update to handle above way of creating
        things.  Extract all information from the device tree.

	* device_tree.c (trace_*): New device node, its properties are
        used to set the value of the trace options.  Init this device (in
        psim_options) when ever the options are updated.

Wed Jan 17 19:46:07 1996  Andrew Cagney  <cagney@highland.com.au>

	* debug.h: Add trace_print_info, trace_print_device_tree and
        trace_dump_device_tree.  The first is a replacement for the
        variable `print_info' found in main.c and sim_calls.c.  The latter
        two enable the dumping of the entire device tree.

	* debug.c: Add to trace_description table.

	* main.c (main): Use above trace instead of local variable
	* sim_calls.c (sim_close): Ditto

	* device.c (device_tree_print_device): New.  Prints the device
        tree in a format that is consistent with what can be parsed by the
        device tree load from file code.

	* psim.c (psim_create): Dump device tree if enabled. If nump
        selected, exit psim immediatly.

Wed Jan 17 19:36:52 1996  Andrew Cagney  <cagney@highland.com.au>

	* corefile-n.h (core_map_read_N): When mapping from an address to
        a device, do not subtract the devices base.  The device its self
        can do this.  Brings the behavour into line with OpenBoot.
	* corefile-n.h (core_map_write_N): Ditto
	* corefile.c (core_map_read_buffer): Ditto
	* corefile.c (core_map_write_buffer): Ditto

	* device_table.c (console_io_read_buffer_callback): Adjust to
        handle biased address.
	* device_table.c (console_io_write_buffer_callback): Ditto

Wed Jan 17 18:36:09 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.c (attach_device_interrupt_edge): New. Interrupt model
        did not allow interrupts to be wired up as a general net (edges).
        Re-implement so that interrupt events can be passed to multiple
        controllers and interrupt controllers can further propogate
        interrupt events.

	* device.c (attach_device_interrupt_edge) : New, Ditto
	* device.c (detach_device_interrupt_edge) : New, Ditto
	* device.c (clean_device_interrupt_edges) : New, Ditto
	* device.c (device_interrupt_event) : New, Ditto
	* device.c (device_interrupt_attach) : New, Ditto
	* device.c (device_interrupt_detach) : New, Ditto
	* device.c (device_child_interrupt_attach) : New, Ditto
	* device.c (device_child_interrupt_detach) : New, Ditto

	* device.c (device_attach_interrupt) : Delete old
	* device.c (device_detach_interrupt) : Delete old
	* device.c (device_interrupt) : Delete old
	* device.c (device_interrupt_ack) : Delete old

	* device_table.c (unimp_*) : Update to match
	
        * device_table.c (icu_io_write_buffer_callback) : Update to use
        interface.
	* device_table.c (icu_interrupt_event_callback) : Ditto

Wed Jan 17 18:18:40 1996  Andrew Cagney  <cagney@highland.com.au>

	* device.c (external_to_device) : New function that provides a
        standard mapping between a devices internal representation (a
        pointer) and its external (or what is passed to a client)
        representation (a phandle).  Implement using the cap object
        attached to the root node.

	* device.c (device_to_external) : Ditto
	* device.c (external_to_device_instance) : Ditto but for ihandle
        and device instance.
	* device.c (device_instance_to_external) : Ditto

	* Makefile (device.o): Add dependency on cap.

	* emul_chirp.c (struct _emul_chirp_data) : Elimate use of cap. Code
        needing to translate between internal and external representations
        changed to use the external_to_device et.al. device operations.
	* emul_chirp.c (chirp_emul_*) : Ditto

	* Makefile (emul_chirp.o): Remove dependency on cap

Sat Jan  6 10:13:26 1996  Andrew Cagney - aka Noid  <cagney@highland.com.au>

	* emul_chirp.c (map_over_chirp_note): Tighten up (and fix) checks
        on OpenBoot note section.

Fri Jan  5 20:28:53 1996  Andrew Cagney  <cagney@hignland.com.au>

	* emul_generic.c (emul_write_buffer): Use vm faulting byte
 	read/write calls for buffer transfers.  This will cause a fault to
 	occure if the transfer fails.  CHRP catches the fault while the
 	others suffer the consequences.
        (emul_read_buffer): Ditto.
        (emul_write_word): Ditto.
        (emul_read_word): Ditto.
        (emul_read_string): Ditto.

Fri Jan  5 18:55:34 1996  Andrew Cagney  <cagney@highland.com.au>

	* emul_chirp.c (emul_chirp_create, emul_chirp_instruction_call),
 	emul_generic (emul_blr_instruction): Use a real blr instruction to
 	return from a client service call.

	* emul_chirp.c (services): Add all OpenBoot services to table.

	* emul_generic.h, emul_bugapi.c (emul_bugapi_create), emul_chirp.c
 	(emul_chirp_create) : Use names instead of numbers for
 	instructions being stored in memory.

Fri Jan  5 18:52:28 1996  Andrew Cagney  <cagney@highland.com.au>

	* Makefile.in (maintainer-clean): Remove .log, core and *.core
 	(From NetBSD) files.

Wed May 29 22:57:40 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>

	* ChangeLog.00, ChangeLog: ChangeLog from gdb-4.16 becomes
        ChangeLog.00

