]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/6l: fix linux/amd64
authorRuss Cox <rsc@golang.org>
Mon, 9 Dec 2013 17:58:35 +0000 (09:58 -0800)
committerRuss Cox <rsc@golang.org>
Mon, 9 Dec 2013 17:58:35 +0000 (09:58 -0800)
TBR=iant
CC=golang-dev
https://golang.org/cl/39530043

src/cmd/ld/pobj.c
src/liblink/obj6.c

index 8883d37866e36c9a20425d2629b0e002a5b912c4..2274c2fb55adb564fcaa6df12ee525398cefca9d 100644 (file)
@@ -186,8 +186,8 @@ main(int argc, char *argv[])
                mark(linklookup(ctxt, "runtime.read_tls_fallback", 0));
        }
 
-       deadcode();
        patch();
+       deadcode();
        follow();
        dostkoff();
        paramspace = "SP";      /* (FP) now (SP) on output */
index bd24d1d9e89f1a7337b692c36b3b136859db09a6..8c165335e3c972eaff822914379ec1eb3397b810 100644 (file)
@@ -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++)