diff options
-rw-r--r-- | include/ChangeLog | 10 | ||||
-rw-r--r-- | include/remote-sim.h | 8 | ||||
-rw-r--r-- | sim/arm/ChangeLog | 9 | ||||
-rw-r--r-- | sim/arm/wrapper.c | 169 | ||||
-rw-r--r-- | sim/d10v/ChangeLog | 10 | ||||
-rw-r--r-- | sim/d10v/simops.c | 64 | ||||
-rw-r--r-- | sim/mips/ChangeLog | 10 | ||||
-rw-r--r-- | sim/mips/interp.c | 31 | ||||
-rw-r--r-- | sim/mn10300/ChangeLog | 10 | ||||
-rw-r--r-- | sim/mn10300/simops.c | 10 | ||||
-rw-r--r-- | sim/v850/ChangeLog | 10 | ||||
-rw-r--r-- | sim/v850/simops.c | 27 |
12 files changed, 255 insertions, 113 deletions
diff --git a/include/ChangeLog b/include/ChangeLog index 294f4ea..890c885 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,13 @@ +Wed Apr 2 17:09:12 1997 Andrew Cagney <cagney@kremvax.cygnus.com> + + * remote-sim.h (sim_trace, sim_size): Make these global. They + will go away shortly. + +Wed Apr 2 15:23:49 1997 Doug Evans <dje@canuck.cygnus.com> + + * remote-sim.h (SIM_OPEN_KIND, SIM_RC): New enums. + (sim_open): New argument `kind'. + Wed Apr 2 14:45:51 1997 Ian Lance Taylor <ian@cygnus.com> * COPYING: Update FSF address. diff --git a/include/remote-sim.h b/include/remote-sim.h index 77685d5..a18b1ef 100644 --- a/include/remote-sim.h +++ b/include/remote-sim.h @@ -141,4 +141,12 @@ void sim_do_command PARAMS ((SIM_DESC sd, char *cmd)); void sim_set_callbacks PARAMS ((SIM_DESC sd, struct host_callback_struct *)); + +/* NOTE: sim_size() and sim_trace() are going away */ + +void sim_size PARAMS ((int i)); + +int sim_trace PARAMS ((SIM_DESC sd)); + + #endif /* !defined (REMOTE_SIM_H) */ diff --git a/sim/arm/ChangeLog b/sim/arm/ChangeLog index eda154d..41f05a1 100644 --- a/sim/arm/ChangeLog +++ b/sim/arm/ChangeLog @@ -1,3 +1,12 @@ +Thu Apr 17 11:48:25 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * wrapper.c (sim_trace): Update so that it matches prototype. + +Mon Apr 7 15:45:02 1997 Andrew Cagney <cagney@kremvax.cygnus.com> + + * configure: Regenerated to track ../common/aclocal.m4 changes. + * config.in: Ditto. + Mon Apr 7 12:01:17 1997 Andrew Cagney <cagney@kremvax.cygnus.com> * Makefile.in (armemu32.o): Replace $< with autoconf recommended diff --git a/sim/arm/wrapper.c b/sim/arm/wrapper.c index fdbff86..2a582cd 100644 --- a/sim/arm/wrapper.c +++ b/sim/arm/wrapper.c @@ -1,7 +1,7 @@ /* run front end support for arm - Copyright (C) 1995 Free Software Foundation, Inc. + Copyright (C) 1995, 1996 Free Software Foundation, Inc. -This file is part of ARM SIM +This file is part of ARM SIM. GNU CC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -14,68 +14,95 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GNU CC; see the file COPYING. If not, write to -Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* This file provides the interface between the simulator and run.c and gdb + (when the simulator is linked with gdb). + All simulator interaction should go through this file. */ #include <stdio.h> #include <stdarg.h> -#include <armdefs.h> #include <bfd.h> #include <signal.h> #include "callback.h" #include "remote-sim.h" +#include "armdefs.h" +#include "armemu.h" +#include "dbg_rdi.h" + +host_callback *sim_callback; + static struct ARMul_State *state; +/* Memory size in bytes. */ +static int mem_size = (1 << 21); + +/* Non-zero to display start up banner, and maybe other things. */ +static int verbosity; + static void init () { static int done; + if (!done) { ARMul_EmulateInit(); state = ARMul_NewState (); - ARMul_MemoryInit(state, 1<<21); + ARMul_MemoryInit(state, mem_size); ARMul_OSInit(state); ARMul_CoProInit(state); + state->verbose = verbosity; done = 1; } - -} -void -ARMul_ConsolePrint (ARMul_State * state, const char *format,...) -{ - va_list ap; - va_start (ap, format); - vprintf (format, ap); - va_end (ap); } -ARMword -ARMul_Debug (ARMul_State * state, ARMword pc, ARMword instr) -{ +/* Set verbosity level of simulator. + This is not intended to produce detailed tracing or debugging information. + Just summaries. */ +/* FIXME: common/run.c doesn't do this yet. */ +void +sim_set_verbose (v) + int v; +{ + verbosity = v; } +/* Set the memory size to SIZE bytes. + Must be called before initializing simulator. */ +/* FIXME: Rename to sim_set_mem_size. */ + void sim_size (size) int size; { - init (); - ARMul_MemoryInit (state, 1 << size); + mem_size = size; } - void -sim_set_profile () +ARMul_ConsolePrint (ARMul_State * state, const char *format,...) { + va_list ap; + + if (state->verbose) + { + va_start (ap, format); + vprintf (format, ap); + va_end (ap); + } } -void -sim_set_profile_size () + +ARMword +ARMul_Debug (ARMul_State * state, ARMword pc, ARMword instr) { + } int -sim_write (addr, buffer, size) +sim_write (sd, addr, buffer, size) + SIM_DESC sd; SIM_ADDR addr; unsigned char *buffer; int size; @@ -90,7 +117,8 @@ sim_write (addr, buffer, size) } int -sim_read (addr, buffer, size) +sim_read (sd, addr, buffer, size) + SIM_DESC sd; SIM_ADDR addr; unsigned char *buffer; int size; @@ -104,29 +132,38 @@ sim_read (addr, buffer, size) return size; } -void -sim_trace () +int +sim_trace (sd) + SIM_DESC sd; { + (*sim_callback->printf_filtered) (sim_callback, "This simulator does not support tracing\n"); + return 1; } -static int rc; void -sim_resume (step, siggnal) +sim_resume (sd, step, siggnal) + SIM_DESC sd; int step, siggnal; { + state->EndCondition = 0; + if (step) { - rc = SIGTRAP; - state->Reg[15] = ARMul_DoInstr (state); + state->Reg[15] = ARMul_DoInstr (state); + if (state->EndCondition == 0) + state->EndCondition = RDIError_BreakpointReached; } else { - state->Reg[15] = ARMul_DoProg (state); + state->Reg[15] = ARMul_DoProg (state); } + + FLUSHPIPE; } void -sim_create_inferior (start_address, argv, env) +sim_create_inferior (sd, start_address, argv, env) + SIM_DESC sd; SIM_ADDR start_address; char **argv; char **env; @@ -135,13 +172,14 @@ sim_create_inferior (start_address, argv, env) } void -sim_info (verbose) +sim_info (sd, verbose) + SIM_DESC sd; int verbose; { } -int +static int frommem (state, memory) struct ARMul_State *state; unsigned char *memory; @@ -163,7 +201,7 @@ frommem (state, memory) } -void +static void tomem (state, memory, val) struct ARMul_State *state; unsigned char *memory; @@ -186,7 +224,8 @@ tomem (state, memory, val) } void -sim_store_register (rn, memory) +sim_store_register (sd, rn, memory) + SIM_DESC sd; int rn; unsigned char *memory; { @@ -195,7 +234,8 @@ sim_store_register (rn, memory) } void -sim_fetch_register (rn, memory) +sim_fetch_register (sd, rn, memory) + SIM_DESC sd; int rn; unsigned char *memory; { @@ -206,22 +246,27 @@ sim_fetch_register (rn, memory) -void -sim_open (name) - char *name; +SIM_DESC +sim_open (kind, argv) + SIM_OPEN_KIND kind; + char **argv; { - /* nothing to do */ + /* (*sim_callback->error) (sim_callback, "testing 1 2 3\n");*/ + /* nothing to do, fudge our descriptor */ + return (SIM_DESC) 1; } void -sim_close (quitting) +sim_close (sd, quitting) + SIM_DESC sd; int quitting; { /* nothing to do */ } int -sim_load (prog, from_tty) +sim_load (sd, prog, from_tty) + SIM_DESC sd; char *prog; int from_tty; { @@ -230,30 +275,46 @@ sim_load (prog, from_tty) } void -sim_stop_reason (reason, sigrc) +sim_stop_reason (sd, reason, sigrc) + SIM_DESC sd; enum sim_stop *reason; int *sigrc; { - *reason = sim_stopped; - *sigrc = rc; + if (state->EndCondition == 0) + { + *reason = sim_exited; + *sigrc = state->Reg[0] & 255; + } + else + { + *reason = sim_stopped; + if (state->EndCondition == RDIError_BreakpointReached) + *sigrc = SIGTRAP; + else + *sigrc = 0; + } } + void -sim_kill () +sim_kill (sd) + SIM_DESC sd; { /* nothing to do */ } void -sim_do_command (cmd) +sim_do_command (sd, cmd) + SIM_DESC sd; char *cmd; { - printf_filtered ("This simulator does not accept any commands.\n"); + (*sim_callback->printf_filtered) (sim_callback, "This simulator does not accept any commands.\n"); } void -sim_set_callbacks (ptr) -struct host_callback_struct *ptr; +sim_set_callbacks (sd, ptr) + SIM_DESC sd; + host_callback *ptr; { - + sim_callback = ptr; } diff --git a/sim/d10v/ChangeLog b/sim/d10v/ChangeLog index b6eeed6..0cd9cc4 100644 --- a/sim/d10v/ChangeLog +++ b/sim/d10v/ChangeLog @@ -1,3 +1,13 @@ +Wed Apr 16 16:12:03 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * simops.c (OP_5F00): Only provide system calls SYS_execv, + SYS_wait, SYS_wait, SYS_utime, SYS_time if defined by the host. + +Mon Apr 7 15:45:02 1997 Andrew Cagney <cagney@kremvax.cygnus.com> + + * configure: Regenerated to track ../common/aclocal.m4 changes. + * config.in: Ditto. + Wed Apr 2 15:06:28 1997 Doug Evans <dje@canuck.cygnus.com> * interp.c (sim_open): New arg `kind'. diff --git a/sim/d10v/simops.c b/sim/d10v/simops.c index 3c4a0af..9a654f4 100644 --- a/sim/d10v/simops.c +++ b/sim/d10v/simops.c @@ -2628,24 +2628,26 @@ OP_5F00 () (*d10v_callback->printf_filtered) (d10v_callback, " a0 a1 f0 f1 c\n"); } - (*d10v_callback->printf_filtered) (d10v_callback, "Trap %2d 0x%.4x:", (int)OP[0], (int)PC); + (*d10v_callback->printf_filtered) (d10v_callback, "Trap %2d 0x%.4x:", (int)OP[0], (int)PC); - for (i = 0; i < 16; i++) - (*d10v_callback->printf_filtered) (d10v_callback, " %.4x", (int) State.regs[i]); + for (i = 0; i < 16; i++) + (*d10v_callback->printf_filtered) (d10v_callback, " %.4x", (int) State.regs[i]); - for (i = 0; i < 2; i++) - (*d10v_callback->printf_filtered) (d10v_callback, " %.2x%.8lx", - ((int)(State.a[i] >> 32) & 0xff), - ((unsigned long)State.a[i]) & 0xffffffff); + for (i = 0; i < 2; i++) + (*d10v_callback->printf_filtered) (d10v_callback, " %.2x%.8lx", + ((int)(State.a[i] >> 32) & 0xff), + ((unsigned long)State.a[i]) & 0xffffffff); - (*d10v_callback->printf_filtered) (d10v_callback, " %d %d %d\n", - State.F0 != 0, State.F1 != 0, State.C != 0); - (*d10v_callback->flush_stdout) (d10v_callback); - break; + (*d10v_callback->printf_filtered) (d10v_callback, " %d %d %d\n", + State.F0 != 0, State.F1 != 0, State.C != 0); + (*d10v_callback->flush_stdout) (d10v_callback); + break; + } #endif - case 0: - /* Trap 0 is used for simulating low-level I/O */ + case 0: /* old system call trap, to be deleted */ + case 15: /* new system call trap */ + /* Trap 15 is used for simulating low-level I/O */ { errno = 0; @@ -2818,11 +2820,13 @@ OP_5F00 () trace_output (OP_R2); break; +#ifdef SYS_execv case SYS_execv: RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL); trace_input ("<execv>", OP_R2, OP_R3, OP_VOID); trace_output (OP_R2); break; +#endif case SYS_pipe: { @@ -2839,6 +2843,7 @@ OP_5F00 () } break; +#ifdef SYS_wait case SYS_wait: { int status; @@ -2850,6 +2855,7 @@ OP_5F00 () trace_output (OP_R2); } break; +#endif #else case SYS_getpid: trace_input ("<getpid>", OP_VOID, OP_VOID, OP_VOID); @@ -2955,6 +2961,7 @@ OP_5F00 () trace_output (OP_R2); break; +#ifdef SYS_utime case SYS_utime: /* Cast the second argument to void *, to avoid type mismatch if a prototype is present. */ @@ -2962,7 +2969,9 @@ OP_5F00 () trace_input ("<utime>", OP_R2, OP_R3, OP_R4); trace_output (OP_R2); break; +#endif +#ifdef SYS_time case SYS_time: { unsigned long ret = time (PARM1 ? MEMPTR (PARM1) : NULL); @@ -2972,39 +2981,14 @@ OP_5F00 () trace_input ("<time>", OP_R2, OP_R3, OP_R4); trace_output (OP_R2R3); break; +#endif default: abort (); } - RETERR = d10v_callback->get_errno(d10v_callback); - break; - } - - case 1: - /* Trap 1 prints a string */ - { - char *fstr = dmem_addr(State.regs[2]); - fputs (fstr, stdout); - break; - } - - case 2: - /* Trap 2 calls printf */ - { - char *fstr = dmem_addr(State.regs[2]); - (*d10v_callback->printf_filtered) (d10v_callback, fstr, - (int16)State.regs[3], - (int16)State.regs[4], - (int16)State.regs[5]); - (*d10v_callback->flush_stdout) (d10v_callback); + RETERR = (RETVAL == (uint16) -1) ? d10v_callback->get_errno(d10v_callback) : 0; break; } - - case 3: - /* Trap 3 writes a character */ - putchar (State.regs[2]); - break; - } } } diff --git a/sim/mips/ChangeLog b/sim/mips/ChangeLog index 5c78457..de7075e 100644 --- a/sim/mips/ChangeLog +++ b/sim/mips/ChangeLog @@ -1,3 +1,13 @@ +Wed Apr 16 17:55:37 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * interp.c (sim_size): Delete prototype - conflicts with + definition in remote-sim.h. Correct definition. + +Mon Apr 7 15:45:02 1997 Andrew Cagney <cagney@kremvax.cygnus.com> + + * configure: Regenerated to track ../common/aclocal.m4 changes. + * config.in: Ditto. + Wed Apr 2 15:06:28 1997 Doug Evans <dje@canuck.cygnus.com> * interp.c (sim_open): New arg `kind'. diff --git a/sim/mips/interp.c b/sim/mips/interp.c index 3b434f1..f4b42a9 100644 --- a/sim/mips/interp.c +++ b/sim/mips/interp.c @@ -75,6 +75,7 @@ code on the hardware. #endif char* pr_addr PARAMS ((SIM_ADDR addr)); +char* pr_uword64 PARAMS ((uword64 addr)); #ifndef SIGBUS #define SIGBUS SIGSEGV @@ -460,7 +461,6 @@ static void LoadMemory PARAMS((uword64*memvalp,uword64*memval1p,int CCA,int Acce static void SignalException PARAMS((int exception,...)); static void simulate PARAMS((void)); static long getnum PARAMS((char *value)); -extern void sim_size PARAMS((unsigned int newsize)); extern void sim_set_profile PARAMS((int frequency)); static unsigned int power2 PARAMS((unsigned int value)); @@ -653,7 +653,8 @@ static fnptr_swap_long host_swap_long; /*---------------------------------------------------------------------------*/ SIM_DESC -sim_open (argv) +sim_open (kind,argv) + SIM_OPEN_KIND kind; char **argv; { if (callback == NULL) { @@ -745,6 +746,9 @@ sim_open (argv) for (argc = 0; argv[argc]; argc++); + /* Ensure getopt is reset [don't know whether caller used it]. */ + optind = 0; + while (1) { int option_index = 0; @@ -1657,7 +1661,7 @@ sim_set_profile_size (n) void sim_size(newsize) - unsigned int newsize; + int newsize; { char *new; /* Used by "run", and internally, to set the simulated memory size */ @@ -2682,7 +2686,7 @@ LoadMemory(memvalp,memval1p,CCA,AccessLength,pAddr,vAddr,IorD,raw) #ifdef DEBUG printf("DBG: LoadMemory() : (offset %d) : value = 0x%s%s\n", - (int)(pAddr & LOADDRMASK),pr_addr(value1),pr_addr(value)); + (int)(pAddr & LOADDRMASK),pr_uword64(value1),pr_uword64(value)); #endif /* DEBUG */ /* TODO: We could try and avoid the shifts when dealing with raw @@ -2700,7 +2704,7 @@ LoadMemory(memvalp,memval1p,CCA,AccessLength,pAddr,vAddr,IorD,raw) #ifdef DEBUG printf("DBG: LoadMemory() : shifted value = 0x%s%s\n", - pr_addr(value1),pr_addr(value)); + pr_uword64(value1),pr_uword64(value)); #endif /* DEBUG */ } } @@ -2733,7 +2737,7 @@ StoreMemory(CCA,AccessLength,MemElem,MemElem1,pAddr,vAddr,raw) int raw; { #ifdef DEBUG - callback->printf_filtered(callback,"DBG: StoreMemory(%d,%d,0x%s,0x%s,0x%s,0x%s,%s)\n",CCA,AccessLength,pr_addr(MemElem),pr_addr(MemElem1),pr_addr(pAddr),pr_addr(vAddr),(raw ? "isRAW" : "isREAL")); + callback->printf_filtered(callback,"DBG: StoreMemory(%d,%d,0x%s,0x%s,0x%s,0x%s,%s)\n",CCA,AccessLength,pr_uword64(MemElem),pr_uword64(MemElem1),pr_addr(pAddr),pr_addr(vAddr),(raw ? "isRAW" : "isREAL")); #endif /* DEBUG */ #if defined(WARN_MEM) @@ -2772,7 +2776,7 @@ StoreMemory(CCA,AccessLength,MemElem,MemElem1,pAddr,vAddr,raw) int shift = 0; #ifdef DEBUG - printf("DBG: StoreMemory: offset = %d MemElem = 0x%s%s\n",(unsigned int)(pAddr & LOADDRMASK),pr_addr(MemElem1),pr_addr(MemElem)); + printf("DBG: StoreMemory: offset = %d MemElem = 0x%s%s\n",(unsigned int)(pAddr & LOADDRMASK),pr_uword64(MemElem1),pr_uword64(MemElem)); #endif /* DEBUG */ if (AccessLength <= AccessLength_DOUBLEWORD) { @@ -2790,7 +2794,7 @@ StoreMemory(CCA,AccessLength,MemElem,MemElem1,pAddr,vAddr,raw) } #ifdef DEBUG - printf("DBG: StoreMemory: shift = %d MemElem = 0x%s%s\n",shift,pr_addr(MemElem1),pr_addr(MemElem)); + printf("DBG: StoreMemory: shift = %d MemElem = 0x%s%s\n",shift,pr_uword64(MemElem1),pr_uword64(MemElem)); #endif /* DEBUG */ if (BigEndianMem) { @@ -4528,5 +4532,16 @@ pr_addr(addr) return paddr_str; } +char* +pr_uword64(addr) + uword64 addr; +{ + char *paddr_str=get_cell(); + sprintf(paddr_str,"%08x%08x", + (unsigned long)(addr>>thirty_two),(unsigned long)(addr&0xffffffff)); + return paddr_str; +} + + /*---------------------------------------------------------------------------*/ /*> EOF interp.c <*/ diff --git a/sim/mn10300/ChangeLog b/sim/mn10300/ChangeLog index c9090ed..8f83302 100644 --- a/sim/mn10300/ChangeLog +++ b/sim/mn10300/ChangeLog @@ -1,3 +1,13 @@ +Wed Apr 16 19:30:44 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * simops.c (OP_F020): SYS_execv, SYS_time, SYS_times, SYS_utime + only include if implemented by host. + (OP_F020): Typecast arg passed to time function; + +Mon Apr 7 23:57:49 1997 Jeffrey A Law (law@cygnus.com) + + * simops.c (syscall): Handle new mn10300 calling conventions. + Mon Apr 7 15:45:02 1997 Andrew Cagney <cagney@kremvax.cygnus.com> * configure: Regenerated to track ../common/aclocal.m4 changes. diff --git a/sim/mn10300/simops.c b/sim/mn10300/simops.c index 27f6fda..5f9fc92 100644 --- a/sim/mn10300/simops.c +++ b/sim/mn10300/simops.c @@ -2920,10 +2920,12 @@ void OP_F020 (insn, extension) RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), (char **)MEMPTR (PARM3)); break; +#ifdef SYS_execv case SYS_execv: RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL); break; #endif +#endif case SYS_read: RETVAL = mn10300_callback->read (mn10300_callback, PARM1, @@ -2986,9 +2988,12 @@ void OP_F020 (insn, extension) case SYS_chmod: RETVAL = chmod (MEMPTR (PARM1), PARM2); break; +#ifdef SYS_time case SYS_time: - RETVAL = time (MEMPTR (PARM1)); + RETVAL = time ((void*) MEMPTR (PARM1)); break; +#endif +#ifdef SYS_times case SYS_times: { struct tms tms; @@ -2999,6 +3004,7 @@ void OP_F020 (insn, extension) store_mem (PARM1 + 12, 4, tms.tms_cstime); break; } +#endif case SYS_gettimeofday: { struct timeval t; @@ -3010,11 +3016,13 @@ void OP_F020 (insn, extension) store_mem (PARM2 + 4, 4, tz.tz_dsttime); break; } +#ifdef SYS_utime case SYS_utime: /* Cast the second argument to void *, to avoid type mismatch if a prototype is present. */ RETVAL = utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2)); break; +#endif default: abort (); } diff --git a/sim/v850/ChangeLog b/sim/v850/ChangeLog index 316c7ad..79e5593 100644 --- a/sim/v850/ChangeLog +++ b/sim/v850/ChangeLog @@ -1,3 +1,13 @@ +Wed Apr 16 19:53:55 1997 Andrew Cagney <cagney@b1.cygnus.com> + + * simops.c (OP_10007E0): Only provide system calls SYS_execv, + SYS_wait, SYS_wait, SYS_utime, SYS_time if defined by the host. + +Mon Apr 7 15:45:02 1997 Andrew Cagney <cagney@kremvax.cygnus.com> + + * configure: Regenerated to track ../common/aclocal.m4 changes. + * config.in: Ditto. + Wed Apr 2 15:06:28 1997 Doug Evans <dje@canuck.cygnus.com> * interp.c (sim_open): New arg `kind'. diff --git a/sim/v850/simops.c b/sim/v850/simops.c index e044c46..101741a 100644 --- a/sim/v850/simops.c +++ b/sim/v850/simops.c @@ -1,17 +1,14 @@ -#include "config.h" - #include <signal.h> -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif #include "v850_sim.h" #include "simops.h" #include "sys/syscall.h" #include "bfd.h" #include <errno.h> +#if !defined(__GO32__) && !defined(_WIN32) #include <sys/stat.h> #include <sys/times.h> #include <sys/time.h> +#endif enum op_types { OP_UNKNOWN, @@ -1077,8 +1074,8 @@ void OP_E0 () { trace_input ("mulh", OP_REG_REG, 0); - State.regs[OP[1]] = ((State.regs[OP[1]] & 0xffff) - * (State.regs[OP[0]] & 0xffff)); + State.regs[OP[1]] = (SEXT16 (State.regs[OP[1]]) + * SEXT16 (State.regs[OP[0]])); trace_output (OP_REG_REG); } @@ -1091,7 +1088,7 @@ OP_2E0 () int value = SEXT5 (OP[0]); trace_input ("mulh", OP_IMM_REG, 0); - State.regs[OP[1]] = (State.regs[OP[1]] & 0xffff) * value; + State.regs[OP[1]] = SEXT16 (State.regs[OP[1]]) * value; trace_output (OP_IMM_REG); } @@ -1099,10 +1096,10 @@ OP_2E0 () void OP_6E0 () { - int value = OP[0] & 0xffff; + int value = SEXT16 (OP[0]); trace_input ("mulhi", OP_IMM_REG_REG, 0); - State.regs[OP[2]] = (State.regs[OP[1]] & 0xffff) * value; + State.regs[OP[2]] = SEXT16 (State.regs[OP[1]]) * value; trace_output (OP_IMM_REG_REG); } @@ -2003,9 +2000,11 @@ OP_10007E0 () RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), (char **)MEMPTR (PARM3)); break; +#ifdef SYS_execv case SYS_execv: RETVAL = execve (MEMPTR (PARM1), (char **) MEMPTR (PARM2), NULL); break; +#endif #if 0 case SYS_pipe: { @@ -2061,6 +2060,7 @@ OP_10007E0 () State.exception = SIG_V850_EXIT; /* PARM1 has exit status encoded */ break; +#if !defined(__GO32__) && !defined(_WIN32) case SYS_stat: /* added at hmsi */ /* stat system call */ { @@ -2092,6 +2092,7 @@ OP_10007E0 () case SYS_chmod: RETVAL = chmod (MEMPTR (PARM1), PARM2); break; +#ifdef SYS_time case SYS_time: { time_t now; @@ -2099,6 +2100,8 @@ OP_10007E0 () store_mem (PARM1, 4, now); } break; +#endif +#ifdef SYS_times case SYS_times: { struct tms tms; @@ -2109,6 +2112,7 @@ OP_10007E0 () store_mem (PARM1 + 12, 4, tms.tms_cstime); break; } +#endif case SYS_gettimeofday: { struct timeval t; @@ -2120,11 +2124,14 @@ OP_10007E0 () store_mem (PARM2 + 4, 4, tz.tz_dsttime); break; } +#ifdef SYS_utime case SYS_utime: /* Cast the second argument to void *, to avoid type mismatch if a prototype is present. */ RETVAL = utime (MEMPTR (PARM1), (void *) MEMPTR (PARM2)); break; +#endif +#endif default: abort (); } |