runtime: fix build on linux

In addition to the compile failure fixed in signal*.c,
preserving the signal mask led to very strange crashes.
Testing shows that looking for SIG_IGN is all that
matters to get along with nohup, so reintroduce
sigset_zero instead of trying to preserve the signal mask.

TBR=iant
CC=golang-dev
https://golang.org/cl/7323067
diff --git a/src/pkg/runtime/runtime.h b/src/pkg/runtime/runtime.h
index 6709e4f..77f60cb 100644
--- a/src/pkg/runtime/runtime.h
+++ b/src/pkg/runtime/runtime.h
@@ -290,7 +290,6 @@
 	GCStats	gcstats;
 	bool	racecall;
 	void*	racepc;
-	void*	sigset;
 	uint32	moreframesize_minalloc;
 
 	uintptr	settype_buf[1024];
diff --git a/src/pkg/runtime/signal_linux_386.c b/src/pkg/runtime/signal_linux_386.c
index cc4c8db..8b9c5e4 100644
--- a/src/pkg/runtime/signal_linux_386.c
+++ b/src/pkg/runtime/signal_linux_386.c
@@ -128,7 +128,7 @@
 	// under nohup and do not set explicit handler.
 	if(i == SIGHUP) {
 		runtime·memclr((byte*)&sa, sizeof sa);
-		runtime·sigaction(i, nil, &sa);
+		runtime·rt_sigaction(i, nil, &sa, sizeof(sa.sa_mask));
 		if(sa.k_sa_handler == SIG_IGN)
 			return;
 	}
diff --git a/src/pkg/runtime/signal_linux_amd64.c b/src/pkg/runtime/signal_linux_amd64.c
index 6ca51f8..30b12fa 100644
--- a/src/pkg/runtime/signal_linux_amd64.c
+++ b/src/pkg/runtime/signal_linux_amd64.c
@@ -138,7 +138,8 @@
 	// under nohup and do not set explicit handler.
 	if(i == SIGHUP) {
 		runtime·memclr((byte*)&sa, sizeof sa);
-		runtime·sigaction(i, nil, &sa);
+		if(runtime·rt_sigaction(i, nil, &sa, sizeof(sa.sa_mask)) != 0)
+			runtime·throw("rt_sigaction read failure");
 		if(sa.sa_handler == SIG_IGN)
 			return;
 	}
diff --git a/src/pkg/runtime/signal_linux_arm.c b/src/pkg/runtime/signal_linux_arm.c
index 53ab07d..e2b1500 100644
--- a/src/pkg/runtime/signal_linux_arm.c
+++ b/src/pkg/runtime/signal_linux_arm.c
@@ -144,7 +144,7 @@
 	// under nohup and do not set explicit handler.
 	if(i == SIGHUP) {
 		runtime·memclr((byte*)&sa, sizeof sa);
-		runtime·sigaction(i, nil, &sa);
+		runtime·rt_sigaction(i, nil, &sa, sizeof(sa.sa_mask));
 		if(sa.sa_handler == SIG_IGN)
 			return;
 	}
diff --git a/src/pkg/runtime/thread_darwin.c b/src/pkg/runtime/thread_darwin.c
index d55ec8d..df1adf6 100644
--- a/src/pkg/runtime/thread_darwin.c
+++ b/src/pkg/runtime/thread_darwin.c
@@ -9,6 +9,7 @@
 
 extern SigTab runtime·sigtab[];
 
+static Sigset sigset_none;
 static Sigset sigset_all = ~(Sigset)0;
 static Sigset sigset_prof = 1<<(SIGPROF-1);
 
@@ -98,8 +99,6 @@
 	}
 
 	runtime·sigprocmask(SIG_SETMASK, &sigset_all, &oset);
-	mp->sigset = runtime·mal(sizeof(Sigset));
-	*(Sigset*)mp->sigset = oset;
 	errno = runtime·bsdthread_create(stk, mp, gp, fn);
 	runtime·sigprocmask(SIG_SETMASK, &oset, nil);
 
@@ -117,8 +116,7 @@
 	m->gsignal = runtime·malg(32*1024);	// OS X wants >=8K, Linux >=2K
 	runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);
 
-	if(m->sigset != nil)
-		runtime·sigprocmask(SIG_SETMASK, m->sigset, nil);
+	runtime·sigprocmask(SIG_SETMASK, &sigset_none, nil);
 	runtime·setprof(m->profilehz > 0);
 }
 
diff --git a/src/pkg/runtime/thread_freebsd.c b/src/pkg/runtime/thread_freebsd.c
index 0521576..861e6b0 100644
--- a/src/pkg/runtime/thread_freebsd.c
+++ b/src/pkg/runtime/thread_freebsd.c
@@ -13,6 +13,7 @@
 #define	CTL_HW	6
 #define	HW_NCPU	3
 
+static Sigset sigset_none;
 static Sigset sigset_all = { ~(uint32)0, ~(uint32)0, ~(uint32)0, ~(uint32)0, };
 
 static int32
@@ -90,8 +91,6 @@
 	}
 
 	runtime·sigprocmask(&sigset_all, &oset);
-	mp->sigset = runtime·mal(sizeof(Sigset));
-	*(Sigset*)mp->sigset = oset;
 	runtime·memclr((byte*)&param, sizeof param);
 
 	param.start_func = runtime·thr_start;
@@ -128,8 +127,7 @@
 	// Initialize signal handling
 	m->gsignal = runtime·malg(32*1024);
 	runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);
-	if(m->sigset != nil)
-		runtime·sigprocmask(m->sigset, nil);
+	runtime·sigprocmask(&sigset_none, nil);
 }
 
 void
diff --git a/src/pkg/runtime/thread_linux.c b/src/pkg/runtime/thread_linux.c
index 604b98e..1a7eb72 100644
--- a/src/pkg/runtime/thread_linux.c
+++ b/src/pkg/runtime/thread_linux.c
@@ -13,6 +13,7 @@
 int32 runtime·close(int32);
 int32 runtime·read(int32, void*, int32);
 
+static Sigset sigset_none;
 static Sigset sigset_all = { ~(uint32)0, ~(uint32)0 };
 
 // Linux futex.
@@ -148,8 +149,6 @@
 	// Disable signals during clone, so that the new thread starts
 	// with signals disabled.  It will enable them in minit.
 	runtime·rtsigprocmask(SIG_SETMASK, &sigset_all, &oset, sizeof oset);
-	mp->sigset = runtime·mal(sizeof(Sigset));
-	*(Sigset*)mp->sigset = oset;
 	ret = runtime·clone(flags, stk, mp, gp, fn);
 	runtime·rtsigprocmask(SIG_SETMASK, &oset, nil, sizeof oset);
 
@@ -178,8 +177,7 @@
 	// Initialize signal handling.
 	m->gsignal = runtime·malg(32*1024);	// OS X wants >=8K, Linux >=2K
 	runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);
-	if(m->sigset != nil)
-		runtime·rtsigprocmask(SIG_SETMASK, m->sigset, nil, sizeof *m->sigset);
+	runtime·rtsigprocmask(SIG_SETMASK, &sigset_none, nil, sizeof(Sigset));
 }
 
 void
diff --git a/src/pkg/runtime/thread_netbsd.c b/src/pkg/runtime/thread_netbsd.c
index c689b55..21fbc58 100644
--- a/src/pkg/runtime/thread_netbsd.c
+++ b/src/pkg/runtime/thread_netbsd.c
@@ -20,6 +20,7 @@
 
 extern SigTab runtime·sigtab[];
 
+static Sigset sigset_none;
 static Sigset sigset_all = { ~(uint32)0, ~(uint32)0, ~(uint32)0, ~(uint32)0, };
 
 extern void runtime·getcontext(UcontextT *context);
@@ -163,9 +164,6 @@
 	uc.uc_link = nil;
 	uc.uc_sigmask = sigset_all;
 
-	mp->sigset = runtime·mal(sizeof(Sigset));
-	runtime·sigprocmask(SIG_SETMASK, nil, mp->sigset);
-
 	runtime·lwp_mcontext_init(&uc.uc_mcontext, stk, mp, gp, fn);
 
 	ret = runtime·lwp_create(&uc, 0, &mp->procid);
@@ -197,8 +195,7 @@
 	// Initialize signal handling
 	m->gsignal = runtime·malg(32*1024);
 	runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);
-	if(m->sigset != nil)
-		runtime·sigprocmask(SIG_SETMASK, m->sigset, nil);
+	runtime·sigprocmask(SIG_SETMASK, &sigset_none, nil);
 }
 
 void
diff --git a/src/pkg/runtime/thread_openbsd.c b/src/pkg/runtime/thread_openbsd.c
index 4d30193..99c4db9 100644
--- a/src/pkg/runtime/thread_openbsd.c
+++ b/src/pkg/runtime/thread_openbsd.c
@@ -20,6 +20,7 @@
 
 extern SigTab runtime·sigtab[];
 
+static Sigset sigset_none;
 static Sigset sigset_all = ~(Sigset)0;
 
 extern int64 runtime·tfork(void *param, uintptr psize, M *mp, G *gp, void (*fn)(void));
@@ -141,8 +142,6 @@
 	param.tf_stack = stk;
 
 	oset = runtime·sigprocmask(SIG_SETMASK, sigset_all);
-	mp->sigset = runtime·mal(sizeof(Sigset));
-	*(Sigset*)mp->sigset = oset;
 	ret = runtime·tfork((byte*)&param, sizeof(param), mp, gp, fn);
 	runtime·sigprocmask(SIG_SETMASK, oset);
 
@@ -173,8 +172,7 @@
 	// Initialize signal handling
 	m->gsignal = runtime·malg(32*1024);
 	runtime·signalstack((byte*)m->gsignal->stackguard - StackGuard, 32*1024);
-	if(m->sigset != nil)
-		runtime·sigprocmask(SIG_SETMASK, m->sigset, nil, sizeof *m->sigset);
+	runtime·sigprocmask(SIG_SETMASK, &sigset_none, nil, sizeof sigset_none);
 }
 
 void