proc: fix gs/fs-related bug in exception handler

1. %rip -> %rsp (misspelt a register name, damn)
2. Rename swapgs_if_needed to iret_swapgs_if_needed for clarification
3. Add iret_swapgs_if_needed before iret from exception handler
This commit is contained in:
Mark
2020-10-18 23:48:27 +03:00
parent 877a5f455d
commit c2db4e94a6
7 changed files with 16 additions and 16 deletions
+3 -2
View File
@@ -22,8 +22,8 @@ amd64_exc_generic:
// 0x10: rip
// 0x08: error code
// 0x00: error number
cmpq $0x08, 0x18(%rip)
jnz 1f
cmpq $0x08, 0x18(%rsp)
jz 1f
swapgs
1:
@@ -79,6 +79,7 @@ amd64_exc_generic:
addq $16, %rsp
iret_swapgs_if_needed
iretq
amd64_isr_nerr 0
+4 -4
View File
@@ -7,16 +7,16 @@
amd64_irq0_early:
cli
swapgs_if_needed
iret_swapgs_if_needed
pushq %rax
irq_eoi_lapic 0
popq %rax
swapgs_if_needed
iret_swapgs_if_needed
iretq
amd64_irq0:
cli
swapgs_if_needed
iret_swapgs_if_needed
// Push caller-saved registers so it appears as if a thread just called yield()
pushq %r11
@@ -42,7 +42,7 @@ amd64_irq0:
popq %r10
popq %r11
swapgs_if_needed
iret_swapgs_if_needed
iretq
amd64_irq2_counting:
+2 -2
View File
@@ -50,7 +50,7 @@ amd64_idt_load:
.global amd64_irq_msi0
amd64_irq_msi0:
cli
swapgs_if_needed
iret_swapgs_if_needed
pushq %r11
pushq %r10
@@ -78,5 +78,5 @@ amd64_irq_msi0:
popq %r10
popq %r11
swapgs_if_needed
iret_swapgs_if_needed
iretq
+2 -2
View File
@@ -14,7 +14,7 @@ context_enter:
popq %r10
popq %r11
swapgs_if_needed
iret_swapgs_if_needed
iretq
.global context_exec_enter
@@ -53,7 +53,7 @@ context_exec_enter:
xorq %r14, %r14
xorq %r15, %r15
swapgs_if_needed
iret_swapgs_if_needed
iretq
.global context_switch_first
+1 -2
View File
@@ -170,8 +170,7 @@ KERNEL_CFLAGS=-Iinclude \
-Wall \
-Wextra \
-Wno-unused \
-O2 \
-funroll-loops \
-Og \
-ggdb \
-Werror $(KERNEL_DEF)
KERNEL_LDFLAGS=-nostdlib \
+2 -2
View File
@@ -11,9 +11,9 @@
(__amd64_cpu + off)(%rip)
#endif
// To be used in interrupt handlers
// To be used in interrupt handlers or anything with iret-like stack layout
// DIRECTLY AFTER ENTRY without prior stack modification
.macro swapgs_if_needed
.macro iret_swapgs_if_needed
cmpq $0x08, 0x08(%rsp)
je 1f
swapgs
+2 -2
View File
@@ -13,7 +13,7 @@
.global amd64_irq\n
amd64_irq\n:
cli
swapgs_if_needed
iret_swapgs_if_needed
pushq %r11
pushq %r10
@@ -39,7 +39,7 @@ amd64_irq\n:
popq %r10
popq %r11
swapgs_if_needed
iret_swapgs_if_needed
iretq
.endm