Add SIGILL signal handler
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>
diff --git a/fio.c b/fio.c
index cedbfb0..ee752e1 100644
--- a/fio.c
+++ b/fio.c
@@ -125,6 +125,17 @@
}
}
+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 @@
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);
}
/*