push 0
/* Generate interrupt stack for Trap 6 */
- push USER_DS
+ push KGDT_R3_DATA + RPL_MASK
push 0
push 0x20202
- push USER_CS
+ push KGDT_R3_CODE + RPL_MASK
push 0
jmp _KiTrap6
// ==================== UNIQUE SYSENTER STUB. DO NOT DUPLICATE ============//
/* Set FS to PCR */
- mov ecx, PCR_SELECTOR
+ mov ecx, KGDT_R0_PCR
mov fs, cx
/* Set DS/ES to Kernel Selector */
- mov ecx, KERNEL_DS
+ mov ecx, KGDT_R0_DATA
mov ds, cx
mov es, cx
mov esp, ss:[ecx+KTSS_ESP0]
/* Set up a fake INT Stack. */
- push USER_DS
+ push KGDT_R3_DATA + RPL_MASK
push edx /* Ring 3 SS:ESP */
pushf /* Ring 3 EFLAGS */
push 2 /* Ring 0 EFLAGS */
add edx, 8 /* Skip user parameter list */
popf /* Set our EFLAGS */
or dword ptr [esp], X86_EFLAGS_IF /* Re-enable IRQs in EFLAGS, to fake INT */
- push USER_CS
+ push KGDT_R3_CODE + RPL_MASK
push KUSER_SHARED_SYSCALL_RET
/* Setup the Trap Frame stack */
push ebx
push esi
push edi
- push TEB_SELECTOR
+ push KGDT_R3_TEB + RPL_MASK
/* Save pointer to our PCR */
mov ebx, [fs:KPCR_SELF]
.att_syntax
/* Save other registers */
sub $0xC, %esp // + 0x70
- pushl $USER_DS // + 0x40
- pushl $USER_DS // + 0x44
+ pushl $KGDT_R3_DATA + RPL_MASK // + 0x40
+ pushl $KGDT_R3_DATA + RPL_MASK // + 0x44
pushl $0 // + 0x48
- sub $0x30, %esp // + 0x70
+ sub $0x30, %esp // + 0x70
.intel_syntax noprefix
/* Make space for us on the stack */
push fs
/* Load PCR Selector into fs */
- mov ebx, PCR_SELECTOR
+ mov ebx, KGDT_R0_PCR
mov fs, bx
/* Get a pointer to the current thread */
// ================= PRESENT ONLY IF VOLATILES NEEDED ============//
/* Save some stuff that raising IRQL will kill */
mov [ebx+KTRAP_FRAME_EAX], eax
- mov dword ptr [ebx+KTRAP_FRAME_FS], TEB_SELECTOR
- mov dword ptr [ebx+KTRAP_FRAME_DS], USER_DS
- mov dword ptr [ebx+KTRAP_FRAME_ES], USER_DS
+ mov dword ptr [ebx+KTRAP_FRAME_FS], KGDT_R3_TEB + RPL_MASK
+ mov dword ptr [ebx+KTRAP_FRAME_DS], KGDT_R3_DATA + RPL_MASK
+ mov dword ptr [ebx+KTRAP_FRAME_ES], KGDT_R3_DATA + RPL_MASK
mov dword ptr [ebx+KTRAP_FRAME_GS], 0
// ============= END PRESENT ONLY IF VOLATILES NEEDED ============//
// ==================== ONLY IF FULL RESTORE NEEDED ===================//
/* Check the old mode */
- cmp word ptr [esp+KTRAP_FRAME_CS], USER_CS
+ cmp word ptr [esp+KTRAP_FRAME_CS], KGDT_R3_CODE + RPL_MASK
bt word ptr [esp+KTRAP_FRAME_CS], 0
cmc
ja RestoreAll
jnz IntRet
/* Restore FS to TIB */
- mov ecx, TEB_SELECTOR
+ mov ecx, KGDT_R3_TEB + RPL_MASK
mov fs, ecx
/* We will be cleaning up the stack ourselves */
mov eax, [esp+KTRAP_FRAME_EAX]
/* Check if it was kernel */
- cmp word ptr [ebp+KTRAP_FRAME_CS], KERNEL_CS
+ cmp word ptr [ebp+KTRAP_FRAME_CS], KGDT_R0_CODE
jz CommonStackClean2
/* Skip registers */
push fs
/* Switch to correct FS */
- mov bx, PCR_SELECTOR
+ mov bx, KGDT_R0_PCR
mov fs, bx
/* Save Exception List */
sub esp, 0x30
/* Switch Segments to Kernel */
- mov ax, KERNEL_DS
+ mov ax, KGDT_R0_DATA
mov ds, ax
mov es, ax
/* Check if this is kernel or user-mode */
test byte ptr [ebp+KTRAP_FRAME_CS], 1
jz CallDispatch
- cmp word ptr [ebp+KTRAP_FRAME_CS], USER_CS
+ cmp word ptr [ebp+KTRAP_FRAME_CS], KGDT_R3_CODE + RPL_MASK
jnz NotUserMode
/* Re-enable interrupts */
mov eax, [esp+KTRAP_FRAME_EAX]
/* Check if it was kernel */
- cmp word ptr [ebp+KTRAP_FRAME_CS], KERNEL_CS
+ cmp word ptr [ebp+KTRAP_FRAME_CS], KGDT_R0_CODE
jz CommonStackClean3
/* Skip registers */