Commit 308a3e6c authored by Russ Cox's avatar Russ Cox

cmd/dist: fix darwin build

The TLS block on Darwin is not the same as on ELF.

TBR=elias.naur
CC=golang-dev
https://golang.org/cl/12741044
parent a5f257a0
......@@ -166,17 +166,16 @@ static struct {
// If the linker is not outputting a shared library, it will reduce
// the TLS accessors to the local exec model, effectively removing
// get_tls().
{"amd64", "",
"// The offsets 0 and 8 are known to:\n"
"// ../../cmd/6l/pass.c:/D_GS\n"
"// cgo/gcc_linux_amd64.c:/^threadentry\n"
"// cgo/gcc_darwin_amd64.c:/^threadentry\n"
"//\n"
{"amd64", "linux",
"#define get_tls(r) MOVQ runtime·tlsgm(SB), r\n"
"#define g(r) 0(r)(GS*1)\n"
"#define m(r) 8(r)(GS*1)\n"
},
{"amd64", "",
"#define get_tls(r)\n"
"#define g(r) 0(GS)\n"
"#define m(r) 8(GS)\n"
},
{"arm", "",
"#define LR R14\n"
},
......
......@@ -1212,7 +1212,7 @@ dodata(void)
diag("data or bss segment too large");
}
if(iself && linkmode == LinkExternal && s != nil && s->type == STLSBSS && HEADTYPE != Hopenbsd) {
if(iself && linkmode == LinkExternal && s != nil && s->type == STLSBSS && iself && HEADTYPE != Hopenbsd) {
sect = addsection(&segdata, ".tbss", 06);
sect->align = PtrSize;
sect->vaddr = 0;
......
......@@ -360,16 +360,17 @@ loadlib(void)
} else
s->type = 0;
}
}
}
gmsym = lookup("runtime.tlsgm", 0);
gmsym->type = STLSBSS;
gmsym->size = 2*PtrSize;
gmsym->hide = 1;
if(linkmode == LinkExternal)
if(linkmode == LinkExternal && iself && HEADTYPE != Hopenbsd)
gmsym->reachable = 1;
else
gmsym->reachable = 0;
// Now that we know the link mode, trim the dynexp list.
x = CgoExportDynamic;
if(linkmode == LinkExternal)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment