diff options
| author | Russ Cox <rsc@golang.org> | 2009-06-06 22:04:39 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2009-06-06 22:04:39 -0700 |
| commit | 3f6acf11200e54d98fef9b4fa42361b690e12d6e (patch) | |
| tree | 1195452c472b99bfd365ee1cc057e870178e63e0 /src/runtime/runtime.h | |
| parent | f52c02641ebe494240d6d396246a7a794dc11890 (diff) | |
| download | go-3f6acf11200e54d98fef9b4fa42361b690e12d6e.tar.xz | |
move src/runtime -> src/lib/runtime;
only automatic g4 mv here.
R=r
OCL=30002
CL=30007
Diffstat (limited to 'src/runtime/runtime.h')
| -rw-r--r-- | src/runtime/runtime.h | 464 |
1 files changed, 0 insertions, 464 deletions
diff --git a/src/runtime/runtime.h b/src/runtime/runtime.h deleted file mode 100644 index 749364f954..0000000000 --- a/src/runtime/runtime.h +++ /dev/null @@ -1,464 +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. - -/* - * basic types - */ -typedef signed char int8; -typedef unsigned char uint8; -typedef signed short int16; -typedef unsigned short uint16; -typedef signed int int32; -typedef unsigned int uint32; -typedef signed long long int int64; -typedef unsigned long long int uint64; -typedef float float32; -typedef double float64; - -#ifdef _64BIT -typedef uint64 uintptr; -#else -typedef uint32 uintptr; -#endif - -/* - * get rid of C types - * the / / / forces a syntax error immediately, - * which will show "last name: XXunsigned". - */ -#define unsigned XXunsigned / / / -#define signed XXsigned / / / -#define char XXchar / / / -#define short XXshort / / / -#define int XXint / / / -#define long XXlong / / / -#define float XXfloat / / / -#define double XXdouble / / / - -/* - * defined types - */ -typedef uint8 bool; -typedef uint8 byte; -typedef struct Alg Alg; -typedef struct Array Array; -typedef struct Func Func; -typedef struct G G; -typedef struct Gobuf Gobuf; -typedef struct Lock Lock; -typedef struct M M; -typedef struct Mem Mem; -typedef union Note Note; -typedef struct Stktop Stktop; -typedef struct String String; -typedef struct Usema Usema; -typedef struct SigTab SigTab; -typedef struct MCache MCache; -typedef struct Iface Iface; -typedef struct Itype Itype; -typedef struct Eface Eface; -typedef struct Sigt Sigt; -typedef struct Defer Defer; - -/* - * per cpu declaration - */ -extern register G* g; // R15 -extern register M* m; // R14 - -/* - * defined constants - */ -enum -{ - // G status - Gidle, - Grunnable, - Grunning, - Gsyscall, - Gwaiting, - Gmoribund, - Gdead, -}; -enum -{ - true = 1, - false = 0, -}; - -/* - * structures - */ -struct Lock -{ - uint32 key; - uint32 sema; // for OS X -}; -struct Usema -{ - uint32 u; - uint32 k; -}; -union Note -{ - struct { // Linux - Lock lock; - }; - struct { // OS X - int32 wakeup; - Usema sema; - }; -}; -struct String -{ - byte* str; - int32 len; -}; -struct Iface -{ - Itype* type; - void* data; -}; -struct Eface -{ - Sigt* type; - void* data; -}; - -struct Array -{ // must not move anything - byte* array; // actual data - uint32 nel; // number of elements - uint32 cap; // allocated number of elements -}; -struct Gobuf -{ - byte* SP; - byte* PC; -}; -struct G -{ - byte* stackguard; // must not move - byte* stackbase; // must not move - Defer* defer; // must not move - byte* stack0; // first stack segment - Gobuf sched; - G* alllink; // on allg - void* param; // passed parameter on wakeup - int16 status; - int32 goid; - int32 selgen; // valid sudog pointer - G* schedlink; - bool readyonstop; - M* m; // for debuggers -}; -struct Mem -{ - uint8* hunk; - uint32 nhunk; - uint64 nmmap; - uint64 nmal; -}; -struct M -{ - G* g0; // g0 w interrupt stack - must not move - uint64 morearg; // arg to morestack - must not move - uint64 cret; // return value from C - must not move - uint64 procid; // for debuggers - must not move - G* gsignal; // signal-handling G - must not move - G* curg; // current running goroutine - must not move - G* lastg; // last running goroutine - to emulate fifo - must not move - uint32 tls[8]; // thread-local storage (for 386 extern register) - must not move - Gobuf sched; - Gobuf morestack; - byte* moresp; - int32 siz1; - int32 siz2; - int32 id; - int32 mallocing; - int32 locks; - Note havenextg; - G* nextg; - M* schedlink; - Mem mem; - uint32 machport; // Return address for Mach IPC (OS X) - MCache *mcache; -}; -struct Stktop -{ - uint8* oldbase; - uint8* oldsp; - uint64 magic; - uint8* oldguard; -}; -struct Alg -{ - uintptr (*hash)(uint32, void*); - uint32 (*equal)(uint32, void*, void*); - void (*print)(uint32, void*); - void (*copy)(uint32, void*, void*); -}; -struct SigTab -{ - int32 flags; - int8 *name; -}; -enum -{ - SigCatch = 1<<0, - SigIgnore = 1<<1, - SigRestart = 1<<2, -}; - -// (will be) shared with go; edit ../cmd/6g/sys.go too. -// should move out of sys.go eventually. -// also eventually, the loaded symbol table should -// be closer to this form. -struct Func -{ - String name; - String type; // go type string - String src; // src file name - uint64 entry; // entry pc - int64 frame; // stack frame size - Array pcln; // pc/ln tab for this func - int64 pc0; // starting pc, ln for table - int32 ln0; - int32 args; // number of 32-bit in/out args - int32 locals; // number of 32-bit locals -}; - -/* - * defined macros - * you need super-goru privilege - * to add this list. - */ -#define nelem(x) (sizeof(x)/sizeof((x)[0])) -#define nil ((void*)0) - -/* - * known to compiler - */ -enum -{ - AMEM, - ANOEQ, - ASTRING, - AINTER, - ANILINTER, - AFAKE, - Amax -}; - -/* - * deferred subroutine calls - */ -struct Defer -{ - int32 siz; - byte* sp; - byte* fn; - Defer* link; - byte args[8]; // padded to actual size -}; - -/* - * external data - */ -extern Alg algarray[Amax]; -extern String emptystring; -G* allg; -int32 goidgen; -extern int32 gomaxprocs; -extern int32 panicking; -extern int32 maxround; - -/* - * common functions and data - */ -int32 strcmp(byte*, byte*); -int32 findnull(byte*); -void dump(byte*, int32); -int32 runetochar(byte*, int32); -int32 charntorune(int32*, uint8*, int32); - -/* - * very low level c-called - */ -int32 gogo(Gobuf*); -int32 gosave(Gobuf*); -int32 gogoret(Gobuf*, uint64); -void retfromnewstack(void); -void goargs(void); -void setspgoto(byte*, void(*)(void), void(*)(void)); -void FLUSH(void*); -void* getu(void); -void throw(int8*); -uint32 rnd(uint32, uint32); -void prints(int8*); -void printf(int8*, ...); -byte* mchr(byte*, byte, byte*); -void mcpy(byte*, byte*, uint32); -int32 mcmp(byte*, byte*, uint32); -void mmov(byte*, byte*, uint32); -void* mal(uint32); -uint32 cmpstring(String, String); -String gostring(byte*); -void initsig(void); -int32 gotraceback(void); -void traceback(uint8 *pc, uint8 *sp, G* gp); -void tracebackothers(G*); -int32 open(byte*, int32, ...); -int32 read(int32, void*, int32); -int32 write(int32, void*, int32); -void close(int32); -int32 fstat(int32, void*); -bool cas(uint32*, uint32, uint32); -void jmpdefer(byte*, void*); -void exit1(int32); -void ready(G*); -byte* getenv(int8*); -int32 atoi(byte*); -void newosproc(M *m, G *g, void *stk, void (*fn)(void)); -void sigaltstack(void*, void*); -void signalstack(byte*, int32); -G* malg(int32); -void minit(void); -Func* findfunc(uintptr); -int32 funcline(Func*, uint64); -void* stackalloc(uint32); -void stackfree(void*); -MCache* allocmcache(void); -void mallocinit(void); -bool ifaceeq(Iface, Iface); -bool efaceeq(Eface, Eface); -uintptr ifacehash(Iface); -uintptr efacehash(Eface); -uintptr nohash(uint32, void*); -uint32 noequal(uint32, void*, void*); -void* malloc(uintptr size); -void* mallocgc(uintptr size); -void free(void *v); -void exit(int32); -void breakpoint(void); -void gosched(void); -void goexit(void); - -#pragma varargck argpos printf 1 - -#pragma varargck type "d" int32 -#pragma varargck type "d" uint32 -#pragma varargck type "D" int64 -#pragma varargck type "D" uint64 -#pragma varargck type "x" int32 -#pragma varargck type "x" uint32 -#pragma varargck type "X" int64 -#pragma varargck type "X" uint64 -#pragma varargck type "p" void* -#pragma varargck type "p" uintptr -#pragma varargck type "s" int8* -#pragma varargck type "s" uint8* -#pragma varargck type "S" String - -// TODO(rsc): Remove. These are only temporary, -// for the mark and sweep collector. -void stoptheworld(void); -void starttheworld(void); - -/* - * mutual exclusion locks. in the uncontended case, - * as fast as spin locks (just a few user-level instructions), - * but on the contention path they sleep in the kernel. - * a zeroed Lock is unlocked (no need to initialize each lock). - */ -void lock(Lock*); -void unlock(Lock*); - -/* - * sleep and wakeup on one-time events. - * before any calls to notesleep or notewakeup, - * must call noteclear to initialize the Note. - * then, any number of threads can call notesleep - * and exactly one thread can call notewakeup (once). - * once notewakeup has been called, all the notesleeps - * will return. future notesleeps will return immediately. - */ -void noteclear(Note*); -void notesleep(Note*); -void notewakeup(Note*); - -/* - * Redefine methods for the benefit of gcc, which does not support - * UTF-8 characters in identifiers. - */ -#ifndef __GNUC__ -#define sys_memclr sys·memclr -#define sys_write sys·write -#define sys_catstring sys·catstring -#define sys_cmpstring sys·cmpstring -#define sys_getcallerpc sys·getcallerpc -#define sys_indexstring sys·indexstring -#define sys_intstring sys·intstring -#define sys_mal sys·mal -#define sys_mmap sys·mmap -#define sys_printarray sys·printarray -#define sys_printbool sys·printbool -#define sys_printfloat sys·printfloat -#define sys_printhex sys·printhex -#define sys_printint sys·printint -#define sys_printiface sys·printiface -#define sys_printeface sys·printeface -#define sys_printpc sys·printpc -#define sys_printpointer sys·printpointer -#define sys_printstring sys·printstring -#define sys_printuint sys·printuint -#define sys_setcallerpc sys·setcallerpc -#define sys_slicestring sys·slicestring -#endif - -/* - * low level go-called - */ -void sys_write(int32, void*, int32); -uint8* sys_mmap(byte*, uint32, int32, int32, int32, uint32); -void sys_memclr(byte*, uint32); -void sys_setcallerpc(void*, void*); -void* sys_getcallerpc(void*); - -/* - * runtime go-called - */ -void sys_printbool(bool); -void sys_printfloat(float64); -void sys_printint(int64); -void sys_printiface(Iface); -void sys_printeface(Eface); -void sys_printstring(String); -void sys_printpc(void*); -void sys_printpointer(void*); -void sys_printuint(uint64); -void sys_printhex(uint64); -void sys_printarray(Array); -void sys_catstring(String, String, String); -void sys_cmpstring(String, String, int32); -void sys_slicestring(String, int32, int32, String); -void sys_indexstring(String, int32, byte); -void sys_intstring(int64, String); - -/* - * wrapped for go users - */ -float64 Inf(int32 sign); -float64 NaN(void); -float32 float32frombits(uint32 i); -uint32 float32tobits(float32 f); -float64 float64frombits(uint64 i); -uint64 float64tobits(float64 f); -float64 frexp(float64 d, int32 *ep); -bool isInf(float64 f, int32 sign); -bool isNaN(float64 f); -float64 ldexp(float64 d, int32 e); -float64 modf(float64 d, float64 *ip); -void semacquire(uint32*); -void semrelease(uint32*); |
