Thu Nov 2 08:54:04 1995 Michael Meissner * main.c (main): Call psim_print_info with verbose == 2. * mon.c (mon_print_info): Align the cpu number and number of instructions fields. Do not print an instruction category if the CPU did not execute any of those instructions. * configure.in: Add support for --enable-sim-opcode=stupid. * configure: Regenerate. Wed Nov 1 23:46:59 1995 Andrew Cagney - aka Noid * std-config (INLINE_DEVICE_TREE): Don't inline either of device_tree.c or devices.c. There is no significant gain. * configure.in, Makefile.in: add --enable-sim-icache=[0-9]* and IGEN_ICACHE macro. Wed Nov 1 23:46:59 1995 Andrew Cagney - aka Noid * igen.c (main), misc.h (target_a2i, i2target), misc.c: Add functions to convert between target and igen internal bit numbers. Make IO go through these functions. Add -b (bit size) and -h (high bit nr) options to igen. Typical usage would be: ./igen -b 16 -h 15 for a 16 bit instruction format with the msb given a number 15. Wed Nov 1 22:17:32 1995 Andrew Cagney - aka Noid * dgen.c (main): Was outputting optarg even when it was NULL. Tue Oct 31 23:48:33 1995 Andrew Cagney - aka Noid * vm_n.h (vm_data_map_load_N, vm_data_map_store_n), debug.h, debug.c: Add tracing of load/store unit (virtual) with -t load-store. Tue Oct 31 21:44:01 1995 Andrew Cagney - aka Noid * std-config.h (WITH_ENVIRONMENT): Add USER_ENVIRONMENT which does not include things such as the time base and events. * interrupt.c, sim_calls.c, cpu.h, vm.c, configure.in: Add UEA to all environment switches for above. * psim.c (psim_create): ditto - new device tree node name is /options/environment-architecture with values user, virtual and operating. Tue Oct 31 21:31:32 1995 Andrew Cagney - aka Noid * ppc-opcode-stupid: Third example of use of opcode table - this one expands all mtspr/mfspr and branch instructions. Appears to give about a 10% gain in performance if everything enabled. Also takes about 150mb of swap to build. Wed Nov 1 10:49:48 1995 Michael Meissner * emul_netbsd.c (do_exit): Print arguments and close parenthesis if tracing, since exit doesn't go through emul_exit_call. (do_read): Print arguments if tracing. (do_write): Ditto. (do_open): Ditto. (do_break): Ditto. (do_kill): Ditto. (do_dup): Ditto. (do_sigprocmask): Replace trace with printing arguments if tracing. (do_ioctl): Print arguments if tracing. (do_umask): Ditto. (do_dup2): Ditto. (do_fcntl): Ditto. (do_gettimeofday): Ditto. (do_getrusage): Ditto. (do_fstatfs): Ditto. * filter_filename.c: New file to provide filter_filename to strip the directory prefix from a file. * filter_filename.h: New include file to declare filter_filename. * debug.h: Include filter_filename.h. (TRACE,DTRACE,ERROR): Use filter_filename on __FILE__. * misc.h: Include filter_filename.h. (ASSERT): Use filter_filename on __FILE__. * igen.c (lf_print_my_prefix): Use filter_filename on the filename argument. * Makefile.in: Add filter_filename support. * ppc-instructions (dcbi, icbi): Make these NOPs rather than invalid instructions. * configure.in: Add support for more --enable-sim-* switches. Use config.make and config.hdr to write to Makefile and config.h respectively. Don't rewrite Makefile, just append to it. * configure: Regenerate. * config.{make,hdr}: New shell scripts. * Makefile.in: Remove all variables set by configure.in. (psim.o): Depend on $(BUILT_SRC) also. * emul_netbsd.c (do_gettimeofday,do_getrusage): When comparing an integer, use 0, not NULL. Tue Oct 31 15:20:04 1995 Michael Meissner * configure.in: Add support for --enable-sim-inline, --enable-sim-bswap, --enable-sim-cflags, --enable-sim-complex, --enable-sim-switch, --enable-sim-duplicate, --enable-sim-filter, and --enable-sim-endian switch to control various Makefile variables. * configure: Regenerate from configure.in. * Makefile.in: Add various Make variables that the various switches alter. * std-config.h (DEFAULT_INLINE): Don't set this to 2 if using GCC and optimizing by default. Fri Oct 27 19:26:27 1995 Andrew Cagney * bits.h (ROTL32, ROTL64): Were functions, made them macros, now make them functions again. Appears 2.6.3 is confused by just a macro. Thu Oct 26 18:31:58 1995 Andrew Cagney * ppc-endian.c (SWAP_8): Fix 8 byte swap! * psim.c (psim_create): Not correctly checking that runtime configuration of things like ENDIAN, ENVIRONMENT and ALIGNMENT matched the compiled in ones. * debug.h (ITRACE), igen.c: Tidy up more tracing flags - trace_semantics is now different to trace_idecode, the former checks the cache. Tue Oct 24 21:54:13 1995 Andrew Cagney * ppc-instructions (mtsrin): Missing instruction * ppc-instructions (mfsrin): Missing instruction * ppc-instructions (eieio): Missing instruction Tue Oct 24 20:55:29 1995 Andrew Cagney * build-psim: New shell script - see internals for usage, simplifies the process of building custom simulators. Mon Oct 23 23:48:59 1995 Andrew Cagney * std-config.h (SEMANTICS_INLINE): Tidy up notes on each of the INLINE macros. Make SEMANTICS_INLINE == 1 if DEFAULT_INLINE == 2. Don't use DEFAULT_INLINE to define REGISTERS_INLINE DEVICES_INLINE DEVICE_TREE_INLINE or INTERRUPTS_INLINE as none of these are on the instruction or data critical paths. * FIXME: need to set up OS_EMUL_INLINE/EMUL_GENERIC_INLINE but not on critical path. * FIXME: devices.c/emul_netbsd.c would benefit (slightly) from the inclusion of device_tree.c/emul_generic.c. Mon Oct 23 00:31:50 1995 Andrew Cagney * os_emul.[hc], emul_generic.[hc], emul_netbsd.[hc]: replace system.[hc]. Start of suport for multiple emulations and emulation state (os_emul object). * emul_generic.[hc]: Start of code to implement proper system call tracing (from spy). Sun Oct 22 21:33:51 1995 Andrew Cagney * cpu.h, cpu.c (cpu_init): New function, zero the registers before the processor is started. Fixes problem of registers being undefined when restarting from within gdb. * cpu.h, cpu.c (cpu_flush_icache): New function, flushes the instruction cache (if present). Fixes problem of cpu caching gdb breakpoint instructions. FIXME: PSIM sometimes aborts calling error(), it should instead call sim_error() say which takes care of housekeeping such as saving the CIA before calling error. * NOTE: cpu_flush_cache() instead of cpu_synchronize_context() is used when restarting a simulation because the latter has the unwanted side effect (well I as a kernel hacker think it is) of performing an isync when the instruction stream doesn't contain one. Sun Oct 22 19:27:48 1995 Andrew Cagney * mon.h (new), mon.c (new), std-config.h (WITH_MON): Performance monitoring module. Counts both instructions issued and load/stores. * NOTE: mon does not contain to count instruction loads as this information is already available from the mon_issue() hook. * FIXME: mon doesn't have access to register usage information. This is needed if the user wants to monitor things like register stalls. * igen.c (lf_print_c_semantic), vm_n.h: Add counting code. * psim.h, psim.c (psim_create), cpu.h, cpu.c (cpu_create): Attach a common monitor to each of the cpus. Delete cpu_increment_number_of_insns() and cpu_get_number_of_insns() replaced by copied code in mon.[hc]. Sun Oct 22 18:42:45 1995 Andrew Cagney * sim_calls.c, main.c, psim.c (psim_create): always create `WITH_SMP' cpus. The actual number of CPU's active in a simulation run is taken from the device node: /init/smp (an integer). WITH_SMP changed to 2 (remember to put it back to 0). Fri Oct 20 17:26:54 1995 Andrew Cagney * system.c: More system call emulation. If code appears NetBSD specific, make conditional to being compiled on a NetBSD system (sigh). Wed Oct 18 23:02:20 1995 Andrew Cagney * Makefile.in, gen.c(delete), igen.c(new), dgen.c(new), lf.[ch](new), table.[ch](new): Split into two generators - igen that outputs the instruction tables and dgen that outputs the spr tables. Add -f (filter out) flag to igen to filter out certain instructions (ex 64 bit ones) from the created tables. Include $(LIBIBERTY_LIB) in link options in case host lacks some libc functions. * NOTE: igen, since it was originally written for the PowerPC/RS6000, things the MSB is 0 and the LSB is 63{31}. * Makefile.in, std-config.h, ppc-cache-rules(new), ppc-opcode-complex(new), ppc-opcode-simple(new): (for igen) Create cache-rule and opcode-rule tables from macros found std-config.h. Delete corresponding macro's from std-config.h. * FIXME: under this new igen scheme, when playing around with igen options, you'll find that depenencies don't work very well. * igen.c (gen_itable_c, gen_itable_h), Makefile.in: code to output an table of all the instructions. Code to output a type enumerating all the instructin names. * igen.c(lf_print_c_semantic): Move call to increment instruction counter so that it occures _after_ the instruction has been fully validated, was double counting illegal/invalid instructions. Add conditional so only compiled in when WITH_PROFILE enabled (enabled by default). * igen.c, cpu.h, cpu.c(cpu_increment_number_of_insns): Include itable.h, count individual instruction types not just total, adjust reporting functions to output this. * ppc-instructions (64 bit Load Doubleword with Update Indexed): Had 32./ instead of 31./ * ppc-instructions (64 bit Store Double Word Conditional Indexed): bitrot - updated to use newer CR register operators. * ppc-instructions (64bit Floating Convert from Integer Doubleword): Correct call to Round_Float(). Mon Oct 16 00:31:20 1995 Andrew Cagney * basics.h: #include "sim_callbacks.h" earlier so that its prototypes are declared in all other header files. * bits.h, bits.c, idecode_expression.h (ROTL32, ROTL64): Update doc in bits.h, remove dead code in bits.c, move ROTL32/ROTL64 into bits.h. * FIXME: the bits.h/bits.c macro's should be replaced with (inline) c functions. * cpu.c(cpu_add_commas), device_tree.h, device_tree.c(scand_*): Add size of buffer argument to functions writing a string into a buffer. Check for buffer overflow. Sun Oct 15 22:16:11 1995 Andrew Cagney * devices.h, devices.c, debug.h, debug.c: add macro's for tracing of each device. Make parameter names consistent so macros work. Use macro's in device functions. * device_tree.c, devices.h, devices.c: include path to device in a devices node when creating it. * device_tree.c, debug.h, debug.c: Add tracing of `device-tree'. * core.c: add tracing of core-device, adjust parameter names in core functions to be consistent with those in devices*. Sun Oct 15 20:33:20 1995 Andrew Cagney * debug.h, debug.c (trace_option): New function. Parses the trace option, updating the trace array. * debug.h, debug.c (trace_usage): New function. Outputs the list of all possible trace options. * sim_calls.c (sim_open), main.c (main): Use new trace_option() to parse trace options specified with the simpler -t flag. Adjust usage. * FIXME: basic parsing of command line options is still duplicated by main.c and sim_calls.c Thu Oct 26 10:42:28 1995 Michael Meissner * Makefile.in (clean): Delete *.i and *.out files. * ppc-endian.c (SWAP_n): Add SET argument to allow use of SWAP macros for either assignment or return. Fix SWAP_8 to use a union, and two SWAP_4's. Delete SWAP_N, since nobody uses it now. (ENDIAN_N): Add SET argument to SWAP_n calls. Delete macro defs that hardwired swapping on/off, let optimizer delete dead code. * main.c (main): Add printf that we caught a signal and print out the failing address. Thu Oct 19 21:43:39 1995 Fred Fish * Makefile.in: Remove tabs from otherwise empty line. Confuses many non-GNU versions of "make". Wed Oct 18 08:51:25 1995 Michael Meissner * Makefile.in (clean): Delete files produced by gen. Mon Oct 16 17:34:24 1995 Michael Meissner * gen.c (lf_print_c_semantic_function): Move counting # of instructions here so it works with caching. (gen_idecode_c): Move from here. Wed Oct 11 17:13:15 1995 Andrew Cagney * gen.c, ppc-instructions, psim.c: Fix code for generating cracking instruction cache. Delete the code that cached just the result from doing an instruction lookup - this ran slower than no cache at all. Fri Oct 13 09:58:43 1995 Michael Meissner * Makefile.in (gen.o): Include $(INLINE_CFLAGS). * debug.h (ppc_trace): Rename from trace, to avoid a conflict with TCL when gdb is linked with the simulator. * debug.c (ppc_trace): Ditto. * sim_calls.c (sim_open): Change trace -> ppc_trace. * main.c (main): Ditto. * cpu.c (cpu_add_commas): Remove extra static. Thu Oct 12 11:35:53 1995 Michael Meissner * Makefile.in (psim.o): Now that inlines are turned on, make psim.o depend on all sources. * cpu.c (cpu_add_commas): New function to format a long with commas. (cpu_print_info): Use it to print number_of_insns. * ppc-endian.c (SWAP_n): New macros to speed up byte swapping for 2, 4, and 8 bytes. (ENDIAN_N): If both target and host byte orders are known, don't bother testing CURRENT_{TARGET,HOST}_BYTE_ORDER. * ppc-endian.h (target specific H2T_n/T2H_n macros): Remove #if 0 to allow target specific H2T_n/T2H_n macros to be used. (htonl, ntohl): If compiled on a 486 by GCC and WITH_BSWAP is non-zero, redefine the htonl/ntohl macros to use the BSWAP instead of the 3 instruction sequence that runs on 386s. * std-config.h (WITH_{HOST,TARGET}_BYTE_ORDER): Don't override if specified on the compile line. (WITH_BSWAP): If not defined, define as 0. * Makefile.in (INLINE_CFLAGS): Add -DDEFAULT_INLINE=2 to add default inline support. Pass INLINE_CFLAGS when compiling. * devices.{h,c} (unimp_device_ioctl): Use STATIC_DEVICES, not INLINE_DEVICES since GCC doesn't like inline functions that accept variable arguments. (stack_ioctl_callback): Make function just static because GCC doesn't like inline functions that accept variable arguments. * devices.h (STATIC_DEVICES): Define as empty if not defined. * inline.c: Correct pathnames of included C files to match current implementation. * inline.h (STATIC_DEVICES): If DEVICES_INLINE is defined to be non-zero, define STATIC_DEVICES to be static. * std-config.h (INLINE): If GNU C and optimizing, define this as __inline__. (DEFAULT_INLINE): If not defined, define as 0. (ENDIAN_INLINE): If not defined, define as DEFAULT_INLINE. ({CORE,VM,CPU,EVENTS,REGISTERS,INTERRUPTS}_INLINE): Ditto. ({SPREG,IDECODE}_INLINE): Ditto. Wed Oct 11 17:13:15 1995 Andrew Cagney * ppc-instructions: Initial cut of floating point suport added. Of note include - use of host IEEE floating point instructions, use of PowerPC manual pseudo code to handle the FPSCR. It is not currently a pretty sight. * memory_map.h, memory_map.c, memory_map_n.h, core.h, core.c: merge into core.h, core.c, core_n.h. The type memory_map replaced with core_map. This removes a level of pointer indirection when translating an address. * memory_map.h, memory_map.c, memory_map_n.h: delete. * Makefile.in et.al (sorry): tweek to use new core, core_map and core.h. Wed Oct 11 12:10:26 1995 Andrew Cagney * sim_calls.c, main.c: Add -g (trace_gdb) option, add tracing to most of the other functions in sim_calls.c. * basics.h (CONCAT3), memory_map.c, memory_map_n.h, Makefile.in: Add macros to better cover up `generic' code. Makes it possible to step through the generic code! * vm.c, vm_n.h, Makefile.in: ditto Tue Oct 10 15:42:59 1995 Andrew Cagney * devices.h, devices.c, memory_map.h, memory_map.c: Changed callback interface so that there is a read/write buffer but no read/write_word. VEA default memory read/write handler sometimes couldn't resolve an access and of those some were for a memory fault and some were because gdb was making a bogus request. * devices.h, devices.c, memory_map.h, memory_map.c, vm.h, vm.c: eliminate transfer_mode (raw or cooked) parameter from read/write buffer. Fri Oct 6 20:23:56 1995 Andrew Cagney * ppc-instructions (fmul, fmuls): correct instruction format - had FRB instead of FRC. Wed Oct 4 17:31:12 1995 Andrew Cagney * psim.c, device_tree.h, device_tree.c, devices.c (printd_*, scand_*): new functions to parse/print fields in device names while hiding any machine dependency. * devices.c, psim.c: Change the stack init code so that it is handled by a device. Arguments passed across using a device ioctl (hack). * devices.h, devices.c: device ioctl callback changed to allow a variable number of arguments. This gives greater flexability and greater chance of bugs. Tue Oct 3 22:01:56 1995 Andrew Cagney * main.c (printf_filtered, error): Missing va_end() to close off variable argument use. * Makefile.in (tmp-gencode): comment out hack to get around some versions of make not handling files being created as side-effects. * gen.c (lf_open): Add -n (real_file_name) option. Specifies an alternative file name to use in output files for things like #line macros. Makefile.in (tmp-gencode): Use gen -n so that debug info is correct. * Makefile.in (TARGETLIB): Use this instead of libsim.a in the Makefile. Sat Oct 7 22:40:59 1995 Michael Meissner * sim_calls.c (sim_set_callbacks): Define new function. Fri Oct 6 17:23:10 1995 Michael Meissner * psim.c (psim_print_info): Print exit status or signal number. Mon Oct 2 11:46:37 1995 Michael Meissner * cpu.c (struct _cpu): Add number_of_insns field to trace how many instructions are executed. (cpu_increment_number_of_insns): New function to increment the number of instructions issued. (cpu_get_number_of_insns): New function to return the number of instructions issued. (cpu_print_info): New function to print cpu related information. At present, print the number of instructions executed. * gen_idecode_c: Emit call to cpu_increment_number_of_insns within idecode_issue. * psim.c (psim_print_info): New function to iterate over each of the CPU's calling cpu_print_info. * psim.h,cpu.h: Add new declarations. * sim_calls.c (sim_open): Add argument processing to add the same switches main.c accepts for the standalone processor. (sim_close): Call psim_print_info if -I. * main.c (main): Add comment saying to update sim_calls.c when adding switches. Add -I to call psim_print_info when done. (usage): Update usage message. Sun Oct 1 13:52:59 1995 Michael Meissner * main.c (printf_filtered): Correct to match new prototype. Sat Sep 30 20:47:05 1995 Michael Meissner * sim_callbacks.h (printf_filtered): Correct prototype. Thu Sep 21 16:26:49 1995 Michael Meissner * device_tree.c (OEA_MEMORY_SIZE): Define if not defined to 0x100000. (clayton_memory_size): Define as OEA_MEMORY_SIZE. * std-config.h (WITH_TRACE): Default to 1 now. * psim.c (write_stack_arguments): Don't write any stack arguments if OEA. * main.c (main): Switch to using getopt. Make -p also set trace_semantics. Make -a turn on all trace flags. Make -C turn on console tracing. * device_tree.c (create_option_device_node): Assume a program is OEA if the start address is < 4096, not just == 0. Wed Sep 20 13:36:06 1995 Ian Lance Taylor * Makefile.in (maintainer-clean): New synonym for realclean. Sun Sep 10 10:23:56 1995 Michael Tiemann * registers.c (register_description): Add gdb synonyms for cr (cnd) and msr (ps). Fri Sep 8 13:16:10 1995 Ian Lance Taylor * Makefile.in (install): Don't install in $(tooldir). * configure.in: Call AC_CONFIG_HEADER. Don't try to use bfd/hosts/*.h file or bfd/config/*.mh file. Call AC_PROG_CC and AC_PROG_RANLIB. Substitute in values for CFLAGS, HDEFINES, AR, and CC_FOR_BUILD. Call AC_CHECK_HEADERS for various header files. Touch stamp.h if creating config.h. * configure: Rebuild. * config.in: New file, created by autoheader. * Makefile.in (AR): Define as @AR@. (CC): New variable, defined as @CC@. (CFLAGS): Define as @CFLAGS@. (CC_FOR_BUILD): New variable, defined as @CC_FOR_BUILD@. (RANLIB): Define as @RANLIB@. (HDEFINES, TDEFINES): New variables. (@host_makefile_frag@): Remove. (mostlyclean): Make the same as clean, not distclean. (clean): Remove config.log. (distclean): Remove config.h and stamp-h. (Makefile): Don't depend upon @frags@. Just rebuild Makefile when invoking config.status. (config.h, stamp-h): New targets. (gen, gen.o): Build with CC_FOR_BUILD, not CC. (ppc-config.h): Rename from old config.h build. * (basics.h,gen.c,ppc-endian.c,psim.c): Include ppc-config.h. Fri Sep 8 09:51:03 1995 Michael Meissner * configure{,.in}: Don't include sysdep.h from bfd, since bfd no longer provides it. * basics.h (sysdep.h): Don't include it. * Makefile.in (BASICS_H): Remove sysdep.h. Wed Sep 6 13:25:42 1995 Andrew Cagney * core.c (core_add_data): First growth of bss was being put at wrong address (0) instead of &end. * core.c (core_add_stack, core_add_data): Was not handling case where bss/stack is grown across the current end-of-{bss,stack}. Wed Sep 6 00:46:10 1995 Andrew Cagney * system.c (system_call): Fix SYS_break - was aligning bss to a page boundary instead of just an 8 byte one; On first call sbrk(0) != sbrk(0). Thu Aug 24 14:48:54 1995 Michael Meissner * Makefile.in (install): Fix install rule. Tue Aug 22 09:31:18 1995 Michael Meissner * system.c (system_call): Add read support. * main.c (main): -t sets trace_device_tree. Correct usage message to current reality. * device_tree.c (update_memory_node_for_section): Make tracing output line up. If not code or readonly, assume that the section is a data section and has read/write permissions. Add readonly support. * core.c (create_core_from_addresses): Print end address in traces and make tracing output line up. * Makefile.in: Rewrite from Makefile to work with the Cygnus environment, and support compiling in a different directory than the sources reside in. * ppc-endian.h: Rename from endian.h so that it doesn't get confused with /usr/include/sys/endian.h on Linux. Add Linux endian support. * ppc-endian.c: Rename to be consistant with ppc-endian.h. Include ppc-endian.h, not endian.h. * basics.h (sysdep.h): Include sysdep.h that configure makes. Include ppc-endian.h, not endian.h. * std-config.h: Rename from ppc-config. Put #ifndefs around most configuration macros, so they can be overridden via CFLAGS. By default, turn off tracing. * configure.in: Clone from other simulator targets. * configure: Generate via autoconf from configure.in. Sat Aug 19 09:05:32 1995 Andrew Cagney * ppc-instructions: fix srawi (was geting XER[CA] real wrong). * interrupts.c (data_storage_interrupt): allow stack to grow by upto one MB per increment. * ppc-instructions: divw was computing rA / rA not rA / rB * main.c (main): really stupid. Wasn't exiting with correct status Fri Aug 18 00:38:01 1995 Andrew Cagney * system.c (system_call): add system calls kill(2) and getpid(2). * main.c (main): Check/return exit status when simulation finishes. Thu Aug 17 14:29:18 1995 Andrew Cagney * device_tree.c (create_option_device_node): Alignment rules (at least for the moment) now are for strict alignment only for LE OEA mode. (Because of compiler problems). * system.c (system_call) SYS_exit: Wasn't exiting with correct status. Thu Aug 17 01:16:38 1995 Andrew Cagney * vm.c (DEFINE_VM_DATA_MAP_WRITE_N): For miss aligned transfer forgot to return. * system.c (system_call): didn't page align break argument before determining increment break increment. * psim/ppc: Re-arange entire directory structure so that everything lives in the one directory. While a pain for cleaning, makes building across multiple architectures much simpler. * devices.c, device_tree.c: Added code that provides a simple illustration of how an interrupt control device could be implemented. * devices.c: Added code so that the dumb console device can read (from stdin) as well as write to stdout.