diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-11-28 00:18:07 -0500 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-11-28 13:23:58 -0500 |
commit | c44df9148d58a8152f43cdbe19d90fe19ba52f88 (patch) | |
tree | 9d3cee6e7051feeadf9db84ac6948c42101eea7e /sim/sh/interp.c | |
parent | 96b1eb7e1773b542ad592d81459f76cb3bd91bd1 (diff) | |
download | fsf-binutils-gdb-c44df9148d58a8152f43cdbe19d90fe19ba52f88.zip fsf-binutils-gdb-c44df9148d58a8152f43cdbe19d90fe19ba52f88.tar.gz fsf-binutils-gdb-c44df9148d58a8152f43cdbe19d90fe19ba52f88.tar.bz2 |
sim: sh: switch to new target-newlib-syscall
Use the new target-newlib-syscall module. This is needed to merge all
the architectures into a single build, and sh has a custom syscall
table for its newlib/libgloss port.
Diffstat (limited to 'sim/sh/interp.c')
-rw-r--r-- | sim/sh/interp.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/sim/sh/interp.c b/sim/sh/interp.c index 1b2b09f..fb92d9f 100644 --- a/sim/sh/interp.c +++ b/sim/sh/interp.c @@ -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) |