diff options
author | dzwdz | 2024-07-25 22:17:27 +0200 |
---|---|---|
committer | dzwdz | 2024-07-25 22:17:27 +0200 |
commit | 69fd0dd9fda47aa52cccdbef6ca388cea38e693b (patch) | |
tree | 9e0e80e0380f2f39dea8f3a76ecb629918ff187a /src/libk | |
parent | 24934406d5d39e013e22a9e6f4138c4169460d71 (diff) |
kernel: pass more information to user on interrupt
This is meant to facilitate a syscall for returning from interrupts, which
will actually work in the general case as opposed to the current hack, which
only works if the interrupt occured during a syscall (which is correct... for
now).
Diffstat (limited to 'src/libk')
-rw-r--r-- | src/libk/include/camellia/types.h | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libk/include/camellia/types.h b/src/libk/include/camellia/types.h index 3117877..9cbd386 100644 --- a/src/libk/include/camellia/types.h +++ b/src/libk/include/camellia/types.h @@ -33,8 +33,17 @@ struct ufs_request { }; struct intr_data { - void __user *ip; - void __user *sp; /* last for pop %rsp */ + /* same order as CpuRegs. + * notable omissions: + * - SSE registers (usually there's no need to save them, userland can do + * that itself if it wants) + * - FLAGS (so the kernel doesn't need to care about sanitizing it) */ + uint64_t r15, r14, r13, r12, r11, r10, r9, r8; + uint64_t rdi, rsi; + userptr_t rbp, rsp; + uint64_t rbx, rdx, rcx, rax, rip; + + char msg[]; /* variable size, NUL terminated */ }; struct sys_wait2 { |