(root)/
strace-6.5/
src/
sigaltstack.c
       1  /*
       2   * Copyright (c) 1991, 1992 Paul Kranenburg <pk@cs.few.eur.nl>
       3   * Copyright (c) 1993 Branko Lankester <branko@hacktic.nl>
       4   * Copyright (c) 1993-1996 Rick Sladkey <jrs@world.std.com>
       5   * Copyright (c) 1996-1999 Wichert Akkerman <wichert@cistron.nl>
       6   * Copyright (c) 2005-2015 Dmitry V. Levin <ldv@strace.io>
       7   * Copyright (c) 2015 Elvira Khabirova <lineprinter0@gmail.com>
       8   * Copyright (c) 2015-2021 The strace developers.
       9   * All rights reserved.
      10   *
      11   * SPDX-License-Identifier: LGPL-2.1-or-later
      12   */
      13  
      14  #include "defs.h"
      15  
      16  #include DEF_MPERS_TYPE(stack_t)
      17  
      18  #include <signal.h>
      19  
      20  #include MPERS_DEFS
      21  
      22  #include "xlat/sigaltstack_flags.h"
      23  
      24  static void
      25  print_stack_t(struct tcb *const tcp, const kernel_ulong_t addr)
      26  {
      27  	stack_t ss;
      28  
      29  	if (umove_or_printaddr(tcp, addr, &ss))
      30  		return;
      31  
      32  	tprint_struct_begin();
      33  	PRINT_FIELD_PTR(ss, ss_sp);
      34  	tprint_struct_next();
      35  	PRINT_FIELD_FLAGS(ss, ss_flags, sigaltstack_flags, "SS_???");
      36  	tprint_struct_next();
      37  	PRINT_FIELD_U(ss, ss_size);
      38  	tprint_struct_end();
      39  }
      40  
      41  SYS_FUNC(sigaltstack)
      42  {
      43  	if (entering(tcp)) {
      44  		/* ss */
      45  		print_stack_t(tcp, tcp->u_arg[0]);
      46  		tprint_arg_next();
      47  	} else {
      48  		/* old_ss */
      49  		print_stack_t(tcp, tcp->u_arg[1]);
      50  	}
      51  	return 0;
      52  }