Add SIGILL signal handler
authorJens Axboe <jens.axboe@oracle.com>
Mon, 4 Aug 2008 19:43:55 +0000 (21:43 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Mon, 4 Aug 2008 19:43:55 +0000 (21:43 +0200)
If crc32c-intel is used and the opcode isn't supported by the CPU,
we'll display a nice warning instead of just dying.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
fio.c

diff --git a/fio.c b/fio.c
index cedbfb0d44e61bce100fbe5bf1b902d5b4a91ebe..ee752e1266aaf88350eb10eb3ee4d757945b0066 100644 (file)
--- a/fio.c
+++ b/fio.c
@@ -125,6 +125,17 @@ static void sig_int(int sig)
        }
 }
 
+static void sig_ill(int sig)
+{
+       if (!threads)
+               return;
+
+       log_err("fio: illegal instruction. your cpu does not support "
+               "the sse4.2 instruction for crc32c\n");
+       terminate_threads(TERMINATE_ALL);
+       exit(4);
+}
+
 static void set_sig_handlers(void)
 {
        struct sigaction act;
@@ -138,6 +149,11 @@ static void set_sig_handlers(void)
        act.sa_handler = sig_int;
        act.sa_flags = SA_RESTART;
        sigaction(SIGINT, &act, NULL);
+
+       memset(&act, 0, sizeof(act));
+       act.sa_handler = sig_ill;
+       act.sa_flags = SA_RESTART;
+       sigaction(SIGILL, &act, NULL);
 }
 
 /*