Allow for stg registers to have pointer type in llvm BE.
[ghc-hetmet.git] / rts / posix / Signals.c
index 3b93fcc..4bb1255 100644 (file)
@@ -135,6 +135,12 @@ ioManagerDie (void)
     }
 }
 
+Capability *
+ioManagerStartCap (Capability *cap)
+{
+    return rts_evalIO(cap,&base_GHCziConc_ensureIOManagerIsRunning_closure,NULL);
+}
+
 void
 ioManagerStart (void)
 {
@@ -142,7 +148,7 @@ ioManagerStart (void)
     Capability *cap;
     if (io_manager_pipe < 0) {
        cap = rts_lock();
-       cap = rts_evalIO(cap,&base_GHCziConc_ensureIOManagerIsRunning_closure,NULL);
+       cap = ioManagerStartCap(cap);
        rts_unlock(cap);
     }
 }
@@ -177,7 +183,14 @@ generic_handler(int sig USED_IF_THREADS,
         int r;
 
         buf[0] = sig;
-        memcpy(buf+1, info, sizeof(siginfo_t));
+
+       if (info == NULL) {
+           // info may be NULL on Solaris (see #3790)
+           memset(buf+1, 0, sizeof(siginfo_t));
+       } else {
+           memcpy(buf+1, info, sizeof(siginfo_t));
+       }
+
        r = write(io_manager_pipe, buf, sizeof(siginfo_t)+1);
         if (r == -1 && errno == EAGAIN)
         {