diff options
author | Gabe Black <gabeblack@google.com> | 2019-11-22 15:38:30 -0800 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2019-12-04 04:29:50 +0000 |
commit | f7cb03f493a0cf54579dc0f6a921fecde8cab193 (patch) | |
tree | 653f822ead826167b1e837766d9be5ebd00272e5 /src | |
parent | 89d50b0c9291f62aa8ffeac56ef277d5ee688adb (diff) | |
download | gem5-f7cb03f493a0cf54579dc0f6a921fecde8cab193.tar.xz |
sim: Add a suppression mechanism to the SyscallReturn class.
It makes more sense to specify whether something should be returned
based on the return, not intrinsically on the syscall. This is
especially true in cases like execve where the expected behavior
is not constant.
Jira Issue: https://gem5.atlassian.net/browse/GEM5-187
Change-Id: I95b53b6d69445c7a04c0049fbb0f439238d971e8
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23166
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/sim/syscall_return.hh | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/sim/syscall_return.hh b/src/sim/syscall_return.hh index b2e324827..b60434e40 100644 --- a/src/sim/syscall_return.hh +++ b/src/sim/syscall_return.hh @@ -63,9 +63,10 @@ class SyscallReturn /// conversion, so a bare integer is used where a SyscallReturn /// value is expected, e.g., as the return value from a system /// call emulation function ('return 0;' or 'return -EFAULT;'). - SyscallReturn(int64_t v) - : value(v), retryFlag(false) - {} + SyscallReturn(int64_t v) : value(v) {} + + /// A SyscallReturn constructed with no value means don't return anything. + SyscallReturn() : suppressedFlag(true) {} /// Pseudo-constructor to create an instance with the retry flag set. static SyscallReturn @@ -88,6 +89,9 @@ class SyscallReturn /// Does the syscall need to be retried? bool needsRetry() const { return retryFlag; } + /// Should returning this value be suppressed? + bool suppressed() const { return suppressedFlag; } + /// The return value int64_t returnValue() const @@ -110,7 +114,8 @@ class SyscallReturn private: int64_t value; - bool retryFlag; + bool retryFlag = false; + bool suppressedFlag = false; }; #endif |