Browse Source

Traphandling

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6943 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 năm trước cách đây
mục cha
commit
e736c23ce2

+ 4 - 5
source/Generic.Linux.I386.Glue.Mod

@@ -221,17 +221,16 @@ SystemTools.DoCommands
 		Unix.StdIO.Mod Generic.Unix.Traps.Mod Locks.Mod Unix.Clock.Mod Disks.Mod Files.Mod Dates.Mod Strings.Mod 
 		UTF8Strings.Mod FileTrapWriter.Mod Caches.Mod DiskVolumes.Mod OldDiskVolumes.Mod RAMVolumes.Mod 
 		DiskFS.Mod OldDiskFS.Mod OberonFS.Mod FATVolumes.Mod FATFiles.Mod ISO9660Volumes.Mod 
-		ISO9660Files.Mod Unix.UnixFiles.Mod RelativeFileSystem.Mod BitSets.Mod StringPool.Mod DIagnostics.Mod ObjectFile.Mod GenericLinker.Mod GenericLoader.Mod Unix.BootConsole.Mod 
-		Pipes.Mod Shell.Mod TestStdIO.Mod
-		TestLinux.Mod  ~
+		ISO9660Files.Mod Unix.UnixFiles.Mod RelativeFileSystem.Mod BitSets.Mod StringPool.Mod DIagnostics.Mod 
+		ObjectFile.Mod GenericLinker.Mod GenericLoader.Mod Unix.BootConsole.Mod 
+	~
 
 	StaticLinker.Link --fileFormat=Raw --fileName=simple_elf --extension=.GofU --displacement=08048000H
 		Runtime Trace Glue Unix Machine Heaps Modules Objects Kernel KernelLog 
 Streams Commands StdIO TrapWriters Traps 
 Files UnixFiles Clock Dates Reals Strings Diagnostics 
 BitSets StringPool ObjectFile GenericLinker Reflection  GenericLoader  
-Pipes Shell TestStdIo
-(*BootConsole  *)
+BootConsole 
  ~
 
 	FSTools.CloseFiles simple_elf ~

+ 1 - 3
source/Generic.Linux.I386.Unix.Mod

@@ -511,9 +511,7 @@ VAR
 	readdir-		: PROCEDURE {C} ( dir: ADDRESS ): Dirent;
 	closedir-		: PROCEDURE {C} ( dir: ADDRESS );
 
-	(*
 	sigsetjmp-	: PROCEDURE {C} ( env: ADDRESS;  savemask: LONGINT ): LONGINT;
-	*)
 	siglongjmp-	: PROCEDURE {C} ( env: ADDRESS;  val: LONGINT );
 
 	kill-			: PROCEDURE {C} ( pid, sig: LONGINT ): LONGINT;
@@ -1164,7 +1162,7 @@ static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
 		Dlsym( libc, "closedir",	ADDRESSOF( closedir ) );
 
 
-		(*Dlsym( libp, "sigsetjmp",	ADDRESSOF( sigsetjmp ) );*)
+		Dlsym( libp, "__sigsetjmp",	ADDRESSOF( sigsetjmp ) );
 		Dlsym( libc, "siglongjmp",	ADDRESSOF( siglongjmp ) );
 
 

+ 2 - 2
source/Generic.Unix.Objects.Mod

@@ -380,11 +380,11 @@ TYPE
 		Unix.MtxUnlock( startProcess );
 
 		p.SetPriority( p.priority );
-		(*!
+
 		IF Restart IN p.flags THEN
 			res := Unix.sigsetjmp( ADDRESSOF( p.state0[0] ), 1 );
 		END;
-		*)
+
 		p.mode := Running;
 		p.body( p.obj );
 		p.mode := Terminated;

+ 12 - 1
source/Generic.Unix.Traps.Mod

@@ -207,7 +207,16 @@ VAR
 		END;
 	END UnlockOberon;
 	
-
+	PROCEDURE CheckBP(fp: ADDRESS): ADDRESS;
+	VAR n: ADDRESS;
+	BEGIN
+		IF (fp # NIL) THEN
+			S.GET(fp, n);
+			IF ODD(n) THEN RETURN fp + SIZEOF(ADDRESS) END;
+		END;
+		RETURN fp;
+	END CheckBP;
+	
 	PROCEDURE SearchExceptionHandler( process: Objects.Process;  cont: Unix.Ucontext;  VAR handler: ExceptionHandler );  
 	VAR entry, fp, sp, pc: ADDRESS;
 	BEGIN 
@@ -219,10 +228,12 @@ VAR
 		END;  
 		entry := Modules.GetExceptionHandler( pc );   
 		WHILE (entry = -1) & (fp <= process.stackBottom) DO  
+			fp := CheckBP(fp);
 			S.GET( fp + AddrSize, pc );  
 			pc := pc - 1;   (*  CALL instruction, machine dependent!!! *)
 			entry := Modules.GetExceptionHandler( pc );  
 			sp := fp;   (* Save the old framepointer into the stack pointer *)
+
 			S.GET( fp, fp ) (* Unwind PAF *)
 		END;  
 		IF entry # -1 THEN 

+ 14 - 10
source/StdIOShell.Mod

@@ -19,7 +19,7 @@ BEGIN
 	END;
 
 	Commands.Activate(str, context, {Commands.Wait}, res, msg);
-	IF res # 0 THEN context.error.String(msg) END;
+	IF res # 0 THEN context.error.String(msg); context.error.Ln; END;
 END Execute;
 
 BEGIN
@@ -39,19 +39,20 @@ SystemTools.DoCommands
 		Unix.StdIO.Mod Generic.Unix.Traps.Mod Locks.Mod Unix.Clock.Mod Disks.Mod Files.Mod Dates.Mod Strings.Mod 
 		UTF8Strings.Mod FileTrapWriter.Mod Caches.Mod DiskVolumes.Mod OldDiskVolumes.Mod RAMVolumes.Mod 
 		DiskFS.Mod OldDiskFS.Mod OberonFS.Mod FATVolumes.Mod FATFiles.Mod ISO9660Volumes.Mod 
-		ISO9660Files.Mod Unix.UnixFiles.Mod RelativeFileSystem.Mod BitSets.Mod StringPool.Mod DIagnostics.Mod ObjectFile.Mod GenericLinker.Mod GenericLoader.Mod Unix.BootConsole.Mod 
+		ISO9660Files.Mod Generic.Unix.UnixFiles.Mod RelativeFileSystem.Mod BitSets.Mod StringPool.Mod DIagnostics.Mod 
+		ObjectFile.Mod GenericLinker.Mod GenericLoader.Mod Unix.BootConsole.Mod 
 		Pipes.Mod Shell.Mod StdIOShell.Mod  
 		~
 
-	StaticLinker.Link --fileFormat=Raw --fileName=oberon --extension=.GofU --displacement=08048000H
+	StaticLinker.Link -p=Linux32G
 		Runtime Trace Glue Unix Machine Heaps Modules Objects Kernel KernelLog 
 		Streams Commands StdIO TrapWriters Traps 
 		Files UnixFiles Clock Dates Reals Strings Diagnostics 
 		BitSets StringPool ObjectFile GenericLinker Reflection  GenericLoader  
 		Pipes Shell StdIOShell
 	~
-
-	FSTools.CloseFiles oberon ~
+	FSTools.CloseFiles oberon
+	~
 ~ 
 
 
@@ -62,10 +63,11 @@ SystemTools.DoCommands
 		Runtime.Mod Trace.Mod Generic.Win32.Kernel32.Mod Win32.Machine.Mod Heaps.Mod 
 		Generic.Modules.Mod Win32.Objects.Mod Win32.Kernel.Mod KernelLog.Mod Streams.Mod Commands.Mod 
 		I386.Reals.Mod Reflection.Mod Locks.Mod Win32.Clock.Mod Files.Mod Dates.Mod Strings.Mod 
-
+		
 		Diagnostics.Mod StringPool.Mod BitSets.Mod ObjectFile.Mod 
 		GenericLinker.Mod GenericLoader.Mod Options.Mod Debugging.Mod
-		
+
+		TrapWriters.Mod CRC.Mod SystemVersion.Mod Win32.Traps.Mod 
 		Win32.WinTrace.Mod Win32.WinFS.Mod 
 		Win32.StdIO.Mod Pipes.Mod Shell.Mod StdIOShell.Mod
 
@@ -87,7 +89,7 @@ SystemTools.DoCommands
 		FoxDocumentationScanner.Mod FoxDocumentationTree.Mod FoxDocumentationPrinter.Mod FoxDocumentationHtml.Mod 
 		FoxDocumentationParser.Mod FoxDocumentationBackend.Mod
 
-		FoxProfiler.Mod
+		FoxProfiler.Mod System.Mod
 		~
 	
 
@@ -96,7 +98,9 @@ SystemTools.DoCommands
 	StaticLinker.Link --fileFormat=PE32CUI --fileName=oberon.exe --extension=GofW --displacement=401000H
 		Runtime Trace Kernel32 Machine Heaps Modules Objects Kernel KernelLog Streams Commands Files 
 		WinFS Clock Dates Reals Strings Diagnostics BitSets StringPool ObjectFile GenericLinker Reflection GenericLoader
-		WinTrace StdIO Pipes Shell StdIOShell
+		WinTrace StdIO 
+		TrapWriters 	CRC SystemVersion Traps
+		Pipes  Shell StdIOShell
 		
 		Options Locks Debugging
 		StaticLinker 
@@ -123,7 +127,7 @@ SystemTools.DoCommands
 		FoxDocumentationScanner FoxDocumentationTree FoxDocumentationPrinter FoxDocumentationHtml 
 		FoxDocumentationParser FoxDocumentationBackend
 		
-		SystemTools
+		System
 	~
 	
 	FSTools.CloseFiles oberon.exe ~