mirror of
https://github.com/reactos/reactos.git
synced 2024-07-05 12:15:46 +00:00
Fixed minor bugs interrupt_service2e()
svn path=/trunk/; revision=998
This commit is contained in:
parent
5db4e55264
commit
213e8b569c
|
@ -1,4 +1,4 @@
|
|||
/* $Id: usercall.c,v 1.7 2000/02/22 07:27:30 rex Exp $
|
||||
/* $Id: usercall.c,v 1.8 2000/02/22 20:50:07 ekohl Exp $
|
||||
*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS kernel
|
||||
|
@ -26,13 +26,6 @@
|
|||
extern KE_SERVICE_DESCRIPTOR_TABLE_ENTRY KeServiceDescriptorTable[];
|
||||
extern KE_SERVICE_DESCRIPTOR_TABLE_ENTRY KeServiceDescriptorTableShadow[];
|
||||
|
||||
/*
|
||||
* These become obsolete when the interrupt handler uses
|
||||
* the service descriptor tables.
|
||||
*/
|
||||
extern SSDT MainSSDT[];
|
||||
extern SSPT MainSSPT[];
|
||||
|
||||
|
||||
#define _STR(x) #x
|
||||
#define STR(x) _STR(x)
|
||||
|
@ -182,8 +175,8 @@ void interrupt_handler2e(void);
|
|||
"cmpl $0x0fff, %eax\n\t"
|
||||
"ja useShadowTable\n\t"
|
||||
|
||||
/* Check to see if SS is valid/inrange */
|
||||
"cmpl _KeServiceDescriptorTable + 8, %eax\n\t"
|
||||
/* Check to see if EAX is valid/inrange */
|
||||
"cmpl %es:_KeServiceDescriptorTable + 8, %eax\n\t"
|
||||
"jbe serviceInRange\n\t"
|
||||
"movl $"STR(STATUS_INVALID_SYSTEM_SERVICE)", %eax\n\t"
|
||||
"jmp done\n\t"
|
||||
|
@ -230,8 +223,8 @@ void interrupt_handler2e(void);
|
|||
|
||||
"subl $0x1000, %eax\n\t"
|
||||
|
||||
/* Check to see if SS is valid/inrange */
|
||||
"cmpl _KeServiceDescriptorTableShadow + 8, %eax\n\t"
|
||||
/* Check to see if EAX is valid/inrange */
|
||||
"cmpl %es:_KeServiceDescriptorTableShadow + 24, %eax\n\t"
|
||||
"jbe shadowServiceInRange\n\t"
|
||||
"movl $"STR(STATUS_INVALID_SYSTEM_SERVICE)", %eax\n\t"
|
||||
"jmp done\n\t"
|
||||
|
@ -239,7 +232,7 @@ void interrupt_handler2e(void);
|
|||
"shadowServiceInRange:\n\t"
|
||||
|
||||
/* Allocate room for argument list from kernel stack */
|
||||
"movl %es:_KeServiceDescriptorTableShadow + 12, %ecx\n\t"
|
||||
"movl %es:_KeServiceDescriptorTableShadow + 28, %ecx\n\t"
|
||||
"movl %es:(%ecx, %eax, 4), %ecx\n\t"
|
||||
"subl %ecx, %esp\n\t"
|
||||
|
||||
|
@ -256,7 +249,7 @@ void interrupt_handler2e(void);
|
|||
"popl %eax\n\t"
|
||||
|
||||
/* Make the system service call */
|
||||
"movl %es:_KeServiceDescriptorTableShadow, %ecx\n\t"
|
||||
"movl %es:_KeServiceDescriptorTableShadow + 16, %ecx\n\t"
|
||||
"movl %es:(%ecx, %eax, 4), %eax\n\t"
|
||||
"call *%eax\n\t"
|
||||
|
||||
|
@ -293,4 +286,3 @@ void interrupt_handler2e(void);
|
|||
"popl %ebp\n\t" /* Ebp */
|
||||
|
||||
"iret\n\t");
|
||||
|
||||
|
|
Loading…
Reference in a new issue