aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2021-04-18 22:43:06 -0400
committerMike Frysinger <vapier@gentoo.org>2021-04-18 23:03:08 -0400
commitb7c5246bbfad67b60a820db5e548e665171645ec (patch)
tree3e3bf2509358ee5cdf3f8c89f6ded780c375ebe9
parentb3d4da0f120444d98d76bb56646af682d64907dd (diff)
downloadfsf-binutils-gdb-b7c5246bbfad67b60a820db5e548e665171645ec.zip
fsf-binutils-gdb-b7c5246bbfad67b60a820db5e548e665171645ec.tar.gz
fsf-binutils-gdb-b7c5246bbfad67b60a820db5e548e665171645ec.tar.bz2
sim: sh: switch syscalls to common nltvals
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 :).
-rw-r--r--sim/common/ChangeLog5
-rwxr-xr-xsim/common/gennltvals.py2
-rw-r--r--sim/common/nltvals.def38
-rw-r--r--sim/sh/ChangeLog7
-rw-r--r--sim/sh/Makefile.in3
-rw-r--r--sim/sh/interp.c45
-rw-r--r--sim/sh/syscall.h36
7 files changed, 77 insertions, 59 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index f0827b2..20a4257 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,5 +1,10 @@
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.
* nltvals.def: Regenerate.
diff --git a/sim/common/gennltvals.py b/sim/common/gennltvals.py
index bf0aaa4..5831607 100755
--- a/sim/common/gennltvals.py
+++ b/sim/common/gennltvals.py
@@ -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',
}
diff --git a/sim/common/nltvals.def b/sim/common/nltvals.def
index fbaee3a..3b890af 100644
--- a/sim/common/nltvals.def
+++ b/sim/common/nltvals.def
@@ -688,6 +688,44 @@
/* 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 */
diff --git a/sim/sh/ChangeLog b/sim/sh/ChangeLog
index 1389261..984ff5e 100644
--- a/sim/sh/ChangeLog
+++ b/sim/sh/ChangeLog
@@ -1,5 +1,12 @@
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.
2021-04-12 Mike Frysinger <vapier@gentoo.org>
diff --git a/sim/sh/Makefile.in b/sim/sh/Makefile.in
index 54f1e0a..e92b784 100644
--- a/sim/sh/Makefile.in
+++ b/sim/sh/Makefile.in
@@ -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 = \
diff --git a/sim/sh/interp.c b/sim/sh/interp.c
index 7b9dd52..2fafcfd 100644
--- a/sim/sh/interp.c
+++ b/sim/sh/interp.c
@@ -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
index aebce2c..0000000
--- a/sim/sh/syscall.h
+++ /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 */