summaryrefslogtreecommitdiff
path: root/src/cmd/cc/cc.h
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2009-08-24 16:15:21 -0700
committerRuss Cox <rsc@golang.org>2009-08-24 16:15:21 -0700
commit848e9261c030e32aec6f3f8b13d6aa1a458f2f18 (patch)
treea65fa19b965ad5b4c2a0bacc21bb06f03a8bdd95 /src/cmd/cc/cc.h
parenta04e55452a8b999d380bdfb3ea72603d42fd076e (diff)
downloadgolang-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.h15
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