Added handler for SIGABRT
diff --git a/src/compositor.c b/src/compositor.c
index b846d8e..c027578 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -3307,17 +3307,17 @@
 #endif
 
 static void
-on_segv_signal(int s, siginfo_t *siginfo, void *context)
+on_caught_signal(int s, siginfo_t *siginfo, void *context)
 {
-	/* This SIGSEGV handler will do a best-effort backtrace, and
+	/* This signal handler will do a best-effort backtrace, and
 	 * then call the backend restore function, which will switch
 	 * back to the vt we launched from or ungrab X etc and then
 	 * raise SIGTRAP.  If we run weston under gdb from X or a
-	 * different vt, and tell gdb "handle SIGSEGV nostop", this
+	 * different vt, and tell gdb "handle *s* nostop", this
 	 * will allow weston to switch back to gdb on crash and then
-	 * gdb will catch the crash with SIGTRAP. */
+	 * gdb will catch the crash with SIGTRAP.*/
 
-	weston_log("caught segv\n");
+	weston_log("caught signal: %d\n", s);
 
 	print_backtrace();
 
@@ -3326,7 +3326,6 @@
 	raise(SIGTRAP);
 }
 
-
 static void *
 load_module(const char *name, const char *entrypoint)
 {
@@ -3479,6 +3478,18 @@
 	exit(error_code);
 }
 
+static void
+catch_signals(void)
+{
+	struct sigaction action;
+
+	action.sa_flags = SA_SIGINFO | SA_RESETHAND;
+	action.sa_sigaction = on_caught_signal;
+	sigemptyset(&action.sa_mask);
+	sigaction(SIGSEGV, &action, NULL);
+	sigaction(SIGABRT, &action, NULL);
+}
+
 int main(int argc, char *argv[])
 {
 	int ret = EXIT_SUCCESS;
@@ -3486,7 +3497,6 @@
 	struct weston_compositor *ec;
 	struct wl_event_source *signals[4];
 	struct wl_event_loop *loop;
-	struct sigaction segv_action;
 	struct weston_compositor
 		*(*backend_init)(struct wl_display *display,
 				 int *argc, char *argv[], const char *config_file);
@@ -3577,10 +3587,7 @@
 		exit(EXIT_FAILURE);
 	}
 
-	segv_action.sa_flags = SA_SIGINFO | SA_RESETHAND;
-	segv_action.sa_sigaction = on_segv_signal;
-	sigemptyset(&segv_action.sa_mask);
-	sigaction(SIGSEGV, &segv_action, NULL);
+	catch_signals();
 	segv_compositor = ec;
 
 	ec->idle_time = idle_time;