aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sim/common/ChangeLog5
-rw-r--r--sim/common/callback.c27
-rw-r--r--sim/sh/ChangeLog5
-rw-r--r--sim/sh/interp.c11
-rw-r--r--sim/sh/syscall.h2
5 files changed, 50 insertions, 0 deletions
diff --git a/sim/common/ChangeLog b/sim/common/ChangeLog
index ca6d384..be39aba 100644
--- a/sim/common/ChangeLog
+++ b/sim/common/ChangeLog
@@ -1,3 +1,8 @@
+2003-10-15 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * callback.c (os_ftruncate, os_truncate): New functions.
+ (default_callback): Initialize ftruncate and truncate members.
+
2003-09-08 Dave Brolley <brolley@redhat.com>
On behalf of Doug Evans <dje@sebabeach.org>
diff --git a/sim/common/callback.c b/sim/common/callback.c
index db0fff6..b225481 100644
--- a/sim/common/callback.c
+++ b/sim/common/callback.c
@@ -399,6 +399,30 @@ os_fstat (p, fd, buf)
return wrap (p, fstat (fdmap (p, fd), buf));
}
+static int
+os_ftruncate (p, fd, len)
+ host_callback *p;
+ int fd;
+ long len;
+{
+ int result;
+
+ result = fdbad (p, fd);
+ if (result)
+ return result;
+ result = wrap (p, ftruncate (fdmap (p, fd), len));
+ return result;
+}
+
+static int
+os_truncate (p, file, len)
+ host_callback *p;
+ const char *file;
+ long len;
+{
+ return wrap (p, stat (file, len));
+}
+
static int
os_shutdown (p)
host_callback *p;
@@ -538,6 +562,9 @@ host_callback default_callback =
os_stat,
os_fstat,
+ os_ftruncate,
+ os_truncate,
+
os_poll_quit,
os_shutdown,
diff --git a/sim/sh/ChangeLog b/sim/sh/ChangeLog
index 7ab1394..2b6cf43 100644
--- a/sim/sh/ChangeLog
+++ b/sim/sh/ChangeLog
@@ -1,3 +1,8 @@
+2003-10-15 J"orn Rennecke <joern.rennecke@superh.com>
+
+ * syscall.h (SYS_truncate, SYS_ftruncate): Define.
+ * interp.c (trap): Add support for SYS_ftruncate and SYS_truncate.
+
2003-08-11 Shrinivas Atre <shrinivasa@KPITCummins.com>
* sim/sh/gencode.c ( tab[] ): Addition of MAC.L handler and
correction for MAC.W handler
diff --git a/sim/sh/interp.c b/sim/sh/interp.c
index 91899f4..711df1e 100644
--- a/sim/sh/interp.c
+++ b/sim/sh/interp.c
@@ -1153,6 +1153,17 @@ trap (i, regs, insn_ptr, memory, maskl, maskw, endianw)
case SYS_time:
regs[0] = get_now ();
break;
+ case SYS_ftruncate:
+ regs[0] = callback->ftruncate (callback, regs[5], regs[6]);
+ break;
+ case SYS_truncate:
+ {
+ int len = strswaplen (regs[5]);
+ strnswap (regs[5], len);
+ regs[0] = callback->truncate (callback, ptr (regs[5]), regs[6]);
+ strnswap (regs[5], len);
+ break;
+ }
default:
regs[0] = -1;
break;
diff --git a/sim/sh/syscall.h b/sim/sh/syscall.h
index 9b818f9..aebce2c 100644
--- a/sim/sh/syscall.h
+++ b/sim/sh/syscall.h
@@ -27,6 +27,8 @@
#define SYS_stat 38
#define SYS_pipe 42
#define SYS_execve 59
+#define SYS_truncate 129
+#define SYS_ftruncate 130
#define SYS_argc 172
#define SYS_argnlen 173
#define SYS_argn 174