diff options
author | Geoffrey Keating <geoffk@geoffk.org> | 2001-01-15 23:24:30 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@geoffk.org> | 2001-01-15 23:24:30 +0000 |
commit | 428e1889bc97f711eacc344ee3e17a8bfc05176d (patch) | |
tree | da206de34d0b12a1bd7568fc91e6036337f13ffc /sim | |
parent | 098f2ec3f5e6d9283bfc59639182083701943804 (diff) | |
download | fsf-binutils-gdb-428e1889bc97f711eacc344ee3e17a8bfc05176d.zip fsf-binutils-gdb-428e1889bc97f711eacc344ee3e17a8bfc05176d.tar.gz fsf-binutils-gdb-428e1889bc97f711eacc344ee3e17a8bfc05176d.tar.bz2 |
* emul_netbsd.c (do_open): Translate the flag parameter to the
open syscall to the numbers supported by the host.
Diffstat (limited to 'sim')
-rw-r--r-- | sim/ppc/ChangeLog | 5 | ||||
-rw-r--r-- | sim/ppc/emul_netbsd.c | 20 |
2 files changed, 24 insertions, 1 deletions
diff --git a/sim/ppc/ChangeLog b/sim/ppc/ChangeLog index 52e6685..c299d54 100644 --- a/sim/ppc/ChangeLog +++ b/sim/ppc/ChangeLog @@ -1,3 +1,8 @@ +2001-01-15 Geoffrey Keating <geoffk@redhat.com> + + * emul_netbsd.c (do_open): Translate the flag parameter to the + open syscall to the numbers supported by the host. + 2000-12-12 Geoffrey Keating <geoffk@redhat.com> * sim-endian.h: Don't have parameters on macro definitions which diff --git a/sim/ppc/emul_netbsd.c b/sim/ppc/emul_netbsd.c index e2064a4..777c364 100644 --- a/sim/ppc/emul_netbsd.c +++ b/sim/ppc/emul_netbsd.c @@ -386,6 +386,7 @@ do_open(os_emul_data *emul, char *path = emul_read_string(path_buf, path_addr, PATH_MAX, processor, cia); int flags = (int)cpu_registers(processor)->gpr[arg0+1]; int mode = (int)cpu_registers(processor)->gpr[arg0+2]; + int hostflags; int status; if (WITH_TRACE && ppc_trace[trace_os_emul]) @@ -393,8 +394,25 @@ do_open(os_emul_data *emul, SYS(open); + /* Do some translation on 'flags' to match it to the host's version. */ + /* These flag values were taken from the NetBSD 1.4 header files. */ + if ((flags & 3) == 0) + hostflags = O_RDONLY; + else if ((flags & 3) == 1) + hostflags = O_WRONLY; + else + hostflags = O_RDWR; + if (flags & 0x00000008) + hostflags |= O_APPEND; + if (flags & 0x00000200) + hostflags |= O_CREAT; + if (flags & 0x00000400) + hostflags |= O_TRUNC; + if (flags & 0x00000800) + hostflags |= O_EXCL; + /* Can't combine these statements, cuz open sets errno. */ - status = open(path, flags, mode); + status = open(path, hostflags, mode); emul_write_status(processor, status, errno); } |