signal.c: move sigaltstack parser to a separate file

* sigaltstack.c: New file.
* Makefile.am (strace_SOURCES): Add it.
* signal.c (print_stack_t, sys_sigaltstack): Move to sigaltstack.c.
* xlat/sigaltstack_flags.in: Add default values.
diff --git a/Makefile.am b/Makefile.am
index 9c4237d..c4c0138 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -92,6 +92,7 @@
 	sched.c		\
 	scsi.c		\
 	seccomp.c	\
+	sigaltstack.c	\
 	signal.c	\
 	sigreturn.c	\
 	sock.c		\
diff --git a/sigaltstack.c b/sigaltstack.c
new file mode 100644
index 0000000..feba59b
--- /dev/null
+++ b/sigaltstack.c
@@ -0,0 +1,53 @@
+#include "defs.h"
+#include "xlat/sigaltstack_flags.h"
+
+static void
+print_stack_t(struct tcb *tcp, unsigned long addr)
+{
+	stack_t ss;
+	int r;
+
+	if (!addr) {
+		tprints("NULL");
+		return;
+	}
+
+#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
+	if (current_wordsize != sizeof(ss.ss_sp) && current_wordsize == 4) {
+		struct {
+			uint32_t ss_sp;
+			int32_t ss_flags;
+			uint32_t ss_size;
+		} ss32;
+		r = umove(tcp, addr, &ss32);
+		if (r >= 0) {
+			memset(&ss, 0, sizeof(ss));
+			ss.ss_sp = (void*)(unsigned long) ss32.ss_sp;
+			ss.ss_flags = ss32.ss_flags;
+			ss.ss_size = (unsigned long) ss32.ss_size;
+		}
+	} else
+#endif
+	{
+		r = umove(tcp, addr, &ss);
+	}
+	if (r < 0) {
+		tprintf("%#lx", addr);
+	} else {
+		tprintf("{ss_sp=%#lx, ss_flags=", (unsigned long) ss.ss_sp);
+		printflags(sigaltstack_flags, ss.ss_flags, "SS_???");
+		tprintf(", ss_size=%lu}", (unsigned long) ss.ss_size);
+	}
+}
+
+int
+sys_sigaltstack(struct tcb *tcp)
+{
+	if (entering(tcp)) {
+		print_stack_t(tcp, tcp->u_arg[0]);
+	} else {
+		tprints(", ");
+		print_stack_t(tcp, tcp->u_arg[1]);
+	}
+	return 0;
+}
diff --git a/signal.c b/signal.c
index 5ffd0d0..99fc44e 100644
--- a/signal.c
+++ b/signal.c
@@ -681,65 +681,6 @@
 	return 0;
 }
 
-#if !defined SS_ONSTACK
-#define SS_ONSTACK      1
-#define SS_DISABLE      2
-#endif
-
-#include "xlat/sigaltstack_flags.h"
-
-static void
-print_stack_t(struct tcb *tcp, unsigned long addr)
-{
-	stack_t ss;
-	int r;
-
-	if (!addr) {
-		tprints("NULL");
-		return;
-	}
-
-#if SUPPORTED_PERSONALITIES > 1 && SIZEOF_LONG > 4
-	if (current_wordsize != sizeof(ss.ss_sp) && current_wordsize == 4) {
-		struct {
-			uint32_t ss_sp;
-			int32_t ss_flags;
-			uint32_t ss_size;
-		} ss32;
-		r = umove(tcp, addr, &ss32);
-		if (r >= 0) {
-			memset(&ss, 0, sizeof(ss));
-			ss.ss_sp = (void*)(unsigned long) ss32.ss_sp;
-			ss.ss_flags = ss32.ss_flags;
-			ss.ss_size = (unsigned long) ss32.ss_size;
-		}
-	} else
-#endif
-	{
-		r = umove(tcp, addr, &ss);
-	}
-	if (r < 0) {
-		tprintf("%#lx", addr);
-	} else {
-		tprintf("{ss_sp=%#lx, ss_flags=", (unsigned long) ss.ss_sp);
-		printflags(sigaltstack_flags, ss.ss_flags, "SS_???");
-		tprintf(", ss_size=%lu}", (unsigned long) ss.ss_size);
-	}
-}
-
-int
-sys_sigaltstack(struct tcb *tcp)
-{
-	if (entering(tcp)) {
-		print_stack_t(tcp, tcp->u_arg[0]);
-	}
-	else {
-		tprints(", ");
-		print_stack_t(tcp, tcp->u_arg[1]);
-	}
-	return 0;
-}
-
 #ifdef HAVE_SIGACTION
 
 /* "Old" sigprocmask, which operates with word-sized signal masks */
diff --git a/xlat/sigaltstack_flags.in b/xlat/sigaltstack_flags.in
index c27a931..376ec18 100644
--- a/xlat/sigaltstack_flags.in
+++ b/xlat/sigaltstack_flags.in
@@ -1,2 +1,2 @@
-SS_ONSTACK
-SS_DISABLE
+SS_ONSTACK 1
+SS_DISABLE 2