138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin/*
238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@altlinux.org>
738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
839bac055674d23770b9a724221b728e443196ea7Elliott Hughes * Copyright (c) 2015-2017 The strace developers.
938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * All rights reserved.
1038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *
1138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * Redistribution and use in source and binary forms, with or without
1238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * modification, are permitted provided that the following conditions
1338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * are met:
1438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 1. Redistributions of source code must retain the above copyright
1538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    notice, this list of conditions and the following disclaimer.
1638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 2. Redistributions in binary form must reproduce the above copyright
1738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    notice, this list of conditions and the following disclaimer in the
1838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    documentation and/or other materials provided with the distribution.
1938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * 3. The name of the author may not be used to endorse or promote products
2038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *    derived from this software without specific prior written permission.
2138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin *
2238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
2338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
2438a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
2538a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2638a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2738a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2838a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2938a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
3038a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
3138a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3238a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin */
3338a34c9349267c99ce1ddbd0b6e985147415d355Dmitry V. Levin
34174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin#include "defs.h"
350e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin
36cbbc23a2a4fd4da37f7912450ef3f49d25a56717Elvira Khabirova#include DEF_MPERS_TYPE(stack_t)
37cbbc23a2a4fd4da37f7912450ef3f49d25a56717Elvira Khabirova
380e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin#include <signal.h>
390e946ab2c26f3cb6f27cb99ddf0f5581bef16781Dmitry V. Levin
40cbbc23a2a4fd4da37f7912450ef3f49d25a56717Elvira Khabirova#include MPERS_DEFS
41cbbc23a2a4fd4da37f7912450ef3f49d25a56717Elvira Khabirova
42174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin#include "xlat/sigaltstack_flags.h"
43174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin
44174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levinstatic void
45d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughesprint_stack_t(struct tcb *const tcp, const kernel_ulong_t addr)
46174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin{
47174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin	stack_t ss;
48174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin
49401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin	if (umove_or_printaddr(tcp, addr, &ss))
50401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin		return;
51401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin
52401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin	tprints("{ss_sp=");
53d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	printaddr(ptr_to_kulong(ss.ss_sp));
54401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin	tprints(", ss_flags=");
55401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin	printflags(sigaltstack_flags, ss.ss_flags, "SS_???");
56d35df493b4e7684c50d2d2fa032ee3a7ac228009Elliott Hughes	tprintf(", ss_size=%" PRI_klu "}", (kernel_ulong_t) ss.ss_size);
57174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin}
58174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin
59a0bd3749fc6fdf6364c1e269a4c02e8c153eb84bDmitry V. LevinSYS_FUNC(sigaltstack)
60174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin{
61174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin	if (entering(tcp)) {
62174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin		print_stack_t(tcp, tcp->u_arg[0]);
63174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin		tprints(", ");
64401295ea320c2d1dc3998ad1331b1753a629cc28Dmitry V. Levin	} else {
65174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin		print_stack_t(tcp, tcp->u_arg[1]);
66174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin	}
67174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin	return 0;
68174bb2b36ec7b4c922331ff52681d79eac7add2eDmitry V. Levin}
69