sim: Add a suppression mechanism to the SyscallReturn class.
authorGabe Black <gabeblack@google.com>
Fri, 22 Nov 2019 23:38:30 +0000 (15:38 -0800)
committerGabe Black <gabeblack@google.com>
Wed, 4 Dec 2019 04:29:50 +0000 (04:29 +0000)
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>
src/sim/syscall_return.hh

index b2e32482704e17bf74233616c9f3e727d0557391..b60434e4045f5c3e61c318741a1df58af22cb43c 100644 (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