Implement unlink system call for moxie sim

Message ID CACxje58FtKDNZNw1cFOOMB1BUSf8_opSGgDvBw=M+bTbgfk-BA@mail.gmail.com
State New, archived
Headers

Commit Message

Anthony Green Dec. 14, 2019, 10:25 a.m. UTC
  The following patch to the moxie sim (which I just pushed) 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.


 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];
  

Comments

Simon Marchi Dec. 14, 2019, 6:23 p.m. UTC | #1
On 2019-12-14 5:25 a.m., Anthony Green wrote:
> The following patch to the moxie sim (which I just pushed) 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.

Hi Anthony,

When you push a patch directly, please use a tag in the subject to reflect
this, to make it obvious.  For example, with git-send-email
`--subject-prefix=pushed`.  The exact tag doesn't really matter, as long as
it's clear.

Thanks,

Simon
  

Patch

diff --git a/sim/moxie/interp.c b/sim/moxie/interp.c
index ecea5b42f3..fe770093e5 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;