ソースを参照

Patched some issues for 64-bit kernel (EFI, EFI-modules not yet submitted)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6573 8c9fc860-2736-0410-a75d-ab315db34111
felixf 9 年 前
コミット
ebf23873a9

+ 1 - 1
source/AMD64.ATADisks.Mod

@@ -375,7 +375,7 @@ TYPE
 				IF TraceVerbose & (trace * TraceBuffer # {})THEN KernelLog.String(", "); KernelLog.Hex(left, 0); KernelLog.Ln; END;
 				DEC(size, left);
 				IF size = 0 THEN
-					command.prdt.prd[i].size := SHORT(80000000H) + left; (* end marker *)
+					command.prdt.prd[i].size := LONGINT(80000000H) + left; (* end marker *)
 					EXIT
 				END;
 				command.prdt.prd[i].size := left;

+ 2 - 2
source/AMD64.Traps.Mod

@@ -60,8 +60,8 @@ VAR
 		ELSE
 			(* output first line *)
 			w.String("["); w.Int(trapState[id], 1); w.String("] ");
-			w.String("TRAP "); w.Int(SHORT(exc.halt), 1);
-			w.String(" PL"); w.Int(SHORT(int.CS) MOD 4, 2); w.Char(" ");
+			w.String("TRAP "); w.Int(LONGINT(exc.halt), 1);
+			w.String(" PL"); w.Int(LONGINT(int.CS) MOD 4, 2); w.Char(" ");
 			CASE exc.halt OF
 				-14:	(* page fault *)
 					IF (int.CS MOD 4 > Machine.KernelLevel) & (exc.pf+4 = int.SP) THEN

+ 2 - 0
source/FoxAMDBackend.Mod

@@ -367,6 +367,7 @@ TYPE
 				toVirtual[index MOD 32 + RAX] := split;
 				toVirtual[index MOD 32 + EAX] := split;
 				toVirtual[index MOD 32 + AX] := split;
+			ELSIF (index >= XMM0) & (index <= XMM7) THEN (* vector register *)
 			ELSE Assert( (index >=InstructionSet.regST0) & (index <= InstructionSet.regST7 ),"not a float register"); (* floats *)
 			END;
 		END Allocate;
@@ -404,6 +405,7 @@ TYPE
 				toVirtual[index MOD 32 + RAX] := free;
 				toVirtual[index MOD 32 + EAX] := free;
 				toVirtual[index MOD 32 + AX] := free;
+			ELSIF (index >= XMM0) & (index <= XMM7) THEN (* vector register *)
 			ELSE Assert( (index >=InstructionSet.regST0) & (index <= InstructionSet.regST7 ),"not a float register"); (* floats *)
 			END;
 		END Free;

+ 1 - 1
source/Objects.Mod

@@ -1168,7 +1168,7 @@ BEGIN
 	(* initialize the stack *)
 	Machine.NewStack(t.stack, t, sp);
 	IF VeryConservative THEN
-		Machine.Fill32(t.stack.adr, sp-t.stack.adr, 0D0D0DEADH)
+		Machine.Fill32(t.stack.adr, sp-t.stack.adr, LONGINT(0D0D0DEADH))
 	END;
 	SYSTEM.PUT (sp-1*AddressSize, obj); (* self parameter for body *)
 	SYSTEM.PUT (sp-2*AddressSize, terminate); (* return address for body *)

+ 6 - 4
source/Reflection.Mod

@@ -223,8 +223,9 @@ VAR
 
 	(* Find a procedure in the reference block.  Return index of name, or -1 if not found. *)
 	PROCEDURE FindProcByName*(mod: Modules.Module; CONST name: ARRAY OF CHAR;  VAR from, to: ADDRESS): BOOLEAN;
-	VAR i, namePos, m, t, tstart, tend: LONGINT; ch: CHAR; newObjectFile: BOOLEAN;
+	VAR i, namePos, m, t, temp: LONGINT; ch: CHAR; newObjectFile: BOOLEAN;
 		refs: Modules.Bytes; success: BOOLEAN;
+		tstart, tend: ADDRESS;
 	BEGIN
 		IF mod = NIL THEN RETURN FALSE END;
 		refs := mod.refs;
@@ -235,8 +236,9 @@ VAR
 		ch := refs[i]; INC(i); tstart := 0;
 		success := FALSE;
 		WHILE (i < m) & ((ch = 0F8X) OR (ch = 0F9X)) & ~success DO	(* proc *)
-			GetNum(refs, i, tstart);	(* pofs *)
-			IF newObjectFile THEN GetNum(refs,i,tend) END;
+			GetNum(refs, i, temp);	(* pofs *)
+			tstart := temp;
+			IF newObjectFile THEN GetNum(refs,i,temp); tend := temp END;
 			IF ch = 0F9X THEN
 				GetNum(refs, i, t);	(* nofPars *)
 				INC(i, 3)	(* RetType, procLev, slFlag *);
@@ -259,7 +261,7 @@ VAR
 		END;
 		IF success & ~newObjectFile THEN
 			IF (ch = 0F8X) OR (ch = 0F9X) THEN
-				GetNum(refs, i, tend)
+				GetNum(refs, i, temp); tend := temp;
 			ELSE
 				tend :=LEN(mod.code);
 			END;