aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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 */