diff options
| author | Russ Cox <rsc@golang.org> | 2013-03-07 09:19:02 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2013-03-07 09:19:02 -0500 |
| commit | 60f783d92bc07fa7ca78e8efccbbc841d9f9cbcb (patch) | |
| tree | 8677601561fbb007429777514911480aa4c871fd /src/cmd/ld/lib.h | |
| parent | 8aafb44b0bbba85535feb67e7ae0f4f254524c0f (diff) | |
| download | go-60f783d92bc07fa7ca78e8efccbbc841d9f9cbcb.tar.xz | |
cmd/ld: host linking support for linux/amd64
Still to do: non-linux and non-amd64.
It may work on other ELF-based amd64 systems too, but untested.
"go test -ldflags -hostobj $GOROOT/misc/cgo/test" passes.
Much may yet change, but this seems a reasonable checkpoint.
R=iant
CC=golang-dev
https://golang.org/cl/7369057
Diffstat (limited to 'src/cmd/ld/lib.h')
| -rw-r--r-- | src/cmd/ld/lib.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/cmd/ld/lib.h b/src/cmd/ld/lib.h index 25fe45675e..0b7e48c8a2 100644 --- a/src/cmd/ld/lib.h +++ b/src/cmd/ld/lib.h @@ -138,6 +138,7 @@ EXTERN char* outfile; EXTERN int32 nsymbol; EXTERN char* thestring; EXTERN int ndynexp; +EXTERN Sym** dynexp; EXTERN int nldflag; EXTERN char** ldflag; EXTERN int havedynamic; @@ -149,6 +150,21 @@ EXTERN int flag_shared; EXTERN char* tracksym; EXTERN char* interpreter; +enum +{ + LinkAuto = 0, + LinkInternal, + LinkExternal, +}; +EXTERN int linkmode; + +// for dynexport field of Sym +enum +{ + CgoExportDynamic = 1<<0, + CgoExportStatic = 1<<1, +}; + EXTERN Segment segtext; EXTERN Segment segdata; EXTERN Segment segsym; @@ -187,7 +203,7 @@ void adddynrel(Sym*, Reloc*); void adddynrela(Sym*, Sym*, Reloc*); Sym* lookuprel(void); void ldobj1(Biobuf *f, char*, int64 len, char *pn); -void ldobj(Biobuf*, char*, int64, char*, int); +void ldobj(Biobuf*, char*, int64, char*, char*, int); void ldelf(Biobuf*, char*, int64, char*); void ldmacho(Biobuf*, char*, int64, char*); void ldpe(Biobuf*, char*, int64, char*); @@ -242,6 +258,10 @@ void usage(void); void setinterp(char*); Sym* listsort(Sym*, int(*cmp)(Sym*, Sym*), int); int valuecmp(Sym*, Sym*); +void hostobjs(void); +void hostlink(void); +char* estrdup(char*); +void* erealloc(void*, long); int pathchar(void); void* mal(uint32); |
