aboutsummaryrefslogtreecommitdiff
path: root/src/runtime/runtime.c
diff options
context:
space:
mode:
authorKen Thompson <ken@golang.org>2008-07-14 14:33:39 -0700
committerKen Thompson <ken@golang.org>2008-07-14 14:33:39 -0700
commit526200345cd6b1e1449f7adb62f05410ff01a44a (patch)
tree86fb2f1fb7c7a70a32d6e53bea5b489e02127a8d /src/runtime/runtime.c
parentf7e2bb55ae4638be8027d5b80b0e50795782c52d (diff)
downloadgo-526200345cd6b1e1449f7adb62f05410ff01a44a.tar.xz
synch chan
SVN=127055
Diffstat (limited to 'src/runtime/runtime.c')
-rw-r--r--src/runtime/runtime.c228
1 files changed, 0 insertions, 228 deletions
diff --git a/src/runtime/runtime.c b/src/runtime/runtime.c
index bc6c0ccb9d..8180b3c8ec 100644
--- a/src/runtime/runtime.c
+++ b/src/runtime/runtime.c
@@ -581,238 +581,10 @@ check(void)
initsig();
}
-void
-sys·goexit(void)
-{
-//prints("goexit goid=");
-//sys·printint(g->goid);
-//prints("\n");
- g->status = Gdead;
- sys·gosched();
-}
-
-void
-sys·newproc(int32 siz, byte* fn, byte* arg0)
-{
- byte *stk, *sp;
- G *newg;
-
-//prints("newproc siz=");
-//sys·printint(siz);
-//prints(" fn=");
-//sys·printpointer(fn);
-
- siz = (siz+7) & ~7;
- if(siz > 1024) {
- prints("sys·newproc: too many args: ");
- sys·printint(siz);
- prints("\n");
- sys·panicl(123);
- }
-
- newg = mal(sizeof(G));
- stk = mal(4096);
- newg->stackguard = stk+160;
-
- sp = stk + 4096 - 4*8;
- newg->stackbase = sp;
-
- sp -= siz;
- mcpy(sp, (byte*)&arg0, siz);
-
- sp -= 8;
- *(byte**)sp = (byte*)sys·goexit;
-
- sp -= 8; // retpc used by gogo
- newg->sched.SP = sp;
- newg->sched.PC = fn;
-
- goidgen++;
- newg->goid = goidgen;
-
- newg->status = Grunnable;
- newg->link = allg;
- allg = newg;
-
-//prints(" goid=");
-//sys·printint(newg->goid);
-//prints("\n");
-}
-
-G*
-select(void)
-{
- G *gp, *bestg;
-
- bestg = nil;
- for(gp=allg; gp!=nil; gp=gp->link) {
- if(gp->status != Grunnable)
- continue;
- if(bestg == nil || gp->pri < bestg->pri)
- bestg = gp;
- }
- if(bestg != nil)
- bestg->pri++;
- return bestg;
-}
-
-void
-gom0init(void)
-{
- gosave(&m->sched);
- sys·gosched();
-}
-
-void
-sys·gosched(void)
-{
- G* gp;
-
- if(g != m->g0) {
- if(gosave(&g->sched))
- return;
- g = m->g0;
- gogo(&m->sched);
- }
- gp = select();
- if(gp == nil) {
-// prints("sched: no more work\n");
- sys·exit(0);
- }
-
- m->curg = gp;
- g = gp;
- gogo(&gp->sched);
-}
-
-//
-// the calling sequence for a routine that
-// needs N bytes stack, A args.
-//
-// N1 = (N+160 > 4096)? N+160: 0
-// A1 = A
-//
-// if N <= 75
-// CMPQ SP, 0(R15)
-// JHI 4(PC)
-// MOVQ $(N1<<0) | (A1<<32)), AX
-// MOVQ AX, 0(R14)
-// CALL sys·morestack(SB)
-//
-// if N > 75
-// LEAQ (-N-75)(SP), AX
-// CMPQ AX, 0(R15)
-// JHI 4(PC)
-// MOVQ $(N1<<0) | (A1<<32)), AX
-// MOVQ AX, 0(R14)
-// CALL sys·morestack(SB)
-//
-
-void
-oldstack(void)
-{
- Stktop *top;
- uint32 siz2;
- byte *sp;
-if(debug) prints("oldstack m->cret = ");
-if(debug) sys·printpointer((void*)m->cret);
-if(debug) prints("\n");
-
- top = (Stktop*)m->curg->stackbase;
-
- m->curg->stackbase = top->oldbase;
- m->curg->stackguard = top->oldguard;
- siz2 = (top->magic>>32) & 0xffffLL;
-
- sp = (byte*)top;
- if(siz2 > 0) {
- siz2 = (siz2+7) & ~7;
- sp -= siz2;
- mcpy(top->oldsp+16, sp, siz2);
- }
-
- m->morestack.SP = top->oldsp+8;
- m->morestack.PC = (byte*)(*(uint64*)(top->oldsp+8));
-if(debug) prints("oldstack sp=");
-if(debug) sys·printpointer(m->morestack.SP);
-if(debug) prints(" pc=");
-if(debug) sys·printpointer(m->morestack.PC);
-if(debug) prints("\n");
- gogoret(&m->morestack, m->cret);
-}
-
-void
-newstack(void)
-{
- int32 siz1, siz2;
- Stktop *top;
- byte *stk, *sp;
- void (*fn)(void);
-
- siz1 = m->morearg & 0xffffffffLL;
- siz2 = (m->morearg>>32) & 0xffffLL;
-
-if(debug) prints("newstack siz1=");
-if(debug) sys·printint(siz1);
-if(debug) prints(" siz2=");
-if(debug) sys·printint(siz2);
-if(debug) prints(" moresp=");
-if(debug) sys·printpointer(m->moresp);
-if(debug) prints("\n");
-
- if(siz1 < 4096)
- siz1 = 4096;
- stk = mal(siz1 + 1024);
- stk += 512;
-
- top = (Stktop*)(stk+siz1-sizeof(*top));
-
- top->oldbase = m->curg->stackbase;
- top->oldguard = m->curg->stackguard;
- top->oldsp = m->moresp;
- top->magic = m->morearg;
-
- m->curg->stackbase = (byte*)top;
- m->curg->stackguard = stk + 160;
-
- sp = (byte*)top;
-
- if(siz2 > 0) {
- siz2 = (siz2+7) & ~7;
- sp -= siz2;
- mcpy(sp, m->moresp+16, siz2);
- }
-
- g = m->curg;
- fn = (void(*)(void))(*(uint64*)m->moresp);
-if(debug) prints("fn=");
-if(debug) sys·printpointer(fn);
-if(debug) prints("\n");
- setspgoto(sp, fn, retfromnewstack);
-
- *(int32*)345 = 123;
-}
-
-void
-sys·morestack(uint64 u)
-{
- while(g == m->g0) {
- // very bad news
- *(int32*)123 = 123;
- }
-
- g = m->g0;
- m->moresp = (byte*)(&u-1);
- setspgoto(m->sched.SP, newstack, nil);
-
- *(int32*)234 = 123;
-}
-
/*
* map and chan helpers for
* dealing with unknown types
*/
-
static uint64
memhash(uint32 s, void *a)
{