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

1999/0721/pc/trap.c (diff list | history)

1999/0720/sys/src/9/pc/trap.c:314,3311999/0721/sys/src/9/pc/trap.c:314,337 (short | long | prev | next)
1998/0811    
	print("\n  ur %lux up %lux\n", ureg, up); 
1993/0915    
} 
 
1999/0721    
 
/* 
 * Fill in enough of Ureg to get a stack trace, and call a function. 
 * Used by debugging interface rdb. 
 */ 
1993/0915    
void 
1999/0720    
getpcsp(ulong *pc, ulong *sp) 
1999/0721    
callwithureg(void (*fn)(Ureg*)) 
1999/0720    
{ 
	*pc = getcallerpc(&pc); 
	*sp = (ulong)&pc; 
1999/0721    
	Ureg ureg; 
	ureg.pc = getcallerpc(&fn); 
	ureg.sp = (ulong)&fn; 
	fn(&ureg); 
1999/0720    
} 
 
void 
1991/0720    
dumpstack(void) 
1999/0721    
static void 
_dumpstack(Ureg *ureg) 
1991/0720    
{ 
1992/0804    
	ulong l, v, i; 
1999/0720    
	ulong sp, pc; 
1997/0327    
	uchar *p; 
1992/0804    
	extern ulong etext; 
 
1999/0720/sys/src/9/pc/trap.c:332,3391999/0721/sys/src/9/pc/trap.c:338,344
1993/0915    
	if(up == 0) 
1992/0804    
		return; 
 
1999/0720    
	getpcsp(&pc, &sp); 
	print("ktrace /kernel/path %.8lux %.8lux\n", pc, sp); 
1999/0721    
	print("ktrace /kernel/path %.8lux %.8lux\n", ureg->pc, ureg->sp); 
1992/0804    
	i = 0; 
1994/0816    
	for(l=(ulong)&l; l<(ulong)(up->kstack+KSTACK); l+=4){ 
1992/0804    
		v = *(ulong*)l; 
1999/0720/sys/src/9/pc/trap.c:356,3611999/0721/sys/src/9/pc/trap.c:361,372
1992/0804    
	} 
1999/0720    
	if(i) 
		print("\n"); 
1999/0721    
} 
 
void 
dumpstack(void) 
{ 
	callwithureg(_dumpstack); 
1991/0720    
} 
 
1997/0327    
static void 


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