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:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user