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 }