Selaa lähdekoodia

Linux Kernel Boots (no GC yet, Module Loading untested yet)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@6911 8c9fc860-2736-0410-a75d-ab315db34111
felixf 8 vuotta sitten
vanhempi
commit
4d6012b051
3 muutettua tiedostoa jossa 6 lisäystä ja 41 poistoa
  1. 5 15
      source/Generic.Linux.I386.Unix.Mod
  2. 0 25
      source/Generic.Unix.Objects.Mod
  3. 1 1
      source/Unix.UnixFiles.Mod

+ 5 - 15
source/Generic.Linux.I386.Unix.Mod

@@ -514,10 +514,8 @@ VAR
 		mtx: Mutex_t;
 	BEGIN
 		mtx := malloc(SIZEOF(MutexType));
-		TRACE(mtx);
 		ASSERT(mtx # 0);
 		ASSERT(pthread_mutex_init(mtx, NIL) = 0);
-		TRACE(mtx);
 		RETURN mtx;
 	END MtxInit;
 	
@@ -540,7 +538,6 @@ VAR
 	VAR cond: Condition_t;
 	BEGIN
 		cond := malloc(SIZEOF(ConditionType));
-		TRACE(cond);
 		ASSERT(cond # 0);
 		ASSERT(pthread_cond_init(cond, NIL)=0);
 		RETURN cond;
@@ -617,14 +614,12 @@ VAR
 		res: LONGINT;
 
 	BEGIN
-	 	TRACE("starter has started (self?)");
 		me := pthread_self();
 		SetSigaltstack();
 		
 	    IF sigfillset( ADDRESS OF new ) < 0 THEN
 	    	Perror("sigfillset");
 	    END;
-	    TRACE(new[0],new[1]);
 	    sigdelset( ADDRESS OF new, SIGILL );
 	    sigdelset( ADDRESS OF new, SIGTRAP );
 	    sigdelset( ADDRESS OF new, SIGFPE );
@@ -634,14 +629,10 @@ VAR
 	    sigdelset( ADDRESS OF new, T_SIGSUSPEND );
 	    
 	    res := pthread_sigmask( SIG_SETMASK, ADDRESS OF new, ADDRESS OF old );
-		TRACE(res);
-		TRACE(4,me);
 	    res := pthread_setcancelstate( PTHREAD_CANCEL_ENABLE, NIL );
 	    res := pthread_setcanceltype( PTHREAD_CANCEL_ASYNCHRONOUS, NIL );
-		TRACE(res);
 	    param.sched_priority := 0;
 	    res := pthread_setschedparam( me, SCHED_OTHER, ADDRESS OF param );
-		TRACE(proc);
 	    proc();
 
 	    pthread_exit( NIL );
@@ -661,7 +652,6 @@ VAR
 		pthread_attr_setscope(ADDRESS OF attr, PTHREAD_SCOPE_SYSTEM);
 		pthread_attr_setdetachstate(ADDRESS OF attr, PTHREAD_CREATE_DETACHED);
 		pthread_attr_setstacksize(ADDRESS OF attr, stackSize);
-		TRACE(p);
 		res := pthread_create(ADDRESS OF id, ADDRESS OF attr, Starter, p);
 		RETURN id;
 	END ThrStart;
@@ -764,17 +754,14 @@ VAR
 	    
 		ASSERT(pthread_mutex_init( ADDRESS OF suspend_mutex, NIL ) = 0);
 	    mainthread := pthread_self();
-	    TRACE(mainthread);
 	    high := sched_get_priority_max(SCHED_OTHER);
 	    low := sched_get_priority_min(SCHED_OTHER);
-	    TRACE(low, high);
 	    
 	    param.sched_priority := high;
 		IF pthread_setschedparam( mainthread, SCHED_OTHER, ADDRESS OF param)#0 THEN
 			Perror("ThrInitialize: setparam");
 		END;
 		
-	    TRACE(ADDRESS OF sasuspend.sa_mask);
 
 	    sigemptyset( ADDRESS OF sasuspend.sa_mask );
 	    sigaddset(  ADDRESS OF sasuspend.sa_mask, T_SIGRESUME );
@@ -917,8 +904,11 @@ static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
 	
 	PROCEDURE {C} SigHandler  ( sig: LONGINT; scp: ADDRESS; ucp: ADDRESS); (* reversed arguments !! *)
 	BEGIN
-		TRACE(sig, scp, ucp);
-		trap(sig, scp, ucp, 0);  
+		IF trap # NIL THEN 
+			trap(sig, scp, ucp, 0);  
+		ELSE
+			TRACE(sig, scp, ucp)
+		END;
 	END SigHandler;
 	
 	PROCEDURE InstallSignalHandler* ( h: SignalHandler );

+ 0 - 25
source/Generic.Unix.Objects.Mod

@@ -240,7 +240,6 @@ TYPE
 		PROCEDURE & Initialize( obj: ProtectedObject;  bodyProc: Body;  prio: LONGINT; fl: SET; stacksize: LONGINT);
 		VAR  thr: Unix.Thread_t;
 		BEGIN
-			TRACE(root);
 			SELF.obj := obj;  condition := NIL;  continue := Unix.ConInit(0);
 			flags := fl;
 			priority := prio;
@@ -250,20 +249,14 @@ TYPE
 				ASSERT( bodyProc # NIL );
 				body := bodyProc;  
 				Unix.MtxLock( startProcess );
-				TRACE(body);
 				thr := Unix.ThrStart( BodyStarter, stacksize );
-				TRACE(1,thr);
-				TRACE(1, childrunning, startProcess);
 				Unix.ConWait( childrunning, startProcess );
 				Unix.MtxUnlock( startProcess );
-				TRACE(2,thr);
 				RegisterFinalizer( SELF, FinalizeProcess );
-				TRACE(3,thr);
 			ELSE 
 				(* first process *)
 				stackBottom := Glue.stackBottom;  
 				SP := Machine.CurrentSP( );
-				TRACE(root);
 				threadId := Unix.ThrThis(0);
 				id := 0;  nextPID := 1;
 				root := SELF;
@@ -279,9 +272,7 @@ TYPE
 	PROCEDURE BodyStarter;
 	VAR p{UNTRACED}: Process;  res: LONGINT; prevBP: ADDRESS; i: LONGINT;
 	BEGIN
-		TRACE("Bodystarter running");
 		Unix.MtxLock( startProcess );
-		TRACE("start process");
 			p := newProcess;  newProcess := NIL;
 			p.threadId := Unix.ThrThis(0);  
 			p.id := nextPID;  INC( nextPID );
@@ -324,7 +315,6 @@ TYPE
 	PROCEDURE CreateProcess*( body: Body;  priority: LONGINT;  flags: SET;  obj: ProtectedObject );
 	VAR p: Process;  hdr: ObjectHeader;
 	BEGIN
-		TRACE(body);
 		Unix.MtxLock( createProcess );
 		S.GET( S.VAL( ADDRESS, obj ) + Heaps.HeapBlockOffset, hdr );  InitProtHeader( hdr );
 		IF priority = 0 THEN  priority := Normal  END;
@@ -338,7 +328,6 @@ TYPE
 	BEGIN
 		ASSERT( exclusive );   (* shared not implemented yet *)
 		S.GET( S.VAL( ADDRESS, obj ) + Heaps.HeapBlockOffset, hdr );
-		TRACE(hdr);
 		p := CurrentProcess();
 		p.mode := AwaitingLock;
 		IF hdr.lock = NIL THEN  InitProtHeader( hdr )  END;
@@ -375,21 +364,13 @@ TYPE
 	PROCEDURE Unlock*( obj: ProtectedObject;  dummy: BOOLEAN );
 	VAR hdr: ObjectHeader;  c: Process; lock: LockT;
 	BEGIN
-		TRACE("unlock");
 		S.GET( S.VAL( ADDRESS, obj ) + Heaps.HeapBlockOffset, hdr );  c := NIL;
 		lock := S.VAL(LockT,hdr.lock);
-		TRACE(hdr);
-		TRACE(c);
 		IF hdr.awaitingCond.head # NIL THEN  c := FindCondition( hdr.awaitingCond )  END;
-		TRACE(c);
-		TRACE("unlock2");
 		
 		hdr.lockedBy := c;
-		TRACE("unlock3");
 		IF c # NIL THEN  Unix.ConSignal( c.continue )  ELSE  Unix.ConSignal( lock.enter )  END;
-		TRACE("unlock4");
 		Unix.MtxUnlock( lock.mtx );
-		TRACE("unlock5");
 	END Unlock;
 	
 	
@@ -751,9 +732,7 @@ TYPE
 	VAR p: Process;
 	BEGIN
 		(* make current thread the first active object  *)
-		TRACE(p);
 		NEW( p, NIL, NIL, 0, {}, 0 );
-		TRACE(p);
 	END Convert;
 
 	PROCEDURE Init;
@@ -788,14 +767,10 @@ TYPE
 		igc := Unix.MtxInit( 0 );  gcFinished := Unix.ConInit( 0 ); 
 							
 		GetStacksize;  
-		TRACE(0);
 		Convert;
-		TRACE(1);
 		StartTimerActivity;
-		TRACE(2);
 		
 		NEW( finalizerCaller );
-		TRACE(3);
 		(*
 		Heaps.saveSP := SaveSP;
 		Heaps.GC := InvokeGC;

+ 1 - 1
source/Unix.UnixFiles.Mod

@@ -894,7 +894,7 @@ TYPE
 	BEGIN
 		i := 0;  j := 0;
 		WHILE dir[i] # 0X DO  dest[i] := dir[i];  INC( i )  END;
-		IF dest[i - 1] # "/" THEN  dest[i] := "/";  INC( i )  END;
+		IF (i>0) & (dest[i - 1] # "/") THEN  dest[i] := "/";  INC( i )  END;
 		WHILE name[j] # 0X DO  dest[i] := name[j];  INC( i );  INC( j )  END;
 		dest[i] := 0X
 	END MakePath;