Add unlink support to moxie simulator

This change adds support for the unlink system call, which is
required by the GCC testsuite.  It also switches read/write/open
system calls to use the sim_io_* functions.

2019-12-14  Anthony Green  <green@moxielogic.com>

	* interp.c (sim_engine_run): Make use of sim_io_* functions for
	read/write/open system calls.  Implement the unlink system call.
This commit is contained in:
Anthony Green
2019-12-14 05:23:20 -05:00
parent ff8577f649
commit fb46334198
2 changed files with 21 additions and 3 deletions

View File

@ -1,3 +1,8 @@
2019-12-14 Anthony Green <green@moxielogic.com>
* interp.c (sim_engine_run): Make use of sim_io_* functions for
read/write/open system calls. Implement the unlink system call.
2017-09-06 John Baldwin <jhb@FreeBSD.org>
* configure: Regenerate.

View File

@ -32,6 +32,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "sim-main.h"
#include "sim-base.h"
#include "sim-options.h"
#include "sim-io.h"
typedef int word;
typedef unsigned int uword;
@ -942,9 +943,10 @@ sim_engine_run (SIM_DESC sd,
char fname[1024];
int mode = (int) convert_target_flags ((unsigned) cpu.asregs.regs[3]);
int perm = (int) cpu.asregs.regs[4];
int fd = open (fname, mode, perm);
int fd;
sim_core_read_buffer (sd, scpu, read_map, fname,
cpu.asregs.regs[2], 1024);
fd = sim_io_open (sd, fname, mode);
/* FIXME - set errno */
cpu.asregs.regs[2] = fd;
break;
@ -954,7 +956,7 @@ sim_engine_run (SIM_DESC sd,
int fd = cpu.asregs.regs[2];
unsigned len = (unsigned) cpu.asregs.regs[4];
char *buf = malloc (len);
cpu.asregs.regs[2] = read (fd, buf, len);
cpu.asregs.regs[2] = sim_io_read (sd, fd, buf, len);
sim_core_write_buffer (sd, scpu, write_map, buf,
cpu.asregs.regs[3], len);
free (buf);
@ -968,11 +970,22 @@ sim_engine_run (SIM_DESC sd,
str = malloc (len);
sim_core_read_buffer (sd, scpu, read_map, str,
cpu.asregs.regs[3], len);
count = write (cpu.asregs.regs[2], str, len);
count = sim_io_write (sd, cpu.asregs.regs[2], str, len);
free (str);
cpu.asregs.regs[2] = count;
break;
}
case 0x7: /* SYS_unlink */
{
char fname[1024];
int fd;
sim_core_read_buffer (sd, scpu, read_map, fname,
cpu.asregs.regs[2], 1024);
fd = sim_io_unlink (sd, fname);
/* FIXME - set errno */
cpu.asregs.regs[2] = fd;
break;
}
case 0xffffffff: /* Linux System Call */
{
unsigned int handler = cpu.asregs.sregs[1];