#include <stdio.h>
#include <stdarg.h>
+#include <string.h>
#include <bfd.h>
#include <signal.h>
#include "callback.h"
#include "armdefs.h"
#include "armemu.h"
#include "dbg_rdi.h"
+#include "ansidecl.h"
host_callback *sim_callback;
/* Non-zero to set big endian mode. */
static int big_endian;
-static void
+int stop_simulator;
+
+static void
init ()
{
static int done;
if (!done)
{
- ARMul_EmulateInit();
+ ARMul_EmulateInit ();
state = ARMul_NewState ();
state->bigendSig = (big_endian ? HIGH : LOW);
- ARMul_MemoryInit(state, mem_size);
- ARMul_OSInit(state);
- ARMul_CoProInit(state);
+ ARMul_MemoryInit (state, mem_size);
+ ARMul_OSInit (state);
+ ARMul_CoProInit (state);
state->verbose = verbosity;
done = 1;
}
}
/* Set the memory size to SIZE bytes.
- Must be called before initializing simulator. */
+ Must be called before initializing simulator. */
/* FIXME: Rename to sim_set_mem_size. */
-void
+void
sim_size (size)
int size;
{
mem_size = size;
}
-void
-ARMul_ConsolePrint (ARMul_State * state, const char *format,...)
+void
+ARMul_ConsolePrint (ARMul_State * state, const char *format, ...)
{
va_list ap;
}
}
-ARMword
-ARMul_Debug (ARMul_State * state, ARMword pc, ARMword instr)
+ARMword
+ARMul_Debug (ARMul_State * state ATTRIBUTE_UNUSED, ARMword pc ATTRIBUTE_UNUSED, ARMword instr ATTRIBUTE_UNUSED)
{
-
+ return 0;
}
int
sim_write (sd, addr, buffer, size)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
SIM_ADDR addr;
unsigned char *buffer;
int size;
init ();
for (i = 0; i < size; i++)
{
- ARMul_WriteByte (state, addr+i, buffer[i]);
+ ARMul_WriteByte (state, addr + i, buffer[i]);
}
return size;
}
int
sim_read (sd, addr, buffer, size)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
SIM_ADDR addr;
unsigned char *buffer;
int size;
int
sim_trace (sd)
- SIM_DESC sd;
-{
- (*sim_callback->printf_filtered) (sim_callback, "This simulator does not support tracing\n");
+ SIM_DESC sd ATTRIBUTE_UNUSED;
+{
+ (*sim_callback->printf_filtered) (sim_callback,
+ "This simulator does not support tracing\n");
return 1;
}
int
sim_stop (sd)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
{
- return 0;
+ state->Emulate = STOP;
+ stop_simulator = 1;
+ return 1;
}
void
sim_resume (sd, step, siggnal)
- SIM_DESC sd;
- int step, siggnal;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
+ int step;
+ int siggnal ATTRIBUTE_UNUSED;
{
state->EndCondition = 0;
+ stop_simulator = 0;
if (step)
{
}
else
{
-#if 1 /* JGS */
- state->NextInstr = RESUME; /* treat as PC change */
+#if 1 /* JGS */
+ state->NextInstr = RESUME; /* treat as PC change */
#endif
state->Reg[15] = ARMul_DoProg (state);
}
SIM_RC
sim_create_inferior (sd, abfd, argv, env)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
struct _bfd *abfd;
char **argv;
char **env;
{
- int argvlen=0;
+ int argvlen = 0;
char **arg;
if (abfd != NULL)
ARMul_SetPC (state, bfd_get_start_address (abfd));
else
- ARMul_SetPC (state, 0); /* ??? */
+ ARMul_SetPC (state, 0); /* ??? */
-#if 1 /* JGS */
+#if 1 /* JGS */
/* We explicitly select a processor capable of supporting the ARM
32bit mode, and then we force the simulated CPU into the 32bit
User mode: */
- ARMul_SelectProcessor(state, ARM600);
- ARMul_SetCPSR(state, USER32MODE);
+ ARMul_SelectProcessor (state, ARM600);
+ ARMul_SetCPSR (state, USER32MODE);
#endif
if (argv != NULL)
{
/*
- ** Set up the command line (by laboriously stringing together the
- ** environment carefully picked apart by our caller...)
- */
+ ** Set up the command line (by laboriously stringing together the
+ ** environment carefully picked apart by our caller...)
+ */
/* Free any old stuff */
if (state->CommandLine != NULL)
{
- free(state->CommandLine);
+ free (state->CommandLine);
state->CommandLine = NULL;
}
-
+
/* See how much we need */
for (arg = argv; *arg != NULL; arg++)
- argvlen += strlen(*arg)+1;
-
+ argvlen += strlen (*arg) + 1;
+
/* allocate it... */
- state->CommandLine = malloc(argvlen+1);
+ state->CommandLine = malloc (argvlen + 1);
if (state->CommandLine != NULL)
{
arg = argv;
- state->CommandLine[0]='\0';
+ state->CommandLine[0] = '\0';
for (arg = argv; *arg != NULL; arg++)
{
- strcat(state->CommandLine, *arg);
- strcat(state->CommandLine, " ");
+ strcat (state->CommandLine, *arg);
+ strcat (state->CommandLine, " ");
}
}
}
/* Now see if there's a MEMSIZE spec in the environment */
while (*env)
{
- if (strncmp(*env, "MEMSIZE=", sizeof("MEMSIZE=")-1)==0)
+ if (strncmp (*env, "MEMSIZE=", sizeof ("MEMSIZE=") - 1) == 0)
{
- unsigned long top_of_memory;
char *end_of_num;
-
+
/* Set up memory limit */
- state->MemSize = strtoul(*env + sizeof("MEMSIZE=")-1, &end_of_num, 0);
+ state->MemSize =
+ strtoul (*env + sizeof ("MEMSIZE=") - 1, &end_of_num, 0);
}
env++;
}
void
sim_info (sd, verbose)
- SIM_DESC sd;
- int verbose;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
+ int verbose ATTRIBUTE_UNUSED;
{
}
-static int
+static int
frommem (state, memory)
struct ARMul_State *state;
unsigned char *memory;
if (state->bigendSig == HIGH)
{
return (memory[0] << 24)
- | (memory[1] << 16)
- | (memory[2] << 8)
- | (memory[3] << 0);
+ | (memory[1] << 16) | (memory[2] << 8) | (memory[3] << 0);
}
else
{
return (memory[3] << 24)
- | (memory[2] << 16)
- | (memory[1] << 8)
- | (memory[0] << 0);
+ | (memory[2] << 16) | (memory[1] << 8) | (memory[0] << 0);
}
}
static void
-tomem (state, memory, val)
+tomem (state, memory, val)
struct ARMul_State *state;
unsigned char *memory;
int val;
int
sim_store_register (sd, rn, memory, length)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
int rn;
unsigned char *memory;
- int length;
+ int length ATTRIBUTE_UNUSED;
{
init ();
- ARMul_SetReg(state, state->Mode, rn, frommem (state, memory));
+ ARMul_SetReg (state, state->Mode, rn, frommem (state, memory));
return -1;
}
int
sim_fetch_register (sd, rn, memory, length)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
int rn;
unsigned char *memory;
- int length;
+ int length ATTRIBUTE_UNUSED;
{
ARMword regval;
init ();
if (rn < 16)
- regval = ARMul_GetReg(state, state->Mode, rn);
- else if (rn == 25) /* FIXME: use PS_REGNUM from gdb/config/arm/tm-arm.h */
- regval = ARMul_GetCPSR(state);
+ regval = ARMul_GetReg (state, state->Mode, rn);
+ else if (rn == 25) /* FIXME: use PS_REGNUM from gdb/config/arm/tm-arm.h */
+ regval = ARMul_GetCPSR (state);
else
- regval = 0; /* FIXME: should report an error */
+ regval = 0; /* FIXME: should report an error */
tomem (state, memory, regval);
return -1;
}
sim_kind = kind;
myname = argv[0];
sim_callback = ptr;
-
+
/* Decide upon the endian-ness of the processor.
If we can, get the information from the bfd itself.
Otherwise look to see if we have been given a command
else if (argv[1] != NULL)
{
int i;
-
+
/* Scan for endian-ness switch. */
for (i = 0; (argv[i] != NULL) && (argv[i][0] != 0); i++)
- if (argv[i][0] == '-' && argv[i][1] == 'E')
- {
- char c;
-
- if ((c = argv[i][2]) == 0)
- {
- ++i;
- c = argv[i][0];
- }
-
- switch (c)
- {
- case 0:
- sim_callback->printf_filtered
- (sim_callback, "No argument to -E option provided\n");
- break;
-
- case 'b':
- case 'B':
- big_endian = 1;
- break;
-
- case 'l':
- case 'L':
- big_endian = 0;
- break;
-
- default:
- sim_callback->printf_filtered
- (sim_callback, "Unrecognised argument to -E option\n");
- break;
- }
- }
+ if (argv[i][0] == '-' && argv[i][1] == 'E')
+ {
+ char c;
+
+ if ((c = argv[i][2]) == 0)
+ {
+ ++i;
+ c = argv[i][0];
+ }
+
+ switch (c)
+ {
+ case 0:
+ sim_callback->printf_filtered
+ (sim_callback, "No argument to -E option provided\n");
+ break;
+
+ case 'b':
+ case 'B':
+ big_endian = 1;
+ break;
+
+ case 'l':
+ case 'L':
+ big_endian = 0;
+ break;
+
+ default:
+ sim_callback->printf_filtered
+ (sim_callback, "Unrecognised argument to -E option\n");
+ break;
+ }
+ }
}
return (SIM_DESC) 1;
void
sim_close (sd, quitting)
- SIM_DESC sd;
- int quitting;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
+ int quitting ATTRIBUTE_UNUSED;
{
/* nothing to do */
}
SIM_DESC sd;
char *prog;
bfd *abfd;
- int from_tty;
+ int from_tty ATTRIBUTE_UNUSED;
{
- extern bfd *sim_load_file (); /* ??? Don't know where this should live. */
+ extern bfd *sim_load_file (); /* ??? Don't know where this should live. */
bfd *prog_bfd;
prog_bfd = sim_load_file (sd, myname, sim_callback, prog, abfd,
- sim_kind == SIM_OPEN_DEBUG,
- 0, sim_write);
+ sim_kind == SIM_OPEN_DEBUG, 0, sim_write);
if (prog_bfd == NULL)
return SIM_RC_FAIL;
ARMul_SetPC (state, bfd_get_start_address (prog_bfd));
void
sim_stop_reason (sd, reason, sigrc)
- SIM_DESC sd;
+ SIM_DESC sd ATTRIBUTE_UNUSED;
enum sim_stop *reason;
int *sigrc;
{
- if (state->EndCondition == 0)
+ if (stop_simulator)
+ {
+ *reason = sim_stopped;
+ *sigrc = SIGINT;
+ }
+ else if (state->EndCondition == 0)
{
*reason = sim_exited;
*sigrc = state->Reg[0] & 255;
void
sim_do_command (sd, cmd)
- SIM_DESC sd;
- char *cmd;
-{
- (*sim_callback->printf_filtered) (sim_callback, "This simulator does not accept any commands.\n");
+ SIM_DESC sd ATTRIBUTE_UNUSED;
+ char *cmd ATTRIBUTE_UNUSED;
+{
+ (*sim_callback->printf_filtered) (sim_callback,
+ "This simulator does not accept any commands.\n");
}