gem5
|
This class represents the return value from an emulated system call, including any errno setting. More...
#include <syscall_return.hh>
Public Member Functions | |
SyscallReturn (int64_t v) | |
For simplicity, allow the object to be initialized with a single signed integer using the same positive=success, negative=-errno convention described above. More... | |
~SyscallReturn () | |
bool | successful () const |
Was the system call successful? More... | |
bool | needsRetry () const |
Does the syscall need to be retried? More... | |
int64_t | returnValue () const |
The return value. More... | |
int | errnoValue () const |
The errno value. More... | |
int64_t | encodedValue () const |
The encoded value (as described above) More... | |
Static Public Member Functions | |
static SyscallReturn | retry () |
Pseudo-constructor to create an instance with the retry flag set. More... | |
Private Attributes | |
int64_t | value |
bool | retryFlag |
This class represents the return value from an emulated system call, including any errno setting.
On some platforms, the return value and errno are encoded in a single signed integer. A value less than zero but greater than -4096 indicates an error, and the value is the negation of the errno value. Otherwise, the call was successful and the integer is the return value. (Large negative numbers are considered successful to allow syscalls to return pointers to high memory, e.g., stack addresses.) See, for example, Appendix A of the AMD64 ABI spec at http://www.x86-64.org/documentation/abi.pdf.
Other platforms use a more complex interface, returning a value and an error code in separate registers.
This class is designed to support both types of interfaces.
Definition at line 54 of file syscall_return.hh.
|
inline |
For simplicity, allow the object to be initialized with a single signed integer using the same positive=success, negative=-errno convention described above.
Typically this constructor is used as a default type 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;').
Definition at line 66 of file syscall_return.hh.
|
inline |
Definition at line 78 of file syscall_return.hh.
|
inline |
The encoded value (as described above)
Definition at line 104 of file syscall_return.hh.
References value.
Referenced by SyscallDesc::doSyscall(), PowerProcess::setSyscallReturn(), ArmProcess32::setSyscallReturn(), X86ISA::X86Process::setSyscallReturn(), and ArmProcess64::setSyscallReturn().
|
inline |
The errno value.
Definition at line 97 of file syscall_return.hh.
References successful(), and value.
Referenced by AlphaProcess::setSyscallReturn(), MipsProcess::setSyscallReturn(), RiscvProcess::setSyscallReturn(), and SparcProcess::setSyscallReturn().
|
inline |
Does the syscall need to be retried?
Definition at line 87 of file syscall_return.hh.
References retryFlag.
Referenced by SyscallDesc::doSyscall().
|
inlinestatic |
Pseudo-constructor to create an instance with the retry flag set.
Definition at line 71 of file syscall_return.hh.
|
inline |
The return value.
Definition at line 90 of file syscall_return.hh.
References successful(), and value.
Referenced by AlphaProcess::setSyscallReturn(), MipsProcess::setSyscallReturn(), RiscvProcess::setSyscallReturn(), and SparcProcess::setSyscallReturn().
|
inline |
Was the system call successful?
Definition at line 81 of file syscall_return.hh.
References value.
Referenced by errnoValue(), returnValue(), AlphaProcess::setSyscallReturn(), PowerProcess::setSyscallReturn(), MipsProcess::setSyscallReturn(), RiscvProcess::setSyscallReturn(), and SparcProcess::setSyscallReturn().
|
private |
Definition at line 113 of file syscall_return.hh.
Referenced by needsRetry(), and retry().
|
private |
Definition at line 111 of file syscall_return.hh.
Referenced by encodedValue(), errnoValue(), returnValue(), and successful().