(root)/
strace-6.5/
src/
linux/
s390/
check_scno.c
       1  /*
       2   * Copyright (c) 2020-2021 The strace developers.
       3   * All rights reserved.
       4   *
       5   * SPDX-License-Identifier: LGPL-2.1-or-later
       6   */
       7  
       8  /* Return codes: 1 - ok, 0 - ignore, other - error. */
       9  static int
      10  arch_check_scno(struct tcb *tcp)
      11  {
      12  	if (ptrace_sci.entry.nr)
      13  		return 1;
      14  
      15  	/*
      16  	 * Apparently, arch/s390/include/asm/syscall.h:syscall_get_nr()
      17  	 * returns 0 for out-of-range syscall numbers.
      18  	 * This kernel bug is exposed via PTRACE_GET_SYSCALL_INFO interface.
      19  	 * Workaround it by falling back to get_regs().
      20  	 */
      21  
      22  	if (get_regs(tcp) < 0)
      23  		return -1;
      24  
      25  	arch_get_scno(tcp);
      26  	if (tcp->scno) {
      27  		ptrace_sci.entry.nr = tcp->scno;
      28  		debug_func_msg("fixed scno: 0 -> %#lx", tcp->scno);
      29  	}
      30  
      31  	return 1;
      32  }