Lines Matching +full:1 +full:- +full:stop

1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (c) 2018-2025 Dmitry V. Levin <ldv@strace.io>
74 int exp_nr = exp_entry->nr; in check_psi_entry()
76 /* s390 is the only architecture that has 16-bit syscall numbers */ in check_psi_entry()
80 ASSERT_EQ(PTRACE_SYSCALL_INFO_ENTRY, info->op) { in check_psi_entry()
81 LOG_KILL_TRACEE("%s: entry stop mismatch", text); in check_psi_entry()
83 ASSERT_TRUE(info->arch) { in check_psi_entry()
84 LOG_KILL_TRACEE("%s: entry stop mismatch", text); in check_psi_entry()
86 ASSERT_TRUE(info->instruction_pointer) { in check_psi_entry()
87 LOG_KILL_TRACEE("%s: entry stop mismatch", text); in check_psi_entry()
89 ASSERT_TRUE(info->stack_pointer) { in check_psi_entry()
90 LOG_KILL_TRACEE("%s: entry stop mismatch", text); in check_psi_entry()
92 ASSERT_EQ(exp_nr, info->entry.nr) { in check_psi_entry()
95 for (i = 0; i < ARRAY_SIZE(exp_entry->args); ++i) { in check_psi_entry()
96 ASSERT_EQ(exp_entry->args[i], info->entry.args[i]) { in check_psi_entry()
109 ASSERT_EQ(PTRACE_SYSCALL_INFO_EXIT, info->op) { in check_psi_exit()
110 LOG_KILL_TRACEE("%s: exit stop mismatch", text); in check_psi_exit()
112 ASSERT_TRUE(info->arch) { in check_psi_exit()
113 LOG_KILL_TRACEE("%s: exit stop mismatch", text); in check_psi_exit()
115 ASSERT_TRUE(info->instruction_pointer) { in check_psi_exit()
116 LOG_KILL_TRACEE("%s: exit stop mismatch", text); in check_psi_exit()
118 ASSERT_TRUE(info->stack_pointer) { in check_psi_exit()
119 LOG_KILL_TRACEE("%s: exit stop mismatch", text); in check_psi_exit()
121 ASSERT_EQ(exp_exit->is_error, info->exit.is_error) { in check_psi_exit()
122 LOG_KILL_TRACEE("%s: exit stop mismatch", text); in check_psi_exit()
124 ASSERT_EQ(exp_exit->rval, info->exit.rval) { in check_psi_exit()
125 LOG_KILL_TRACEE("%s: exit stop mismatch", text); in check_psi_exit()
144 ASSERT_EQ(sizeof(dummy), write(splice_in[1], dummy, sizeof(dummy))); in TEST()
150 /* change scno, keep non-error rval */ in TEST()
156 dummy[0], dummy[1], dummy[2], in TEST()
162 dummy[0], dummy[1], dummy[2], in TEST()
171 /* set scno to -1, keep error rval */ in TEST()
178 dummy[1], dummy[2], in TEST()
182 -1, in TEST()
185 dummy[1], dummy[2], in TEST()
190 { 1, -ENOSYS }, { 1, -ENOSYS } in TEST()
194 /* keep scno, change non-error rval */ in TEST()
200 dummy[0], dummy[1], dummy[2], in TEST()
206 dummy[0], dummy[1], dummy[2], in TEST()
211 { 0, tracer_pid }, { 0, tracer_pid + 1 } in TEST()
215 /* change arg1, keep non-error rval */ in TEST()
222 dummy[1], dummy[2], in TEST()
229 dummy[1], dummy[2], in TEST()
238 /* set scno to -1, change error rval to non-error */ in TEST()
244 dummy[0], dummy[1], dummy[2], in TEST()
248 -1, in TEST()
250 dummy[0], dummy[1], dummy[2], in TEST()
255 { 1, -ENOSYS }, { 0, tracer_pid } in TEST()
259 /* change scno, change non-error rval to error */ in TEST()
265 dummy[0], dummy[1], dummy[2], in TEST()
271 dummy[0], dummy[1], dummy[2], in TEST()
276 { 0, tracer_pid }, { 1, -EISDIR } in TEST()
280 /* change scno and all args, change non-error rval */ in TEST()
286 dummy[0], dummy[1], dummy[2], in TEST()
292 splice_in[0], 0, splice_out[1], 0, in TEST()
297 { 0, sizeof(dummy) }, { 0, sizeof(dummy) + 1 } in TEST()
301 /* change arg1, no exit stop */ in TEST()
307 dummy[0], dummy[1], dummy[2], in TEST()
313 0, dummy[1], dummy[2], in TEST()
345 si[i].entry[0].args[1], in TEST()
350 if (si[i].exit[1].is_error) { in TEST()
351 if (rc != -1 || errno != -si[i].exit[1].rval) in TEST()
354 if (rc != si[i].exit[1].rval) in TEST()
364 _exit(i + 1); in TEST()
373 (void *) &info.entry.args[6] - (void *) &info; in TEST()
375 (void *) (&info.exit.is_error + 1) - in TEST()
402 LOG_KILL_TRACEE("ptrace stop overflow"); in TEST()
408 LOG_KILL_TRACEE("unexpected signal stop"); in TEST()
418 LOG_KILL_TRACEE("unexpected syscall stop"); in TEST()
423 LOG_KILL_TRACEE("PTRACE_GET_SYSCALL_INFO #1: %m"); in TEST()
425 if (ptrace_stop & 1) { in TEST()
430 &si[ptrace_stop / 2].entry[1]; in TEST()
434 LOG_KILL_TRACEE("PTRACE_GET_SYSCALL_INFO #1" in TEST()
435 ": entry stop mismatch"); in TEST()
438 "PTRACE_GET_SYSCALL_INFO #1"); in TEST()
441 info.entry.nr = set_entry->nr; in TEST()
442 for (i = 0; i < ARRAY_SIZE(set_entry->args); ++i) in TEST()
443 info.entry.args[i] = set_entry->args[i]; in TEST()
460 ": entry stop mismatch"); in TEST()
467 &si[ptrace_stop / 2 - 1].exit[0]; in TEST()
469 &si[ptrace_stop / 2 - 1].exit[1]; in TEST()
473 LOG_KILL_TRACEE("PTRACE_GET_SYSCALL_INFO #1" in TEST()
474 ": exit stop mismatch"); in TEST()
477 "PTRACE_GET_SYSCALL_INFO #1"); in TEST()
480 info.exit.is_error = set_exit->is_error; in TEST()
481 info.exit.rval = set_exit->rval; in TEST()
498 ": exit stop mismatch"); in TEST()
506 LOG_KILL_TRACEE("unexpected stop signal %u", in TEST()