From f7cb03f493a0cf54579dc0f6a921fecde8cab193 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Fri, 22 Nov 2019 15:38:30 -0800 Subject: [PATCH] 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 Maintainer: Gabe Black Tested-by: kokoro --- src/sim/syscall_return.hh | 13 +++++++++---- 1 file 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 -- 2.30.2