diff options
author | Anthony Green <green@moxielogic.com> | 2019-12-14 05:23:20 -0500 |
---|---|---|
committer | Anthony Green <green@moxielogic.com> | 2019-12-14 05:33:39 -0500 |
commit | fb46334198d8d4f82133033758cb75f086d864ad (patch) | |
tree | a1b9c5c9d574ad58a94e7c8240edae8a4a22feec /sim/moxie | |
parent | ff8577f64987a898e1dc5eb6afb66a404fb7bb16 (diff) | |
download | binutils-gdb-fb46334198d8d4f82133033758cb75f086d864ad.tar.gz |
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.
Diffstat (limited to 'sim/moxie')
-rw-r--r-- | sim/moxie/ChangeLog | 5 | ||||
-rw-r--r-- | sim/moxie/interp.c | 19 |
2 files changed, 21 insertions, 3 deletions
diff --git a/sim/moxie/ChangeLog b/sim/moxie/ChangeLog index 86fb3341081..9f21b3c90ed 100644 --- a/sim/moxie/ChangeLog +++ b/sim/moxie/ChangeLog @@ -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. diff --git a/sim/moxie/interp.c b/sim/moxie/interp.c index ecea5b42f38..fe770093e53 100644 --- a/sim/moxie/interp.c +++ b/sim/moxie/interp.c @@ -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]; |