]> granicus.if.org Git - strace/commitdiff
signal.c: move sigaltstack parser to a separate file
authorDmitry V. Levin <ldv@altlinux.org>
Thu, 26 Mar 2015 13:03:25 +0000 (13:03 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Thu, 26 Mar 2015 15:43:07 +0000 (15:43 +0000)
* 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.

Makefile.am
sigaltstack.c [new file with mode: 0644]
signal.c
xlat/sigaltstack_flags.in

index 9c4237decd728c9e2927f3b53c715245895a7372..c4c0138ba78b0e06792ce3783633443f15c4b401 100644 (file)
@@ -92,6 +92,7 @@ strace_SOURCES =      \
        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 (file)
index 0000000..feba59b
--- /dev/null
@@ -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;
+}
index 5ffd0d06e88b53e6f6a4650b31df34b375ba8c64..99fc44e934657f9d4c71e8d07eb80825536af156 100644 (file)
--- a/signal.c
+++ b/signal.c
@@ -681,65 +681,6 @@ sys_sigsuspend(struct tcb *tcp)
        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 */
index c27a93106c20491a8f7584db6054e27c7cf0e8df..376ec1839d1be8803660b81cc16436de0ed8b29b 100644 (file)
@@ -1,2 +1,2 @@
-SS_ONSTACK
-SS_DISABLE
+SS_ONSTACK 1
+SS_DISABLE 2