plan 9 kernel history: overview | file list | diff list

1991/0705/power/trap.c (diff list | history)

1991/0625/sys/src/9/power/trap.c:84,891991/0705/sys/src/9/power/trap.c:84,90 (short | long | prev | next)
1990/0227    
	user = ur->status&KUP; 
	if(u) 
		u->p->pc = ur->pc;		/* BUG */ 
1991/0705    
 
1990/0227    
	switch(ecode){ 
	case CINT: 
		if(u && u->p->state==Running){ 
1991/0625/sys/src/9/power/trap.c:142,1491991/0705/sys/src/9/power/trap.c:143,150
1990/0722    
		} 
1990/0227    
	Default: 
		/* 
		 * This isn't good enough; can still deadlock because we may hold print's locks 
		 * in this processor. 
1991/0705    
		 * This isn't good enough; can still deadlock because we may  
		 * hold print's locks in this processor. 
1990/0227    
		 */ 
		if(user){ 
			spllo(); 
1991/0625/sys/src/9/power/trap.c:150,1561991/0705/sys/src/9/power/trap.c:151,157
1990/0227    
			if(ecode == FPEXC) 
1990/1110    
				sprint(buf, "sys: fp: %s FCR31 %lux", fpexcname(x), x); 
1990/0227    
			else 
1990/1110    
				sprint(buf, "sys: trap: %s[%d]", excname[ecode], m->machno); 
1991/0705    
				sprint(buf, "sys: %s pc=0x%lux", excname[ecode], ur->pc); 
1991/0425    
 
1990/0227    
			postnote(u->p, 1, buf, NDebug); 
		}else{ 
1991/0625/sys/src/9/power/trap.c:163,1701991/0705/sys/src/9/power/trap.c:164,177
1990/0227    
			exit(); 
		} 
	} 
	if(user && u->nnote) 
		notify(ur); 
1991/0705    
 
	if(user) { 
		if(u->p->procctl) 
			procctl(u->p); 
		if(u->nnote) 
			notify(ur); 
	} 
 
1990/0227    
	splhi(); 
	if(user && u && u->p->fpstate == FPinactive) { 
1991/0314    
		restfpregs(&u->fpsave, u->fpsave.fpstatus); 
1991/0625/sys/src/9/power/trap.c:383,3881991/0705/sys/src/9/power/trap.c:390,402
1991/0503    
		u->svstatus = ur->status; 
1990/0816    
		sp = ur->usp; 
1990/0227    
		sp -= sizeof(Ureg); 
1991/0705    
		if(waserror()){ 
			pprint("suicide: trap in notify\n"); 
			pexit("Suicide", 0); 
		} 
		validaddr((ulong)u->notify, 1, 0); 
		validaddr(sp-ERRLEN-3*BY2WD, sizeof(Ureg)+ERRLEN-3*BY2WD, 0); 
		poperror(); 
1990/0227    
		u->ureg = (void*)sp; 
1991/0318    
		memmove((Ureg*)sp, ur, sizeof(Ureg)); 
1990/0227    
		sp -= ERRLEN; 
1991/0625/sys/src/9/power/trap.c:442,4491991/0705/sys/src/9/power/trap.c:456,464
1990/0227    
Syscall	sysdup, syserrstr, sysexec, sysexits, sysfork, sysforkpgrp; 
1990/11211    
Syscall	sysfstat, sysfwstat, sysgetpid, sysmount, sysnoted; 
1990/0227    
Syscall	sysnotify, sysopen, syspipe, sysr1, sysread, sysremove, sysseek; 
1991/0606    
Syscall syssleep, sysstat, syswait, syswrite, syswstat, sysalarm, syslkbrk_; 
1991/0621    
#define LKBRK_ 12 
1991/0705    
Syscall syssleep, sysstat, syswait, syswrite, syswstat, sysalarm, syssegbrk; 
Syscall syssegattach, syssegdetach, syssegfree, syssegflush; 
 
1990/0227    
Syscall *systab[]={ 
	[SYSR1]		sysr1, 
1990/11211    
	[ERRSTR]	syserrstr, 
1991/0625/sys/src/9/power/trap.c:457,4631991/0705/sys/src/9/power/trap.c:472,478
1990/0227    
	[FORK]		sysfork, 
	[FORKPGRP]	sysforkpgrp, 
	[FSTAT]		sysfstat, 
1991/0606    
	[LKBRK_]	syslkbrk_, 
1991/0705    
	[SEGBRK]	syssegbrk, 
1990/0227    
	[MOUNT]		sysmount, 
	[OPEN]		sysopen, 
	[READ]		sysread, 
1991/0625/sys/src/9/power/trap.c:475,4801991/0705/sys/src/9/power/trap.c:490,499
1990/0227    
	[FWSTAT]	sysfwstat, 
	[NOTIFY]	sysnotify, 
	[NOTED]		sysnoted, 
1991/0705    
	[SEGATTACH]	syssegattach, 
	[SEGDETACH]	syssegdetach, 
	[SEGFREE]	syssegfree, 
	[SEGFLUSH]	syssegflush, 
1990/0227    
}; 
 
long 
1991/0625/sys/src/9/power/trap.c:502,5071991/0705/sys/src/9/power/trap.c:521,530
1990/0227    
		ur->status &= ~CU1; 
	} 
	spllo(); 
1991/0705    
 
	if(u->p->procctl) 
		procctl(u->p); 
 
1990/0227    
	r1 = ur->r1; 
	sp = ur->sp; 
	u->nerrlab = 0; 
1991/0625/sys/src/9/power/trap.c:527,5321991/0705/sys/src/9/power/trap.c:550,559
1990/0511    
	} 
1990/0227    
	ur->pc += 4; 
	u->nerrlab = 0; 
1991/0705    
	 
	if(u->p->procctl) 
		procctl(u->p); 
 
1990/0227    
	splhi(); 
1990/03091    
	u->p->insyscall = 0; 
1990/0227    
	if(r1 == NOTED)	/* ugly hack */ 
1991/0625/sys/src/9/power/trap.c:535,5401991/0705/sys/src/9/power/trap.c:562,568
1990/0227    
		ur->r1 = ret; 
		notify(ur); 
	} 
1991/0705    
 
1990/0227    
	return ret; 
} 
 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)