summaryrefslogtreecommitdiff
path: root/src/liblink/obj6.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2013-12-09 09:58:35 -0800
committerRuss Cox <rsc@golang.org>2013-12-09 09:58:35 -0800
commitd0de9a7d56069ed1798756a8a350b412a90e17e2 (patch)
tree4fedac1f51f5ecc3b19ebe47c79a0d1d303fcbe9 /src/liblink/obj6.c
parent104d7c7d637e356e852c11be5d6aa5499a92b566 (diff)
downloadgo-d0de9a7d56069ed1798756a8a350b412a90e17e2.tar.gz
cmd/6l: fix linux/amd64
TBR=iant CC=golang-dev https://codereview.appspot.com/39530043
Diffstat (limited to 'src/liblink/obj6.c')
-rw-r--r--src/liblink/obj6.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/src/liblink/obj6.c b/src/liblink/obj6.c
index bd24d1d9e..8c165335e 100644
--- a/src/liblink/obj6.c
+++ b/src/liblink/obj6.c
@@ -225,9 +225,9 @@ static void
progedit(Link *ctxt, Prog *p)
{
Prog *q;
- LSym *gmsym;
-
- gmsym = nil; // TODO
+
+ if(ctxt->gmsym == nil)
+ ctxt->gmsym = linklookup(ctxt, "runtime.tlsgm", 0);
if(ctxt->headtype == Hwindows) {
// Windows
@@ -286,16 +286,14 @@ progedit(Link *ctxt, Prog *p)
// op runtime.tlsgm(SB), reg
// to
// NOP
- if(gmsym != nil && p->from.sym == gmsym) {
+ if(ctxt->gmsym != nil && p->from.sym == ctxt->gmsym) {
p->as = ANOP;
p->from.type = D_NONE;
p->to.type = D_NONE;
p->from.sym = nil;
p->to.sym = nil;
- return;
}
} else {
- /*
// Convert TLS reads of the form
// op n(GS), reg
// to
@@ -311,10 +309,9 @@ progedit(Link *ctxt, Prog *p)
q->from.offset = p->from.offset;
p->as = AMOVQ;
p->from.type = D_EXTERN;
- p->from.sym = gmsym;
+ p->from.sym = ctxt->gmsym;
p->from.offset = 0;
}
- */
}
}
@@ -359,8 +356,9 @@ addstacksplit(Link *ctxt, LSym *cursym)
uint32 i;
vlong textstksiz, textarg;
- if(ctxt->gmsym == nil) {
+ if(ctxt->gmsym == nil)
ctxt->gmsym = linklookup(ctxt, "runtime.tlsgm", 0);
+ if(ctxt->symmorestack[0] == nil) {
if(nelem(morename) > nelem(ctxt->symmorestack))
sysfatal("Link.symmorestack needs at least %d elements", nelem(morename));
for(i=0; i<nelem(morename); i++)