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

1991/1214/pc/trap.c (diff list | history)

1991/1114/sys/src/9/pc/trap.c:136,1421991/1214/sys/src/9/pc/trap.c:136,142 (short | long | prev | next)
1991/0904    
	sethvec(39, intr39, SEGIG, 0); 
1991/0703    
 
	/* 
1991/0710    
	 *  system calls 
1991/1214    
	 *  system calls and break points 
1991/0710    
	 */ 
1991/0910    
	sethvec(Syscallvec, intr64, SEGTG, 3); 
	setvec(Syscallvec, (void (*)(Ureg*))syscall); 
1991/1114/sys/src/9/pc/trap.c:224,2291991/1214/sys/src/9/pc/trap.c:224,231
1991/1113    
	} 
 
	if(v>=256 || ivec[v] == 0){ 
1991/1214    
		if(v == 13) 
			return; 
1991/1113    
		if(v <= 16){ 
			if(user){ 
				sprint(buf, "sys: %s pc=0x%lux", excname[v], ur->pc); 
1991/1114/sys/src/9/pc/trap.c:247,2731991/1214/sys/src/9/pc/trap.c:249,254
1991/0806    
} 
 
/* 
 *  print 8259 status 
 */ 
void 
dump8259(void) 
{ 
	int c; 
                 
	outb(Int0ctl, 0x0a);	/* read ir */ 
	print("ir0 %lux\n", inb(Int0ctl)); 
	outb(Int0ctl, 0x0b);	/* read is */ 
	print("is0 %lux\n", inb(Int0ctl)); 
	print("im0 %lux\n", inb(Int0aux)); 
                 
	outb(Int1ctl, 0x0a);	/* read ir */ 
	print("ir1 %lux\n", inb(Int1ctl)); 
	outb(Int1ctl, 0x0b);	/* read is */ 
	print("is1 %lux\n", inb(Int1ctl)); 
	print("im1 %lux\n", inb(Int1aux)); 
1991/0710    
} 
                 
/* 
1991/0718    
 *  dump registers 
 */ 
void 
1991/1114/sys/src/9/pc/trap.c:277,2891991/1214/sys/src/9/pc/trap.c:258,275
1991/0718    
		print("registers for %s %d\n", u->p->text, u->p->pid); 
	else 
		print("registers for kernel\n"); 
	print("FLAGS=%lux ECODE=%lux CS=%lux PC=%lux SS=%lux USP=%lux\n", ur->flags, 
1991/0808    
		ur->ecode, ur->cs&0xff, ur->pc, ur->ss&0xff, ur->usp); 
1991/0718    
                 
1991/1214    
	print("FLAGS=%lux ECODE=%lux CS=%lux PC=%lux", ur->flags, 
		ur->ecode, ur->cs&0xff, ur->pc); 
	if(ur == (Ureg*)UREGADDR) 
		print(" SS=%lux USP=%lux\n", ur->ss&0xff, ur->usp); 
	else 
		print("\n"); 
1991/0718    
	print("  AX %8.8lux  BX %8.8lux  CX %8.8lux  DX %8.8lux\n", 
		ur->ax, ur->bx, ur->cx, ur->dx); 
	print("  SI %8.8lux  DI %8.8lux  BP %8.8lux  DS %8.8lux\n", 
		ur->si, ur->di, ur->bp, ur->ds); 
1991/1214    
	print("  SI %8.8lux  DI %8.8lux  BP %8.8lux\n", 
		ur->si, ur->di, ur->bp); 
	print("  DS %4.4ux  ES %4.4ux  FS %4.4ux  GS %4.4ux\n", 
		ur->ds&0xffff, ur->es&0xffff, ur->fs&0xffff, ur->gs&0xffff); 
1991/0718    
} 
 
1991/0720    
void 
1991/1114/sys/src/9/pc/trap.c:291,3001991/1214/sys/src/9/pc/trap.c:277,292
1991/0720    
{ 
} 
 
void 
execpc(ulong entry) 
1991/1214    
long 
execregs(ulong entry, ulong ssize, ulong nargs) 
1991/0720    
{ 
1991/1214    
	ulong *sp; 
 
	sp = (ulong*)(USTKTOP - ssize); 
	*--sp = nargs; 
	((Ureg*)UREGADDR)->usp = (ulong)sp; 
1991/0720    
	((Ureg*)UREGADDR)->pc = entry; 
1991/1214    
	return USTKTOP-BY2WD;			/* address of user-level clock */ 
1991/0720    
} 
 
1991/0718    
/* 
1991/1114/sys/src/9/pc/trap.c:312,3181991/1214/sys/src/9/pc/trap.c:304,309
1991/0720    
 
1991/0718    
	u->p->insyscall = 1; 
	u->p->pc = ur->pc; 
1991/1112    
	u->dbgreg = ur; 
1991/0720    
	if((ur->cs)&0xffff == KESEL) 
		panic("recursive system call"); 
1991/0718    
 


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