| plan 9 kernel history: overview | file list | diff list |
2002/0819/port/sysproc.c (diff list | history)
| 1990/0227/sys/src/9/port/sysproc.c:105,110 – 1990/03081/sys/src/9/port/sysproc.c:105,124 (short | long) | ||
| 1990/0227 | if(c = u->fd[n]) /* assign = */ incref(c); /* | |
| 1990/03081 | * Committed. Link into hierarchy */ lock(&p->kidlock); lock(&u->p->kidlock); if(u->p->kid == 0){ p->sib = p; u->p->kid = p; }else{ p->sib = u->p->kid->sib; u->p->kid->sib = p; } unlock(&u->p->kidlock); unlock(&p->kidlock); /* | |
| 1990/0227 | * Sched */ if(setlabel(&p->sched)){ | |
| 1990/0227/sys/src/9/port/sysproc.c:115,120 – 1990/03081/sys/src/9/port/sysproc.c:129,135 | ||
| 1990/0227 | spllo(); return 0; } | |
| 1990/03081 | p->pop = u->p; | |
| 1990/0227 | p->parent = u->p; p->parentpid = u->p->pid; p->pgrp = u->p->pgrp; | |
| 1990/03081/sys/src/9/port/sysproc.c:134,140 – 1990/0322/sys/src/9/port/sysproc.c:134,139 (short | long) | ||
| 1990/0227 | p->parentpid = u->p->pid; p->pgrp = u->p->pgrp; incref(p->pgrp); | |
| 1990/0322/sys/src/9/port/sysproc.c:134,139 – 1990/0324/sys/src/9/port/sysproc.c:134,140 (short | long) | ||
| 1990/0227 | p->parentpid = u->p->pid; p->pgrp = u->p->pgrp; incref(p->pgrp); | |
| 1990/0324 | u->p->nchild++; | |
| 1990/0227 | pid = p->pid; memset(p->time, 0, sizeof(p->time)); p->time[TReal] = MACHP(0)->ticks; | |
| 1990/0324/sys/src/9/port/sysproc.c:6,12 – 1990/0330/sys/src/9/port/sysproc.c:6,12 (short | long) | ||
| 1990/0227 | #include "ureg.h" #include "errno.h" | |
| 1990/0330 | #include <a.out.h> | |
| 1990/0227 | int shargs(char*, int, char**); | |
| 1990/0330/sys/src/9/port/sysproc.c:26,31 – 1990/0614/sys/src/9/port/sysproc.c:26,32 (short | long) | ||
| 1990/0227 | ulong usp, upa, pid; Chan *c; Orig *o; | |
| 1990/0614 | KMap *k; | |
| 1990/0227 | int n, on, i; int lastvar; /* used to compute stack address */ | |
| 1990/0330/sys/src/9/port/sysproc.c:34,40 – 1990/0614/sys/src/9/port/sysproc.c:35,43 | ||
| 1990/0227 | */ p = newproc(); p->upage = newpage(1, 0, USERADDR|(p->pid&0xFFFF)); | |
| 1990/0614 | k = kmap(p->upage); upa = VA(k); | |
| 1990/0227 | /* * Save time: only copy u-> data and useful stack */ | |
| 1990/0330/sys/src/9/port/sysproc.c:41,48 – 1990/0614/sys/src/9/port/sysproc.c:44,52 | ||
| 1990/0227 | memcpy((void*)upa, u, sizeof(User)); n = USERADDR+BY2PG - (ulong)&lastvar; n = (n+32) & ~(BY2WD-1); /* be safe & word align */ | |
| 1990/0614 | memcpy((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n); | |
| 1990/0227 | ((User *)upa)->p = p; | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | /* * User stack | |
| 1990/0330/sys/src/9/port/sysproc.c:51,57 – 1990/0614/sys/src/9/port/sysproc.c:55,61 | ||
| 1990/0227 | s = &p->seg[SSEG]; s->proc = p; on = (s->maxva-s->minva)>>PGSHIFT; | |
| 1990/0614 | usp = ((Ureg*)UREGADDR)->usp; | |
| 1990/0227 | if(usp >= USTKTOP) panic("fork bad usp %lux", usp); if(usp < u->p->seg[SSEG].minva) | |
| 1990/0330/sys/src/9/port/sysproc.c:70,82 – 1990/0614/sys/src/9/port/sysproc.c:74,88 | ||
| 1990/0227 | op = u->p->seg[SSEG].o->pte[i+(on-n)].page; if(op){ np = newpage(1, s->o, op->va); | |
| 1990/0614 | k = kmap(np); | |
| 1990/0227 | p->seg[SSEG].o->pte[i].page = np; if(i == 0){ /* only part of last stack page */ | |
| 1990/0614 | memset((void*)VA(k), 0, usp); memcpy((void*)(VA(k)+usp), (void*)(op->va+usp), BY2PG-usp); | |
| 1990/0227 | }else /* all of higher pages */ | |
| 1990/0614 | memcpy((void*)VA(k), (void*)op->va, BY2PG); kunmap(k); | |
| 1990/0227 | } } unlock(s->o); | |
| 1990/0330/sys/src/9/port/sysproc.c:350,356 – 1990/0614/sys/src/9/port/sysproc.c:356,362 | ||
| 1990/0227 | ((Ureg*)UREGADDR)->pc = exec.entry - 4; sp = (ulong*)(USTKTOP - ssize); *--sp = nargs; | |
| 1990/0614 | ((Ureg*)UREGADDR)->usp = (ulong)sp; | |
| 1990/0227 | lock(&p->debug); u->nnote = 0; u->notify = 0; | |
| 1990/0614/sys/src/9/port/sysproc.c:404,411 – 1990/0619/sys/src/9/port/sysproc.c:404,409 (short | long) | ||
| 1990/0227 | long syssleep(ulong *arg) { | |
| 1990/0619/sys/src/9/port/sysproc.c:157,163 – 1990/08141/sys/src/9/port/sysproc.c:157,163 (short | long) | ||
| 1990/0227 | Seg *s; ulong l, t, d, b, v; int i; | |
| 1990/08141 | Chan *tc, *c; | |
| 1990/0227 | Orig *o; char **argv, **argp; char *a, *charp, *file; | |
| 1990/0619/sys/src/9/port/sysproc.c:287,292 – 1990/08141/sys/src/9/port/sysproc.c:287,301 | ||
| 1990/0227 | * Committed. Free old memory */ freesegs(ESEG); | |
| 1990/08141 | /* * Close on exec */ for(i=0; i<=u->maxfd; i++) if((c=u->fd[i]) && c->flag&CCEXEC){ close(c); fdclose(i); } | |
| 1990/0227 | /* * Text. Shared. | |
| 1990/08141/sys/src/9/port/sysproc.c:496,501 – 1990/1009/sys/src/9/port/sysproc.c:496,503 (short | long) | ||
| 1990/0227 | } if(arg[0] == 0) pgrpcpy(pg, u->p->pgrp); | |
| 1990/1009 | else memcpy(pg->user, u->p->pgrp->user, NAMELEN); | |
| 1990/0227 | closepgrp(u->p->pgrp); u->p->pgrp = pg; return pg->pgrpid; | |
| 1990/1009/sys/src/9/port/sysproc.c:183,189 – 1990/11211/sys/src/9/port/sysproc.c:183,189 (short | long) | ||
| 1990/0227 | n = (*devtab[tc->type].read)(tc, &exec, sizeof(Exec)); if(n < 2) Err: | |
| 1990/11211 | error(Ebadexec); | |
| 1990/0227 | if(n==sizeof(Exec) && exec.magic==V_MAGIC){ if((exec.text&KZERO) || (ulong)exec.entry < UTZERO+sizeof(Exec) | |
| 1990/1009/sys/src/9/port/sysproc.c:223,229 – 1990/11211/sys/src/9/port/sysproc.c:223,229 | ||
| 1990/0227 | d = (t + exec.data) & ~(BY2PG-1); b = (t + exec.data + exec.bss + (BY2PG-1)) & ~(BY2PG-1); if((t|d|b) & KZERO) | |
| 1990/11211 | error(Ebadexec); | |
| 1990/0227 | /* * Args: pass 1: count | |
| 1990/1009/sys/src/9/port/sysproc.c:446,486 – 1990/11211/sys/src/9/port/sysproc.c:446,464 | ||
| 1990/0227 | } long | |
| 1990/11211 | sysdeath(ulong *arg) | |
| 1990/0227 | { | |
| 1990/11211 | pprint("deprecated system call"); pexit("Suicide", 0); | |
| 1990/0227 | } long syserrstr(ulong *arg) { | |
| 1990/11211 | validaddr(arg[0], ERRLEN, 1); memcpy((char*)arg[0], u->error, ERRLEN); | |
| 1990/0227 | return 0; } | |
| 1990/1009/sys/src/9/port/sysproc.c:515,521 – 1990/11211/sys/src/9/port/sysproc.c:493,499 | ||
| 1990/0227 | sysnoted(ulong *arg) { if(u->notified == 0) | |
| 1990/11211 | error(Egreg); | |
| 1990/0227 | return 0; } | |
| 1990/1009/sys/src/9/port/sysproc.c:526,531 – 1990/11211/sys/src/9/port/sysproc.c:504,509 | ||
| 1990/0227 | sysbrk_(ulong *arg) { if(segaddr(&u->p->seg[BSEG], u->p->seg[BSEG].minva, arg[0]) == 0) | |
| 1990/11211 | error(Esegaddr); | |
| 1990/0227 | return 0; } | |
| 1990/11211/sys/src/9/port/sysproc.c:13,19 – 1990/1123/sys/src/9/port/sysproc.c:13,19 (short | long) | ||
| 1990/0227 | long sysr1(ulong *arg) { | |
| 1990/1123 | print("[%s %s %d] r1 = %d\n", u->p->pgrp->user, u->p->text, u->p->pid, arg[0]); | |
| 1990/0227 | return 0; } | |
| 1990/1123/sys/src/9/port/sysproc.c:111,130 – 1990/1124/sys/src/9/port/sysproc.c:111,116 (short | long) | ||
| 1990/0227 | if(c = u->fd[n]) /* assign = */ incref(c); /* | |
| 1990/03081 |
| |
| 1990/0227 | * Sched */ if(setlabel(&p->sched)){ | |
| 1990/1123/sys/src/9/port/sysproc.c:135,141 – 1990/1124/sys/src/9/port/sysproc.c:121,126 | ||
| 1990/0227 | spllo(); return 0; } | |
| 1990/03081 |
| |
| 1990/0227 | p->parent = u->p; p->parentpid = u->p->pid; p->pgrp = u->p->pgrp; | |
| 1990/1124/sys/src/9/port/sysproc.c:41,46 – 1990/1211/sys/src/9/port/sysproc.c:41,47 (short | long) | ||
|
Created.
rsc Fri Mar 4 12:44:25 2005 | ||
| 1990/0227 | /* * Save time: only copy u-> data and useful stack */ | |
| 1990/1211 | clearmmucache(); | |
| 1990/0227 | memcpy((void*)upa, u, sizeof(User)); n = USERADDR+BY2PG - (ulong)&lastvar; n = (n+32) & ~(BY2WD-1); /* be safe & word align */ | |
| 1990/1124/sys/src/9/port/sysproc.c:114,119 – 1990/1211/sys/src/9/port/sysproc.c:115,121 | ||
| 1990/0227 | * Sched */ if(setlabel(&p->sched)){ | |
| 1990/1211 | clearmmucache(); | |
| 1990/0227 | u->p = p; p->state = Running; p->mach = m; | |
| 1990/1124/sys/src/9/port/sysproc.c:132,137 – 1990/1211/sys/src/9/port/sysproc.c:134,140 | ||
| 1990/0227 | memcpy(p->text, u->p->text, NAMELEN); ready(p); flushmmu(); | |
| 1990/1211 | clearmmucache(); | |
| 1990/0227 | return pid; } | |
| 1990/1124/sys/src/9/port/sysproc.c:147,153 – 1990/1211/sys/src/9/port/sysproc.c:150,156 | ||
| 1990/0227 | char **argv, **argp; char *a, *charp, *file; char *progarg[sizeof(Exec)/2+1], elem[NAMELEN]; | |
| 1990/1211 | ulong ssize, spage, nargs, nbytes, n, bssend; | |
| 1990/0227 | ulong *sp; int indir; Exec exec; | |
| 1990/1124/sys/src/9/port/sysproc.c:169,175 – 1990/1211/sys/src/9/port/sysproc.c:172,178 | ||
| 1990/0227 | if(n < 2) Err: | |
| 1990/11211 | error(Ebadexec); | |
| 1990/0227 |
| |
| 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) | |
| 1990/1124/sys/src/9/port/sysproc.c:206,212 – 1990/1211/sys/src/9/port/sysproc.c:209,216 | ||
| 1990/0227 | * Last partial page of data goes into BSS. */ d = (t + exec.data) & ~(BY2PG-1); | |
| 1990/1211 | bssend = t + exec.data + exec.bss; b = (bssend + (BY2PG-1)) & ~(BY2PG-1); | |
| 1990/0227 | if((t|d|b) & KZERO) | |
| 1990/11211 | error(Ebadexec); | |
| 1990/0227 | ||
| 1990/1124/sys/src/9/port/sysproc.c:331,336 – 1990/1211/sys/src/9/port/sysproc.c:335,342 | ||
| 1990/0227 | close(tc); | |
| 1990/1211 | p->bssend = bssend; | |
| 1990/0227 | /* * Move the stack */ | |
| 1990/1124/sys/src/9/port/sysproc.c:347,353 – 1990/1211/sys/src/9/port/sysproc.c:353,360 | ||
| 1990/0227 | unlock(o); flushmmu(); | |
| 1990/1211 | clearmmucache(); ((Ureg*)UREGADDR)->pc = exec.entry + ENTRYOFFSET; | |
| 1990/0227 | sp = (ulong*)(USTKTOP - ssize); *--sp = nargs; | |
| 1990/0614 | ((Ureg*)UREGADDR)->usp = (ulong)sp; | |
| 1990/1124/sys/src/9/port/sysproc.c:355,360 – 1990/1211/sys/src/9/port/sysproc.c:362,368 | ||
| 1990/0227 | u->nnote = 0; u->notify = 0; u->notified = 0; | |
| 1990/1211 | setup(p); | |
| 1990/0227 | unlock(&p->debug); return 0; } | |
| 1990/1124/sys/src/9/port/sysproc.c:488,494 – 1990/1211/sys/src/9/port/sysproc.c:496,520 | ||
| 1990/0227 | long sysbrk_(ulong *arg) { | |
| 1990/1211 | ulong addr; Seg *s; addr = arg[0]; #ifdef WHYROB if(addr < u->p->bssend){ pprint("addr below bss\n"); pexit("Suicide", 0); | |
| 1990/11211 | error(Esegaddr); | |
| 1990/1211 | } #endif WHYROB if(addr <= ((u->p->bssend+(BY2PG-1))&~(BY2PG-1))) /* still in DSEG */ goto Return; if(segaddr(&u->p->seg[BSEG], u->p->seg[BSEG].minva, arg[0]) == 0){ pprint("bad segaddr in brk\n"); pexit("Suicide", 0); error(Esegaddr); } Return: u->p->bssend = addr; | |
| 1990/0227 | return 0; } | |
| 1990/1211/sys/src/9/port/sysproc.c:205,214 – 1990/1212/sys/src/9/port/sysproc.c:205,211 (short | long) | ||
| 1990/0227 | Binary: 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; b = (bssend + (BY2PG-1)) & ~(BY2PG-1); | |
| 1990/0227 | if((t|d|b) & KZERO) | |
| 1990/1211/sys/src/9/port/sysproc.c:311,317 – 1990/1212/sys/src/9/port/sysproc.c:308,314 | ||
| 1990/0227 | if(o == 0){ o = neworig(t, (d-t)>>PGSHIFT, OWRPERM|OPURE|OCACHED, tc); o->minca = p->seg[TSEG].o->maxca; | |
| 1990/1212 | o->maxca = o->minca + exec.data; | |
| 1990/0227 | } s->o = o; s->minva = t; | |
| 1990/1211/sys/src/9/port/sysproc.c:319,333 – 1990/1212/sys/src/9/port/sysproc.c:316,328 | ||
| 1990/0227 | s->mod = 0; /* | |
| 1990/1212 | * BSS. Created afresh. | |
| 1990/0227 | */ s = &p->seg[BSEG]; s->proc = p; | |
| 1990/1212 | o = neworig(d, (b-d)>>PGSHIFT, OWRPERM, 0); o->minca = 0; o->maxca = 0; | |
| 1990/0227 | s->o = o; s->minva = d; s->maxva = b; | |
| 1990/1211/sys/src/9/port/sysproc.c:353,359 – 1990/1212/sys/src/9/port/sysproc.c:348,354 | ||
| 1990/0227 | unlock(o); flushmmu(); | |
| 1990/1211 |
| |
| 1990/1212 | clearmmucache(); | |
| 1990/1211 | ((Ureg*)UREGADDR)->pc = exec.entry + ENTRYOFFSET; | |
| 1990/0227 | sp = (ulong*)(USTKTOP - ssize); *--sp = nargs; | |
| 1990/1211/sys/src/9/port/sysproc.c:362,368 – 1990/1212/sys/src/9/port/sysproc.c:357,363 | ||
| 1990/0227 | u->nnote = 0; u->notify = 0; u->notified = 0; | |
| 1990/1211 |
| |
| 1990/1212 | procsetup(p); | |
| 1990/0227 | unlock(&p->debug); return 0; } | |
| 1990/1212/sys/src/9/port/sysproc.c:233,239 – 1990/1226/sys/src/9/port/sysproc.c:233,239 (short | long) | ||
| 1990/0227 | validaddr((ulong)argp, BY2WD, 0); validaddr((ulong)a, 1, 0); nbytes += (vmemchr(a, 0, 0xFFFFFFFF) - a) + 1; | |
| 1990/1226 | nargs++; | |
| 1990/0227 | } ssize = BY2WD*(nargs+1) + ((nbytes+(BY2WD-1)) & ~(BY2WD-1)); spage = (ssize+(BY2PG-1)) >> PGSHIFT; | |
| 1990/1212/sys/src/9/port/sysproc.c:349,355 – 1990/1226/sys/src/9/port/sysproc.c:349,355 | ||
| 1990/0227 | flushmmu(); | |
| 1990/1212 | clearmmucache(); | |
| 1990/1211 |
| |
| 1990/1226 | execpc(exec.entry); | |
| 1990/0227 | sp = (ulong*)(USTKTOP - ssize); *--sp = nargs; | |
| 1990/0614 | ((Ureg*)UREGADDR)->usp = (ulong)sp; | |
| 1990/1226/sys/src/9/port/sysproc.c:126,131 – 1990/1227/sys/src/9/port/sysproc.c:126,132 (short | long) | ||
| 1990/0227 | p->parent = u->p; p->parentpid = u->p->pid; p->pgrp = u->p->pgrp; | |
| 1990/1227 | p->bssend = u->p->bssend; | |
| 1990/0227 | incref(p->pgrp); | |
| 1990/0324 | u->p->nchild++; | |
| 1990/0227 | pid = p->pid; | |
| 1990/1226/sys/src/9/port/sysproc.c:495,507 – 1990/1227/sys/src/9/port/sysproc.c:496,506 | ||
| 1990/1211 | Seg *s; addr = arg[0]; | |
| 1990/11211 | error(Esegaddr); | |
| 1990/1211 | } | |
| 1990/1227/sys/src/9/port/sysproc.c:127,132 – 1991/0118/sys/src/9/port/sysproc.c:127,133 (short | long) | ||
| 1990/0227 | p->parentpid = u->p->pid; p->pgrp = u->p->pgrp; | |
| 1990/1227 | p->bssend = u->p->bssend; | |
| 1991/0118 | p->fpstate = u->p->fpstate; | |
| 1990/0227 | incref(p->pgrp); | |
| 1990/0324 | u->p->nchild++; | |
| 1990/0227 | pid = p->pid; | |
| 1991/0118/sys/src/9/port/sysproc.c:42,51 – 1991/0318/sys/src/9/port/sysproc.c:42,51 (short | long) | ||
| 1990/0227 | * Save time: only copy u-> data and useful stack */ | |
| 1990/1211 | clearmmucache(); | |
| 1990/0227 |
| |
| 1991/0318 | memmove((void*)upa, u, sizeof(User)); | |
| 1990/0227 | n = USERADDR+BY2PG - (ulong)&lastvar; n = (n+32) & ~(BY2WD-1); /* be safe & word align */ | |
| 1990/0614 |
| |
| 1991/0318 | memmove((void*)(upa+BY2PG-n), (void*)(USERADDR+BY2PG-n), n); | |
| 1990/0227 | ((User *)upa)->p = p; | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | ||
| 1991/0118/sys/src/9/port/sysproc.c:79,88 – 1991/0318/sys/src/9/port/sysproc.c:79,88 | ||
| 1990/0227 | p->seg[SSEG].o->pte[i].page = np; if(i == 0){ /* only part of last stack page */ | |
| 1990/0614 | memset((void*)VA(k), 0, usp); | |
| 1991/0318 | memmove((void*)(VA(k)+usp), | |
| 1990/0614 | (void*)(op->va+usp), BY2PG-usp); | |
| 1990/0227 | }else /* all of higher pages */ | |
| 1990/0614 |
| |
| 1991/0318 | memmove((void*)VA(k), (void*)op->va, BY2PG); | |
| 1990/0614 | kunmap(k); | |
| 1990/0227 | } } | |
| 1991/0118/sys/src/9/port/sysproc.c:133,139 – 1991/0318/sys/src/9/port/sysproc.c:133,139 | ||
| 1990/0227 | pid = p->pid; memset(p->time, 0, sizeof(p->time)); p->time[TReal] = MACHP(0)->ticks; | |
| 1991/0318 | memmove(p->text, u->p->text, NAMELEN); | |
| 1990/0227 | ready(p); flushmmu(); | |
| 1990/1211 | clearmmucache(); | |
| 1991/0118/sys/src/9/port/sysproc.c:185,191 – 1991/0318/sys/src/9/port/sysproc.c:185,191 | ||
| 1990/0227 | /* * Process #! /bin/sh args ... */ | |
| 1991/0318 | memmove(line, &exec, sizeof(Exec)); | |
| 1990/0227 | if(indir || line[0]!='#' || line[1]!='!') goto Err; n = shargs(line, n, progarg); | |
| 1991/0118/sys/src/9/port/sysproc.c:265,275 – 1991/0318/sys/src/9/port/sysproc.c:265,275 | ||
| 1990/0227 | } *argv++ = charp + (USTKTOP-TSTKTOP); n = strlen(*argp) + 1; | |
| 1991/0318 | memmove(charp, *argp++, n); | |
| 1990/0227 | charp += n; } | |
| 1991/0318 | memmove(p->text, elem, NAMELEN); | |
| 1990/0227 | /* * Committed. Free old memory | |
| 1991/0118/sys/src/9/port/sysproc.c:448,454 – 1991/0318/sys/src/9/port/sysproc.c:448,454 | ||
| 1990/0227 | char buf[ERRLEN]; | |
| 1990/11211 | validaddr(arg[0], ERRLEN, 1); | |
| 1991/0318 | memmove((char*)arg[0], u->error, ERRLEN); | |
| 1990/0227 | return 0; } | |
| 1991/0118/sys/src/9/port/sysproc.c:465,471 – 1991/0318/sys/src/9/port/sysproc.c:465,471 | ||
| 1990/0227 | if(arg[0] == 0) pgrpcpy(pg, u->p->pgrp); | |
| 1990/1009 | else | |
| 1991/0318 | memmove(pg->user, u->p->pgrp->user, NAMELEN); | |
| 1990/0227 | closepgrp(u->p->pgrp); u->p->pgrp = pg; return pg->pgrpid; | |
| 1991/0318/sys/src/9/port/sysproc.c:474,480 – 1991/0326/sys/src/9/port/sysproc.c:474,481 (short | long) | ||
| 1990/0227 | long sysnotify(ulong *arg) { | |
| 1991/0326 | if(arg[0] != 0) validaddr(arg[0], sizeof(ulong), 0); | |
| 1990/0227 | u->notify = (int(*)(void*, char*))(arg[0]); return 0; } | |
| 1991/0326/sys/src/9/port/sysproc.c:170,176 – 1991/0411/sys/src/9/port/sysproc.c:170,176 (short | long) | ||
| 1990/0227 | } if(!indir) strcpy(elem, u->elem); | |
| 1991/0411 | n = (*devtab[tc->type].read)(tc, &exec, sizeof(Exec), 0); | |
| 1990/0227 | if(n < 2) Err: | |
| 1990/11211 | error(Ebadexec); | |
| 1991/0411/sys/src/9/port/sysproc.c:134,142 – 1991/0430/sys/src/9/port/sysproc.c:134,142 (short | long) | ||
| 1990/0227 | memset(p->time, 0, sizeof(p->time)); p->time[TReal] = MACHP(0)->ticks; | |
| 1991/0318 | memmove(p->text, u->p->text, NAMELEN); | |
| 1990/0227 |
| |
| 1990/1211 | clearmmucache(); | |
| 1991/0430 | ready(p); | |
| 1990/0227 | return pid; } | |
| 1991/0430/sys/src/9/port/sysproc.c:407,412 – 1991/0513/sys/src/9/port/sysproc.c:407,417 (short | long) | ||
| 1990/0227 | return 0; } | |
| 1991/0513 | long sysalarm(ulong *arg) { return procalarm(arg[0]); } | |
| 1990/0227 | long sysexits(ulong *arg) | |
| 1991/0513/sys/src/9/port/sysproc.c:460,465 – 1991/0514/sys/src/9/port/sysproc.c:460,466 (short | long) | ||
| 1990/0227 | long sysforkpgrp(ulong *arg) { | |
| 1991/0514 | int mask; | |
| 1990/0227 | Pgrp *pg; pg = newpgrp(); | |
| 1991/0513/sys/src/9/port/sysproc.c:467,476 – 1991/0514/sys/src/9/port/sysproc.c:468,492 | ||
| 1990/0227 | closepgrp(pg); nexterror(); } | |
| 1991/0514 | mask = arg[0]; if(mask == FPall) mask = FPnote|FPenv|FPnamespc; memmove(pg->user, u->p->pgrp->user, NAMELEN); if(mask & FPnamespc) | |
| 1990/0227 | pgrpcpy(pg, u->p->pgrp); | |
| 1990/1009 |
| |
| 1991/0318 |
| |
| 1991/0514 | if(mask & FPenv) envcpy(pg, u->p->pgrp); if((mask & FPnote) == 0) { u->nnote = 0; u->notified = 0; memset(u->note, 0, sizeof(u->note)); } | |
| 1990/0227 | closepgrp(u->p->pgrp); u->p->pgrp = pg; return pg->pgrpid; | |
| 1991/0514/sys/src/9/port/sysproc.c:152,158 – 1991/0522/sys/src/9/port/sysproc.c:152,158 (short | long) | ||
| 1990/0227 | char **argv, **argp; char *a, *charp, *file; char *progarg[sizeof(Exec)/2+1], elem[NAMELEN]; | |
| 1990/1211 |
| |
| 1991/0522 | ulong sbase, ssize, spage, nargs, nbytes, n, bssend; | |
| 1990/0227 | ulong *sp; int indir; Exec exec; | |
| 1991/0514/sys/src/9/port/sysproc.c:239,251 – 1991/0522/sys/src/9/port/sysproc.c:239,254 | ||
| 1990/0227 | } ssize = BY2WD*(nargs+1) + ((nbytes+(BY2WD-1)) & ~(BY2WD-1)); spage = (ssize+(BY2PG-1)) >> PGSHIFT; | |
| 1991/0522 | sbase = TSTKTOP-(spage<<PGSHIFT); | |
| 1990/0227 | /* * Build the stack segment, putting it in kernel virtual for the moment */ | |
| 1991/0522 | if(sbase <= USERADDR) errors("not enough argument stack space"); | |
| 1990/0227 | s = &p->seg[ESEG]; s->proc = p; | |
| 1991/0522 | s->o = neworig(sbase, spage, OWRPERM, 0); | |
| 1990/0227 | s->minva = s->o->va; s->maxva = TSTKTOP; | |
| 1991/0522/sys/src/9/port/sysproc.c:152,158 – 1991/0523/sys/src/9/port/sysproc.c:152,158 (short | long) | ||
| 1990/0227 | char **argv, **argp; char *a, *charp, *file; char *progarg[sizeof(Exec)/2+1], elem[NAMELEN]; | |
| 1991/0522 |
| |
| 1991/0523 | ulong ssize, spage, nargs, nbytes, n, bssend; | |
| 1990/0227 | ulong *sp; int indir; Exec exec; | |
| 1991/0522/sys/src/9/port/sysproc.c:239,254 – 1991/0523/sys/src/9/port/sysproc.c:239,253 | ||
| 1990/0227 | } ssize = BY2WD*(nargs+1) + ((nbytes+(BY2WD-1)) & ~(BY2WD-1)); spage = (ssize+(BY2PG-1)) >> PGSHIFT; | |
| 1991/0522 |
| |
| 1990/0227 | /* * Build the stack segment, putting it in kernel virtual for the moment */ | |
| 1991/0522 |
| |
| 1991/0523 | if(spage > TSTKSIZ) | |
| 1991/0522 | errors("not enough argument stack space"); | |
| 1990/0227 | s = &p->seg[ESEG]; s->proc = p; | |
| 1991/0522 |
| |
| 1991/0523 | s->o = neworig(TSTKTOP-(spage<<PGSHIFT), spage, OWRPERM, 0); | |
| 1990/0227 | s->minva = s->o->va; s->maxva = TSTKTOP; | |
| 1991/0523/sys/src/9/port/sysproc.c:41,47 – 1991/0529/sys/src/9/port/sysproc.c:41,47 (short | long) | ||
| 1990/0227 | /* * Save time: only copy u-> data and useful stack */ | |
| 1990/1211 |
| |
| 1991/0529 | clearmmucache(); /* so child doesn't inherit any of your mappings */ | |
| 1991/0318 | memmove((void*)upa, u, sizeof(User)); | |
| 1990/0227 | n = USERADDR+BY2PG - (ulong)&lastvar; n = (n+32) & ~(BY2WD-1); /* be safe & word align */ | |
| 1991/0523/sys/src/9/port/sysproc.c:115,121 – 1991/0529/sys/src/9/port/sysproc.c:115,120 | ||
| 1990/0227 | * Sched */ if(setlabel(&p->sched)){ | |
| 1990/1211 |
| |
| 1990/0227 | u->p = p; p->state = Running; p->mach = m; | |
| 1991/0523/sys/src/9/port/sysproc.c:134,139 – 1991/0529/sys/src/9/port/sysproc.c:133,143 | ||
| 1990/0227 | memset(p->time, 0, sizeof(p->time)); p->time[TReal] = MACHP(0)->ticks; | |
| 1991/0318 | memmove(p->text, u->p->text, NAMELEN); | |
| 1991/0529 | /* * since the bss/data segments are now shareable, * any mmu info about this process is now stale * (i.e. has bad properties) and has to be discarded. */ | |
| 1990/0227 | flushmmu(); | |
| 1990/1211 | clearmmucache(); | |
| 1991/0430 | ready(p); | |
| 1991/0523/sys/src/9/port/sysproc.c:351,356 – 1991/0529/sys/src/9/port/sysproc.c:355,364 | ||
| 1990/0227 | o->pte[i].page->va += (USTKTOP-TSTKTOP); unlock(o); | |
| 1991/0529 | /* * at this point, the mmu contains info about the old address * space and needs to be flushed */ | |
| 1990/0227 | flushmmu(); | |
| 1990/1212 | clearmmucache(); | |
| 1990/1226 | execpc(exec.entry); | |
| Too many diffs (26 > 25). Stopping. | ||