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.
This commit is contained in:
parent
8eb9cf8e94
commit
0b68475b10
2 changed files with 24 additions and 2 deletions
|
@ -236,7 +236,7 @@ static SyscallDesc syscallDescs64[] = {
|
|||
/* 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 @@ static SyscallDesc syscallDescs64[] = {
|
|||
/* 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),
|
||||
|
|
|
@ -1389,6 +1389,28 @@ mmapImpl(SyscallDesc *desc, int num, LiveProcess *p, ThreadContext *tc,
|
|||
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
|
||||
|
|
Loading…
Reference in a new issue