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/8l/asm.c | |
| 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/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 a00174c368..3563c0849f 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) { |
