stuff2
This commit is contained in:
@@ -10,22 +10,27 @@ struct arch_task_context {
|
||||
uint64_t fs_base, gs_base;
|
||||
};
|
||||
|
||||
#define ARCH_ABI(typ, reg, ...) \
|
||||
union { \
|
||||
typ reg, __VA_ARGS__; \
|
||||
}
|
||||
|
||||
struct arch_context {
|
||||
uint64_t r15;
|
||||
uint64_t r14;
|
||||
uint64_t r13;
|
||||
uint64_t r12;
|
||||
ARCH_ABI(uint64_t, r13, a7);
|
||||
ARCH_ABI(uint64_t, r12, a6);
|
||||
uint64_t r11;
|
||||
uint64_t r10;
|
||||
uint64_t r9;
|
||||
uint64_t r8;
|
||||
uint64_t rsi;
|
||||
uint64_t rdi;
|
||||
ARCH_ABI(uint64_t, r10, a5);
|
||||
ARCH_ABI(uint64_t, r9, a3);
|
||||
ARCH_ABI(uint64_t, r8, a4);
|
||||
ARCH_ABI(uint64_t, rsi, a1);
|
||||
ARCH_ABI(uint64_t, rdi, a0);
|
||||
uint64_t rbp;
|
||||
uint64_t rdx;
|
||||
ARCH_ABI(uint64_t, rdx, a2, ret1);
|
||||
uint64_t rcx;
|
||||
uint64_t rbx;
|
||||
uint64_t rax;
|
||||
ARCH_ABI(uint64_t, rax, num, ret0);
|
||||
uint64_t isr; // Pushed onto the stack by the interrupt handler stubs.
|
||||
uint64_t error; // Pushed onto the stack by the CPU if the interrupt has an error code.
|
||||
uint64_t rip; // The rest is pushed onto the stack by the CPU during an interrupt.
|
||||
@@ -35,6 +40,8 @@ struct arch_context {
|
||||
uint64_t ss;
|
||||
};
|
||||
|
||||
static_assert(sizeof(struct arch_context) == 176);
|
||||
|
||||
#define ARCH_CTX_NUM rax
|
||||
#define ARCH_CTX_A0 rdi
|
||||
#define ARCH_CTX_A1 rsi
|
||||
|
||||
Reference in New Issue
Block a user