|
@@ -1747,7 +1747,7 @@ PROCEDURE WorkingOnKernelStack* (): BOOLEAN;
|
|
VAR id: LONGINT; sp: ADDRESS;
|
|
VAR id: LONGINT; sp: ADDRESS;
|
|
BEGIN
|
|
BEGIN
|
|
ASSERT(KernelStackSize # MaxUserStackSize - UserStackGuardSize); (* detection does only work with this assumption *)
|
|
ASSERT(KernelStackSize # MaxUserStackSize - UserStackGuardSize); (* detection does only work with this assumption *)
|
|
- sp := CurrentSP ();
|
|
|
|
|
|
+ sp := SYSTEM.GetStackPointer ();
|
|
id := ID ();
|
|
id := ID ();
|
|
RETURN (sp >= procm[id].stack.low) & (sp <= procm[id].stack.high)
|
|
RETURN (sp >= procm[id].stack.low) & (sp <= procm[id].stack.high)
|
|
END WorkingOnKernelStack;
|
|
END WorkingOnKernelStack;
|
|
@@ -1792,7 +1792,7 @@ BEGIN
|
|
ASSERT(CS () MOD 4 = 0); (* to get kernel stack pointer *)
|
|
ASSERT(CS () MOD 4 = 0); (* to get kernel stack pointer *)
|
|
id := ID ();
|
|
id := ID ();
|
|
ASSERT(procm[id].stack.high # 0); (* current processor stack has been assigned *)
|
|
ASSERT(procm[id].stack.high # 0); (* current processor stack has been assigned *)
|
|
- procm[id].sp := CurrentBP () (* instead of ESP, just fetch EBP of current procedure (does not contain pointers) *)
|
|
|
|
|
|
+ procm[id].sp := SYSTEM.GetFramePointer () (* instead of ESP, just fetch EBP of current procedure (does not contain pointers) *)
|
|
END UpdateState;
|
|
END UpdateState;
|
|
|
|
|
|
(** Get kernel stack regions for garbage collection. (for Heaps) *)
|
|
(** Get kernel stack regions for garbage collection. (for Heaps) *)
|
|
@@ -2670,30 +2670,6 @@ CODE {SYSTEM.i386}
|
|
MOV EAX, [EBP+4]
|
|
MOV EAX, [EBP+4]
|
|
END CurrentPC;
|
|
END CurrentPC;
|
|
|
|
|
|
-(* Return current frame pointer *)
|
|
|
|
-PROCEDURE -CurrentBP* (): ADDRESS;
|
|
|
|
-CODE {SYSTEM.i386}
|
|
|
|
- MOV EAX, EBP
|
|
|
|
-END CurrentBP;
|
|
|
|
-
|
|
|
|
-(* Set current frame pointer *)
|
|
|
|
-PROCEDURE -SetBP* (bp: ADDRESS);
|
|
|
|
-CODE {SYSTEM.i386}
|
|
|
|
- POP EBP
|
|
|
|
-END SetBP;
|
|
|
|
-
|
|
|
|
-(* Return current stack pointer *)
|
|
|
|
-PROCEDURE -CurrentSP* (): ADDRESS;
|
|
|
|
-CODE {SYSTEM.i386}
|
|
|
|
- MOV EAX, ESP
|
|
|
|
-END CurrentSP;
|
|
|
|
-
|
|
|
|
-(* Set current stack pointer *)
|
|
|
|
-PROCEDURE -SetSP* (sp: ADDRESS);
|
|
|
|
-CODE {SYSTEM.i386}
|
|
|
|
- POP ESP
|
|
|
|
-END SetSP;
|
|
|
|
-
|
|
|
|
(* Save minimal FPU state (for synchronous process switches). *)
|
|
(* Save minimal FPU state (for synchronous process switches). *)
|
|
(* saving FPU state takes 108 bytes memory space, no alignment required *)
|
|
(* saving FPU state takes 108 bytes memory space, no alignment required *)
|
|
PROCEDURE -FPUSaveMin* (VAR state: SSEState);
|
|
PROCEDURE -FPUSaveMin* (VAR state: SSEState);
|