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

1991/0723/port/sysproc.c (diff list | history)

1991/0712/sys/src/9/port/sysproc.c:96,1011991/0723/sys/src/9/port/sysproc.c:96,110 (short | long | prev | next)
1990/0227    
	return pid; 
} 
 
1991/0723    
static ulong 
l2be(long l) 
{ 
	uchar *cp; 
 
	cp = (uchar*)&l; 
	return (cp[0]<<24) | (cp[1]<<16) | (cp[2]<<8) | cp[3]; 
} 
 
1990/0227    
long 
sysexec(ulong *arg) 
{ 
1991/0712/sys/src/9/port/sysproc.c:114,1191991/0723/sys/src/9/port/sysproc.c:123,129
1990/0227    
	char line[sizeof(Exec)]; 
1991/0705    
	Fgrp *f; 
	Image *img; 
1991/0723    
	ulong magic, text, entry, data, bss; 
1990/0227    
 
	p = u->p; 
	validaddr(arg[0], 1, 0); 
1991/0712/sys/src/9/port/sysproc.c:132,1411991/0723/sys/src/9/port/sysproc.c:142,154
1990/0227    
	if(n < 2) 
    Err: 
1990/11211    
		error(Ebadexec); 
1990/1211    
	if(n==sizeof(Exec) && exec.magic==AOUT_MAGIC){ 
1990/0227    
		if((exec.text&KZERO) 
		|| (ulong)exec.entry < UTZERO+sizeof(Exec) 
		|| (ulong)exec.entry >= UTZERO+sizeof(Exec)+exec.text) 
1991/0723    
	magic = l2be(exec.magic); 
	text = l2be(exec.text); 
	entry = l2be(exec.entry); 
	if(n==sizeof(Exec) && magic==AOUT_MAGIC){ 
		if((text&KZERO) 
		|| entry < UTZERO+sizeof(Exec) 
		|| entry >= UTZERO+sizeof(Exec)+text) 
1990/0227    
			goto Err; 
		goto Binary; 
	} 
1991/0712/sys/src/9/port/sysproc.c:165,1731991/0723/sys/src/9/port/sysproc.c:178,188
1990/0227    
 
    Binary: 
1991/0705    
	poperror(); 
1990/0227    
	t = (UTZERO+sizeof(Exec)+exec.text+(BY2PG-1)) & ~(BY2PG-1); 
1990/1212    
	d = (t + exec.data + (BY2PG-1)) & ~(BY2PG-1); 
1990/1211    
	bssend = t + exec.data + exec.bss; 
1991/0723    
	data = l2be(exec.data); 
	bss = l2be(exec.bss); 
	t = (UTZERO+sizeof(Exec)+text+(BY2PG-1)) & ~(BY2PG-1); 
	d = (t + data + (BY2PG-1)) & ~(BY2PG-1); 
	bssend = t + data + bss; 
1990/1211    
	b = (bssend + (BY2PG-1)) & ~(BY2PG-1); 
1990/0227    
	if((t|d|b) & KZERO) 
1990/11211    
		error(Ebadexec); 
1991/0712/sys/src/9/port/sysproc.c:254,2601991/0723/sys/src/9/port/sysproc.c:269,275
1991/0705    
	p->seg[TSEG] = ts; 
1991/0706    
	ts->flushme = 1; 
1991/0705    
	ts->fstart = 0; 
	ts->flen = sizeof(Exec)+exec.text; 
1991/0723    
	ts->flen = sizeof(Exec)+text; 
1990/0227    
 
1991/0705    
	/* Data. Shared. */ 
	s = newseg(SG_DATA, t, (d-t)>>PGSHIFT); 
1991/0712/sys/src/9/port/sysproc.c:264,2701991/0723/sys/src/9/port/sysproc.c:279,285
1991/0705    
	incref(img); 
	s->image = img; 
	s->fstart = ts->fstart+ts->flen; 
	s->flen = exec.data; 
1991/0723    
	s->flen = data; 
1990/0227    
 
1991/0705    
	/* BSS. Zero fill on demand */ 
	p->seg[BSEG] = newseg(SG_BSS, d, (b-d)>>PGSHIFT); 
1991/0712/sys/src/9/port/sysproc.c:288,2941991/0723/sys/src/9/port/sysproc.c:303,309
1991/0529    
	 */ 
1990/0227    
	flushmmu(); 
1990/1212    
	clearmmucache(); 
1990/1226    
	execpc(exec.entry); 
1991/0723    
	execpc(entry); 
1990/0227    
	sp = (ulong*)(USTKTOP - ssize); 
	*--sp = nargs; 
1990/0614    
	((Ureg*)UREGADDR)->usp = (ulong)sp; 
1991/0712/sys/src/9/port/sysproc.c:488,4931991/0723/sys/src/9/port/sysproc.c:503,509
1991/0705    
	int i; 
	Segment *s; 
 
1991/0723    
	s = 0; 
1991/0705    
	for(i = 0; i < NSEG; i++) 
		if(s = u->p->seg[i]) { 
			qlock(&s->lk); 


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