mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-02 04:27:46 +08:00
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:
@ -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.
|
||||
|
@ -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];
|
||||
|
Reference in New Issue
Block a user