* interp.c (callback): Initialize to default callback.

This commit is contained in:
Steve Chamberlain 1995-10-05 21:14:21 +00:00
parent f8e47484d9
commit 28920b9dbb
2 changed files with 59 additions and 22 deletions

View File

@ -1,3 +1,13 @@
Thu Oct 5 14:13:29 1995 steve chamberlain <sac@slash.cygnus.com>
* interp.c (callback): Initialize to default callback.
Thu Sep 28 15:26:59 1995 steve chamberlain <sac@slash.cygnus.com>
* run.c: Moved to ../common.
* interp.c (trap): Use gdb's callback interface.
* Makefile.in: Updated.
Wed Sep 20 13:35:13 1995 Ian Lance Taylor <ian@cygnus.com>
* Makefile.in (maintainer-clean): New synonym for realclean.

View File

@ -19,10 +19,12 @@
*/
#include <signal.h>
#include "sysdep.h"
#include "bfd.h"
#include "remote-sim.h"
#include "callback.h"
/* This file is local - if newlib changes, then so should this. */
#include "syscall.h"
@ -102,11 +104,15 @@ static void parse_and_set_memory_size PARAMS ((char *str));
static int IOMEM PARAMS ((int addr, int write, int value));
static host_callback *callback = &default_callback;
/* These variables are at file scope so that functions other than
sim_resume can use the fetch/store macros */
static int little_endian;
#if 1
static int maskl = ~0;
static int maskw = ~0;
@ -477,10 +483,10 @@ trap (i, regs, memory, maskl, maskw, little_endian)
regs[0] = fork ();
break;
case SYS_execve:
regs[0] = execve (ptr (regs[5]), ptr (regs[6]), ptr (regs[7]));
regs[0] = execve (ptr (regs[5]), (char **)ptr (regs[6]), (char **)ptr (regs[7]));
break;
case SYS_execv:
regs[0] = execve (ptr (regs[5]), ptr (regs[6]), 0);
regs[0] = execve (ptr (regs[5]),(char **) ptr (regs[6]), 0);
break;
case SYS_pipe:
{
@ -503,22 +509,22 @@ trap (i, regs, memory, maskl, maskw, little_endian)
#endif
case SYS_read:
regs[0] = read (regs[5], ptr (regs[6]), regs[7]);
regs[0] = callback->read (callback, regs[5], ptr (regs[6]), regs[7]);
break;
case SYS_write:
if (regs[5] == 1)
regs[0] = sim_callback_write_stdout (ptr(regs[6]), regs[7]);
regs[0] = (int)callback->write_stdout (callback, ptr(regs[6]), regs[7]);
else
regs[0] = write (regs[5], ptr (regs[6]), regs[7]);
regs[0] = (int)callback->write (callback, regs[5], ptr (regs[6]), regs[7]);
break;
case SYS_lseek:
regs[0] = lseek (regs[5], regs[6], regs[7]);
regs[0] = callback->lseek (callback,regs[5], regs[6], regs[7]);
break;
case SYS_close:
regs[0] = close (regs[5]);
regs[0] = callback->close (callback,regs[5]);
break;
case SYS_open:
regs[0] = open (ptr (regs[5]), regs[6]);
regs[0] = callback->open (callback,ptr (regs[5]), regs[6]);
break;
case SYS_exit:
/* EXIT - caller can look in r5 to work out the
@ -1116,19 +1122,24 @@ sim_info (verbose)
double timetaken = (double) saved_state.asregs.ticks / (double) now_persec ();
double virttime = saved_state.asregs.cycles / 36.0e6;
printf_filtered ("\n\n# instructions executed %10d\n", saved_state.asregs.insts);
printf_filtered ("# cycles %10d\n", saved_state.asregs.cycles);
printf_filtered ("# pipeline stalls %10d\n", saved_state.asregs.stalls);
printf_filtered ("# real time taken %10.4f\n", timetaken);
printf_filtered ("# virtual time taken %10.4f\n", virttime);
printf_filtered ("# profiling size %10d\n", sim_profile_size);
printf_filtered ("# profiling frequency %10d\n", saved_state.asregs.profile);
printf_filtered ("# profile maxpc %10x\n", (1 << sim_profile_size) << PROFILE_SHIFT);
callback->printf_filtered (callback,
"\n\n# instructions executed %10d\n",
saved_state.asregs.insts);
callback-> printf_filtered (callback, "# cycles %10d\n", saved_state.asregs.cycles);
callback-> printf_filtered (callback, "# pipeline stalls %10d\n", saved_state.asregs.stalls);
callback-> printf_filtered (callback, "# real time taken %10.4f\n", timetaken);
callback-> printf_filtered (callback, "# virtual time taken %10.4f\n", virttime);
callback-> printf_filtered (callback, "# profiling size %10d\n", sim_profile_size);
callback-> printf_filtered (callback, "# profiling frequency %10d\n", saved_state.asregs.profile);
callback-> printf_filtered (callback, "# profile maxpc %10x\n",
(1 << sim_profile_size) << PROFILE_SHIFT);
if (timetaken != 0)
{
printf_filtered ("# cycles/second %10d\n", (int) (saved_state.asregs.cycles / timetaken));
printf_filtered ("# simulation ratio %10.4f\n", virttime / timetaken);
callback->printf_filtered (callback, "# cycles/second %10d\n",
(int) (saved_state.asregs.cycles / timetaken));
callback->printf_filtered (callback, "# simulation ratio %10.4f\n",
virttime / timetaken);
}
}
@ -1170,7 +1181,7 @@ parse_and_set_memory_size (str)
if (n > 0 && n <= 24)
sim_memory_size = n;
else
printf_filtered ("Bad memory size %d; must be 1 to 24, inclusive\n", n);
callback->printf_filtered (callback, "Bad memory size %d; must be 1 to 24, inclusive\n", n);
}
void
@ -1217,11 +1228,27 @@ sim_do_command (cmd)
else if (strcmp (cmd, "help") == 0)
{
printf_filtered ("List of SH simulator commands:\n\n");
printf_filtered ("set-memory-size <n> -- Set the number of address bits to use\n");
printf_filtered ("\n");
callback->printf_filtered (callback,"List of SH simulator commands:\n\n");
callback->printf_filtered (callback,"set-memory-size <n> -- Set the number of address bits to use\n");
callback->printf_filtered (callback,"\n");
}
else
fprintf (stderr, "Error: \"%s\" is not a valid SH simulator command.\n",
cmd);
}
int
sim_get_quit_code()
{
return saved_state.asregs.regs[5];
}
void
sim_set_callbacks(p)
host_callback *p;
{
callback = p;
}