diff options
author | Gabe Black <gabeblack@google.com> | 2019-11-22 15:40:58 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-12-10 23:58:14 +0000 |
commit | a33d20ccafdca5338dbdad0659c754ea065e2bfc (patch) | |
tree | 51b6f79b619a9c9d2c0687d9a076004f3963749b /src/sim | |
parent | acd11787c9a650115efe13076f9d8d24b6332bd5 (diff) | |
download | gem5-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.cc | 2 | ||||
-rw-r--r-- | src/sim/syscall_emul.hh | 4 |
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. |