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 | 3a5a38ae6492acfeaca264ff8e507b2308815076 (patch) | |
tree | 999037afb73c5b10687b9d4d16c983b64e2cb0a3 /src/cmd/8l/asm.c | |
parent | 42c44bb9098085ba91e9213ad628370b391d7cc3 (diff) | |
download | go-3a5a38ae6492acfeaca264ff8e507b2308815076.tar.gz |
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://codereview.appspot.com/7369057
Diffstat (limited to 'src/cmd/8l/asm.c')
-rw-r--r-- | src/cmd/8l/asm.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/cmd/8l/asm.c b/src/cmd/8l/asm.c index a00174c36..3563c0849 100644 --- a/src/cmd/8l/asm.c +++ b/src/cmd/8l/asm.c @@ -128,7 +128,7 @@ adddynrel(Sym *s, Reloc *r) // Handle relocations found in ELF object files. case 256 + R_386_PC32: - if(targ->dynimpname != nil && !targ->dynexport) + if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) diag("unexpected R_386_PC32 relocation for dynamic symbol %s", targ->name); if(targ->type == 0 || targ->type == SXREF) diag("unknown symbol %s in pcrel", targ->name); @@ -139,7 +139,7 @@ adddynrel(Sym *s, Reloc *r) case 256 + R_386_PLT32: r->type = D_PCREL; r->add += 4; - if(targ->dynimpname != nil && !targ->dynexport) { + if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) { addpltsym(targ); r->sym = lookup(".plt", 0); r->add += targ->plt; @@ -147,7 +147,7 @@ adddynrel(Sym *s, Reloc *r) return; case 256 + R_386_GOT32: - if(targ->dynimpname == nil || targ->dynexport) { + if(targ->dynimpname == nil || (targ->cgoexport & CgoExportDynamic)) { // have symbol // turn MOVL of GOT entry into LEAL of symbol itself if(r->off < 2 || s->p[r->off-2] != 0x8b) { @@ -175,19 +175,19 @@ adddynrel(Sym *s, Reloc *r) return; case 256 + R_386_32: - if(targ->dynimpname != nil && !targ->dynexport) + if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) diag("unexpected R_386_32 relocation for dynamic symbol %s", targ->name); r->type = D_ADDR; return; case 512 + MACHO_GENERIC_RELOC_VANILLA*2 + 0: r->type = D_ADDR; - if(targ->dynimpname != nil && !targ->dynexport) + if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) diag("unexpected reloc for dynamic symbol %s", targ->name); return; case 512 + MACHO_GENERIC_RELOC_VANILLA*2 + 1: - if(targ->dynimpname != nil && !targ->dynexport) { + if(targ->dynimpname != nil && !(targ->cgoexport & CgoExportDynamic)) { addpltsym(targ); r->sym = lookup(".plt", 0); r->add = targ->plt; @@ -198,7 +198,7 @@ adddynrel(Sym *s, Reloc *r) return; case 512 + MACHO_FAKE_GOTPCREL: - if(targ->dynimpname == nil || targ->dynexport) { + if(targ->dynimpname == nil || (targ->cgoexport & CgoExportDynamic)) { // have symbol // turn MOVL of GOT entry into LEAL of symbol itself if(r->off < 2 || s->p[r->off-2] != 0x8b) { @@ -217,7 +217,7 @@ adddynrel(Sym *s, Reloc *r) } // Handle references to ELF symbols from our own object files. - if(targ->dynimpname == nil || targ->dynexport) + if(targ->dynimpname == nil || (targ->cgoexport & CgoExportDynamic)) return; switch(r->type) { @@ -461,7 +461,7 @@ adddynsym(Sym *s) /* type */ t = STB_GLOBAL << 4; - if(s->dynexport && (s->type&SMASK) == STEXT) + if((s->cgoexport & CgoExportDynamic) && (s->type&SMASK) == STEXT) t |= STT_FUNC; else t |= STT_OBJECT; @@ -469,7 +469,7 @@ adddynsym(Sym *s) adduint8(d, 0); /* shndx */ - if(!s->dynexport && s->dynimpname != nil) + if(!(s->cgoexport & CgoExportDynamic) && s->dynimpname != nil) adduint16(d, SHN_UNDEF); else { switch(s->type) { |