diff options
author | Hans-Peter Nilsson <hp@axis.com> | 2005-11-20 14:52:36 +0000 |
---|---|---|
committer | Hans-Peter Nilsson <hp@axis.com> | 2005-11-20 14:52:36 +0000 |
commit | d598b1f9257fce277a1aa4223504c33062734be4 (patch) | |
tree | 6bed7328e3f3db11215a74d590b080d4c189f0cd /sim | |
parent | ed1c0f4b9050c77e01fb6265f31ef240863323db (diff) | |
download | gdb-d598b1f9257fce277a1aa4223504c33062734be4.tar.gz |
cris/traps.c (TARGET_O_RDONLY, TARGET_O_WRONLY): Define.
(open_map): Use TARGET_O_ACCMODE, TARGET_O_RDONLY and
TARGET_O_WRONLY.
(cris_break_13_handler) <case TARGET_SYS_fcntl>: Add support for
F_GETFL on fd 0, 1 and 2.
Diffstat (limited to 'sim')
-rw-r--r-- | sim/ChangeLog | 8 | ||||
-rw-r--r-- | sim/cris/traps.c | 31 |
2 files changed, 33 insertions, 6 deletions
diff --git a/sim/ChangeLog b/sim/ChangeLog index e552e10aaaf..4ebe61efcc0 100644 --- a/sim/ChangeLog +++ b/sim/ChangeLog @@ -1,3 +1,11 @@ +2005-11-20 Hans-Peter Nilsson <hp@axis.com> + + cris/traps.c (TARGET_O_RDONLY, TARGET_O_WRONLY): Define. + (open_map): Use TARGET_O_ACCMODE, TARGET_O_RDONLY and + TARGET_O_WRONLY. + (cris_break_13_handler) <case TARGET_SYS_fcntl>: Add support for + F_GETFL on fd 0, 1 and 2. + 2005-11-17 Hans-Peter Nilsson <hp@axis.com> * cris/sim-main.h (struct _sim_cpu): New members last_syscall, diff --git a/sim/cris/traps.c b/sim/cris/traps.c index 607f72c6345..48fe6c541b9 100644 --- a/sim/cris/traps.c +++ b/sim/cris/traps.c @@ -664,18 +664,22 @@ static const CB_TARGET_DEFS_MAP errno_map[] = installation and removing synonyms and unnecessary items. Don't forget the end-marker. */ -/* This one we treat specially, as it's used in the fcntl syscall. */ -#define TARGET_O_ACCMODE 3 +/* These we treat specially, as they're used in the fcntl F_GETFL + syscall. For consistency, open_map is also manually edited to use + these macros. */ +#define TARGET_O_ACCMODE 0x3 +#define TARGET_O_RDONLY 0x0 +#define TARGET_O_WRONLY 0x1 static const CB_TARGET_DEFS_MAP open_map[] = { #ifdef O_ACCMODE - { O_ACCMODE, 0x3 }, + { O_ACCMODE, TARGET_O_ACCMODE }, #endif #ifdef O_RDONLY - { O_RDONLY, 0x0 }, + { O_RDONLY, TARGET_O_RDONLY }, #endif #ifdef O_WRONLY - { O_WRONLY, 0x1 }, + { O_WRONLY, TARGET_O_WRONLY }, #endif #ifdef O_RDWR { O_RDWR, 0x2 }, @@ -1429,9 +1433,24 @@ cris_break_13_handler (SIM_CPU *current_cpu, USI callnum, USI arg1, retval = current_cpu->last_open_flags & TARGET_O_ACCMODE; break; } + else if (arg1 == 0) + { + /* Because we can't freopen fd:s 0, 1, 2 to mean + something else than stdin, stdout and stderr + (sim/common/syscall.c:cb_syscall special cases fd + 0, 1 and 2), we know what flags that we can + sanely return for these fd:s. */ + retval = TARGET_O_RDONLY; + break; + } + else if (arg1 == 1 || arg1 == 2) + { + retval = TARGET_O_WRONLY; + break; + } /* FALLTHROUGH */ - /* Abort for all other cases. */ default: + /* Abort for all other cases. */ sim_io_eprintf (sd, "Unimplemented %s syscall " "(fd: 0x%lx: cmd: 0x%lx arg: 0x%lx)\n", callnum == TARGET_SYS_fcntl |