sim: sh: switch to new target-newlib-syscall
authorMike Frysinger <vapier@gentoo.org>
Sun, 28 Nov 2021 05:18:07 +0000 (00:18 -0500)
committerMike Frysinger <vapier@gentoo.org>
Sun, 28 Nov 2021 18:23:58 +0000 (13:23 -0500)
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.

sim/sh/Makefile.in
sim/sh/interp.c

index e58cd48f1ae2a368a3e5ca6c92e80c7c097a4fe8..3435f403ab86587cd01abd205466e90b2d4a119b 100644 (file)
@@ -15,9 +15,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# This selects the newlib/libgloss syscall definitions.
-NL_TARGET = -DNL_TARGET_sh
-
 ## COMMON_PRE_CONFIG_FRAG
 
 SIM_OBJS = \
index 1b2b09f951005d08ded3f238ee95eb829885bf16..fb92d9f4480a1aba01e13dd3a35bd035bc55f4b4 100644 (file)
@@ -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)