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