mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-11 18:27:00 +08:00
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.
This commit is contained in:
sim/sh
@ -15,9 +15,6 @@
|
|||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# 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
|
## COMMON_PRE_CONFIG_FRAG
|
||||||
|
|
||||||
SIM_OBJS = \
|
SIM_OBJS = \
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
#include "sim-base.h"
|
#include "sim-base.h"
|
||||||
#include "sim-options.h"
|
#include "sim-options.h"
|
||||||
|
|
||||||
#include "targ-vals.h"
|
#include "target-newlib-syscall.h"
|
||||||
|
|
||||||
#include <math.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)
|
#if !defined(__GO32__) && !defined(_WIN32)
|
||||||
case TARGET_SYS_fork:
|
case TARGET_NEWLIB_SH_SYS_fork:
|
||||||
regs[0] = fork ();
|
regs[0] = fork ();
|
||||||
break;
|
break;
|
||||||
/* This would work only if endianness matched between host and target.
|
/* This would work only if endianness matched between host and target.
|
||||||
Besides, it's quite dangerous. */
|
Besides, it's quite dangerous. */
|
||||||
#if 0
|
#if 0
|
||||||
case TARGET_SYS_execve:
|
case TARGET_NEWLIB_SH_SYS_execve:
|
||||||
regs[0] = execve (ptr (regs[5]), (char **) ptr (regs[6]),
|
regs[0] = execve (ptr (regs[5]), (char **) ptr (regs[6]),
|
||||||
(char **) ptr (regs[7]));
|
(char **) ptr (regs[7]));
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_execv:
|
case TARGET_NEWLIB_SH_SYS_execv:
|
||||||
regs[0] = execve (ptr (regs[5]), (char **) ptr (regs[6]), 0);
|
regs[0] = execve (ptr (regs[5]), (char **) ptr (regs[6]), 0);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
case TARGET_SYS_pipe:
|
case TARGET_NEWLIB_SH_SYS_pipe:
|
||||||
{
|
{
|
||||||
regs[0] = (BUSERROR (regs[5], maskl)
|
regs[0] = (BUSERROR (regs[5], maskl)
|
||||||
? -EINVAL
|
? -EINVAL
|
||||||
@ -910,18 +910,18 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TARGET_SYS_wait:
|
case TARGET_NEWLIB_SH_SYS_wait:
|
||||||
regs[0] = wait ((int *) ptr (regs[5]));
|
regs[0] = wait ((int *) ptr (regs[5]));
|
||||||
break;
|
break;
|
||||||
#endif /* !defined(__GO32__) && !defined(_WIN32) */
|
#endif /* !defined(__GO32__) && !defined(_WIN32) */
|
||||||
|
|
||||||
case TARGET_SYS_read:
|
case TARGET_NEWLIB_SH_SYS_read:
|
||||||
strnswap (regs[6], regs[7]);
|
strnswap (regs[6], regs[7]);
|
||||||
regs[0]
|
regs[0]
|
||||||
= callback->read (callback, regs[5], ptr (regs[6]), regs[7]);
|
= callback->read (callback, regs[5], ptr (regs[6]), regs[7]);
|
||||||
strnswap (regs[6], regs[7]);
|
strnswap (regs[6], regs[7]);
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_write:
|
case TARGET_NEWLIB_SH_SYS_write:
|
||||||
strnswap (regs[6], regs[7]);
|
strnswap (regs[6], regs[7]);
|
||||||
if (regs[5] == 1)
|
if (regs[5] == 1)
|
||||||
regs[0] = (int) callback->write_stdout (callback,
|
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]);
|
ptr (regs[6]), regs[7]);
|
||||||
strnswap (regs[6], regs[7]);
|
strnswap (regs[6], regs[7]);
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_lseek:
|
case TARGET_NEWLIB_SH_SYS_lseek:
|
||||||
regs[0] = callback->lseek (callback,regs[5], regs[6], regs[7]);
|
regs[0] = callback->lseek (callback,regs[5], regs[6], regs[7]);
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_close:
|
case TARGET_NEWLIB_SH_SYS_close:
|
||||||
regs[0] = callback->close (callback,regs[5]);
|
regs[0] = callback->close (callback,regs[5]);
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_open:
|
case TARGET_NEWLIB_SH_SYS_open:
|
||||||
{
|
{
|
||||||
int len = strswaplen (regs[5]);
|
int len = strswaplen (regs[5]);
|
||||||
strnswap (regs[5], len);
|
strnswap (regs[5], len);
|
||||||
@ -945,13 +945,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
|
|||||||
strnswap (regs[5], len);
|
strnswap (regs[5], len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TARGET_SYS_exit:
|
case TARGET_NEWLIB_SH_SYS_exit:
|
||||||
/* EXIT - caller can look in r5 to work out the reason */
|
/* EXIT - caller can look in r5 to work out the reason */
|
||||||
raise_exception (SIGQUIT);
|
raise_exception (SIGQUIT);
|
||||||
regs[0] = regs[5];
|
regs[0] = regs[5];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TARGET_SYS_stat: /* added at hmsi */
|
case TARGET_NEWLIB_SH_SYS_stat: /* added at hmsi */
|
||||||
/* stat system call */
|
/* stat system call */
|
||||||
{
|
{
|
||||||
struct stat host_stat;
|
struct stat host_stat;
|
||||||
@ -1000,7 +1000,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
case TARGET_SYS_chown:
|
case TARGET_NEWLIB_SH_SYS_chown:
|
||||||
{
|
{
|
||||||
int len = strswaplen (regs[5]);
|
int len = strswaplen (regs[5]);
|
||||||
|
|
||||||
@ -1010,7 +1010,7 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
case TARGET_SYS_chmod:
|
case TARGET_NEWLIB_SH_SYS_chmod:
|
||||||
{
|
{
|
||||||
int len = strswaplen (regs[5]);
|
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);
|
strnswap (regs[5], len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TARGET_SYS_utime:
|
case TARGET_NEWLIB_SH_SYS_utime:
|
||||||
{
|
{
|
||||||
/* Cast the second argument to void *, to avoid type mismatch
|
/* Cast the second argument to void *, to avoid type mismatch
|
||||||
if a prototype is present. */
|
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);
|
strnswap (regs[5], len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case TARGET_SYS_argc:
|
case TARGET_NEWLIB_SH_SYS_argc:
|
||||||
regs[0] = countargv (prog_argv);
|
regs[0] = countargv (prog_argv);
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_argnlen:
|
case TARGET_NEWLIB_SH_SYS_argnlen:
|
||||||
if (regs[5] < countargv (prog_argv))
|
if (regs[5] < countargv (prog_argv))
|
||||||
regs[0] = strlen (prog_argv[regs[5]]);
|
regs[0] = strlen (prog_argv[regs[5]]);
|
||||||
else
|
else
|
||||||
regs[0] = -1;
|
regs[0] = -1;
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_argn:
|
case TARGET_NEWLIB_SH_SYS_argn:
|
||||||
if (regs[5] < countargv (prog_argv))
|
if (regs[5] < countargv (prog_argv))
|
||||||
{
|
{
|
||||||
/* Include the termination byte. */
|
/* Include the termination byte. */
|
||||||
@ -1054,13 +1054,13 @@ trap (SIM_DESC sd, int i, int *regs, unsigned char *insn_ptr,
|
|||||||
else
|
else
|
||||||
regs[0] = -1;
|
regs[0] = -1;
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_time:
|
case TARGET_NEWLIB_SH_SYS_time:
|
||||||
regs[0] = get_now ();
|
regs[0] = get_now ();
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_ftruncate:
|
case TARGET_NEWLIB_SH_SYS_ftruncate:
|
||||||
regs[0] = callback->ftruncate (callback, regs[5], regs[6]);
|
regs[0] = callback->ftruncate (callback, regs[5], regs[6]);
|
||||||
break;
|
break;
|
||||||
case TARGET_SYS_truncate:
|
case TARGET_NEWLIB_SH_SYS_truncate:
|
||||||
{
|
{
|
||||||
int len = strswaplen (regs[5]);
|
int len = strswaplen (regs[5]);
|
||||||
strnswap (regs[5], len);
|
strnswap (regs[5], len);
|
||||||
@ -2345,6 +2345,7 @@ sim_open (SIM_OPEN_KIND kind, host_callback *cb,
|
|||||||
|
|
||||||
/* Set default options before parsing user options. */
|
/* Set default options before parsing user options. */
|
||||||
current_alignment = STRICT_ALIGNMENT;
|
current_alignment = STRICT_ALIGNMENT;
|
||||||
|
cb->syscall_map = cb_sh_syscall_map;
|
||||||
|
|
||||||
/* The cpu data is kept in a separately allocated chunk of memory. */
|
/* The cpu data is kept in a separately allocated chunk of memory. */
|
||||||
if (sim_cpu_alloc_all (sd, 1) != SIM_RC_OK)
|
if (sim_cpu_alloc_all (sd, 1) != SIM_RC_OK)
|
||||||
|
Reference in New Issue
Block a user