blob: cd02794d03cb1be0989f4f829c0bf45730e5edee [file] [log] [blame]
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +00001#include "defs.h"
Dmitry V. Levin0e946ab2015-07-17 23:56:54 +00002
Elvira Khabirovacbbc23a2015-08-04 02:16:29 +03003#include DEF_MPERS_TYPE(stack_t)
4
Dmitry V. Levin0e946ab2015-07-17 23:56:54 +00005#include <signal.h>
6
Elvira Khabirovacbbc23a2015-08-04 02:16:29 +03007#include MPERS_DEFS
8
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +00009#include "xlat/sigaltstack_flags.h"
10
11static void
12print_stack_t(struct tcb *tcp, unsigned long addr)
13{
14 stack_t ss;
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +000015
Dmitry V. Levin401295e2015-07-17 01:05:46 +000016 if (umove_or_printaddr(tcp, addr, &ss))
17 return;
18
19 tprints("{ss_sp=");
20 printaddr((unsigned long) ss.ss_sp);
21 tprints(", ss_flags=");
22 printflags(sigaltstack_flags, ss.ss_flags, "SS_???");
23 tprintf(", ss_size=%lu}", (unsigned long) ss.ss_size);
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +000024}
25
Dmitry V. Levina0bd3742015-04-07 01:36:50 +000026SYS_FUNC(sigaltstack)
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +000027{
28 if (entering(tcp)) {
29 print_stack_t(tcp, tcp->u_arg[0]);
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +000030 tprints(", ");
Dmitry V. Levin401295e2015-07-17 01:05:46 +000031 } else {
Dmitry V. Levin174bb2b2015-03-26 13:03:25 +000032 print_stack_t(tcp, tcp->u_arg[1]);
33 }
34 return 0;
35}