sim: sh: switch syscalls to common nltvals
authorMike Frysinger <vapier@gentoo.org>
Mon, 19 Apr 2021 02:43:06 +0000 (22:43 -0400)
committerMike Frysinger <vapier@gentoo.org>
Mon, 19 Apr 2021 03:03:08 +0000 (23:03 -0400)
Rather than hand duplicate the syscall table, switch to the common
nltvals framework.  We have to tweak the constant names, but we get
everything else for free.  I made sure the constants have the same
values before & after too :).

sim/common/ChangeLog
sim/common/gennltvals.py
sim/common/nltvals.def
sim/sh/ChangeLog
sim/sh/Makefile.in
sim/sh/interp.c
sim/sh/syscall.h [deleted file]

index f0827b283a6f8e9f4f02c89ad652b00e6097a589..20a425731f52186c96f94fadafce012281009fac 100644 (file)
@@ -1,3 +1,8 @@
+2021-04-18  Mike Frysinger  <vapier@gentoo.org>
+
+       * gennltvals.py (TARGET_DIRS, TARGETS): Add sh.
+       * nltvals.def: Regenerate.
+
 2021-04-18  Mike Frysinger  <vapier@gentoo.org>
 
        * gennltvals.py (TARGETS): Add rx.
index bf0aaa484adf7b8534ee1ff5d22ea1483facebb3..5831607a17c70c2f645ce981ab2eaac179c87ff2 100755 (executable)
@@ -51,6 +51,7 @@ TARGET_DIRS = {
     'i960': 'libgloss/i960',
     'mcore': 'libgloss/mcore',
     'riscv': 'libgloss/riscv/machine',
+    'sh': 'newlib/libc/sys/sh/sys',
     'v850': 'libgloss/v850/sys',
 }
 TARGETS = {
@@ -71,6 +72,7 @@ TARGETS = {
     'pru',
     'riscv',
     'rx',
+    'sh',
     'sparc',
     'v850',
 }
index fbaee3abc6460594d19d024ebb1c951901bc8dea..3b890af0639f2e371b90bae19d7e8f9721924257 100644 (file)
 /* end rx sys target macros */
 #endif
 #endif
+#ifdef NL_TARGET_sh
+#ifdef sys_defs
+/* from syscall.h */
+/* begin sh sys target macros */
+ { "SYS_ARG", 24 },
+ { "SYS_argc", 172 },
+ { "SYS_argn", 174 },
+ { "SYS_argnlen", 173 },
+ { "SYS_chdir", 12 },
+ { "SYS_chmod", 15 },
+ { "SYS_chown", 16 },
+ { "SYS_close", 6 },
+ { "SYS_creat", 8 },
+ { "SYS_execv", 11 },
+ { "SYS_execve", 59 },
+ { "SYS_exit", 1 },
+ { "SYS_fork", 2 },
+ { "SYS_fstat", 22 },
+ { "SYS_ftruncate", 130 },
+ { "SYS_getpid", 20 },
+ { "SYS_isatty", 21 },
+ { "SYS_link", 9 },
+ { "SYS_lseek", 19 },
+ { "SYS_mknod", 14 },
+ { "SYS_open", 5 },
+ { "SYS_pipe", 42 },
+ { "SYS_read", 3 },
+ { "SYS_stat", 38 },
+ { "SYS_time", 23 },
+ { "SYS_truncate", 129 },
+ { "SYS_unlink", 10 },
+ { "SYS_utime", 201 },
+ { "SYS_wait", 202 },
+ { "SYS_wait4", 7 },
+ { "SYS_write", 4 },
+/* end sh sys target macros */
+#endif
+#endif
 #ifdef NL_TARGET_sparc
 #ifdef sys_defs
 /* from syscall.h */
index 1389261de16477c61b93f768f9ec6bf1e6ab050a..984ff5e63211d8ecf964ed61ab41057ca6104565 100644 (file)
@@ -1,3 +1,10 @@
+2021-04-18  Mike Frysinger  <vapier@gentoo.org>
+
+       * Makefile.in (NL_TARGET): Define.
+       * interp.c: Change syscall.h include to targ-vals.h.
+       (trap): Add TARGET_ prefix to all SYS_ constants.
+       * syscall.h: Removed.
+
 2021-04-18  Mike Frysinger  <vapier@gentoo.org>
 
        * configure: Regenerate.
index 54f1e0ab94b8b3554c6cbb1ac905513dc9291bbd..e92b7843dab85aaed6ae8b796ca4ddaf885a7001 100644 (file)
@@ -15,6 +15,9 @@
 # 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 7b9dd521c87094fab7fd31d06238ef37dc470e8e..2fafcfd6628560650d5256686530d530b19822bf 100644 (file)
@@ -60,8 +60,7 @@
 #include "sim-base.h"
 #include "sim-options.h"
 
-/* This file is local - if newlib changes, then so should this.  */
-#include "syscall.h"
+#include "targ-vals.h"
 
 #include <math.h>
 
@@ -887,21 +886,21 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
          {
 
 #if !defined(__GO32__) && !defined(_WIN32)
-         case SYS_fork:
+         case TARGET_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 SYS_execve:
+         case TARGET_SYS_execve:
            regs[0] = execve (ptr (regs[5]), (char **) ptr (regs[6]), 
                              (char **) ptr (regs[7]));
            break;
-         case SYS_execv:
+         case TARGET_SYS_execv:
            regs[0] = execve (ptr (regs[5]), (char **) ptr (regs[6]), 0);
            break;
 #endif
-         case SYS_pipe:
+         case TARGET_SYS_pipe:
            {
              regs[0] = (BUSERROR (regs[5], maskl)
                         ? -EINVAL
@@ -909,18 +908,18 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
            }
            break;
 
-         case SYS_wait:
+         case TARGET_SYS_wait:
            regs[0] = wait ((int *) ptr (regs[5]));
            break;
 #endif /* !defined(__GO32__) && !defined(_WIN32) */
 
-         case SYS_read:
+         case TARGET_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 SYS_write:
+         case TARGET_SYS_write:
            strnswap (regs[6], regs[7]);
            if (regs[5] == 1)
              regs[0] = (int) callback->write_stdout (callback, 
@@ -930,13 +929,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 SYS_lseek:
+         case TARGET_SYS_lseek:
            regs[0] = callback->lseek (callback,regs[5], regs[6], regs[7]);
            break;
-         case SYS_close:
+         case TARGET_SYS_close:
            regs[0] = callback->close (callback,regs[5]);
            break;
-         case SYS_open:
+         case TARGET_SYS_open:
            {
              int len = strswaplen (regs[5]);
              strnswap (regs[5], len);
@@ -944,13 +943,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
              strnswap (regs[5], len);
              break;
            }
-         case SYS_exit:
+         case TARGET_SYS_exit:
            /* EXIT - caller can look in r5 to work out the reason */
            raise_exception (SIGQUIT);
            regs[0] = regs[5];
            break;
 
-         case SYS_stat:        /* added at hmsi */
+         case TARGET_SYS_stat: /* added at hmsi */
            /* stat system call */
            {
              struct stat host_stat;
@@ -999,7 +998,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
            break;
 
 #ifndef _WIN32
-         case SYS_chown:
+         case TARGET_SYS_chown:
            {
              int len = strswaplen (regs[5]);
 
@@ -1009,7 +1008,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
              break;
            }
 #endif /* _WIN32 */
-         case SYS_chmod:
+         case TARGET_SYS_chmod:
            {
              int len = strswaplen (regs[5]);
 
@@ -1018,7 +1017,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
              strnswap (regs[5], len);
              break;
            }
-         case SYS_utime:
+         case TARGET_SYS_utime:
            {
              /* Cast the second argument to void *, to avoid type mismatch
                 if a prototype is present.  */
@@ -1029,16 +1028,16 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
              strnswap (regs[5], len);
              break;
            }
-         case SYS_argc:
+         case TARGET_SYS_argc:
            regs[0] = countargv (prog_argv);
            break;
-         case SYS_argnlen:
+         case TARGET_SYS_argnlen:
            if (regs[5] < countargv (prog_argv))
              regs[0] = strlen (prog_argv[regs[5]]);
            else
              regs[0] = -1;
            break;
-         case SYS_argn:
+         case TARGET_SYS_argn:
            if (regs[5] < countargv (prog_argv))
              {
                /* Include the termination byte.  */
@@ -1048,13 +1047,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
            else
              regs[0] = -1;
            break;
-         case SYS_time:
+         case TARGET_SYS_time:
            regs[0] = get_now ();
            break;
-         case SYS_ftruncate:
+         case TARGET_SYS_ftruncate:
            regs[0] = callback->ftruncate (callback, regs[5], regs[6]);
            break;
-         case SYS_truncate:
+         case TARGET_SYS_truncate:
            {
              int len = strswaplen (regs[5]);
              strnswap (regs[5], len);
diff --git a/sim/sh/syscall.h b/sim/sh/syscall.h
deleted file mode 100644 (file)
index aebce2c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-
-/* !!! DANGER !!!
-   This was copied from newlib. */
-
-
-#define        SYS_exit        1
-#define        SYS_fork        2
-#define        SYS_read        3
-#define        SYS_write       4
-#define        SYS_open        5
-#define        SYS_close       6
-#define        SYS_wait4       7
-#define        SYS_creat       8
-#define        SYS_link        9
-#define        SYS_unlink      10
-#define        SYS_execv       11
-#define        SYS_chdir       12
-#define        SYS_mknod       14
-#define        SYS_chmod       15
-#define        SYS_chown       16
-#define        SYS_lseek       19
-#define        SYS_getpid      20
-#define SYS_isatty      21
-#define SYS_fstat       22
-#define SYS_time       23
-#define SYS_ARG                24
-#define        SYS_stat        38
-#define        SYS_pipe        42
-#define        SYS_execve      59
-#define        SYS_truncate    129
-#define        SYS_ftruncate   130
-#define        SYS_argc        172
-#define        SYS_argnlen     173
-#define        SYS_argn        174
-#define SYS_utime       201 /* not really a system call */
-#define SYS_wait        202 /* nor is this */