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>
This commit is contained in:
Gabe Black
2019-11-22 15:38:30 -08:00
parent 89d50b0c92
commit f7cb03f493

View File

@@ -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