]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: look up more runtime symbols before SSA begins
authorJosh Bleecher Snyder <josharian@gmail.com>
Sat, 15 Apr 2017 15:00:08 +0000 (08:00 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Tue, 18 Apr 2017 02:14:12 +0000 (02:14 +0000)
This avoids concurrent runtime package lookups.

Updates #15756

Change-Id: I9e2cbd042aba44923f0d03e6ca5b4eb60fa9e7ea
Reviewed-on: https://go-review.googlesource.com/40853
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/ssa.go

index b3edb0ed22c0769f2df7bb4573a14ff3e1604721..fde38e27ff5a637524d99ff87a08068e72e9a29a 100644 (file)
@@ -265,5 +265,10 @@ var (
        assertE2I,
        assertE2I2,
        assertI2I,
-       assertI2I2 *obj.LSym
+       assertI2I2,
+       goschedguarded,
+       writeBarrier,
+       writebarrierptr,
+       typedmemmove,
+       typedmemclr *obj.LSym
 )
index b54e0bca454f82e7ceb872336ed8dcb49e0cc293..cfb973405da0cb2d7b71e99c94a6805bf01186ba 100644 (file)
@@ -85,6 +85,11 @@ func initssaconfig() {
        assertE2I2 = Sysfunc("assertE2I2")
        assertI2I = Sysfunc("assertI2I")
        assertI2I2 = Sysfunc("assertI2I2")
+       goschedguarded = Sysfunc("goschedguarded")
+       writeBarrier = Sysfunc("writeBarrier")
+       writebarrierptr = Sysfunc("writebarrierptr")
+       typedmemmove = Sysfunc("typedmemmove")
+       typedmemclr = Sysfunc("typedmemclr")
 }
 
 // buildssa builds an SSA function.
@@ -4942,7 +4947,20 @@ func (e *ssafn) UseWriteBarrier() bool {
 }
 
 func (e *ssafn) Syslook(name string) *obj.LSym {
-       return Linksym(syslook(name).Sym)
+       switch name {
+       case "goschedguarded":
+               return goschedguarded
+       case "writeBarrier":
+               return writeBarrier
+       case "writebarrierptr":
+               return writebarrierptr
+       case "typedmemmove":
+               return typedmemmove
+       case "typedmemclr":
+               return typedmemclr
+       }
+       Fatalf("unknown Syslook func %v", name)
+       return nil
 }
 
 func (n *Node) Typ() ssa.Type {