sim: Use variadic GuestABI arguments in a few additional syscalls.

Jira Issue: https://gem5.atlassian.net/browse/GEM5-187

Change-Id: Ib2f193e7409859469c853e11f121eba82b3c0ddc
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23196
Reviewed-by: Bobby R. Bruce <bbruce@ucdavis.edu>
Maintainer: Bobby R. Bruce <bbruce@ucdavis.edu>
Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
Gabe Black
2019-11-27 22:53:47 -08:00
parent 6fbf2e7b6e
commit 382dda67dc
2 changed files with 19 additions and 27 deletions

View File

@@ -740,13 +740,10 @@ dup2Func(SyscallDesc *desc, int num, ThreadContext *tc,
}
SyscallReturn
fcntlFunc(SyscallDesc *desc, int num, ThreadContext *tc)
fcntlFunc(SyscallDesc *desc, int num, ThreadContext *tc,
int tgt_fd, int cmd, GuestABI::VarArgs<int> varargs)
{
int arg;
int index = 0;
auto p = tc->getProcessPtr();
int tgt_fd = p->getSyscallArg(tc, index);
int cmd = p->getSyscallArg(tc, index);
auto hbfdp = std::dynamic_pointer_cast<HBFDEntry>((*p->fds)[tgt_fd]);
if (!hbfdp)
@@ -760,7 +757,7 @@ fcntlFunc(SyscallDesc *desc, int num, ThreadContext *tc)
return coe & FD_CLOEXEC;
case F_SETFD: {
arg = p->getSyscallArg(tc, index);
int arg = varargs.get<int>();
arg ? hbfdp->setCOE(true) : hbfdp->setCOE(false);
return 0;
}
@@ -773,7 +770,7 @@ fcntlFunc(SyscallDesc *desc, int num, ThreadContext *tc)
// subsequent fcntls.
case F_GETFL:
case F_SETFL: {
arg = p->getSyscallArg(tc, index);
int arg = varargs.get<int>();
int rv = fcntl(sim_fd, cmd, arg);
return (rv == -1) ? -errno : rv;
}
@@ -785,18 +782,16 @@ fcntlFunc(SyscallDesc *desc, int num, ThreadContext *tc)
}
SyscallReturn
fcntl64Func(SyscallDesc *desc, int num, ThreadContext *tc)
fcntl64Func(SyscallDesc *desc, int num, ThreadContext *tc,
int tgt_fd, int cmd)
{
int index = 0;
auto p = tc->getProcessPtr();
int tgt_fd = p->getSyscallArg(tc, index);
auto hbfdp = std::dynamic_pointer_cast<HBFDEntry>((*p->fds)[tgt_fd]);
if (!hbfdp)
return -EBADF;
int sim_fd = hbfdp->getSimFD();
int cmd = p->getSyscallArg(tc, index);
switch (cmd) {
case 33: //F_GETLK64
warn("fcntl64(%d, F_GETLK64) not supported, error returned\n", tgt_fd);