@ -61,7 +61,7 @@
# include "sim-base.h"
# include "sim-options.h"
# include "targ-vals .h"
# include "target-newlib-syscall .h"
# include <math.h>
@ -888,21 +888,21 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
{
# if !defined(__GO32__) && !defined(_WIN32)
case TARGET_SYS_fork :
case TARGET_NEWLIB_SH_ SYS_fork :
regs [ 0 ] = fork ( ) ;
break ;
/* This would work only if endianness matched between host and target.
Besides , it ' s quite dangerous . */
#if 0
case TARGET_SYS_execve :
case TARGET_NEWLIB_SH_ SYS_execve :
regs [ 0 ] = execve ( ptr ( regs [ 5 ] ) , ( char * * ) ptr ( regs [ 6 ] ) ,
( char * * ) ptr ( regs [ 7 ] ) ) ;
break ;
case TARGET_SYS_execv :
case TARGET_NEWLIB_SH_ SYS_execv :
regs [ 0 ] = execve ( ptr ( regs [ 5 ] ) , ( char * * ) ptr ( regs [ 6 ] ) , 0 ) ;
break ;
# endif
case TARGET_SYS_pipe :
case TARGET_NEWLIB_SH_ SYS_pipe :
{
regs [ 0 ] = ( BUSERROR ( regs [ 5 ] , maskl )
? - EINVAL
@ -910,18 +910,18 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
}
break ;
case TARGET_SYS_wait :
case TARGET_NEWLIB_SH_ SYS_wait :
regs [ 0 ] = wait ( ( int * ) ptr ( regs [ 5 ] ) ) ;
break ;
# endif /* !defined(__GO32__) && !defined(_WIN32) */
case TARGET_SYS_read :
case TARGET_NEWLIB_SH_ SYS_read :
strnswap ( regs [ 6 ] , regs [ 7 ] ) ;
regs [ 0 ]
= callback - > read ( callback , regs [ 5 ] , ptr ( regs [ 6 ] ) , regs [ 7 ] ) ;
strnswap ( regs [ 6 ] , regs [ 7 ] ) ;
break ;
case TARGET_SYS_write :
case TARGET_NEWLIB_SH_ SYS_write :
strnswap ( regs [ 6 ] , regs [ 7 ] ) ;
if ( regs [ 5 ] = = 1 )
regs [ 0 ] = ( int ) callback - > write_stdout ( callback ,
@ -931,13 +931,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
ptr ( regs [ 6 ] ) , regs [ 7 ] ) ;
strnswap ( regs [ 6 ] , regs [ 7 ] ) ;
break ;
case TARGET_SYS_lseek :
case TARGET_NEWLIB_SH_ SYS_lseek :
regs [ 0 ] = callback - > lseek ( callback , regs [ 5 ] , regs [ 6 ] , regs [ 7 ] ) ;
break ;
case TARGET_SYS_close :
case TARGET_NEWLIB_SH_ SYS_close :
regs [ 0 ] = callback - > close ( callback , regs [ 5 ] ) ;
break ;
case TARGET_SYS_open :
case TARGET_NEWLIB_SH_ SYS_open :
{
int len = strswaplen ( regs [ 5 ] ) ;
strnswap ( regs [ 5 ] , len ) ;
@ -945,13 +945,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
strnswap ( regs [ 5 ] , len ) ;
break ;
}
case TARGET_SYS_exit :
case TARGET_NEWLIB_SH_ SYS_exit :
/* EXIT - caller can look in r5 to work out the reason */
raise_exception ( SIGQUIT ) ;
regs [ 0 ] = regs [ 5 ] ;
break ;
case TARGET_SYS_stat : /* added at hmsi */
case TARGET_NEWLIB_SH_ SYS_stat : /* added at hmsi */
/* stat system call */
{
struct stat host_stat ;
@ -1000,7 +1000,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
break ;
# ifndef _WIN32
case TARGET_SYS_chown :
case TARGET_NEWLIB_SH_ SYS_chown :
{
int len = strswaplen ( regs [ 5 ] ) ;
@ -1010,7 +1010,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
break ;
}
# endif /* _WIN32 */
case TARGET_SYS_chmod :
case TARGET_NEWLIB_SH_ SYS_chmod :
{
int len = strswaplen ( regs [ 5 ] ) ;
@ -1019,7 +1019,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
strnswap ( regs [ 5 ] , len ) ;
break ;
}
case TARGET_SYS_utime :
case TARGET_NEWLIB_SH_ SYS_utime :
{
/* Cast the second argument to void *, to avoid type mismatch
if a prototype is present . */
@ -1035,16 +1035,16 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
strnswap ( regs [ 5 ] , len ) ;
break ;
}
case TARGET_SYS_argc :
case TARGET_NEWLIB_SH_ SYS_argc :
regs [ 0 ] = countargv ( prog_argv ) ;
break ;
case TARGET_SYS_argnlen :
case TARGET_NEWLIB_SH_ SYS_argnlen :
if ( regs [ 5 ] < countargv ( prog_argv ) )
regs [ 0 ] = strlen ( prog_argv [ regs [ 5 ] ] ) ;
else
regs [ 0 ] = - 1 ;
break ;
case TARGET_SYS_argn :
case TARGET_NEWLIB_SH_ SYS_argn :
if ( regs [ 5 ] < countargv ( prog_argv ) )
{
/* Include the termination byte. */
@ -1054,13 +1054,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
else
regs [ 0 ] = - 1 ;
break ;
case TARGET_SYS_time :
case TARGET_NEWLIB_SH_ SYS_time :
regs [ 0 ] = get_now ( ) ;
break ;
case TARGET_SYS_ftruncate :
case TARGET_NEWLIB_SH_ SYS_ftruncate :
regs [ 0 ] = callback - > ftruncate ( callback , regs [ 5 ] , regs [ 6 ] ) ;
break ;
case TARGET_SYS_truncate :
case TARGET_NEWLIB_SH_ SYS_truncate :
{
int len = strswaplen ( regs [ 5 ] ) ;
strnswap ( regs [ 5 ] , len ) ;
@ -2345,6 +2345,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
/* Set default options before parsing user options. */
current_alignment = STRICT_ALIGNMENT ;
cb - > syscall_map = cb_sh_syscall_map ;
/* The cpu data is kept in a separately allocated chunk of memory. */
if ( sim_cpu_alloc_all ( sd , 1 ) ! = SIM_RC_OK )