diff options
author | Russ Cox <rsc@golang.org> | 2009-08-24 16:15:21 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-08-24 16:15:21 -0700 |
commit | 848e9261c030e32aec6f3f8b13d6aa1a458f2f18 (patch) | |
tree | a65fa19b965ad5b4c2a0bacc21bb06f03a8bdd95 /src/cmd/cc/cc.h | |
parent | a04e55452a8b999d380bdfb3ea72603d42fd076e (diff) | |
download | golang-848e9261c030e32aec6f3f8b13d6aa1a458f2f18.tar.gz |
first attempt at real FFI support.
in a .6 file, an export line
//ffi T localfib remotefib remote.so
means the dynamic linker should initialize
localfib, always a pointer, to the address of
remotefib, either text (T) or data (D) after
loading remote.so.
the C compiler will generate an export section
when given the pragmas
#pragma package fib
#pragma ffi T localfib remotefib remote.so
needing #pragma package is a bit of a kludge
and hopefully could go away later.
this is just the 6 tool chain support.
other architectures will happen once 6 settles down.
code using this to do FFI is in a later CL.
R=r
DELTA=161 (141 added, 14 deleted, 6 changed)
OCL=33783
CL=33795
Diffstat (limited to 'src/cmd/cc/cc.h')
-rw-r--r-- | src/cmd/cc/cc.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/cmd/cc/cc.h b/src/cmd/cc/cc.h index 2ebea6f5f..9964681f1 100644 --- a/src/cmd/cc/cc.h +++ b/src/cmd/cc/cc.h @@ -49,6 +49,7 @@ typedef struct Hist Hist; typedef struct Term Term; typedef struct Init Init; typedef struct Bits Bits; +typedef struct Ffi Ffi; #define NHUNK 50000L #define BUFSIZ 8192 @@ -436,6 +437,18 @@ struct Funct Sym* castfr[NTYPE]; }; +struct Ffi +{ + char type; + char* local; + char* remote; + char* path; +}; + +EXTERN Ffi *ffi; +EXTERN int nffi; +EXTERN char* package; + EXTERN struct { Type* tenum; /* type of entire enum */ @@ -740,6 +753,8 @@ void pragpack(void); void pragfpround(void); void pragtextflag(void); void pragincomplete(void); +void pragffi(void); +void pragpackage(void); /* * calls to machine depend part |