]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: mark global var as NOPTR
authorDmitriy Vyukov <dvyukov@google.com>
Tue, 29 Jul 2014 10:45:07 +0000 (14:45 +0400)
committerDmitriy Vyukov <dvyukov@google.com>
Tue, 29 Jul 2014 10:45:07 +0000 (14:45 +0400)
LGTM=dave
R=golang-codereviews, dave
CC=golang-codereviews
https://golang.org/cl/119300043

src/pkg/runtime/sigqueue.goc

index e08bf98aadb49cacf7ec6869dd6887f1a565f637..376e77a2e426a9c93f9155035f5621b11b3eff3c 100644 (file)
@@ -31,10 +31,12 @@ package runtime
 #include "cgocall.h"
 #include "../../cmd/ld/textflag.h"
 
+#pragma textflag NOPTR
 static struct {
        Note;
        uint32 mask[(NSIG+31)/32];
        uint32 wanted[(NSIG+31)/32];
+       uint32 recv[(NSIG+31)/32];
        uint32 state;
        bool inuse;
 } sig;
@@ -83,14 +85,13 @@ runtimeĀ·sigsend(int32 s)
 // Called to receive the next queued signal.
 // Must only be called from a single goroutine at a time.
 func signal_recv() (m uint32) {
-       static uint32 recv[nelem(sig.mask)];
        uint32 i, old, new;
        
        for(;;) {
                // Serve from local copy if there are bits left.
                for(i=0; i<NSIG; i++) {
-                       if(recv[i/32]&(1U<<(i&31))) {
-                               recv[i/32] ^= 1U<<(i&31);
+                       if(sig.recv[i/32]&(1U<<(i&31))) {
+                               sig.recv[i/32] ^= 1U<<(i&31);
                                m = i;
                                goto done;
                        }
@@ -121,7 +122,7 @@ func signal_recv() (m uint32) {
                                if(runtimeĀ·cas(&sig.mask[i], m, 0))
                                        break;
                        }
-                       recv[i] = m;
+                       sig.recv[i] = m;
                }
        }