]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't trigger write barrier in newosproc for nacl
authorShenghou Ma <minux@golang.org>
Tue, 24 Mar 2015 03:13:11 +0000 (23:13 -0400)
committerMinux Ma <minux@golang.org>
Thu, 26 Mar 2015 19:58:14 +0000 (19:58 +0000)
This should fix the intermittent calling write barrier with mp.p == nil
failures on the nacl/386 builder.

Change-Id: I34aef5ca75ccd2939e6a6ad3f5dacec64903074e
Signed-off-by: Shenghou Ma <minux@golang.org>
Reviewed-on: https://go-review.googlesource.com/7973
Reviewed-by: Austin Clements <austin@google.com>
src/runtime/os1_nacl.go

index d47d2727f76bab8532d8cb375e441528c42ea230..b3759c140815b349f5b7f5afbb5a0050cbf3fffb 100644 (file)
@@ -67,11 +67,11 @@ func usleep(us uint32) {
 
 func mstart_nacl()
 
+//go:nowritebarrier
 func newosproc(mp *m, stk unsafe.Pointer) {
-       tls := (*[3]unsafe.Pointer)(unsafe.Pointer(&mp.tls))
-       tls[0] = unsafe.Pointer(mp.g0)
-       tls[1] = unsafe.Pointer(mp)
-       ret := nacl_thread_create(funcPC(mstart_nacl), stk, unsafe.Pointer(&tls[2]), nil)
+       mp.tls[0] = uintptr(unsafe.Pointer(mp.g0))
+       mp.tls[1] = uintptr(unsafe.Pointer(mp))
+       ret := nacl_thread_create(funcPC(mstart_nacl), stk, unsafe.Pointer(&mp.tls[2]), nil)
        if ret < 0 {
                print("nacl_thread_create: error ", -ret, "\n")
                throw("newosproc")