Unify trap handler naming and remove unused kernel mode stack setup
This commit is contained in:
@@ -119,11 +119,11 @@ Ar\Type\Vector:
|
|||||||
mov %al, KTRAP_FRAME_PreviousMode(%rbp)
|
mov %al, KTRAP_FRAME_PreviousMode(%rbp)
|
||||||
|
|
||||||
/* Skip swapgs as the interrupt originated from kernel mode */
|
/* Skip swapgs as the interrupt originated from kernel mode */
|
||||||
jz UserMode\Type\Vector
|
jz Dispatch\Type\Vector
|
||||||
|
|
||||||
swapgs
|
swapgs
|
||||||
|
|
||||||
UserMode\Type\Vector:
|
Dispatch\Type\Vector:
|
||||||
/* Set up trap frame pointer for the dispatcher and clear the direction flag */
|
/* Set up trap frame pointer for the dispatcher and clear the direction flag */
|
||||||
mov %rsp, %rcx
|
mov %rsp, %rcx
|
||||||
cld
|
cld
|
||||||
@@ -150,11 +150,11 @@ UserMode\Type\Vector:
|
|||||||
|
|
||||||
/* Test previous mode and swapgs if needed */
|
/* Test previous mode and swapgs if needed */
|
||||||
testb $1, KTRAP_FRAME_PreviousMode(%rbp)
|
testb $1, KTRAP_FRAME_PreviousMode(%rbp)
|
||||||
jz KernelModeReturn\Type\Vector
|
jz RestoreState\Type\Vector
|
||||||
cli
|
cli
|
||||||
swapgs
|
swapgs
|
||||||
|
|
||||||
KernelModeReturn\Type\Vector:
|
RestoreState\Type\Vector:
|
||||||
/* Restore XMM registers */
|
/* Restore XMM registers */
|
||||||
movdqa KTRAP_FRAME_Xmm0(%rbp), %xmm0
|
movdqa KTRAP_FRAME_Xmm0(%rbp), %xmm0
|
||||||
movdqa KTRAP_FRAME_Xmm1(%rbp), %xmm1
|
movdqa KTRAP_FRAME_Xmm1(%rbp), %xmm1
|
||||||
|
|||||||
@@ -115,7 +115,7 @@ _Ar\Type\Vector\()Start:
|
|||||||
mov KTRAP_FRAME_SegCs(%ebp), %ax
|
mov KTRAP_FRAME_SegCs(%ebp), %ax
|
||||||
and $3, %al
|
and $3, %al
|
||||||
mov %al, KTRAP_FRAME_PreviousMode(%ebp)
|
mov %al, KTRAP_FRAME_PreviousMode(%ebp)
|
||||||
jz KernelMode\Type\Vector
|
jz Dispatch\Type\Vector
|
||||||
|
|
||||||
/* Load Kernel PB selector into FS */
|
/* Load Kernel PB selector into FS */
|
||||||
mov $KGDT_R0_PB, %ax
|
mov $KGDT_R0_PB, %ax
|
||||||
@@ -126,16 +126,7 @@ _Ar\Type\Vector\()Start:
|
|||||||
mov %ax, %ds
|
mov %ax, %ds
|
||||||
mov %ax, %es
|
mov %ax, %es
|
||||||
|
|
||||||
jmp UserMode\Type\Vector
|
Dispatch\Type\Vector:
|
||||||
|
|
||||||
KernelMode\Type\Vector:
|
|
||||||
/* Save kernel stack pointer (SS:ESP) */
|
|
||||||
movl %ss, %eax
|
|
||||||
mov %eax, KTRAP_FRAME_SegSs(%ebp)
|
|
||||||
lea KTRAP_FRAME_Esp(%ebp), %eax
|
|
||||||
mov %eax, KTRAP_FRAME_Esp(%ebp)
|
|
||||||
|
|
||||||
UserMode\Type\Vector:
|
|
||||||
/* Push Frame Pointer and clear direction flag */
|
/* Push Frame Pointer and clear direction flag */
|
||||||
push %esp
|
push %esp
|
||||||
cld
|
cld
|
||||||
@@ -153,10 +144,10 @@ UserMode\Type\Vector:
|
|||||||
|
|
||||||
/* Test previous mode and disable interrupts before user mode return */
|
/* Test previous mode and disable interrupts before user mode return */
|
||||||
testb $1, KTRAP_FRAME_PreviousMode(%ebp)
|
testb $1, KTRAP_FRAME_PreviousMode(%ebp)
|
||||||
jz KernelModeReturn\Type\Vector
|
jz RestoreState\Type\Vector
|
||||||
cli
|
cli
|
||||||
|
|
||||||
KernelModeReturn\Type\Vector:
|
RestoreState\Type\Vector:
|
||||||
/* Restore segment selectors */
|
/* Restore segment selectors */
|
||||||
mov KTRAP_FRAME_SegDs(%ebp), %ds
|
mov KTRAP_FRAME_SegDs(%ebp), %ds
|
||||||
mov KTRAP_FRAME_SegEs(%ebp), %es
|
mov KTRAP_FRAME_SegEs(%ebp), %es
|
||||||
|
|||||||
Reference in New Issue
Block a user