diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-26 11:52:55 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-26 11:52:55 +0100 |
| commit | 950649760927a7c33ddecd1944fd0ad20e731ee9 (patch) | |
| tree | 26c36460a91a128879de7ebf68fbcfcc50ef08fd /kernel/include | |
| parent | a362a43899040a3848427c4d1f3bd1d3e53f46ec (diff) | |
save/restore context from rsp
Diffstat (limited to 'kernel/include')
| -rw-r--r-- | kernel/include/regs.h | 28 | ||||
| -rw-r--r-- | kernel/include/x86_64_regs.S | 16 |
2 files changed, 44 insertions, 0 deletions
diff --git a/kernel/include/regs.h b/kernel/include/regs.h index 81b8a69..ec2ed89 100644 --- a/kernel/include/regs.h +++ b/kernel/include/regs.h @@ -1,6 +1,8 @@ #ifndef REGS_H #define REGS_H +#include <types.h> + #define R15_OFF 0x0 #define R14_OFF 0x08 #define R13_OFF 0x10 @@ -24,4 +26,30 @@ #define RSP_OFF 0x100 #define SS_OFF 0x108 +struct regs_t { + uint64_t r15; + uint64_t r14; + uint64_t r13; + uint64_t r12; + uint64_t rbp; + uint64_t rbx; + uint64_t seg; + uint64_t r11; + uint64_t r10; + uint64_t r9; + uint64_t r8; + uint64_t rdi; + uint64_t rsi; + uint64_t rdx; + uint64_t rcx; + uint64_t rax; + uint64_t error; + uint64_t rip; + uint64_t cs; + uint64_t rflags; + uint64_t rsp; + uint64_t ss; +} __attribute__((packed)); +typedef struct regs_t regs_t; + #endif diff --git a/kernel/include/x86_64_regs.S b/kernel/include/x86_64_regs.S index 4b20539..644f4f8 100644 --- a/kernel/include/x86_64_regs.S +++ b/kernel/include/x86_64_regs.S @@ -8,6 +8,22 @@ * else use push/pop_callee_saved with push/pop_caller_saved */ +.set R15_OFF, 0x0 +.set R14_OFF, 0x08 +.set R13_OFF, 0x10 +.set R12_OFF, 0x18 +.set RBP_OFF, 0x20 +.set RBX_OFF, 0x28 +.set SEG_OFF, 0x30 +.set R11_OFF, 0x38 +.set R10_OFF, 0x40 +.set R9_OFF, 0x48 +.set R8_OFF, 0x50 +.set RDI_OFF, 0x58 +.set RSI_OFF, 0x60 +.set RDX_OFF, 0x68 +.set RCX_OFF, 0x70 +.set RAX_OFF, 0x78 .set ERROR_OFF, 0x80 .set RIP_OFF, 0x88 .set CS_OFF, 0x90 |
