Modify a thread context, setting registers Note: Should only be applied to threads that will return from a syscall. If error != 0 then an error is sent along with the message Note: - RCX and R11 are used by sysret so can't be used to return data
(&self, error: usize, message: Message)
| 190 | /// - RCX and R11 are used by sysret so can't be used |
| 191 | /// to return data |
| 192 | pub fn return_error_message(&self, error: usize, message: Message) { |
| 193 | let context = self.context_mut(); |
| 194 | |
| 195 | let (ctrl, data1, data2, data3) = message.to_values(self); |
| 196 | context.rax = ctrl as usize; |
| 197 | if error != 0 { |
| 198 | // Error returning a message |
| 199 | context.rax |= syscalls::SYSCALL_ERROR_CONTAINS_MESSAGE | |
| 200 | (error & syscalls::SYSCALL_ERROR_MASK); |
| 201 | } |
| 202 | context.rdi = data1 as usize; |
| 203 | context.rsi = data2 as usize; |
| 204 | context.rdx = data3 as usize; |
| 205 | } |
| 206 | |
| 207 | /// Return a message to the thread |
| 208 | pub fn return_message(&self, message: Message) { |
no test coverage detected