@ -28,37 +28,31 @@
# include <signal.h>
# include "gdb/callback.h"
# include "gdb/remote-sim.h"
# include "armdefs.h"
# include "sim-main.h"
# include "sim-options.h"
# include "armemu.h"
# include "dbg_rdi.h"
# include "ansidecl.h"
# include "sim-utils.h"
# include "run-sim.h"
# include "gdb/sim-arm.h"
# include "gdb/signals.h"
# include "libiberty.h"
# include "iwmmxt.h"
/* TODO: This should get pulled from the SIM_DESC. */
host_callback * sim_callback ;
static struct ARMul_State * state ;
/* Who is using the simulator. */
static SIM_OPEN_KIND sim_kind ;
/* argv[0] */
static char * myname ;
/* TODO: This should get merged into sim_cpu. */
struct ARMul_State * state ;
/* Memory size in bytes. */
/* TODO: Memory should be converted to the common memory module. */
static int mem_size = ( 1 < < 21 ) ;
/* Non-zero to set big endian mode. */
static int big_endian ;
int stop_simulator ;
# include "dis-asm.h"
/* TODO: Tracing should be converted to common tracing module. */
int trace = 0 ;
int disas = 0 ;
int trace_funcs = 0 ;
@ -146,7 +140,7 @@ init (void)
{
ARMul_EmulateInit ( ) ;
state = ARMul_NewState ( ) ;
state - > bigendSig = ( big_endian ? HIGH : LOW ) ;
state - > bigendSig = ( CURRENT_TARGET_BYTE_ORDER = = BIG_ENDIAN ? HIGH : LOW ) ;
ARMul_MemoryInit ( state , mem_size ) ;
ARMul_OSInit ( state ) ;
state - > verbose = 0 ;
@ -154,16 +148,6 @@ init (void)
}
}
/* Set the memory size to SIZE bytes.
Must be called before initializing simulator . */
/* FIXME: Rename to sim_set_mem_size. */
void
sim_size ( int size )
{
mem_size = size ;
}
void
ARMul_ConsolePrint ( ARMul_State * state ,
const char * format ,
@ -219,14 +203,6 @@ sim_read (SIM_DESC sd ATTRIBUTE_UNUSED,
return size ;
}
int
sim_trace ( SIM_DESC sd ATTRIBUTE_UNUSED )
{
trace = 1 ;
sim_resume ( sd , 0 , 0 ) ;
return 1 ;
}
int
sim_stop ( SIM_DESC sd ATTRIBUTE_UNUSED )
{
@ -437,12 +413,6 @@ sim_create_inferior (SIM_DESC sd ATTRIBUTE_UNUSED,
return SIM_RC_OK ;
}
void
sim_info ( SIM_DESC sd ATTRIBUTE_UNUSED ,
int verbose ATTRIBUTE_UNUSED )
{
}
static int
frommem ( struct ARMul_State * state , unsigned char * memory )
{
@ -728,7 +698,7 @@ static swi_options options[] =
} ;
int
static int
sim_target_parse_command_line ( int argc , char * * argv )
{
int i ;
@ -830,88 +800,89 @@ sim_target_parse_arg_array (char ** argv)
sim_target_parse_command_line ( i , argv ) ;
}
void
sim_target_display_usage ( int help )
static void
free_state ( SIM_DESC sd )
{
FILE * stream = help ? stdout : stderr ;
fprintf ( stream , " %s=<list> Comma seperated list of SWI protocols to supoport. \n \
This list can contain : NONE , DEMON , ANGEL , REDBOOT and / or ALL . \ n " ,
SWI_SWITCH ) ;
fprintf ( stream , " -d \t \t Enable disassembly of instructions during tracing. \n " ) ;
fprintf ( stream , " -z \t \t Trace entering and leaving functions. \n \n " ) ;
if ( STATE_MODULES ( sd ) ! = NULL )
sim_module_uninstall ( sd ) ;
sim_cpu_free_all ( sd ) ;
sim_state_free ( sd ) ;
}
SIM_DESC
sim_open ( SIM_OPEN_KIND kind ,
host_callback * ptr ,
struct bfd * abfd ,
char * * argv )
sim_open ( SIM_OPEN_KIND kind ,
host_callback * cb ,
struct bfd * abfd ,
char * * argv )
{
sim_kind = kind ;
SIM_DESC sd = sim_state_alloc ( kind , cb ) ;
SIM_ASSERT ( STATE_MAGIC ( sd ) = = SIM_MAGIC_NUMBER ) ;
if ( myname )
free ( myname ) ;
myname = ( char * ) xstrdup ( argv [ 0 ] ) ;
/* The cpu data is kept in a separately allocated chunk of memory. */
if ( sim_cpu_alloc_all ( sd , 1 , /*cgen_cpu_max_extra_bytes ()*/ 0 ) ! = SIM_RC_OK )
{
free_state ( sd ) ;
return 0 ;
}
sim_callback = ptr ;
if ( sim_pre_argv_init ( sd , argv [ 0 ] ) ! = SIM_RC_OK )
{
free_state ( sd ) ;
return 0 ;
}
# ifdef SIM_TARGET_SWITCHES
sim_target_parse_arg_array ( argv ) ;
# endif
/* 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
line switch that tells us . Otherwise default to little endian . */
if ( abfd ! = NULL )
big_endian = bfd_big_endian ( abfd ) ;
else if ( argv [ 1 ] ! = NULL )
/* getopt will print the error message so we just have to exit if this fails.
FIXME : Hmmm . . . in the case of gdb we need getopt to call
print_filtered . */
if ( sim_parse_args ( sd , argv ) ! = SIM_RC_OK )
{
int i ;
free_state ( sd ) ;
return 0 ;
}
/* Scan for endian-ness and memory-size switches. */
for ( i = 0 ; ( argv [ i ] ! = NULL ) & & ( argv [ i ] [ 0 ] ! = 0 ) ; i + + )
if ( argv [ i ] [ 0 ] = = ' - ' & & argv [ i ] [ 1 ] = = ' E ' )
{
char c ;
/* Check for/establish the a reference program image. */
if ( sim_analyze_program ( sd ,
( STATE_PROG_ARGV ( sd ) ! = NULL
? * STATE_PROG_ARGV ( sd )
: NULL ) , abfd ) ! = SIM_RC_OK )
{
free_state ( sd ) ;
return 0 ;
}
if ( ( c = argv [ i ] [ 2 ] ) = = 0 )
{
+ + i ;
c = argv [ i ] [ 0 ] ;
}
/* Configure/verify the target byte order and other runtime
configuration options . */
if ( sim_config ( sd ) ! = SIM_RC_OK )
{
sim_module_uninstall ( sd ) ;
return 0 ;
}
switch ( c )
{
case 0 :
sim_callback - > printf_filtered
( sim_callback , " No argument to -E option provided \n " ) ;
break ;
if ( sim_post_argv_init ( sd ) ! = SIM_RC_OK )
{
/* Uninstall the modules to avoid memory leaks,
file descriptor leaks , etc . */
sim_module_uninstall ( sd ) ;
return 0 ;
}
case ' b ' :
case ' B ' :
big_endian = 1 ;
break ;
sim_callback = cb ;
case ' l ' :
case ' L ' :
big_endian = 0 ;
break ;
sim_target_parse_arg_array ( argv ) ;
default :
sim_callback - > printf_filtered
( sim_callback , " Unrecognised argument to -E option \n " ) ;
break ;
}
}
else if ( argv [ i ] [ 0 ] = = ' - ' & & argv [ i ] [ 1 ] = = ' m ' )
if ( argv [ 1 ] ! = NULL )
{
int i ;
/* Scan for memory-size switches. */
for ( i = 0 ; ( argv [ i ] ! = NULL ) & & ( argv [ i ] [ 0 ] ! = 0 ) ; i + + )
if ( argv [ i ] [ 0 ] = = ' - ' & & argv [ i ] [ 1 ] = = ' m ' )
{
if ( argv [ i ] [ 2 ] ! = ' \0 ' )
sim_size ( atoi ( & argv [ i ] [ 2 ] ) ) ;
mem_size = atoi ( & argv [ i ] [ 2 ] ) ;
else if ( argv [ i + 1 ] ! = NULL )
{
sim_size ( atoi ( argv [ i + 1 ] ) ) ;
mem_size = atoi ( argv [ i + 1 ] ) ;
i + + ;
}
else
@ -924,34 +895,14 @@ sim_open (SIM_OPEN_KIND kind,
}
}
return ( SIM_DESC ) 1 ;
return sd ;
}
void
sim_close ( SIM_DESC sd ATTRIBUTE_UNUSED ,
int quitting ATTRIBUTE_UNUSED )
{
if ( myname )
free ( myname ) ;
myname = NULL ;
}
SIM_RC
sim_load ( SIM_DESC sd ,
const char * prog ,
bfd * abfd ,
int from_tty ATTRIBUTE_UNUSED )
{
bfd * prog_bfd ;
prog_bfd = sim_load_file ( sd , myname , sim_callback , prog , abfd ,
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 ) ) ;
if ( abfd = = NULL )
bfd_close ( prog_bfd ) ;
return SIM_RC_OK ;
/* Nothing to do. */
}
void
@ -981,24 +932,3 @@ sim_stop_reason (SIM_DESC sd ATTRIBUTE_UNUSED,
* sigrc = 0 ;
}
}
void
sim_do_command ( SIM_DESC sd ATTRIBUTE_UNUSED ,
const char * cmd ATTRIBUTE_UNUSED )
{
( * sim_callback - > printf_filtered )
( sim_callback ,
" This simulator does not accept any commands. \n " ) ;
}
void
sim_set_callbacks ( host_callback * ptr )
{
sim_callback = ptr ;
}
char * *
sim_complete_command ( SIM_DESC sd , const char * text , const char * word )
{
return NULL ;
}