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

1991/0711/ss/trap.c (diff list | history)

1991/0710/sys/src/9/ss/trap.c:174,1871991/0711/sys/src/9/ss/trap.c:174,195 (short | long | prev | next)
1990/1223    
dumpstack(void) 
{ 
	ulong l, v; 
1991/0711    
	int i; 
1990/1223    
	extern ulong etext; 
1991/0711    
print("no dumpstack\n"); 
return; 
1990/1223    
 
	if(u) 
1991/0711    
	if(u){ 
		i = 0; 
1990/1223    
		for(l=(ulong)&l; l<USERADDR+BY2PG; l+=4){ 
			v = *(ulong*)l; 
			if(KTZERO < v && v < (ulong)&etext) 
				print("%lux=%lux\n", l, v); 
1991/0711    
				print("%lux=%lux  ", l, v); 
			++i; 
			if((i&7) == 0) 
				print("\n"); 
1990/1223    
		} 
1991/0711    
	} 
1990/1223    
} 
 
void 
1991/0710/sys/src/9/ss/trap.c:316,3261991/0711/sys/src/9/ss/trap.c:324,336
1990/1223    
	Ureg *ur; 
	char *msg; 
 
	u->p->insyscall = 1; 
	ur = aur; 
	u->p->pc = ur->pc; 
1990/1226    
	if(ur->psr & PSRPSUPER) 
1991/0711    
	if(ur->psr & PSRPSUPER){ 
		dumpregs(ur); 
1990/1223    
		panic("recursive system call"); 
1991/0711    
	} 
	u->p->insyscall = 1; 
	u->p->pc = ur->pc; 
1991/01151    
 
1990/1223    
	/* 
	 * since the system call interface does not 
1991/0710/sys/src/9/ss/trap.c:330,3371991/0711/sys/src/9/ss/trap.c:340,348
1990/1223    
		u->p->fpstate = FPinit; 
1991/01151    
		ur->psr &= ~PSREF; 
1990/1223    
	} 
1991/01151    
                 
1991/0711    
print("syscall %d\n", ur->r7); 
1990/1223    
	spllo(); 
1991/0711    
print("got low in syscall\n"); 
1990/1226    
	r7 = ur->r7; 
1990/1223    
	sp = ur->usp; 
 
1991/0710/sys/src/9/ss/trap.c:349,3541991/0711/sys/src/9/ss/trap.c:360,369
1990/1223    
			pprint("odd sp in sys call pc %lux sp %lux\n", ((Ureg*)UREGADDR)->pc, ((Ureg*)UREGADDR)->sp); 
			msg = "sys: odd stack"; 
			goto Bad; 
1991/0711    
		} 
		if(((ulong*)ur->pc)[-2] != 0x82206004){	/* new calling convention: look for ADD $-4, SP */ 
			pprint("new system call linkage\n"); 
			sp -= BY2WD; 
1990/1223    
		} 
1991/0614    
		if(sp<(USTKTOP-BY2PG) || sp>(USTKTOP-(2+MAXSYSARG)*BY2WD)) 
			validaddr(sp, ((2+MAXSYSARG)*BY2WD), 0); 


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