Switch push/pop_all macros from push/pop to mov

This commit is contained in:
Justin C. Miller
2019-03-14 22:49:51 -07:00
parent be007c6278
commit 6410c898c5
5 changed files with 42 additions and 46 deletions

View File

@@ -3,7 +3,7 @@
extern isr_handler
global isr_handler_prelude
isr_handler_prelude:
push_all_and_segments
push_all
check_swap_gs
mov rdi, rsp
@@ -15,7 +15,7 @@ isr_handler_prelude:
extern irq_handler
global irq_handler_prelude
irq_handler_prelude:
push_all_and_segments
push_all
check_swap_gs
mov rdi, rsp
@@ -27,7 +27,7 @@ irq_handler_prelude:
global isr_handler_return
isr_handler_return:
check_swap_gs
pop_all_and_segments
pop_all
add rsp, 16 ; because the ISRs added err/num
iretq

View File

@@ -27,7 +27,7 @@ ramdisk_process_loader:
mov fs, ax
mov gs, ax
pop_all_and_segments
pop_all
add rsp, 16 ; because the ISRs add err/num
iretq

View File

@@ -1,47 +1,43 @@
%macro push_all_and_segments 0
; ss ; rsp + a8
; rsp ; rsp + a0
; rflags ; rsp + 98
; cs ; rsp + 90
; rip ; rsp + 88
; error ; rsp + 80
; vector ; rsp + 78
%macro push_all 0
sub rsp, 0x78
push rax ; rsp + 70
push rcx ; rsp + 68
push rdx ; rsp + 60
push rbx ; rsp + 58
push rbp ; rsp + 50
push rsi ; rsp + 48
push rdi ; rsp + 40
mov [rsp + 0x70], rax
mov [rsp + 0x68], rcx
mov [rsp + 0x60], rdx
mov [rsp + 0x58], rbx
mov [rsp + 0x50], rbp
mov [rsp + 0x48], rsi
mov [rsp + 0x40], rdi
push r8 ; rsp + 38
push r9 ; rsp + 30
push r10 ; rsp + 28
push r11 ; rsp + 20
push r12 ; rsp + 18
push r13 ; rsp + 10
push r14 ; rsp + 08
push r15 ; rsp + 00
mov [rsp + 0x38], r8
mov [rsp + 0x30], r9
mov [rsp + 0x28], r10
mov [rsp + 0x20], r11
mov [rsp + 0x18], r12
mov [rsp + 0x10], r13
mov [rsp + 0x08], r14
mov [rsp + 0x00], r15
%endmacro
%macro pop_all_and_segments 0
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
%macro pop_all 0
mov rax, [rsp + 0x70]
mov rcx, [rsp + 0x68]
mov rdx, [rsp + 0x60]
mov rbx, [rsp + 0x58]
mov rbp, [rsp + 0x50]
mov rsi, [rsp + 0x48]
mov rdi, [rsp + 0x40]
pop rdi
pop rsi
pop rbp
pop rbx
pop rdx
pop rcx
pop rax
mov r8, [rsp + 0x38]
mov r9, [rsp + 0x30]
mov r10, [rsp + 0x28]
mov r11, [rsp + 0x20]
mov r12, [rsp + 0x18]
mov r13, [rsp + 0x10]
mov r14, [rsp + 0x08]
mov r15, [rsp + 0x00]
add rsp, 0x78
%endmacro
%macro check_swap_gs 0

View File

@@ -18,7 +18,7 @@ syscall_handler_prelude:
push rcx ; user rip
push 0 ; bogus interrupt
push 0 ; bogus errorcode
push_all_and_segments
push_all
inc qword [rel __counter_syscall_enter]
@@ -39,7 +39,7 @@ syscall_handler_prelude:
swapgs
pop_all_and_segments
pop_all
add rsp, 16 ; ignore bogus interrupt / error
pop rcx ; user rip
add rsp, 32 ; ignore cs, flags, rsp, ss