summaryrefslogtreecommitdiff
path: root/src/sim
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2019-11-22 15:40:58 -0800
committerGabe Black <gabeblack@google.com>2019-12-10 23:58:14 +0000
commita33d20ccafdca5338dbdad0659c754ea065e2bfc (patch)
tree51b6f79b619a9c9d2c0687d9a076004f3963749b /src/sim
parentacd11787c9a650115efe13076f9d8d24b6332bd5 (diff)
downloadgem5-a33d20ccafdca5338dbdad0659c754ea065e2bfc.tar.xz
sim: Make the syscalls use the SyscallReturn suppression mechanism.
This, among other things, prevents them from needing to toggle global flags in the syscall desc table to control local behavior. Jira Issue: https://gem5.atlassian.net/browse/GEM5-187 Change-Id: Idcef23766084f10d5205721b54a6768a850f7eb9 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23167 Maintainer: Gabe Black <gabeblack@google.com> Tested-by: kokoro <noreply+kokoro@google.com> Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Diffstat (limited to 'src/sim')
-rw-r--r--src/sim/syscall_desc.cc2
-rw-r--r--src/sim/syscall_emul.hh4
2 files changed, 2 insertions, 4 deletions
diff --git a/src/sim/syscall_desc.cc b/src/sim/syscall_desc.cc
index 345bfa114..bf378fe20 100644
--- a/src/sim/syscall_desc.cc
+++ b/src/sim/syscall_desc.cc
@@ -81,7 +81,7 @@ SyscallDesc::doSyscall(int callnum, ThreadContext *tc, Fault *fault)
} else
DPRINTF_SYSCALL(Base, "%s returns %d\n", _name, retval.encodedValue());
- if (!(_flags & SyscallDesc::SuppressReturnValue) && !retval.needsRetry())
+ if (!retval.suppressed() && !retval.needsRetry())
process->setSyscallReturn(tc, retval);
}
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index fc6ed62d1..e467b0bff 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -2131,7 +2131,6 @@ template <class OS>
SyscallReturn
execveFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
{
- desc->setFlags(0);
auto p = tc->getProcessPtr();
int index = 0;
@@ -2215,8 +2214,7 @@ execveFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
TheISA::PCState pcState = tc->pcState();
tc->setNPC(pcState.instAddr());
- desc->setFlags(SyscallDesc::SuppressReturnValue);
- return 0;
+ return SyscallReturn();
}
/// Target getrusage() function.