summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2019-11-22 15:38:30 -0800
committerGabe Black <gabeblack@google.com>2019-12-04 04:29:50 +0000
commitf7cb03f493a0cf54579dc0f6a921fecde8cab193 (patch)
tree653f822ead826167b1e837766d9be5ebd00272e5
parent89d50b0c9291f62aa8ffeac56ef277d5ee688adb (diff)
downloadgem5-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>
-rw-r--r--src/sim/syscall_return.hh13
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