/* gdb.c --- sim interface to GDB.
-Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
+Copyright (C) 2005, 2007, 2008, 2009, 2010, 2011
+Free Software Foundation, Inc.
Contributed by Red Hat, Inc.
This file is part of the GNU simulators.
#include "mem.h"
#include "load.h"
#include "syscalls.h"
+#ifdef TIMER_A
+#include "timer_a.h"
+#endif
/* I don't want to wrap up all the minisim's data structures in an
object and pass that around. That'd be a big change, and neither
struct host_callback_struct *callback,
struct bfd *abfd, char **argv)
{
+ setbuf (stdout, 0);
if (open)
fprintf (stderr, "m32c minisim: re-opened sim\n");
SIM_RC
-sim_load (SIM_DESC sd, char *prog, struct bfd *abfd, int from_tty)
+sim_load (SIM_DESC sd, char *prog, struct bfd * abfd, int from_tty)
{
check_desc (sd);
}
SIM_RC
-sim_create_inferior (SIM_DESC sd, struct bfd *abfd, char **argv, char **env)
+sim_create_inferior (SIM_DESC sd, struct bfd * abfd, char **argv, char **env)
{
check_desc (sd);
}
int
-sim_write (SIM_DESC sd, SIM_ADDR mem, unsigned char *buf, int length)
+sim_write (SIM_DESC sd, SIM_ADDR mem, const unsigned char *buf, int length)
{
check_desc (sd);
check_desc (sd);
if (!check_regno (regno))
- return 0;
+ return -1;
size = reg_size (regno);
default:
fprintf (stderr, "m32c minisim: unrecognized register number: %d\n",
regno);
- return -1;
+ return 0;
}
}
/* Given a signal number used by the M32C bsp (that is, newlib),
- return a host signal number. (Oddly, the gdb/sim interface uses
- host signal numbers...) */
+ return a target signal number used by GDB. */
int
-m32c_signal_to_host (int m32c)
+m32c_signal_to_target (int m32c)
{
switch (m32c)
{
case 4:
-#ifdef SIGILL
- return SIGILL;
-#else
- return SIGSEGV;
-#endif
+ return TARGET_SIGNAL_ILL;
case 5:
- return SIGTRAP;
+ return TARGET_SIGNAL_TRAP;
case 10:
-#ifdef SIGBUS
- return SIGBUS;
-#else
- return SIGSEGV;
-#endif
+ return TARGET_SIGNAL_BUS;
case 11:
- return SIGSEGV;
+ return TARGET_SIGNAL_SEGV;
case 24:
-#ifdef SIGXCPU
- return SIGXCPU;
-#else
- break;
-#endif
+ return TARGET_SIGNAL_XCPU;
case 2:
- return SIGINT;
+ return TARGET_SIGNAL_INT;
case 8:
-#ifdef SIGFPE
- return SIGFPE;
-#else
- break;
-#endif
+ return TARGET_SIGNAL_FPE;
case 6:
- return SIGABRT;
+ return TARGET_SIGNAL_ABRT;
}
return 0;
else if (M32C_STOPPED (rc))
{
reason = sim_stopped;
- siggnal = m32c_signal_to_host (M32C_STOP_SIG (rc));
+ siggnal = m32c_signal_to_target (M32C_STOP_SIG (rc));
}
else
{
}
if (step)
- handle_step (decode_opcode ());
+ {
+ handle_step (decode_opcode ());
+#ifdef TIMER_A
+ update_timer_a ();
+#endif
+ }
else
{
/* We don't clear 'stop' here, because then we would miss
}
int rc = decode_opcode ();
+#ifdef TIMER_A
+ update_timer_a ();
+#endif
if (!M32C_STEPPED (rc))
{
}
}
}
+ m32c_sim_restore_console ();
}
int