| 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,101 – 1991/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,119 – 1991/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,141 – 1991/0723/sys/src/9/port/sysproc.c:142,154 | ||
| 1990/0227 | if(n < 2) Err: | |
| 1990/11211 | error(Ebadexec); | |
| 1990/1211 |
| |
| 1990/0227 |
| |
| 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,173 – 1991/0723/sys/src/9/port/sysproc.c:178,188 | ||
| 1990/0227 | Binary: | |
| 1991/0705 | poperror(); | |
| 1990/0227 |
| |
| 1990/1212 |
| |
| 1990/1211 |
| |
| 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,260 – 1991/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; | |
| 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,270 – 1991/0723/sys/src/9/port/sysproc.c:279,285 | ||
| 1991/0705 | incref(img); s->image = img; s->fstart = ts->fstart+ts->flen; | |
| 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,294 – 1991/0723/sys/src/9/port/sysproc.c:303,309 | ||
| 1991/0529 | */ | |
| 1990/0227 | flushmmu(); | |
| 1990/1212 | clearmmucache(); | |
| 1990/1226 |
| |
| 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,493 – 1991/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); | |