From 80f18fc933cf3f3e829c5455a1023d69f7b86e52 Mon Sep 17 00:00:00 2001 From: Ondřej Surý Date: Tue, 13 Sep 2011 13:11:55 +0200 Subject: Imported Upstream version 60 --- src/pkg/runtime/runtime.c | 590 ---------------------------------------------- 1 file changed, 590 deletions(-) delete mode 100644 src/pkg/runtime/runtime.c (limited to 'src/pkg/runtime/runtime.c') diff --git a/src/pkg/runtime/runtime.c b/src/pkg/runtime/runtime.c deleted file mode 100644 index 1a3653f10..000000000 --- a/src/pkg/runtime/runtime.c +++ /dev/null @@ -1,590 +0,0 @@ -// Copyright 2009 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -#include "runtime.h" -#include "stack.h" - -enum { - maxround = sizeof(uintptr), -}; - -uint32 runtime·panicking; - -int32 -runtime·gotraceback(void) -{ - byte *p; - - p = runtime·getenv("GOTRACEBACK"); - if(p == nil || p[0] == '\0') - return 1; // default is on - return runtime·atoi(p); -} - -static Lock paniclk; - -void -runtime·startpanic(void) -{ - if(m->dying) { - runtime·printf("panic during panic\n"); - runtime·exit(3); - } - m->dying = 1; - runtime·xadd(&runtime·panicking, 1); - runtime·lock(&paniclk); -} - -void -runtime·dopanic(int32 unused) -{ - static bool didothers; - - if(g->sig != 0) - runtime·printf("\n[signal %x code=%p addr=%p pc=%p]\n", - g->sig, g->sigcode0, g->sigcode1, g->sigpc); - - runtime·printf("\n"); - if(runtime·gotraceback()){ - runtime·traceback(runtime·getcallerpc(&unused), runtime·getcallersp(&unused), 0, g); - if(!didothers) { - didothers = true; - runtime·tracebackothers(g); - } - } - runtime·unlock(&paniclk); - if(runtime·xadd(&runtime·panicking, -1) != 0) { - // Some other m is panicking too. - // Let it print what it needs to print. - // Wait forever without chewing up cpu. - // It will exit when it's done. - static Lock deadlock; - runtime·lock(&deadlock); - runtime·lock(&deadlock); - } - - runtime·exit(2); -} - -void -runtime·panicindex(void) -{ - runtime·panicstring("index out of range"); -} - -void -runtime·panicslice(void) -{ - runtime·panicstring("slice bounds out of range"); -} - -void -runtime·throwreturn(void) -{ - // can only happen if compiler is broken - runtime·throw("no return at end of a typed function - compiler is broken"); -} - -void -runtime·throwinit(void) -{ - // can only happen with linker skew - runtime·throw("recursive call during initialization - linker skew"); -} - -void -runtime·throw(int8 *s) -{ - runtime·startpanic(); - runtime·printf("throw: %s\n", s); - runtime·dopanic(0); - *(int32*)0 = 0; // not reached - runtime·exit(1); // even more not reached -} - -void -runtime·panicstring(int8 *s) -{ - Eface err; - - if(m->gcing) { - runtime·printf("panic: %s\n", s); - runtime·throw("panic during gc"); - } - runtime·newErrorString(runtime·gostringnocopy((byte*)s), &err); - runtime·panic(err); -} - -void -runtime·mcpy(byte *t, byte *f, uint32 n) -{ - while(n > 0) { - *t = *f; - t++; - f++; - n--; - } -} - -int32 -runtime·mcmp(byte *s1, byte *s2, uint32 n) -{ - uint32 i; - byte c1, c2; - - for(i=0; i c2) - return +1; - } - return 0; -} - - -byte* -runtime·mchr(byte *p, byte c, byte *ep) -{ - for(; p < ep; p++) - if(*p == c) - return p; - return nil; -} - -uint32 -runtime·rnd(uint32 n, uint32 m) -{ - uint32 r; - - if(m > maxround) - m = maxround; - r = n % m; - if(r) - n += m-r; - return n; -} - -static int32 argc; -static uint8** argv; - -Slice os·Args; -Slice os·Envs; - -void -runtime·args(int32 c, uint8 **v) -{ - argc = c; - argv = v; -} - -int32 runtime·isplan9; -int32 runtime·iswindows; - -void -runtime·goargs(void) -{ - String *s; - int32 i; - - // for windows implementation see "os" package - if(Windows) - return; - - s = runtime·malloc(argc*sizeof s[0]); - for(i=0; i 0) { - if(sizeof(hash) == 4) - hash = (hash ^ *b) * 3267000013UL; - else - hash = (hash ^ *b) * 23344194077549503ULL; - b++; - s--; - } - return hash; -} - -static uint32 -memequal(uint32 s, void *a, void *b) -{ - byte *ba, *bb, *aend; - - if(a == b) - return 1; - ba = a; - bb = b; - aend = ba+s; - while(ba != aend) { - if(*ba != *bb) - return 0; - ba++; - bb++; - } - return 1; -} - -static void -memprint(uint32 s, void *a) -{ - uint64 v; - - v = 0xbadb00b; - switch(s) { - case 1: - v = *(uint8*)a; - break; - case 2: - v = *(uint16*)a; - break; - case 4: - v = *(uint32*)a; - break; - case 8: - v = *(uint64*)a; - break; - } - runtime·printint(v); -} - -static void -memcopy(uint32 s, void *a, void *b) -{ - byte *ba, *bb; - uint32 i; - - ba = a; - bb = b; - if(bb == nil) { - for(i=0; ilen; - if(alen != b->len) - return false; - return memequal(alen, a->str, b->str); -} - -static void -strprint(uint32 s, String *a) -{ - USED(s); - runtime·printstring(*a); -} - -static uintptr -interhash(uint32 s, Iface *a) -{ - USED(s); - return runtime·ifacehash(*a); -} - -static void -interprint(uint32 s, Iface *a) -{ - USED(s); - runtime·printiface(*a); -} - -static uint32 -interequal(uint32 s, Iface *a, Iface *b) -{ - USED(s); - return runtime·ifaceeq_c(*a, *b); -} - -static uintptr -nilinterhash(uint32 s, Eface *a) -{ - USED(s); - return runtime·efacehash(*a); -} - -static void -nilinterprint(uint32 s, Eface *a) -{ - USED(s); - runtime·printeface(*a); -} - -static uint32 -nilinterequal(uint32 s, Eface *a, Eface *b) -{ - USED(s); - return runtime·efaceeq_c(*a, *b); -} - -uintptr -runtime·nohash(uint32 s, void *a) -{ - USED(s); - USED(a); - runtime·panicstring("hash of unhashable type"); - return 0; -} - -uint32 -runtime·noequal(uint32 s, void *a, void *b) -{ - USED(s); - USED(a); - USED(b); - runtime·panicstring("comparing uncomparable types"); - return 0; -} - -Alg -runtime·algarray[] = -{ -[AMEM] { memhash, memequal, memprint, memcopy }, -[ANOEQ] { runtime·nohash, runtime·noequal, memprint, memcopy }, -[ASTRING] { strhash, strequal, strprint, memcopy }, -[AINTER] { interhash, interequal, interprint, memcopy }, -[ANILINTER] { nilinterhash, nilinterequal, nilinterprint, memcopy }, -[AMEMWORD] { memhash, memwordequal, memprint, memwordcopy }, -}; - -int64 -runtime·nanotime(void) -{ - int64 sec; - int32 usec; - - sec = 0; - usec = 0; - runtime·gettime(&sec, &usec); - return sec*1000000000 + (int64)usec*1000; -} - -void -runtime·Caller(int32 skip, uintptr retpc, String retfile, int32 retline, bool retbool) -{ - Func *f; - uintptr pc; - - if(runtime·callers(1+skip, &retpc, 1) == 0) { - retfile = runtime·emptystring; - retline = 0; - retbool = false; - } else if((f = runtime·findfunc(retpc)) == nil) { - retfile = runtime·emptystring; - retline = 0; - retbool = true; // have retpc at least - } else { - retfile = f->src; - pc = retpc; - if(pc > f->entry) - pc--; - retline = runtime·funcline(f, pc); - retbool = true; - } - FLUSH(&retfile); - FLUSH(&retline); - FLUSH(&retbool); -} - -void -runtime·Callers(int32 skip, Slice pc, int32 retn) -{ - retn = runtime·callers(skip, (uintptr*)pc.array, pc.len); - FLUSH(&retn); -} - -void -runtime·FuncForPC(uintptr pc, void *retf) -{ - retf = runtime·findfunc(pc); - FLUSH(&retf); -} -- cgit v1.2.3