changeset ba45735a726a in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=ba45735a726a
description:
x86, sim: add some syscalls to X86
this patch adds an implementation for the pwrite64 syscall and
enables it for x86_64, and enables fstatfs for x86_64.
diffstat:
src/arch/x86/linux/process.cc | 4 ++--
src/sim/syscall_emul.hh | 22 ++++++++++++++++++++++
2 files changed, 24 insertions(+), 2 deletions(-)
diffs (53 lines):
diff -r 92509f1b24f7 -r ba45735a726a src/arch/x86/linux/process.cc
--- a/src/arch/x86/linux/process.cc Wed Aug 03 11:10:46 2016 -0500
+++ b/src/arch/x86/linux/process.cc Thu Aug 04 12:32:21 2016 -0400
@@ -236,7 +236,7 @@
/* 15 */ SyscallDesc("rt_sigreturn", unimplementedFunc),
/* 16 */ SyscallDesc("ioctl", ioctlFunc<X86Linux64>),
/* 17 */ SyscallDesc("pread64", unimplementedFunc),
- /* 18 */ SyscallDesc("pwrite64", unimplementedFunc),
+ /* 18 */ SyscallDesc("pwrite64", pwrite64Func<X86Linux64>),
/* 19 */ SyscallDesc("readv", unimplementedFunc),
/* 20 */ SyscallDesc("writev", writevFunc<X86Linux64>),
/* 21 */ SyscallDesc("access", ignoreFunc),
@@ -356,7 +356,7 @@
/* 135 */ SyscallDesc("personality", unimplementedFunc),
/* 136 */ SyscallDesc("ustat", unimplementedFunc),
/* 137 */ SyscallDesc("statfs", unimplementedFunc),
- /* 138 */ SyscallDesc("fstatfs", unimplementedFunc),
+ /* 138 */ SyscallDesc("fstatfs", fstatfsFunc<X86Linux64>),
/* 139 */ SyscallDesc("sysfs", unimplementedFunc),
/* 140 */ SyscallDesc("getpriority", unimplementedFunc),
/* 141 */ SyscallDesc("setpriority", unimplementedFunc),
diff -r 92509f1b24f7 -r ba45735a726a src/sim/syscall_emul.hh
--- a/src/sim/syscall_emul.hh Wed Aug 03 11:10:46 2016 -0500
+++ b/src/sim/syscall_emul.hh Thu Aug 04 12:32:21 2016 -0400
@@ -1389,6 +1389,28 @@
return start;
}
+template <class OS>
+SyscallReturn
+pwrite64Func(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc)
+{
+ int index = 0;
+ int tgt_fd = p->getSyscallArg(tc, index);
+ Addr bufPtr = p->getSyscallArg(tc, index);
+ int nbytes = p->getSyscallArg(tc, index);
+ int offset = p->getSyscallArg(tc, index);
+
+ int sim_fd = p->getSimFD(tgt_fd);
+ if (sim_fd < 0)
+ return -EBADF;
+
+ BufferArg bufArg(bufPtr, nbytes);
+ bufArg.copyIn(tc->getMemProxy());
+
+ int bytes_written = pwrite64(sim_fd, bufArg.bufferPtr(), nbytes, offset);
+
+ return (bytes_written == -1) ? -errno : bytes_written;
+}
+
/// Target mmap() handler.
template <class OS>
SyscallReturn
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev