Kaynağa Gözat

Removed obsolete inline procedures for querying stack and frame pointer. Use procedures provided by compiler instead.

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@8559 8c9fc860-2736-0410-a75d-ab315db34111
negelef 6 yıl önce
ebeveyn
işleme
e57ed9079e

+ 2 - 35
source/ARM.Machine.Mod

@@ -1075,44 +1075,11 @@ VAR
 		MOV R0, R0
 	END DrainWriteBuffer;
 
-	PROCEDURE -CurrentBP*(): ADDRESS;
-	CODE
-		MOV R0, FP
-	END CurrentBP;
-
-	PROCEDURE -CurrentSP*(): ADDRESS;
-	CODE
-		MOV R0, SP
-	END CurrentSP;
-
 	PROCEDURE -CurrentPC*(): ADDRESS;
 	CODE
 		MOV R0, PC
 	END CurrentPC;
 
-	PROCEDURE -SetSP*(sp: ADDRESS);
-	CODE
-		LDR R0, [SP, #sp]
-		MOV SP, R0
-		;STR SP, [SP, #sp]
-	END SetSP;
-
-	PROCEDURE -SetBP*(bp: ADDRESS);
-	CODE
-		STR FP, [SP, #bp]
-		ADD SP, SP, #4
-	END SetBP;
-
-	PROCEDURE -GetSP*(): LONGINT;
-	CODE
-		MOV R0, SP
-	END GetSP;
-
-	PROCEDURE -GetBP*(): LONGINT;
-	CODE
-		MOV R0, FP
-	END GetBP;
-
 	PROCEDURE GetTimer*(): HUGEINT;
 	VAR t: ARRAY 2 OF LONGINT;
 	BEGIN
@@ -3583,8 +3550,8 @@ VAR
 		BootConfig.Init;
 		ReadMemLayout;
 
-		sp := GetSP();
-		fp := GetBP();
+		sp := SYSTEM.GetStackPointer();
+		fp := SYSTEM.GetFramePointer();
 
 		SYSTEM.LDPSR( 0, Platform.IRQMode + Platform.FIQDisabled + Platform.IRQDisabled );
 		SYSTEM.SETSP(sysIntStackStart + 1000H);

+ 2 - 27
source/BIOS.AMD64.Machine.Mod

@@ -1839,7 +1839,7 @@ PROCEDURE WorkingOnKernelStack* (): BOOLEAN;
 VAR id: LONGINT; sp: ADDRESS;
 BEGIN
 	ASSERT(KernelStackSize # MaxUserStackSize - UserStackGuardSize); (* detection does only work with this assumption *)
-	sp := CurrentSP ();
+	sp := SYSTEM.GetStackPointer ();
 	id := ID ();
 	RETURN (sp >= procm[id].stack.low) & (sp <= procm[id].stack.high)
 END WorkingOnKernelStack;
@@ -1884,7 +1884,7 @@ BEGIN
 	ASSERT(CS () MOD 4 = 0);	(* to get kernel stack pointer *)
 	id := ID ();
 	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;
 
 (** Get kernel stack regions for garbage collection. (for Heaps) *)
@@ -2876,31 +2876,6 @@ CODE {SYSTEM.AMD64}
 	MOV RAX, [RBP + 8]
 END CurrentPC;
 
-(* Return current frame pointer *)
-PROCEDURE -CurrentBP* (): ADDRESS;
-CODE {SYSTEM.AMD64}
-	MOV RAX, RBP
-END CurrentBP;
-
-(* Set current frame pointer *)
-PROCEDURE -SetBP* (bp: ADDRESS);
-CODE {SYSTEM.AMD64}
-	POP RBP
-END SetBP;
-
-(* Return current stack pointer *)
-PROCEDURE -CurrentSP* (): ADDRESS;
-CODE {SYSTEM.AMD64}
-	MOV RAX, RSP
-END CurrentSP;
-
-(* Set current stack pointer *)
-PROCEDURE -SetSP* (sp: ADDRESS);
-CODE {SYSTEM.AMD64}
-	POP RSP
-END SetSP;
-
-
 PROCEDURE  Portin8*(port: LONGINT; VAR val: CHAR);
 CODE{SYSTEM.AMD64}
 	MOV EDX,[RBP+port]

+ 2 - 26
source/BIOS.I386.Machine.Mod

@@ -1747,7 +1747,7 @@ PROCEDURE WorkingOnKernelStack* (): BOOLEAN;
 VAR id: LONGINT; sp: ADDRESS;
 BEGIN
 	ASSERT(KernelStackSize # MaxUserStackSize - UserStackGuardSize); (* detection does only work with this assumption *)
-	sp := CurrentSP ();
+	sp := SYSTEM.GetStackPointer ();
 	id := ID ();
 	RETURN (sp >= procm[id].stack.low) & (sp <= procm[id].stack.high)
 END WorkingOnKernelStack;
@@ -1792,7 +1792,7 @@ BEGIN
 	ASSERT(CS () MOD 4 = 0);	(* to get kernel stack pointer *)
 	id := ID ();
 	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;
 
 (** Get kernel stack regions for garbage collection. (for Heaps) *)
@@ -2670,30 +2670,6 @@ CODE {SYSTEM.i386}
 	MOV EAX, [EBP+4]
 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). *)
 (* saving FPU state takes 108 bytes memory space, no alignment required *)
 PROCEDURE -FPUSaveMin* (VAR state: SSEState);

+ 0 - 12
source/Coop.ARM.Machine.Mod

@@ -116,18 +116,6 @@ CODE
 	MOV R0, PC
 END CurrentPC;
 
-(* Return current frame pointer *)
-PROCEDURE -CurrentBP* (): ADDRESS;
-CODE
-	MOV R0, FP
-END CurrentBP;
-
-(* Return current stack pointer *)
-PROCEDURE -CurrentSP* (): ADDRESS;
-CODE
-	MOV R0, SP
-END CurrentSP;
-
 PROCEDURE MapPhysical*(physAdr: ADDRESS; size: SIZE; VAR virtAdr: ADDRESS);
 BEGIN
 	virtAdr := physAdr;

+ 0 - 24
source/Coop.Machine.Mod

@@ -141,30 +141,6 @@ CODE
 #END
 END CurrentPC;
 
-(* Return current frame pointer *)
-PROCEDURE -CurrentBP* (): ADDRESS;
-CODE
-#IF I386 THEN
-	MOV EAX, EBP
-#ELSIF AMD64 THEN
-	MOV RAX, RBP
-#ELSE
-	unimplemented
-#END
-END CurrentBP;
-
-(* Return current stack pointer *)
-PROCEDURE -CurrentSP* (): ADDRESS;
-CODE
-#IF I386 THEN
-	MOV EAX, ESP
-#ELSIF AMD64 THEN
-	MOV RAX, RSP
-#ELSE
-	unimplemented
-#END
-END CurrentSP;
-
 PROCEDURE MapPhysical*(physAdr: ADDRESS; size: SIZE; VAR virtAdr: ADDRESS);
 BEGIN
 	virtAdr := physAdr;

+ 2 - 26
source/EFI.AMD64.Machine.Mod

@@ -1788,7 +1788,7 @@ PROCEDURE WorkingOnKernelStack* (): BOOLEAN;
 VAR id: LONGINT; sp: ADDRESS;
 BEGIN
 	ASSERT(KernelStackSize # MaxUserStackSize - UserStackGuardSize); (* detection does only work with this assumption *)
-	sp := CurrentSP ();
+	sp := SYSTEM.GetStackPointer ();
 	id := ID ();
 	RETURN (sp >= procm[id].stack.low) & (sp <= procm[id].stack.high)
 END WorkingOnKernelStack;
@@ -1833,7 +1833,7 @@ BEGIN
 	ASSERT(CS () MOD 4 = 0);	(* to get kernel stack pointer *)
 	id := ID ();
 	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;
 
 (** Get kernel stack regions for garbage collection. (for Heaps) *)
@@ -2832,30 +2832,6 @@ CODE {SYSTEM.AMD64}
 	MOV RAX, [RBP + 8]
 END CurrentPC;
 
-(* Return current frame pointer *)
-PROCEDURE -CurrentBP* (): ADDRESS;
-CODE {SYSTEM.AMD64}
-	MOV RAX, RBP
-END CurrentBP;
-
-(* Set current frame pointer *)
-PROCEDURE -SetBP* (bp: ADDRESS);
-CODE {SYSTEM.AMD64}
-	POP RBP
-END SetBP;
-
-(* Return current stack pointer *)
-PROCEDURE -CurrentSP* (): ADDRESS;
-CODE {SYSTEM.AMD64}
-	MOV RAX, RSP
-END CurrentSP;
-
-(* Set current stack pointer *)
-PROCEDURE -SetSP* (sp: ADDRESS);
-CODE {SYSTEM.AMD64}
-	POP RSP
-END SetSP;
-
 PROCEDURE -SetRAX(n: SIZE);
 CODE{SYSTEM.AMD64}	
 	NOP

+ 2 - 26
source/EFI.I386.Machine.Mod

@@ -1729,7 +1729,7 @@ PROCEDURE WorkingOnKernelStack* (): BOOLEAN;
 VAR id: LONGINT; sp: ADDRESS;
 BEGIN
 	ASSERT(KernelStackSize # MaxUserStackSize - UserStackGuardSize); (* detection does only work with this assumption *)
-	sp := CurrentSP ();
+	sp := SYSTEM.GetStackPointer ();
 	id := ID ();
 	RETURN (sp >= procm[id].stack.low) & (sp <= procm[id].stack.high)
 END WorkingOnKernelStack;
@@ -1774,7 +1774,7 @@ BEGIN
 	ASSERT(CS () MOD 4 = 0);	(* to get kernel stack pointer *)
 	id := ID ();
 	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;
 
 (** Get kernel stack regions for garbage collection. (for Heaps) *)
@@ -2654,30 +2654,6 @@ CODE {SYSTEM.i386}
 	MOV EAX, [EBP+4]
 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). *)
 (* saving FPU state takes 108 bytes memory space, no alignment required *)
 PROCEDURE -FPUSaveMin* (VAR state: SSEState);

+ 0 - 48
source/Unix.Machine.Mod

@@ -435,54 +435,6 @@ CODE
 #END
 END CurrentPC;
 
-(* Return current frame pointer *)
-PROCEDURE  -CurrentBP* (): ADDRESS;
-CODE
-#IF I386 THEN
-	MOV EAX, EBP
-#ELSIF AMD64 THEN
-	MOV RAX, RBP
-#ELSE
-	unimplemented
-#END
-END CurrentBP;
-
-(* Set current frame pointer *)
-PROCEDURE  -SetBP* (bp: ADDRESS);
-CODE
-#IF I386 THEN
-	POP EBP
-#ELSIF AMD64 THEN
-	POP RBP
-#ELSE
-	unimplemented
-#END
-END SetBP;
-
-(* Return current stack pointer *)
-PROCEDURE  -CurrentSP* (): ADDRESS;
-CODE
-#IF I386 THEN
-	MOV EAX, ESP
-#ELSIF AMD64 THEN
-	MOV RAX, RSP
-#ELSE
-	unimplemented
-#END
-END CurrentSP;
-
-(* Set current stack pointer *)
-PROCEDURE  -SetSP* (sp: ADDRESS);
-CODE
-#IF I386 THEN
-	POP ESP
-#ELSIF AMD64 THEN
-	POP RSP
-#ELSE
-	unimplemented
-#END
-END SetSP;
-
 PROCEDURE -GetTimer* (): HUGEINT;
 CODE
 #IF I386 THEN

+ 1 - 50
source/Windows.Machine.Mod

@@ -263,55 +263,6 @@ VAR
 #END
 	END CurrentPC;
 
-	(* Return current frame pointer *)
-	PROCEDURE -CurrentBP* (): ADDRESS;
-	CODE
-#IF AMD64 THEN
-		MOV RAX, RBP
-#ELSIF I386 THEN
-		MOV EAX, EBP
-#ELSE
-	UNIMPLEMENTED
-#END
-	END CurrentBP;
-
-	(* Set current frame pointer *)
-	PROCEDURE -SetBP* (bp: ADDRESS);
-	CODE
-#IF AMD64 THEN
-		POP RBP
-#ELSIF I386 THEN
-		POP EBP
-#ELSE
-	UNIMPLEMENTED
-#END
-	END SetBP;
-
-	(* Return current stack pointer *)
-	PROCEDURE -CurrentSP* (): ADDRESS;
-	CODE
-#IF AMD64 THEN
-		MOV RAX, RSP
-#ELSIF I386 THEN
-		MOV EAX, ESP
-#ELSE
-	UNIMPLEMENTED
-#END
-	END CurrentSP;
-
-	(* Set current stack pointer *)
-	PROCEDURE -SetSP* (sp: ADDRESS);
-	CODE {SYSTEM.AMD64}
-#IF AMD64 THEN
-		POP RSP
-#ELSIF I386 THEN
-		POP ESP
-#ELSE
-	UNIMPLEMENTED
-#END
-	END SetSP;
-
-
 	(** Fill "size" bytes at "destAdr" with "filler". "size" must be multiple of 4. *)
 	PROCEDURE Fill32* (destAdr: ADDRESS; size: SIZE; filler: LONGINT);
 	CODE
@@ -789,7 +740,7 @@ END Init;
 
 	PROCEDURE {INITIAL, NOPAF} Start*;
 	BEGIN
-		stackBottom := CurrentSP();
+		stackBottom := SYSTEM.GetStackPointer();
 		Init; (* cannot allocate variables in here *)
 	END Start;