xref: /freebsd/tests/sys/kern/ptrace_test.c (revision 36d7818975359fd2aacb19e4f9442a841dc954bb)
1 /*-
2  * Copyright (c) 2015 John Baldwin <jhb@FreeBSD.org>
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  */
25 
26 #include <sys/cdefs.h>
27 __FBSDID("$FreeBSD$");
28 
29 #include <sys/types.h>
30 #include <sys/cpuset.h>
31 #include <sys/event.h>
32 #include <sys/file.h>
33 #include <sys/time.h>
34 #include <sys/procctl.h>
35 #include <sys/ptrace.h>
36 #include <sys/queue.h>
37 #include <sys/runq.h>
38 #include <sys/syscall.h>
39 #include <sys/sysctl.h>
40 #include <sys/user.h>
41 #include <sys/wait.h>
42 #include <errno.h>
43 #include <machine/cpufunc.h>
44 #include <pthread.h>
45 #include <sched.h>
46 #include <semaphore.h>
47 #include <signal.h>
48 #include <stdio.h>
49 #include <stdlib.h>
50 #include <unistd.h>
51 #include <atf-c.h>
52 
53 /*
54  * Architectures with a user-visible breakpoint().
55  */
56 #if defined(__aarch64__) || defined(__amd64__) || defined(__arm__) ||	\
57     defined(__i386__) || defined(__mips__) || defined(__riscv) ||	\
58     defined(__sparc64__)
59 #define	HAVE_BREAKPOINT
60 #endif
61 
62 /*
63  * Adjust PC to skip over a breakpoint when stopped for a breakpoint trap.
64  */
65 #ifdef HAVE_BREAKPOINT
66 #if defined(__aarch64__)
67 #define	SKIP_BREAK(reg)	((reg)->elr += 4)
68 #elif defined(__amd64__) || defined(__i386__)
69 #define	SKIP_BREAK(reg)
70 #elif defined(__arm__)
71 #define	SKIP_BREAK(reg)	((reg)->r_pc += 4)
72 #elif defined(__mips__)
73 #define	SKIP_BREAK(reg)	((reg)->r_regs[PC] += 4)
74 #elif defined(__riscv)
75 #define	SKIP_BREAK(reg)	((reg)->sepc += 4)
76 #elif defined(__sparc64__)
77 #define	SKIP_BREAK(reg)	do {						\
78 	(reg)->r_tpc = (reg)->r_tnpc + 4;				\
79 	(reg)->r_tnpc += 8;						\
80 } while (0)
81 #endif
82 #endif
83 
84 /*
85  * A variant of ATF_REQUIRE that is suitable for use in child
86  * processes.  This only works if the parent process is tripped up by
87  * the early exit and fails some requirement itself.
88  */
89 #define	CHILD_REQUIRE(exp) do {						\
90 		if (!(exp))						\
91 			child_fail_require(__FILE__, __LINE__,		\
92 			    #exp " not met");				\
93 	} while (0)
94 
95 static __dead2 void
96 child_fail_require(const char *file, int line, const char *str)
97 {
98 	char buf[128];
99 
100 	snprintf(buf, sizeof(buf), "%s:%d: %s\n", file, line, str);
101 	write(2, buf, strlen(buf));
102 	_exit(32);
103 }
104 
105 static void
106 trace_me(void)
107 {
108 
109 	/* Attach the parent process as a tracer of this process. */
110 	CHILD_REQUIRE(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1);
111 
112 	/* Trigger a stop. */
113 	raise(SIGSTOP);
114 }
115 
116 static void
117 attach_child(pid_t pid)
118 {
119 	pid_t wpid;
120 	int status;
121 
122 	ATF_REQUIRE(ptrace(PT_ATTACH, pid, NULL, 0) == 0);
123 
124 	wpid = waitpid(pid, &status, 0);
125 	ATF_REQUIRE(wpid == pid);
126 	ATF_REQUIRE(WIFSTOPPED(status));
127 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
128 }
129 
130 static void
131 wait_for_zombie(pid_t pid)
132 {
133 
134 	/*
135 	 * Wait for a process to exit.  This is kind of gross, but
136 	 * there is not a better way.
137 	 *
138 	 * Prior to r325719, the kern.proc.pid.<pid> sysctl failed
139 	 * with ESRCH.  After that change, a valid struct kinfo_proc
140 	 * is returned for zombies with ki_stat set to SZOMB.
141 	 */
142 	for (;;) {
143 		struct kinfo_proc kp;
144 		size_t len;
145 		int mib[4];
146 
147 		mib[0] = CTL_KERN;
148 		mib[1] = KERN_PROC;
149 		mib[2] = KERN_PROC_PID;
150 		mib[3] = pid;
151 		len = sizeof(kp);
152 		if (sysctl(mib, nitems(mib), &kp, &len, NULL, 0) == -1) {
153 			ATF_REQUIRE(errno == ESRCH);
154 			break;
155 		}
156 		if (kp.ki_stat == SZOMB)
157 			break;
158 		usleep(5000);
159 	}
160 }
161 
162 /*
163  * Verify that a parent debugger process "sees" the exit of a debugged
164  * process exactly once when attached via PT_TRACE_ME.
165  */
166 ATF_TC_WITHOUT_HEAD(ptrace__parent_wait_after_trace_me);
167 ATF_TC_BODY(ptrace__parent_wait_after_trace_me, tc)
168 {
169 	pid_t child, wpid;
170 	int status;
171 
172 	ATF_REQUIRE((child = fork()) != -1);
173 	if (child == 0) {
174 		/* Child process. */
175 		trace_me();
176 
177 		_exit(1);
178 	}
179 
180 	/* Parent process. */
181 
182 	/* The first wait() should report the stop from SIGSTOP. */
183 	wpid = waitpid(child, &status, 0);
184 	ATF_REQUIRE(wpid == child);
185 	ATF_REQUIRE(WIFSTOPPED(status));
186 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
187 
188 	/* Continue the child ignoring the SIGSTOP. */
189 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
190 
191 	/* The second wait() should report the exit status. */
192 	wpid = waitpid(child, &status, 0);
193 	ATF_REQUIRE(wpid == child);
194 	ATF_REQUIRE(WIFEXITED(status));
195 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
196 
197 	/* The child should no longer exist. */
198 	wpid = waitpid(child, &status, 0);
199 	ATF_REQUIRE(wpid == -1);
200 	ATF_REQUIRE(errno == ECHILD);
201 }
202 
203 /*
204  * Verify that a parent debugger process "sees" the exit of a debugged
205  * process exactly once when attached via PT_ATTACH.
206  */
207 ATF_TC_WITHOUT_HEAD(ptrace__parent_wait_after_attach);
208 ATF_TC_BODY(ptrace__parent_wait_after_attach, tc)
209 {
210 	pid_t child, wpid;
211 	int cpipe[2], status;
212 	char c;
213 
214 	ATF_REQUIRE(pipe(cpipe) == 0);
215 	ATF_REQUIRE((child = fork()) != -1);
216 	if (child == 0) {
217 		/* Child process. */
218 		close(cpipe[0]);
219 
220 		/* Wait for the parent to attach. */
221 		CHILD_REQUIRE(read(cpipe[1], &c, sizeof(c)) == 0);
222 
223 		_exit(1);
224 	}
225 	close(cpipe[1]);
226 
227 	/* Parent process. */
228 
229 	/* Attach to the child process. */
230 	attach_child(child);
231 
232 	/* Continue the child ignoring the SIGSTOP. */
233 	ATF_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
234 
235 	/* Signal the child to exit. */
236 	close(cpipe[0]);
237 
238 	/* The second wait() should report the exit status. */
239 	wpid = waitpid(child, &status, 0);
240 	ATF_REQUIRE(wpid == child);
241 	ATF_REQUIRE(WIFEXITED(status));
242 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
243 
244 	/* The child should no longer exist. */
245 	wpid = waitpid(child, &status, 0);
246 	ATF_REQUIRE(wpid == -1);
247 	ATF_REQUIRE(errno == ECHILD);
248 }
249 
250 /*
251  * Verify that a parent process "sees" the exit of a debugged process only
252  * after the debugger has seen it.
253  */
254 ATF_TC_WITHOUT_HEAD(ptrace__parent_sees_exit_after_child_debugger);
255 ATF_TC_BODY(ptrace__parent_sees_exit_after_child_debugger, tc)
256 {
257 	pid_t child, debugger, wpid;
258 	int cpipe[2], dpipe[2], status;
259 	char c;
260 
261 	atf_tc_skip("https://bugs.freebsd.org/239399");
262 
263 	ATF_REQUIRE(pipe(cpipe) == 0);
264 	ATF_REQUIRE((child = fork()) != -1);
265 
266 	if (child == 0) {
267 		/* Child process. */
268 		close(cpipe[0]);
269 
270 		/* Wait for parent to be ready. */
271 		CHILD_REQUIRE(read(cpipe[1], &c, sizeof(c)) == sizeof(c));
272 
273 		_exit(1);
274 	}
275 	close(cpipe[1]);
276 
277 	ATF_REQUIRE(pipe(dpipe) == 0);
278 	ATF_REQUIRE((debugger = fork()) != -1);
279 
280 	if (debugger == 0) {
281 		/* Debugger process. */
282 		close(dpipe[0]);
283 
284 		CHILD_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) != -1);
285 
286 		wpid = waitpid(child, &status, 0);
287 		CHILD_REQUIRE(wpid == child);
288 		CHILD_REQUIRE(WIFSTOPPED(status));
289 		CHILD_REQUIRE(WSTOPSIG(status) == SIGSTOP);
290 
291 		CHILD_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
292 
293 		/* Signal parent that debugger is attached. */
294 		CHILD_REQUIRE(write(dpipe[1], &c, sizeof(c)) == sizeof(c));
295 
296 		/* Wait for parent's failed wait. */
297 		CHILD_REQUIRE(read(dpipe[1], &c, sizeof(c)) == 0);
298 
299 		wpid = waitpid(child, &status, 0);
300 		CHILD_REQUIRE(wpid == child);
301 		CHILD_REQUIRE(WIFEXITED(status));
302 		CHILD_REQUIRE(WEXITSTATUS(status) == 1);
303 
304 		_exit(0);
305 	}
306 	close(dpipe[1]);
307 
308 	/* Parent process. */
309 
310 	/* Wait for the debugger to attach to the child. */
311 	ATF_REQUIRE(read(dpipe[0], &c, sizeof(c)) == sizeof(c));
312 
313 	/* Release the child. */
314 	ATF_REQUIRE(write(cpipe[0], &c, sizeof(c)) == sizeof(c));
315 	ATF_REQUIRE(read(cpipe[0], &c, sizeof(c)) == 0);
316 	close(cpipe[0]);
317 
318 	wait_for_zombie(child);
319 
320 	/*
321 	 * This wait should return a pid of 0 to indicate no status to
322 	 * report.  The parent should see the child as non-exited
323 	 * until the debugger sees the exit.
324 	 */
325 	wpid = waitpid(child, &status, WNOHANG);
326 	ATF_REQUIRE(wpid == 0);
327 
328 	/* Signal the debugger to wait for the child. */
329 	close(dpipe[0]);
330 
331 	/* Wait for the debugger. */
332 	wpid = waitpid(debugger, &status, 0);
333 	ATF_REQUIRE(wpid == debugger);
334 	ATF_REQUIRE(WIFEXITED(status));
335 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
336 
337 	/* The child process should now be ready. */
338 	wpid = waitpid(child, &status, WNOHANG);
339 	ATF_REQUIRE(wpid == child);
340 	ATF_REQUIRE(WIFEXITED(status));
341 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
342 }
343 
344 /*
345  * Verify that a parent process "sees" the exit of a debugged process
346  * only after a non-direct-child debugger has seen it.  In particular,
347  * various wait() calls in the parent must avoid failing with ESRCH by
348  * checking the parent's orphan list for the debugee.
349  */
350 ATF_TC_WITHOUT_HEAD(ptrace__parent_sees_exit_after_unrelated_debugger);
351 ATF_TC_BODY(ptrace__parent_sees_exit_after_unrelated_debugger, tc)
352 {
353 	pid_t child, debugger, fpid, wpid;
354 	int cpipe[2], dpipe[2], status;
355 	char c;
356 
357 	ATF_REQUIRE(pipe(cpipe) == 0);
358 	ATF_REQUIRE((child = fork()) != -1);
359 
360 	if (child == 0) {
361 		/* Child process. */
362 		close(cpipe[0]);
363 
364 		/* Wait for parent to be ready. */
365 		CHILD_REQUIRE(read(cpipe[1], &c, sizeof(c)) == sizeof(c));
366 
367 		_exit(1);
368 	}
369 	close(cpipe[1]);
370 
371 	ATF_REQUIRE(pipe(dpipe) == 0);
372 	ATF_REQUIRE((debugger = fork()) != -1);
373 
374 	if (debugger == 0) {
375 		/* Debugger parent. */
376 
377 		/*
378 		 * Fork again and drop the debugger parent so that the
379 		 * debugger is not a child of the main parent.
380 		 */
381 		CHILD_REQUIRE((fpid = fork()) != -1);
382 		if (fpid != 0)
383 			_exit(2);
384 
385 		/* Debugger process. */
386 		close(dpipe[0]);
387 
388 		CHILD_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) != -1);
389 
390 		wpid = waitpid(child, &status, 0);
391 		CHILD_REQUIRE(wpid == child);
392 		CHILD_REQUIRE(WIFSTOPPED(status));
393 		CHILD_REQUIRE(WSTOPSIG(status) == SIGSTOP);
394 
395 		CHILD_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
396 
397 		/* Signal parent that debugger is attached. */
398 		CHILD_REQUIRE(write(dpipe[1], &c, sizeof(c)) == sizeof(c));
399 
400 		/* Wait for parent's failed wait. */
401 		CHILD_REQUIRE(read(dpipe[1], &c, sizeof(c)) == sizeof(c));
402 
403 		wpid = waitpid(child, &status, 0);
404 		CHILD_REQUIRE(wpid == child);
405 		CHILD_REQUIRE(WIFEXITED(status));
406 		CHILD_REQUIRE(WEXITSTATUS(status) == 1);
407 
408 		_exit(0);
409 	}
410 	close(dpipe[1]);
411 
412 	/* Parent process. */
413 
414 	/* Wait for the debugger parent process to exit. */
415 	wpid = waitpid(debugger, &status, 0);
416 	ATF_REQUIRE(wpid == debugger);
417 	ATF_REQUIRE(WIFEXITED(status));
418 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
419 
420 	/* A WNOHANG wait here should see the non-exited child. */
421 	wpid = waitpid(child, &status, WNOHANG);
422 	ATF_REQUIRE(wpid == 0);
423 
424 	/* Wait for the debugger to attach to the child. */
425 	ATF_REQUIRE(read(dpipe[0], &c, sizeof(c)) == sizeof(c));
426 
427 	/* Release the child. */
428 	ATF_REQUIRE(write(cpipe[0], &c, sizeof(c)) == sizeof(c));
429 	ATF_REQUIRE(read(cpipe[0], &c, sizeof(c)) == 0);
430 	close(cpipe[0]);
431 
432 	wait_for_zombie(child);
433 
434 	/*
435 	 * This wait should return a pid of 0 to indicate no status to
436 	 * report.  The parent should see the child as non-exited
437 	 * until the debugger sees the exit.
438 	 */
439 	wpid = waitpid(child, &status, WNOHANG);
440 	ATF_REQUIRE(wpid == 0);
441 
442 	/* Signal the debugger to wait for the child. */
443 	ATF_REQUIRE(write(dpipe[0], &c, sizeof(c)) == sizeof(c));
444 
445 	/* Wait for the debugger. */
446 	ATF_REQUIRE(read(dpipe[0], &c, sizeof(c)) == 0);
447 	close(dpipe[0]);
448 
449 	/* The child process should now be ready. */
450 	wpid = waitpid(child, &status, WNOHANG);
451 	ATF_REQUIRE(wpid == child);
452 	ATF_REQUIRE(WIFEXITED(status));
453 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
454 }
455 
456 /*
457  * Make sure that we can collect the exit status of an orphaned process.
458  */
459 ATF_TC_WITHOUT_HEAD(ptrace__parent_exits_before_child);
460 ATF_TC_BODY(ptrace__parent_exits_before_child, tc)
461 {
462 	ssize_t n;
463 	int cpipe1[2], cpipe2[2], gcpipe[2], status;
464 	pid_t child, gchild;
465 
466 	ATF_REQUIRE(pipe(cpipe1) == 0);
467 	ATF_REQUIRE(pipe(cpipe2) == 0);
468 	ATF_REQUIRE(pipe(gcpipe) == 0);
469 
470 	ATF_REQUIRE(procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL) == 0);
471 
472 	ATF_REQUIRE((child = fork()) != -1);
473 	if (child == 0) {
474 		CHILD_REQUIRE((gchild = fork()) != -1);
475 		if (gchild == 0) {
476 			status = 1;
477 			do {
478 				n = read(gcpipe[0], &status, sizeof(status));
479 			} while (n == -1 && errno == EINTR);
480 			_exit(status);
481 		}
482 
483 		CHILD_REQUIRE(write(cpipe1[1], &gchild, sizeof(gchild)) ==
484 		    sizeof(gchild));
485 		CHILD_REQUIRE(read(cpipe2[0], &status, sizeof(status)) ==
486 		    sizeof(status));
487 		_exit(status);
488 	}
489 
490 	ATF_REQUIRE(read(cpipe1[0], &gchild, sizeof(gchild)) == sizeof(gchild));
491 
492 	ATF_REQUIRE(ptrace(PT_ATTACH, gchild, NULL, 0) == 0);
493 
494 	status = 0;
495 	ATF_REQUIRE(write(cpipe2[1], &status, sizeof(status)) ==
496 	    sizeof(status));
497 	ATF_REQUIRE(waitpid(child, &status, 0) == child);
498 	ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 0);
499 
500 	status = 0;
501 	ATF_REQUIRE(write(gcpipe[1], &status, sizeof(status)) ==
502 	    sizeof(status));
503 	ATF_REQUIRE(waitpid(gchild, &status, 0) == gchild);
504 	ATF_REQUIRE(WIFSTOPPED(status));
505 	ATF_REQUIRE(ptrace(PT_DETACH, gchild, (caddr_t)1, 0) == 0);
506 	ATF_REQUIRE(waitpid(gchild, &status, 0) == gchild);
507 	ATF_REQUIRE(WIFEXITED(status) && WEXITSTATUS(status) == 0);
508 
509 	ATF_REQUIRE(close(cpipe1[0]) == 0);
510 	ATF_REQUIRE(close(cpipe1[1]) == 0);
511 	ATF_REQUIRE(close(cpipe2[0]) == 0);
512 	ATF_REQUIRE(close(cpipe2[1]) == 0);
513 	ATF_REQUIRE(close(gcpipe[0]) == 0);
514 	ATF_REQUIRE(close(gcpipe[1]) == 0);
515 }
516 
517 /*
518  * The parent process should always act the same regardless of how the
519  * debugger is attached to it.
520  */
521 static __dead2 void
522 follow_fork_parent(bool use_vfork)
523 {
524 	pid_t fpid, wpid;
525 	int status;
526 
527 	if (use_vfork)
528 		CHILD_REQUIRE((fpid = vfork()) != -1);
529 	else
530 		CHILD_REQUIRE((fpid = fork()) != -1);
531 
532 	if (fpid == 0)
533 		/* Child */
534 		_exit(2);
535 
536 	wpid = waitpid(fpid, &status, 0);
537 	CHILD_REQUIRE(wpid == fpid);
538 	CHILD_REQUIRE(WIFEXITED(status));
539 	CHILD_REQUIRE(WEXITSTATUS(status) == 2);
540 
541 	_exit(1);
542 }
543 
544 /*
545  * Helper routine for follow fork tests.  This waits for two stops
546  * that report both "sides" of a fork.  It returns the pid of the new
547  * child process.
548  */
549 static pid_t
550 handle_fork_events(pid_t parent, struct ptrace_lwpinfo *ppl)
551 {
552 	struct ptrace_lwpinfo pl;
553 	bool fork_reported[2];
554 	pid_t child, wpid;
555 	int i, status;
556 
557 	fork_reported[0] = false;
558 	fork_reported[1] = false;
559 	child = -1;
560 
561 	/*
562 	 * Each process should report a fork event.  The parent should
563 	 * report a PL_FLAG_FORKED event, and the child should report
564 	 * a PL_FLAG_CHILD event.
565 	 */
566 	for (i = 0; i < 2; i++) {
567 		wpid = wait(&status);
568 		ATF_REQUIRE(wpid > 0);
569 		ATF_REQUIRE(WIFSTOPPED(status));
570 
571 		ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
572 		    sizeof(pl)) != -1);
573 		ATF_REQUIRE((pl.pl_flags & (PL_FLAG_FORKED | PL_FLAG_CHILD)) !=
574 		    0);
575 		ATF_REQUIRE((pl.pl_flags & (PL_FLAG_FORKED | PL_FLAG_CHILD)) !=
576 		    (PL_FLAG_FORKED | PL_FLAG_CHILD));
577 		if (pl.pl_flags & PL_FLAG_CHILD) {
578 			ATF_REQUIRE(wpid != parent);
579 			ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
580 			ATF_REQUIRE(!fork_reported[1]);
581 			if (child == -1)
582 				child = wpid;
583 			else
584 				ATF_REQUIRE(child == wpid);
585 			if (ppl != NULL)
586 				ppl[1] = pl;
587 			fork_reported[1] = true;
588 		} else {
589 			ATF_REQUIRE(wpid == parent);
590 			ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
591 			ATF_REQUIRE(!fork_reported[0]);
592 			if (child == -1)
593 				child = pl.pl_child_pid;
594 			else
595 				ATF_REQUIRE(child == pl.pl_child_pid);
596 			if (ppl != NULL)
597 				ppl[0] = pl;
598 			fork_reported[0] = true;
599 		}
600 	}
601 
602 	return (child);
603 }
604 
605 /*
606  * Verify that a new child process is stopped after a followed fork and
607  * that the traced parent sees the exit of the child after the debugger
608  * when both processes remain attached to the debugger.
609  */
610 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_both_attached);
611 ATF_TC_BODY(ptrace__follow_fork_both_attached, tc)
612 {
613 	pid_t children[2], fpid, wpid;
614 	int status;
615 
616 	ATF_REQUIRE((fpid = fork()) != -1);
617 	if (fpid == 0) {
618 		trace_me();
619 		follow_fork_parent(false);
620 	}
621 
622 	/* Parent process. */
623 	children[0] = fpid;
624 
625 	/* The first wait() should report the stop from SIGSTOP. */
626 	wpid = waitpid(children[0], &status, 0);
627 	ATF_REQUIRE(wpid == children[0]);
628 	ATF_REQUIRE(WIFSTOPPED(status));
629 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
630 
631 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
632 
633 	/* Continue the child ignoring the SIGSTOP. */
634 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
635 
636 	children[1] = handle_fork_events(children[0], NULL);
637 	ATF_REQUIRE(children[1] > 0);
638 
639 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
640 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
641 
642 	/*
643 	 * The child can't exit until the grandchild reports status, so the
644 	 * grandchild should report its exit first to the debugger.
645 	 */
646 	wpid = wait(&status);
647 	ATF_REQUIRE(wpid == children[1]);
648 	ATF_REQUIRE(WIFEXITED(status));
649 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
650 
651 	wpid = wait(&status);
652 	ATF_REQUIRE(wpid == children[0]);
653 	ATF_REQUIRE(WIFEXITED(status));
654 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
655 
656 	wpid = wait(&status);
657 	ATF_REQUIRE(wpid == -1);
658 	ATF_REQUIRE(errno == ECHILD);
659 }
660 
661 /*
662  * Verify that a new child process is stopped after a followed fork
663  * and that the traced parent sees the exit of the child when the new
664  * child process is detached after it reports its fork.
665  */
666 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_child_detached);
667 ATF_TC_BODY(ptrace__follow_fork_child_detached, tc)
668 {
669 	pid_t children[2], fpid, wpid;
670 	int status;
671 
672 	ATF_REQUIRE((fpid = fork()) != -1);
673 	if (fpid == 0) {
674 		trace_me();
675 		follow_fork_parent(false);
676 	}
677 
678 	/* Parent process. */
679 	children[0] = fpid;
680 
681 	/* The first wait() should report the stop from SIGSTOP. */
682 	wpid = waitpid(children[0], &status, 0);
683 	ATF_REQUIRE(wpid == children[0]);
684 	ATF_REQUIRE(WIFSTOPPED(status));
685 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
686 
687 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
688 
689 	/* Continue the child ignoring the SIGSTOP. */
690 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
691 
692 	children[1] = handle_fork_events(children[0], NULL);
693 	ATF_REQUIRE(children[1] > 0);
694 
695 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
696 	ATF_REQUIRE(ptrace(PT_DETACH, children[1], (caddr_t)1, 0) != -1);
697 
698 	/*
699 	 * Should not see any status from the grandchild now, only the
700 	 * child.
701 	 */
702 	wpid = wait(&status);
703 	ATF_REQUIRE(wpid == children[0]);
704 	ATF_REQUIRE(WIFEXITED(status));
705 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
706 
707 	wpid = wait(&status);
708 	ATF_REQUIRE(wpid == -1);
709 	ATF_REQUIRE(errno == ECHILD);
710 }
711 
712 /*
713  * Verify that a new child process is stopped after a followed fork
714  * and that the traced parent sees the exit of the child when the
715  * traced parent is detached after the fork.
716  */
717 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_parent_detached);
718 ATF_TC_BODY(ptrace__follow_fork_parent_detached, tc)
719 {
720 	pid_t children[2], fpid, wpid;
721 	int status;
722 
723 	ATF_REQUIRE((fpid = fork()) != -1);
724 	if (fpid == 0) {
725 		trace_me();
726 		follow_fork_parent(false);
727 	}
728 
729 	/* Parent process. */
730 	children[0] = fpid;
731 
732 	/* The first wait() should report the stop from SIGSTOP. */
733 	wpid = waitpid(children[0], &status, 0);
734 	ATF_REQUIRE(wpid == children[0]);
735 	ATF_REQUIRE(WIFSTOPPED(status));
736 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
737 
738 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
739 
740 	/* Continue the child ignoring the SIGSTOP. */
741 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
742 
743 	children[1] = handle_fork_events(children[0], NULL);
744 	ATF_REQUIRE(children[1] > 0);
745 
746 	ATF_REQUIRE(ptrace(PT_DETACH, children[0], (caddr_t)1, 0) != -1);
747 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
748 
749 	/*
750 	 * The child can't exit until the grandchild reports status, so the
751 	 * grandchild should report its exit first to the debugger.
752 	 *
753 	 * Even though the child process is detached, it is still a
754 	 * child of the debugger, so it will still report it's exit
755 	 * after the grandchild.
756 	 */
757 	wpid = wait(&status);
758 	ATF_REQUIRE(wpid == children[1]);
759 	ATF_REQUIRE(WIFEXITED(status));
760 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
761 
762 	wpid = wait(&status);
763 	ATF_REQUIRE(wpid == children[0]);
764 	ATF_REQUIRE(WIFEXITED(status));
765 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
766 
767 	wpid = wait(&status);
768 	ATF_REQUIRE(wpid == -1);
769 	ATF_REQUIRE(errno == ECHILD);
770 }
771 
772 static void
773 attach_fork_parent(int cpipe[2])
774 {
775 	pid_t fpid;
776 
777 	close(cpipe[0]);
778 
779 	/* Double-fork to disassociate from the debugger. */
780 	CHILD_REQUIRE((fpid = fork()) != -1);
781 	if (fpid != 0)
782 		_exit(3);
783 
784 	/* Send the pid of the disassociated child to the debugger. */
785 	fpid = getpid();
786 	CHILD_REQUIRE(write(cpipe[1], &fpid, sizeof(fpid)) == sizeof(fpid));
787 
788 	/* Wait for the debugger to attach. */
789 	CHILD_REQUIRE(read(cpipe[1], &fpid, sizeof(fpid)) == 0);
790 }
791 
792 /*
793  * Verify that a new child process is stopped after a followed fork and
794  * that the traced parent sees the exit of the child after the debugger
795  * when both processes remain attached to the debugger.  In this test
796  * the parent that forks is not a direct child of the debugger.
797  */
798 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_both_attached_unrelated_debugger);
799 ATF_TC_BODY(ptrace__follow_fork_both_attached_unrelated_debugger, tc)
800 {
801 	pid_t children[2], fpid, wpid;
802 	int cpipe[2], status;
803 
804 	atf_tc_skip("https://bugs.freebsd.org/239397");
805 
806 	ATF_REQUIRE(pipe(cpipe) == 0);
807 	ATF_REQUIRE((fpid = fork()) != -1);
808 	if (fpid == 0) {
809 		attach_fork_parent(cpipe);
810 		follow_fork_parent(false);
811 	}
812 
813 	/* Parent process. */
814 	close(cpipe[1]);
815 
816 	/* Wait for the direct child to exit. */
817 	wpid = waitpid(fpid, &status, 0);
818 	ATF_REQUIRE(wpid == fpid);
819 	ATF_REQUIRE(WIFEXITED(status));
820 	ATF_REQUIRE(WEXITSTATUS(status) == 3);
821 
822 	/* Read the pid of the fork parent. */
823 	ATF_REQUIRE(read(cpipe[0], &children[0], sizeof(children[0])) ==
824 	    sizeof(children[0]));
825 
826 	/* Attach to the fork parent. */
827 	attach_child(children[0]);
828 
829 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
830 
831 	/* Continue the fork parent ignoring the SIGSTOP. */
832 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
833 
834 	/* Signal the fork parent to continue. */
835 	close(cpipe[0]);
836 
837 	children[1] = handle_fork_events(children[0], NULL);
838 	ATF_REQUIRE(children[1] > 0);
839 
840 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
841 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
842 
843 	/*
844 	 * The fork parent can't exit until the child reports status,
845 	 * so the child should report its exit first to the debugger.
846 	 */
847 	wpid = wait(&status);
848 	ATF_REQUIRE(wpid == children[1]);
849 	ATF_REQUIRE(WIFEXITED(status));
850 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
851 
852 	wpid = wait(&status);
853 	ATF_REQUIRE(wpid == children[0]);
854 	ATF_REQUIRE(WIFEXITED(status));
855 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
856 
857 	wpid = wait(&status);
858 	ATF_REQUIRE(wpid == -1);
859 	ATF_REQUIRE(errno == ECHILD);
860 }
861 
862 /*
863  * Verify that a new child process is stopped after a followed fork
864  * and that the traced parent sees the exit of the child when the new
865  * child process is detached after it reports its fork.  In this test
866  * the parent that forks is not a direct child of the debugger.
867  */
868 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_child_detached_unrelated_debugger);
869 ATF_TC_BODY(ptrace__follow_fork_child_detached_unrelated_debugger, tc)
870 {
871 	pid_t children[2], fpid, wpid;
872 	int cpipe[2], status;
873 
874 	atf_tc_skip("https://bugs.freebsd.org/239292");
875 
876 	ATF_REQUIRE(pipe(cpipe) == 0);
877 	ATF_REQUIRE((fpid = fork()) != -1);
878 	if (fpid == 0) {
879 		attach_fork_parent(cpipe);
880 		follow_fork_parent(false);
881 	}
882 
883 	/* Parent process. */
884 	close(cpipe[1]);
885 
886 	/* Wait for the direct child to exit. */
887 	wpid = waitpid(fpid, &status, 0);
888 	ATF_REQUIRE(wpid == fpid);
889 	ATF_REQUIRE(WIFEXITED(status));
890 	ATF_REQUIRE(WEXITSTATUS(status) == 3);
891 
892 	/* Read the pid of the fork parent. */
893 	ATF_REQUIRE(read(cpipe[0], &children[0], sizeof(children[0])) ==
894 	    sizeof(children[0]));
895 
896 	/* Attach to the fork parent. */
897 	attach_child(children[0]);
898 
899 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
900 
901 	/* Continue the fork parent ignoring the SIGSTOP. */
902 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
903 
904 	/* Signal the fork parent to continue. */
905 	close(cpipe[0]);
906 
907 	children[1] = handle_fork_events(children[0], NULL);
908 	ATF_REQUIRE(children[1] > 0);
909 
910 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
911 	ATF_REQUIRE(ptrace(PT_DETACH, children[1], (caddr_t)1, 0) != -1);
912 
913 	/*
914 	 * Should not see any status from the child now, only the fork
915 	 * parent.
916 	 */
917 	wpid = wait(&status);
918 	ATF_REQUIRE(wpid == children[0]);
919 	ATF_REQUIRE(WIFEXITED(status));
920 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
921 
922 	wpid = wait(&status);
923 	ATF_REQUIRE(wpid == -1);
924 	ATF_REQUIRE(errno == ECHILD);
925 }
926 
927 /*
928  * Verify that a new child process is stopped after a followed fork
929  * and that the traced parent sees the exit of the child when the
930  * traced parent is detached after the fork.  In this test the parent
931  * that forks is not a direct child of the debugger.
932  */
933 ATF_TC_WITHOUT_HEAD(ptrace__follow_fork_parent_detached_unrelated_debugger);
934 ATF_TC_BODY(ptrace__follow_fork_parent_detached_unrelated_debugger, tc)
935 {
936 	pid_t children[2], fpid, wpid;
937 	int cpipe[2], status;
938 
939 	atf_tc_skip("https://bugs.freebsd.org/239425");
940 
941 	ATF_REQUIRE(pipe(cpipe) == 0);
942 	ATF_REQUIRE((fpid = fork()) != -1);
943 	if (fpid == 0) {
944 		attach_fork_parent(cpipe);
945 		follow_fork_parent(false);
946 	}
947 
948 	/* Parent process. */
949 	close(cpipe[1]);
950 
951 	/* Wait for the direct child to exit. */
952 	wpid = waitpid(fpid, &status, 0);
953 	ATF_REQUIRE(wpid == fpid);
954 	ATF_REQUIRE(WIFEXITED(status));
955 	ATF_REQUIRE(WEXITSTATUS(status) == 3);
956 
957 	/* Read the pid of the fork parent. */
958 	ATF_REQUIRE(read(cpipe[0], &children[0], sizeof(children[0])) ==
959 	    sizeof(children[0]));
960 
961 	/* Attach to the fork parent. */
962 	attach_child(children[0]);
963 
964 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
965 
966 	/* Continue the fork parent ignoring the SIGSTOP. */
967 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
968 
969 	/* Signal the fork parent to continue. */
970 	close(cpipe[0]);
971 
972 	children[1] = handle_fork_events(children[0], NULL);
973 	ATF_REQUIRE(children[1] > 0);
974 
975 	ATF_REQUIRE(ptrace(PT_DETACH, children[0], (caddr_t)1, 0) != -1);
976 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
977 
978 	/*
979 	 * Should not see any status from the fork parent now, only
980 	 * the child.
981 	 */
982 	wpid = wait(&status);
983 	ATF_REQUIRE(wpid == children[1]);
984 	ATF_REQUIRE(WIFEXITED(status));
985 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
986 
987 	wpid = wait(&status);
988 	ATF_REQUIRE(wpid == -1);
989 	ATF_REQUIRE(errno == ECHILD);
990 }
991 
992 /*
993  * Verify that a child process does not see an unrelated debugger as its
994  * parent but sees its original parent process.
995  */
996 ATF_TC_WITHOUT_HEAD(ptrace__getppid);
997 ATF_TC_BODY(ptrace__getppid, tc)
998 {
999 	pid_t child, debugger, ppid, wpid;
1000 	int cpipe[2], dpipe[2], status;
1001 	char c;
1002 
1003 	ATF_REQUIRE(pipe(cpipe) == 0);
1004 	ATF_REQUIRE((child = fork()) != -1);
1005 
1006 	if (child == 0) {
1007 		/* Child process. */
1008 		close(cpipe[0]);
1009 
1010 		/* Wait for parent to be ready. */
1011 		CHILD_REQUIRE(read(cpipe[1], &c, sizeof(c)) == sizeof(c));
1012 
1013 		/* Report the parent PID to the parent. */
1014 		ppid = getppid();
1015 		CHILD_REQUIRE(write(cpipe[1], &ppid, sizeof(ppid)) ==
1016 		    sizeof(ppid));
1017 
1018 		_exit(1);
1019 	}
1020 	close(cpipe[1]);
1021 
1022 	ATF_REQUIRE(pipe(dpipe) == 0);
1023 	ATF_REQUIRE((debugger = fork()) != -1);
1024 
1025 	if (debugger == 0) {
1026 		/* Debugger process. */
1027 		close(dpipe[0]);
1028 
1029 		CHILD_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) != -1);
1030 
1031 		wpid = waitpid(child, &status, 0);
1032 		CHILD_REQUIRE(wpid == child);
1033 		CHILD_REQUIRE(WIFSTOPPED(status));
1034 		CHILD_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1035 
1036 		CHILD_REQUIRE(ptrace(PT_CONTINUE, child, (caddr_t)1, 0) != -1);
1037 
1038 		/* Signal parent that debugger is attached. */
1039 		CHILD_REQUIRE(write(dpipe[1], &c, sizeof(c)) == sizeof(c));
1040 
1041 		/* Wait for traced child to exit. */
1042 		wpid = waitpid(child, &status, 0);
1043 		CHILD_REQUIRE(wpid == child);
1044 		CHILD_REQUIRE(WIFEXITED(status));
1045 		CHILD_REQUIRE(WEXITSTATUS(status) == 1);
1046 
1047 		_exit(0);
1048 	}
1049 	close(dpipe[1]);
1050 
1051 	/* Parent process. */
1052 
1053 	/* Wait for the debugger to attach to the child. */
1054 	ATF_REQUIRE(read(dpipe[0], &c, sizeof(c)) == sizeof(c));
1055 
1056 	/* Release the child. */
1057 	ATF_REQUIRE(write(cpipe[0], &c, sizeof(c)) == sizeof(c));
1058 
1059 	/* Read the parent PID from the child. */
1060 	ATF_REQUIRE(read(cpipe[0], &ppid, sizeof(ppid)) == sizeof(ppid));
1061 	close(cpipe[0]);
1062 
1063 	ATF_REQUIRE(ppid == getpid());
1064 
1065 	/* Wait for the debugger. */
1066 	wpid = waitpid(debugger, &status, 0);
1067 	ATF_REQUIRE(wpid == debugger);
1068 	ATF_REQUIRE(WIFEXITED(status));
1069 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
1070 
1071 	/* The child process should now be ready. */
1072 	wpid = waitpid(child, &status, WNOHANG);
1073 	ATF_REQUIRE(wpid == child);
1074 	ATF_REQUIRE(WIFEXITED(status));
1075 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1076 }
1077 
1078 /*
1079  * Verify that pl_syscall_code in struct ptrace_lwpinfo for a new
1080  * child process created via fork() reports the correct value.
1081  */
1082 ATF_TC_WITHOUT_HEAD(ptrace__new_child_pl_syscall_code_fork);
1083 ATF_TC_BODY(ptrace__new_child_pl_syscall_code_fork, tc)
1084 {
1085 	struct ptrace_lwpinfo pl[2];
1086 	pid_t children[2], fpid, wpid;
1087 	int status;
1088 
1089 	ATF_REQUIRE((fpid = fork()) != -1);
1090 	if (fpid == 0) {
1091 		trace_me();
1092 		follow_fork_parent(false);
1093 	}
1094 
1095 	/* Parent process. */
1096 	children[0] = fpid;
1097 
1098 	/* The first wait() should report the stop from SIGSTOP. */
1099 	wpid = waitpid(children[0], &status, 0);
1100 	ATF_REQUIRE(wpid == children[0]);
1101 	ATF_REQUIRE(WIFSTOPPED(status));
1102 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1103 
1104 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
1105 
1106 	/* Continue the child ignoring the SIGSTOP. */
1107 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1108 
1109 	/* Wait for both halves of the fork event to get reported. */
1110 	children[1] = handle_fork_events(children[0], pl);
1111 	ATF_REQUIRE(children[1] > 0);
1112 
1113 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_SCX) != 0);
1114 	ATF_REQUIRE((pl[1].pl_flags & PL_FLAG_SCX) != 0);
1115 	ATF_REQUIRE(pl[0].pl_syscall_code == SYS_fork);
1116 	ATF_REQUIRE(pl[0].pl_syscall_code == pl[1].pl_syscall_code);
1117 	ATF_REQUIRE(pl[0].pl_syscall_narg == pl[1].pl_syscall_narg);
1118 
1119 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1120 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
1121 
1122 	/*
1123 	 * The child can't exit until the grandchild reports status, so the
1124 	 * grandchild should report its exit first to the debugger.
1125 	 */
1126 	wpid = wait(&status);
1127 	ATF_REQUIRE(wpid == children[1]);
1128 	ATF_REQUIRE(WIFEXITED(status));
1129 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
1130 
1131 	wpid = wait(&status);
1132 	ATF_REQUIRE(wpid == children[0]);
1133 	ATF_REQUIRE(WIFEXITED(status));
1134 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1135 
1136 	wpid = wait(&status);
1137 	ATF_REQUIRE(wpid == -1);
1138 	ATF_REQUIRE(errno == ECHILD);
1139 }
1140 
1141 /*
1142  * Verify that pl_syscall_code in struct ptrace_lwpinfo for a new
1143  * child process created via vfork() reports the correct value.
1144  */
1145 ATF_TC_WITHOUT_HEAD(ptrace__new_child_pl_syscall_code_vfork);
1146 ATF_TC_BODY(ptrace__new_child_pl_syscall_code_vfork, tc)
1147 {
1148 	struct ptrace_lwpinfo pl[2];
1149 	pid_t children[2], fpid, wpid;
1150 	int status;
1151 
1152 	ATF_REQUIRE((fpid = fork()) != -1);
1153 	if (fpid == 0) {
1154 		trace_me();
1155 		follow_fork_parent(true);
1156 	}
1157 
1158 	/* Parent process. */
1159 	children[0] = fpid;
1160 
1161 	/* The first wait() should report the stop from SIGSTOP. */
1162 	wpid = waitpid(children[0], &status, 0);
1163 	ATF_REQUIRE(wpid == children[0]);
1164 	ATF_REQUIRE(WIFSTOPPED(status));
1165 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1166 
1167 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, children[0], NULL, 1) != -1);
1168 
1169 	/* Continue the child ignoring the SIGSTOP. */
1170 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1171 
1172 	/* Wait for both halves of the fork event to get reported. */
1173 	children[1] = handle_fork_events(children[0], pl);
1174 	ATF_REQUIRE(children[1] > 0);
1175 
1176 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_SCX) != 0);
1177 	ATF_REQUIRE((pl[1].pl_flags & PL_FLAG_SCX) != 0);
1178 	ATF_REQUIRE(pl[0].pl_syscall_code == SYS_vfork);
1179 	ATF_REQUIRE(pl[0].pl_syscall_code == pl[1].pl_syscall_code);
1180 	ATF_REQUIRE(pl[0].pl_syscall_narg == pl[1].pl_syscall_narg);
1181 
1182 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1183 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
1184 
1185 	/*
1186 	 * The child can't exit until the grandchild reports status, so the
1187 	 * grandchild should report its exit first to the debugger.
1188 	 */
1189 	wpid = wait(&status);
1190 	ATF_REQUIRE(wpid == children[1]);
1191 	ATF_REQUIRE(WIFEXITED(status));
1192 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
1193 
1194 	wpid = wait(&status);
1195 	ATF_REQUIRE(wpid == children[0]);
1196 	ATF_REQUIRE(WIFEXITED(status));
1197 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1198 
1199 	wpid = wait(&status);
1200 	ATF_REQUIRE(wpid == -1);
1201 	ATF_REQUIRE(errno == ECHILD);
1202 }
1203 
1204 static void *
1205 simple_thread(void *arg __unused)
1206 {
1207 
1208 	pthread_exit(NULL);
1209 }
1210 
1211 static __dead2 void
1212 simple_thread_main(void)
1213 {
1214 	pthread_t thread;
1215 
1216 	CHILD_REQUIRE(pthread_create(&thread, NULL, simple_thread, NULL) == 0);
1217 	CHILD_REQUIRE(pthread_join(thread, NULL) == 0);
1218 	exit(1);
1219 }
1220 
1221 /*
1222  * Verify that pl_syscall_code in struct ptrace_lwpinfo for a new
1223  * thread reports the correct value.
1224  */
1225 ATF_TC_WITHOUT_HEAD(ptrace__new_child_pl_syscall_code_thread);
1226 ATF_TC_BODY(ptrace__new_child_pl_syscall_code_thread, tc)
1227 {
1228 	struct ptrace_lwpinfo pl;
1229 	pid_t fpid, wpid;
1230 	lwpid_t mainlwp;
1231 	int status;
1232 
1233 	ATF_REQUIRE((fpid = fork()) != -1);
1234 	if (fpid == 0) {
1235 		trace_me();
1236 		simple_thread_main();
1237 	}
1238 
1239 	/* The first wait() should report the stop from SIGSTOP. */
1240 	wpid = waitpid(fpid, &status, 0);
1241 	ATF_REQUIRE(wpid == fpid);
1242 	ATF_REQUIRE(WIFSTOPPED(status));
1243 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1244 
1245 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1246 	    sizeof(pl)) != -1);
1247 	mainlwp = pl.pl_lwpid;
1248 
1249 	/*
1250 	 * Continue the child ignoring the SIGSTOP and tracing all
1251 	 * system call exits.
1252 	 */
1253 	ATF_REQUIRE(ptrace(PT_TO_SCX, fpid, (caddr_t)1, 0) != -1);
1254 
1255 	/*
1256 	 * Wait for the new thread to arrive.  pthread_create() might
1257 	 * invoke any number of system calls.  For now we just wait
1258 	 * for the new thread to arrive and make sure it reports a
1259 	 * valid system call code.  If ptrace grows thread event
1260 	 * reporting then this test can be made more precise.
1261 	 */
1262 	for (;;) {
1263 		wpid = waitpid(fpid, &status, 0);
1264 		ATF_REQUIRE(wpid == fpid);
1265 		ATF_REQUIRE(WIFSTOPPED(status));
1266 		ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1267 
1268 		ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1269 		    sizeof(pl)) != -1);
1270 		ATF_REQUIRE((pl.pl_flags & PL_FLAG_SCX) != 0);
1271 		ATF_REQUIRE(pl.pl_syscall_code != 0);
1272 		if (pl.pl_lwpid != mainlwp)
1273 			/* New thread seen. */
1274 			break;
1275 
1276 		ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1277 	}
1278 
1279 	/* Wait for the child to exit. */
1280 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1281 	for (;;) {
1282 		wpid = waitpid(fpid, &status, 0);
1283 		ATF_REQUIRE(wpid == fpid);
1284 		if (WIFEXITED(status))
1285 			break;
1286 
1287 		ATF_REQUIRE(WIFSTOPPED(status));
1288 		ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1289 		ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1290 	}
1291 
1292 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1293 
1294 	wpid = wait(&status);
1295 	ATF_REQUIRE(wpid == -1);
1296 	ATF_REQUIRE(errno == ECHILD);
1297 }
1298 
1299 /*
1300  * Verify that the expected LWP events are reported for a child thread.
1301  */
1302 ATF_TC_WITHOUT_HEAD(ptrace__lwp_events);
1303 ATF_TC_BODY(ptrace__lwp_events, tc)
1304 {
1305 	struct ptrace_lwpinfo pl;
1306 	pid_t fpid, wpid;
1307 	lwpid_t lwps[2];
1308 	int status;
1309 
1310 	ATF_REQUIRE((fpid = fork()) != -1);
1311 	if (fpid == 0) {
1312 		trace_me();
1313 		simple_thread_main();
1314 	}
1315 
1316 	/* The first wait() should report the stop from SIGSTOP. */
1317 	wpid = waitpid(fpid, &status, 0);
1318 	ATF_REQUIRE(wpid == fpid);
1319 	ATF_REQUIRE(WIFSTOPPED(status));
1320 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1321 
1322 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1323 	    sizeof(pl)) != -1);
1324 	lwps[0] = pl.pl_lwpid;
1325 
1326 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, wpid, NULL, 1) == 0);
1327 
1328 	/* Continue the child ignoring the SIGSTOP. */
1329 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1330 
1331 	/* The first event should be for the child thread's birth. */
1332 	wpid = waitpid(fpid, &status, 0);
1333 	ATF_REQUIRE(wpid == fpid);
1334 	ATF_REQUIRE(WIFSTOPPED(status));
1335 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1336 
1337 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1338 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)) ==
1339 	    (PL_FLAG_BORN | PL_FLAG_SCX));
1340 	ATF_REQUIRE(pl.pl_lwpid != lwps[0]);
1341 	lwps[1] = pl.pl_lwpid;
1342 
1343 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1344 
1345 	/* The next event should be for the child thread's death. */
1346 	wpid = waitpid(fpid, &status, 0);
1347 	ATF_REQUIRE(wpid == fpid);
1348 	ATF_REQUIRE(WIFSTOPPED(status));
1349 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1350 
1351 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1352 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_EXITED | PL_FLAG_SCE)) ==
1353 	    (PL_FLAG_EXITED | PL_FLAG_SCE));
1354 	ATF_REQUIRE(pl.pl_lwpid == lwps[1]);
1355 
1356 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1357 
1358 	/* The last event should be for the child process's exit. */
1359 	wpid = waitpid(fpid, &status, 0);
1360 	ATF_REQUIRE(WIFEXITED(status));
1361 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1362 
1363 	wpid = wait(&status);
1364 	ATF_REQUIRE(wpid == -1);
1365 	ATF_REQUIRE(errno == ECHILD);
1366 }
1367 
1368 static void *
1369 exec_thread(void *arg __unused)
1370 {
1371 
1372 	execl("/usr/bin/true", "true", NULL);
1373 	exit(127);
1374 }
1375 
1376 static __dead2 void
1377 exec_thread_main(void)
1378 {
1379 	pthread_t thread;
1380 
1381 	CHILD_REQUIRE(pthread_create(&thread, NULL, exec_thread, NULL) == 0);
1382 	for (;;)
1383 		sleep(60);
1384 	exit(1);
1385 }
1386 
1387 /*
1388  * Verify that the expected LWP events are reported for a multithreaded
1389  * process that calls execve(2).
1390  */
1391 ATF_TC_WITHOUT_HEAD(ptrace__lwp_events_exec);
1392 ATF_TC_BODY(ptrace__lwp_events_exec, tc)
1393 {
1394 	struct ptrace_lwpinfo pl;
1395 	pid_t fpid, wpid;
1396 	lwpid_t lwps[2];
1397 	int status;
1398 
1399 	ATF_REQUIRE((fpid = fork()) != -1);
1400 	if (fpid == 0) {
1401 		trace_me();
1402 		exec_thread_main();
1403 	}
1404 
1405 	/* The first wait() should report the stop from SIGSTOP. */
1406 	wpid = waitpid(fpid, &status, 0);
1407 	ATF_REQUIRE(wpid == fpid);
1408 	ATF_REQUIRE(WIFSTOPPED(status));
1409 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1410 
1411 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1412 	    sizeof(pl)) != -1);
1413 	lwps[0] = pl.pl_lwpid;
1414 
1415 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, wpid, NULL, 1) == 0);
1416 
1417 	/* Continue the child ignoring the SIGSTOP. */
1418 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1419 
1420 	/* The first event should be for the child thread's birth. */
1421 	wpid = waitpid(fpid, &status, 0);
1422 	ATF_REQUIRE(wpid == fpid);
1423 	ATF_REQUIRE(WIFSTOPPED(status));
1424 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1425 
1426 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1427 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)) ==
1428 	    (PL_FLAG_BORN | PL_FLAG_SCX));
1429 	ATF_REQUIRE(pl.pl_lwpid != lwps[0]);
1430 	lwps[1] = pl.pl_lwpid;
1431 
1432 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1433 
1434 	/*
1435 	 * The next event should be for the main thread's death due to
1436 	 * single threading from execve().
1437 	 */
1438 	wpid = waitpid(fpid, &status, 0);
1439 	ATF_REQUIRE(wpid == fpid);
1440 	ATF_REQUIRE(WIFSTOPPED(status));
1441 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1442 
1443 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1444 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_EXITED | PL_FLAG_SCE)) ==
1445 	    (PL_FLAG_EXITED));
1446 	ATF_REQUIRE(pl.pl_lwpid == lwps[0]);
1447 
1448 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1449 
1450 	/* The next event should be for the child process's exec. */
1451 	wpid = waitpid(fpid, &status, 0);
1452 	ATF_REQUIRE(WIFSTOPPED(status));
1453 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1454 
1455 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1456 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_EXEC | PL_FLAG_SCX)) ==
1457 	    (PL_FLAG_EXEC | PL_FLAG_SCX));
1458 	ATF_REQUIRE(pl.pl_lwpid == lwps[1]);
1459 
1460 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1461 
1462 	/* The last event should be for the child process's exit. */
1463 	wpid = waitpid(fpid, &status, 0);
1464 	ATF_REQUIRE(WIFEXITED(status));
1465 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
1466 
1467 	wpid = wait(&status);
1468 	ATF_REQUIRE(wpid == -1);
1469 	ATF_REQUIRE(errno == ECHILD);
1470 }
1471 
1472 static void
1473 handler(int sig __unused)
1474 {
1475 }
1476 
1477 static void
1478 signal_main(void)
1479 {
1480 
1481 	signal(SIGINFO, handler);
1482 	raise(SIGINFO);
1483 	exit(0);
1484 }
1485 
1486 /*
1487  * Verify that the expected ptrace event is reported for a signal.
1488  */
1489 ATF_TC_WITHOUT_HEAD(ptrace__siginfo);
1490 ATF_TC_BODY(ptrace__siginfo, tc)
1491 {
1492 	struct ptrace_lwpinfo pl;
1493 	pid_t fpid, wpid;
1494 	int status;
1495 
1496 	ATF_REQUIRE((fpid = fork()) != -1);
1497 	if (fpid == 0) {
1498 		trace_me();
1499 		signal_main();
1500 	}
1501 
1502 	/* The first wait() should report the stop from SIGSTOP. */
1503 	wpid = waitpid(fpid, &status, 0);
1504 	ATF_REQUIRE(wpid == fpid);
1505 	ATF_REQUIRE(WIFSTOPPED(status));
1506 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1507 
1508 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1509 
1510 	/* The next event should be for the SIGINFO. */
1511 	wpid = waitpid(fpid, &status, 0);
1512 	ATF_REQUIRE(WIFSTOPPED(status));
1513 	ATF_REQUIRE(WSTOPSIG(status) == SIGINFO);
1514 
1515 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1516 	ATF_REQUIRE(pl.pl_event == PL_EVENT_SIGNAL);
1517 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
1518 	ATF_REQUIRE(pl.pl_siginfo.si_code == SI_LWP);
1519 	ATF_REQUIRE(pl.pl_siginfo.si_pid == wpid);
1520 
1521 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1522 
1523 	/* The last event should be for the child process's exit. */
1524 	wpid = waitpid(fpid, &status, 0);
1525 	ATF_REQUIRE(WIFEXITED(status));
1526 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
1527 
1528 	wpid = wait(&status);
1529 	ATF_REQUIRE(wpid == -1);
1530 	ATF_REQUIRE(errno == ECHILD);
1531 }
1532 
1533 /*
1534  * Verify that the expected ptrace events are reported for PTRACE_EXEC.
1535  */
1536 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_exec_disable);
1537 ATF_TC_BODY(ptrace__ptrace_exec_disable, tc)
1538 {
1539 	pid_t fpid, wpid;
1540 	int events, status;
1541 
1542 	ATF_REQUIRE((fpid = fork()) != -1);
1543 	if (fpid == 0) {
1544 		trace_me();
1545 		exec_thread(NULL);
1546 	}
1547 
1548 	/* The first wait() should report the stop from SIGSTOP. */
1549 	wpid = waitpid(fpid, &status, 0);
1550 	ATF_REQUIRE(wpid == fpid);
1551 	ATF_REQUIRE(WIFSTOPPED(status));
1552 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1553 
1554 	events = 0;
1555 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
1556 	    sizeof(events)) == 0);
1557 
1558 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1559 
1560 	/* Should get one event at exit. */
1561 	wpid = waitpid(fpid, &status, 0);
1562 	ATF_REQUIRE(WIFEXITED(status));
1563 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
1564 
1565 	wpid = wait(&status);
1566 	ATF_REQUIRE(wpid == -1);
1567 	ATF_REQUIRE(errno == ECHILD);
1568 }
1569 
1570 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_exec_enable);
1571 ATF_TC_BODY(ptrace__ptrace_exec_enable, tc)
1572 {
1573 	struct ptrace_lwpinfo pl;
1574 	pid_t fpid, wpid;
1575 	int events, status;
1576 
1577 	ATF_REQUIRE((fpid = fork()) != -1);
1578 	if (fpid == 0) {
1579 		trace_me();
1580 		exec_thread(NULL);
1581 	}
1582 
1583 	/* The first wait() should report the stop from SIGSTOP. */
1584 	wpid = waitpid(fpid, &status, 0);
1585 	ATF_REQUIRE(wpid == fpid);
1586 	ATF_REQUIRE(WIFSTOPPED(status));
1587 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1588 
1589 	events = PTRACE_EXEC;
1590 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
1591 	    sizeof(events)) == 0);
1592 
1593 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1594 
1595 	/* The next event should be for the child process's exec. */
1596 	wpid = waitpid(fpid, &status, 0);
1597 	ATF_REQUIRE(WIFSTOPPED(status));
1598 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1599 
1600 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1601 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_EXEC | PL_FLAG_SCX)) ==
1602 	    (PL_FLAG_EXEC | PL_FLAG_SCX));
1603 
1604 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1605 
1606 	/* The last event should be for the child process's exit. */
1607 	wpid = waitpid(fpid, &status, 0);
1608 	ATF_REQUIRE(WIFEXITED(status));
1609 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
1610 
1611 	wpid = wait(&status);
1612 	ATF_REQUIRE(wpid == -1);
1613 	ATF_REQUIRE(errno == ECHILD);
1614 }
1615 
1616 ATF_TC_WITHOUT_HEAD(ptrace__event_mask);
1617 ATF_TC_BODY(ptrace__event_mask, tc)
1618 {
1619 	pid_t fpid, wpid;
1620 	int events, status;
1621 
1622 	ATF_REQUIRE((fpid = fork()) != -1);
1623 	if (fpid == 0) {
1624 		trace_me();
1625 		exit(0);
1626 	}
1627 
1628 	/* The first wait() should report the stop from SIGSTOP. */
1629 	wpid = waitpid(fpid, &status, 0);
1630 	ATF_REQUIRE(wpid == fpid);
1631 	ATF_REQUIRE(WIFSTOPPED(status));
1632 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1633 
1634 	/* PT_FOLLOW_FORK should toggle the state of PTRACE_FORK. */
1635 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, fpid, NULL, 1) != -1);
1636 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1637 	    sizeof(events)) == 0);
1638 	ATF_REQUIRE(events & PTRACE_FORK);
1639 	ATF_REQUIRE(ptrace(PT_FOLLOW_FORK, fpid, NULL, 0) != -1);
1640 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1641 	    sizeof(events)) == 0);
1642 	ATF_REQUIRE(!(events & PTRACE_FORK));
1643 
1644 	/* PT_LWP_EVENTS should toggle the state of PTRACE_LWP. */
1645 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, fpid, NULL, 1) != -1);
1646 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1647 	    sizeof(events)) == 0);
1648 	ATF_REQUIRE(events & PTRACE_LWP);
1649 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, fpid, NULL, 0) != -1);
1650 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1651 	    sizeof(events)) == 0);
1652 	ATF_REQUIRE(!(events & PTRACE_LWP));
1653 
1654 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1655 
1656 	/* Should get one event at exit. */
1657 	wpid = waitpid(fpid, &status, 0);
1658 	ATF_REQUIRE(WIFEXITED(status));
1659 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
1660 
1661 	wpid = wait(&status);
1662 	ATF_REQUIRE(wpid == -1);
1663 	ATF_REQUIRE(errno == ECHILD);
1664 }
1665 
1666 /*
1667  * Verify that the expected ptrace events are reported for PTRACE_VFORK.
1668  */
1669 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_vfork);
1670 ATF_TC_BODY(ptrace__ptrace_vfork, tc)
1671 {
1672 	struct ptrace_lwpinfo pl;
1673 	pid_t fpid, wpid;
1674 	int events, status;
1675 
1676 	ATF_REQUIRE((fpid = fork()) != -1);
1677 	if (fpid == 0) {
1678 		trace_me();
1679 		follow_fork_parent(true);
1680 	}
1681 
1682 	/* The first wait() should report the stop from SIGSTOP. */
1683 	wpid = waitpid(fpid, &status, 0);
1684 	ATF_REQUIRE(wpid == fpid);
1685 	ATF_REQUIRE(WIFSTOPPED(status));
1686 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1687 
1688 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
1689 	    sizeof(events)) == 0);
1690 	events |= PTRACE_VFORK;
1691 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
1692 	    sizeof(events)) == 0);
1693 
1694 	/* Continue the child ignoring the SIGSTOP. */
1695 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) != -1);
1696 
1697 	/* The next event should report the end of the vfork. */
1698 	wpid = wait(&status);
1699 	ATF_REQUIRE(wpid == fpid);
1700 	ATF_REQUIRE(WIFSTOPPED(status));
1701 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1702 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1703 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_VFORK_DONE) != 0);
1704 
1705 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) != -1);
1706 
1707 	wpid = wait(&status);
1708 	ATF_REQUIRE(wpid == fpid);
1709 	ATF_REQUIRE(WIFEXITED(status));
1710 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1711 
1712 	wpid = wait(&status);
1713 	ATF_REQUIRE(wpid == -1);
1714 	ATF_REQUIRE(errno == ECHILD);
1715 }
1716 
1717 ATF_TC_WITHOUT_HEAD(ptrace__ptrace_vfork_follow);
1718 ATF_TC_BODY(ptrace__ptrace_vfork_follow, tc)
1719 {
1720 	struct ptrace_lwpinfo pl[2];
1721 	pid_t children[2], fpid, wpid;
1722 	int events, status;
1723 
1724 	ATF_REQUIRE((fpid = fork()) != -1);
1725 	if (fpid == 0) {
1726 		trace_me();
1727 		follow_fork_parent(true);
1728 	}
1729 
1730 	/* Parent process. */
1731 	children[0] = fpid;
1732 
1733 	/* The first wait() should report the stop from SIGSTOP. */
1734 	wpid = waitpid(children[0], &status, 0);
1735 	ATF_REQUIRE(wpid == children[0]);
1736 	ATF_REQUIRE(WIFSTOPPED(status));
1737 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1738 
1739 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, children[0], (caddr_t)&events,
1740 	    sizeof(events)) == 0);
1741 	events |= PTRACE_FORK | PTRACE_VFORK;
1742 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, children[0], (caddr_t)&events,
1743 	    sizeof(events)) == 0);
1744 
1745 	/* Continue the child ignoring the SIGSTOP. */
1746 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1747 
1748 	/* Wait for both halves of the fork event to get reported. */
1749 	children[1] = handle_fork_events(children[0], pl);
1750 	ATF_REQUIRE(children[1] > 0);
1751 
1752 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_VFORKED) != 0);
1753 
1754 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1755 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[1], (caddr_t)1, 0) != -1);
1756 
1757 	/*
1758 	 * The child can't exit until the grandchild reports status, so the
1759 	 * grandchild should report its exit first to the debugger.
1760 	 */
1761 	wpid = waitpid(children[1], &status, 0);
1762 	ATF_REQUIRE(wpid == children[1]);
1763 	ATF_REQUIRE(WIFEXITED(status));
1764 	ATF_REQUIRE(WEXITSTATUS(status) == 2);
1765 
1766 	/*
1767 	 * The child should report it's vfork() completion before it
1768 	 * exits.
1769 	 */
1770 	wpid = wait(&status);
1771 	ATF_REQUIRE(wpid == children[0]);
1772 	ATF_REQUIRE(WIFSTOPPED(status));
1773 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1774 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl[0], sizeof(pl[0])) !=
1775 	    -1);
1776 	ATF_REQUIRE((pl[0].pl_flags & PL_FLAG_VFORK_DONE) != 0);
1777 
1778 	ATF_REQUIRE(ptrace(PT_CONTINUE, children[0], (caddr_t)1, 0) != -1);
1779 
1780 	wpid = wait(&status);
1781 	ATF_REQUIRE(wpid == children[0]);
1782 	ATF_REQUIRE(WIFEXITED(status));
1783 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
1784 
1785 	wpid = wait(&status);
1786 	ATF_REQUIRE(wpid == -1);
1787 	ATF_REQUIRE(errno == ECHILD);
1788 }
1789 
1790 #ifdef HAVE_BREAKPOINT
1791 /*
1792  * Verify that no more events are reported after PT_KILL except for the
1793  * process exit when stopped due to a breakpoint trap.
1794  */
1795 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_breakpoint);
1796 ATF_TC_BODY(ptrace__PT_KILL_breakpoint, tc)
1797 {
1798 	pid_t fpid, wpid;
1799 	int status;
1800 
1801 	ATF_REQUIRE((fpid = fork()) != -1);
1802 	if (fpid == 0) {
1803 		trace_me();
1804 		breakpoint();
1805 		exit(1);
1806 	}
1807 
1808 	/* The first wait() should report the stop from SIGSTOP. */
1809 	wpid = waitpid(fpid, &status, 0);
1810 	ATF_REQUIRE(wpid == fpid);
1811 	ATF_REQUIRE(WIFSTOPPED(status));
1812 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1813 
1814 	/* Continue the child ignoring the SIGSTOP. */
1815 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1816 
1817 	/* The second wait() should report hitting the breakpoint. */
1818 	wpid = waitpid(fpid, &status, 0);
1819 	ATF_REQUIRE(wpid == fpid);
1820 	ATF_REQUIRE(WIFSTOPPED(status));
1821 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1822 
1823 	/* Kill the child process. */
1824 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
1825 
1826 	/* The last wait() should report the SIGKILL. */
1827 	wpid = waitpid(fpid, &status, 0);
1828 	ATF_REQUIRE(wpid == fpid);
1829 	ATF_REQUIRE(WIFSIGNALED(status));
1830 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
1831 
1832 	wpid = wait(&status);
1833 	ATF_REQUIRE(wpid == -1);
1834 	ATF_REQUIRE(errno == ECHILD);
1835 }
1836 #endif /* HAVE_BREAKPOINT */
1837 
1838 /*
1839  * Verify that no more events are reported after PT_KILL except for the
1840  * process exit when stopped inside of a system call.
1841  */
1842 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_system_call);
1843 ATF_TC_BODY(ptrace__PT_KILL_system_call, tc)
1844 {
1845 	struct ptrace_lwpinfo pl;
1846 	pid_t fpid, wpid;
1847 	int status;
1848 
1849 	ATF_REQUIRE((fpid = fork()) != -1);
1850 	if (fpid == 0) {
1851 		trace_me();
1852 		getpid();
1853 		exit(1);
1854 	}
1855 
1856 	/* The first wait() should report the stop from SIGSTOP. */
1857 	wpid = waitpid(fpid, &status, 0);
1858 	ATF_REQUIRE(wpid == fpid);
1859 	ATF_REQUIRE(WIFSTOPPED(status));
1860 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1861 
1862 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
1863 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
1864 
1865 	/* The second wait() should report a system call entry for getpid(). */
1866 	wpid = waitpid(fpid, &status, 0);
1867 	ATF_REQUIRE(wpid == fpid);
1868 	ATF_REQUIRE(WIFSTOPPED(status));
1869 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1870 
1871 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1872 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
1873 
1874 	/* Kill the child process. */
1875 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
1876 
1877 	/* The last wait() should report the SIGKILL. */
1878 	wpid = waitpid(fpid, &status, 0);
1879 	ATF_REQUIRE(wpid == fpid);
1880 	ATF_REQUIRE(WIFSIGNALED(status));
1881 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
1882 
1883 	wpid = wait(&status);
1884 	ATF_REQUIRE(wpid == -1);
1885 	ATF_REQUIRE(errno == ECHILD);
1886 }
1887 
1888 /*
1889  * Verify that no more events are reported after PT_KILL except for the
1890  * process exit when killing a multithreaded process.
1891  */
1892 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_threads);
1893 ATF_TC_BODY(ptrace__PT_KILL_threads, tc)
1894 {
1895 	struct ptrace_lwpinfo pl;
1896 	pid_t fpid, wpid;
1897 	lwpid_t main_lwp;
1898 	int status;
1899 
1900 	ATF_REQUIRE((fpid = fork()) != -1);
1901 	if (fpid == 0) {
1902 		trace_me();
1903 		simple_thread_main();
1904 	}
1905 
1906 	/* The first wait() should report the stop from SIGSTOP. */
1907 	wpid = waitpid(fpid, &status, 0);
1908 	ATF_REQUIRE(wpid == fpid);
1909 	ATF_REQUIRE(WIFSTOPPED(status));
1910 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
1911 
1912 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
1913 	    sizeof(pl)) != -1);
1914 	main_lwp = pl.pl_lwpid;
1915 
1916 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, wpid, NULL, 1) == 0);
1917 
1918 	/* Continue the child ignoring the SIGSTOP. */
1919 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
1920 
1921 	/* The first event should be for the child thread's birth. */
1922 	wpid = waitpid(fpid, &status, 0);
1923 	ATF_REQUIRE(wpid == fpid);
1924 	ATF_REQUIRE(WIFSTOPPED(status));
1925 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
1926 
1927 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
1928 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)) ==
1929 	    (PL_FLAG_BORN | PL_FLAG_SCX));
1930 	ATF_REQUIRE(pl.pl_lwpid != main_lwp);
1931 
1932 	/* Kill the child process. */
1933 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
1934 
1935 	/* The last wait() should report the SIGKILL. */
1936 	wpid = waitpid(fpid, &status, 0);
1937 	ATF_REQUIRE(wpid == fpid);
1938 	ATF_REQUIRE(WIFSIGNALED(status));
1939 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
1940 
1941 	wpid = wait(&status);
1942 	ATF_REQUIRE(wpid == -1);
1943 	ATF_REQUIRE(errno == ECHILD);
1944 }
1945 
1946 static void *
1947 mask_usr1_thread(void *arg)
1948 {
1949 	pthread_barrier_t *pbarrier;
1950 	sigset_t sigmask;
1951 
1952 	pbarrier = (pthread_barrier_t*)arg;
1953 
1954 	sigemptyset(&sigmask);
1955 	sigaddset(&sigmask, SIGUSR1);
1956 	CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0);
1957 
1958 	/* Sync up with other thread after sigmask updated. */
1959 	pthread_barrier_wait(pbarrier);
1960 
1961 	for (;;)
1962 		sleep(60);
1963 
1964 	return (NULL);
1965 }
1966 
1967 /*
1968  * Verify that the SIGKILL from PT_KILL takes priority over other signals
1969  * and prevents spurious stops due to those other signals.
1970  */
1971 ATF_TC(ptrace__PT_KILL_competing_signal);
1972 ATF_TC_HEAD(ptrace__PT_KILL_competing_signal, tc)
1973 {
1974 
1975 	atf_tc_set_md_var(tc, "require.user", "root");
1976 }
1977 ATF_TC_BODY(ptrace__PT_KILL_competing_signal, tc)
1978 {
1979 	pid_t fpid, wpid;
1980 	int status;
1981 	cpuset_t setmask;
1982 	pthread_t t;
1983 	pthread_barrier_t barrier;
1984 	struct sched_param sched_param;
1985 
1986 	ATF_REQUIRE((fpid = fork()) != -1);
1987 	if (fpid == 0) {
1988 		/* Bind to one CPU so only one thread at a time will run. */
1989 		CPU_ZERO(&setmask);
1990 		CPU_SET(0, &setmask);
1991 		cpusetid_t setid;
1992 		CHILD_REQUIRE(cpuset(&setid) == 0);
1993 		CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET,
1994 		    CPU_WHICH_CPUSET, setid, sizeof(setmask), &setmask) == 0);
1995 
1996 		CHILD_REQUIRE(pthread_barrier_init(&barrier, NULL, 2) == 0);
1997 
1998 		CHILD_REQUIRE(pthread_create(&t, NULL, mask_usr1_thread,
1999 		    (void*)&barrier) == 0);
2000 
2001 		/*
2002 		 * Give the main thread higher priority. The test always
2003 		 * assumes that, if both threads are able to run, the main
2004 		 * thread runs first.
2005 		 */
2006 		sched_param.sched_priority =
2007 		    (sched_get_priority_max(SCHED_FIFO) +
2008 		    sched_get_priority_min(SCHED_FIFO)) / 2;
2009 		CHILD_REQUIRE(pthread_setschedparam(pthread_self(),
2010 		    SCHED_FIFO, &sched_param) == 0);
2011 		sched_param.sched_priority -= RQ_PPQ;
2012 		CHILD_REQUIRE(pthread_setschedparam(t, SCHED_FIFO,
2013 		    &sched_param) == 0);
2014 
2015 		sigset_t sigmask;
2016 		sigemptyset(&sigmask);
2017 		sigaddset(&sigmask, SIGUSR2);
2018 		CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0);
2019 
2020 		/* Sync up with other thread after sigmask updated. */
2021 		pthread_barrier_wait(&barrier);
2022 
2023 		trace_me();
2024 
2025 		for (;;)
2026 			sleep(60);
2027 
2028 		exit(1);
2029 	}
2030 
2031 	/* The first wait() should report the stop from SIGSTOP. */
2032 	wpid = waitpid(fpid, &status, 0);
2033 	ATF_REQUIRE(wpid == fpid);
2034 	ATF_REQUIRE(WIFSTOPPED(status));
2035 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2036 
2037 	/* Continue the child ignoring the SIGSTOP. */
2038 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2039 
2040 	/* Send a signal that only the second thread can handle. */
2041 	ATF_REQUIRE(kill(fpid, SIGUSR2) == 0);
2042 
2043 	/* The second wait() should report the SIGUSR2. */
2044 	wpid = waitpid(fpid, &status, 0);
2045 	ATF_REQUIRE(wpid == fpid);
2046 	ATF_REQUIRE(WIFSTOPPED(status));
2047 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2);
2048 
2049 	/* Send a signal that only the first thread can handle. */
2050 	ATF_REQUIRE(kill(fpid, SIGUSR1) == 0);
2051 
2052 	/* Replace the SIGUSR2 with a kill. */
2053 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
2054 
2055 	/* The last wait() should report the SIGKILL (not the SIGUSR signal). */
2056 	wpid = waitpid(fpid, &status, 0);
2057 	ATF_REQUIRE(wpid == fpid);
2058 	ATF_REQUIRE(WIFSIGNALED(status));
2059 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
2060 
2061 	wpid = wait(&status);
2062 	ATF_REQUIRE(wpid == -1);
2063 	ATF_REQUIRE(errno == ECHILD);
2064 }
2065 
2066 /*
2067  * Verify that the SIGKILL from PT_KILL takes priority over other stop events
2068  * and prevents spurious stops caused by those events.
2069  */
2070 ATF_TC(ptrace__PT_KILL_competing_stop);
2071 ATF_TC_HEAD(ptrace__PT_KILL_competing_stop, tc)
2072 {
2073 
2074 	atf_tc_set_md_var(tc, "require.user", "root");
2075 }
2076 ATF_TC_BODY(ptrace__PT_KILL_competing_stop, tc)
2077 {
2078 	pid_t fpid, wpid;
2079 	int status;
2080 	cpuset_t setmask;
2081 	pthread_t t;
2082 	pthread_barrier_t barrier;
2083 	lwpid_t main_lwp;
2084 	struct ptrace_lwpinfo pl;
2085 	struct sched_param sched_param;
2086 
2087 	atf_tc_skip("https://bugs.freebsd.org/220841");
2088 
2089 	ATF_REQUIRE((fpid = fork()) != -1);
2090 	if (fpid == 0) {
2091 		trace_me();
2092 
2093 		/* Bind to one CPU so only one thread at a time will run. */
2094 		CPU_ZERO(&setmask);
2095 		CPU_SET(0, &setmask);
2096 		cpusetid_t setid;
2097 		CHILD_REQUIRE(cpuset(&setid) == 0);
2098 		CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET,
2099 		    CPU_WHICH_CPUSET, setid, sizeof(setmask), &setmask) == 0);
2100 
2101 		CHILD_REQUIRE(pthread_barrier_init(&barrier, NULL, 2) == 0);
2102 
2103 		CHILD_REQUIRE(pthread_create(&t, NULL, mask_usr1_thread,
2104 		    (void*)&barrier) == 0);
2105 
2106 		/*
2107 		 * Give the main thread higher priority. The test always
2108 		 * assumes that, if both threads are able to run, the main
2109 		 * thread runs first.
2110 		 */
2111 		sched_param.sched_priority =
2112 		    (sched_get_priority_max(SCHED_FIFO) +
2113 		    sched_get_priority_min(SCHED_FIFO)) / 2;
2114 		CHILD_REQUIRE(pthread_setschedparam(pthread_self(),
2115 		    SCHED_FIFO, &sched_param) == 0);
2116 		sched_param.sched_priority -= RQ_PPQ;
2117 		CHILD_REQUIRE(pthread_setschedparam(t, SCHED_FIFO,
2118 		    &sched_param) == 0);
2119 
2120 		sigset_t sigmask;
2121 		sigemptyset(&sigmask);
2122 		sigaddset(&sigmask, SIGUSR2);
2123 		CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0);
2124 
2125 		/* Sync up with other thread after sigmask updated. */
2126 		pthread_barrier_wait(&barrier);
2127 
2128 		/* Sync up with the test before doing the getpid(). */
2129 		raise(SIGSTOP);
2130 
2131 		getpid();
2132 		exit(1);
2133 	}
2134 
2135 	/* The first wait() should report the stop from SIGSTOP. */
2136 	wpid = waitpid(fpid, &status, 0);
2137 	ATF_REQUIRE(wpid == fpid);
2138 	ATF_REQUIRE(WIFSTOPPED(status));
2139 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2140 
2141 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2142 	main_lwp = pl.pl_lwpid;
2143 
2144 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2145 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2146 
2147 	/*
2148 	 * Continue until child is done with setup, which is indicated with
2149 	 * SIGSTOP. Ignore system calls in the meantime.
2150 	 */
2151 	for (;;) {
2152 		wpid = waitpid(fpid, &status, 0);
2153 		ATF_REQUIRE(wpid == fpid);
2154 		ATF_REQUIRE(WIFSTOPPED(status));
2155 		if (WSTOPSIG(status) == SIGTRAP) {
2156 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
2157 			    sizeof(pl)) != -1);
2158 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2159 		} else {
2160 			ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2161 			break;
2162 		}
2163 		ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2164 	}
2165 
2166 	/* Proceed, allowing main thread to hit syscall entry for getpid(). */
2167 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2168 
2169 	wpid = waitpid(fpid, &status, 0);
2170 	ATF_REQUIRE(wpid == fpid);
2171 	ATF_REQUIRE(WIFSTOPPED(status));
2172 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2173 
2174 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
2175 	    sizeof(pl)) != -1);
2176 	ATF_REQUIRE(pl.pl_lwpid == main_lwp);
2177 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2178 	/* Prevent the main thread from hitting its syscall exit for now. */
2179 	ATF_REQUIRE(ptrace(PT_SUSPEND, main_lwp, 0, 0) == 0);
2180 
2181 	/*
2182 	 * Proceed, allowing second thread to hit syscall exit for
2183 	 * pthread_barrier_wait().
2184 	 */
2185 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2186 
2187 	wpid = waitpid(fpid, &status, 0);
2188 	ATF_REQUIRE(wpid == fpid);
2189 	ATF_REQUIRE(WIFSTOPPED(status));
2190 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2191 
2192 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
2193 	    sizeof(pl)) != -1);
2194 	ATF_REQUIRE(pl.pl_lwpid != main_lwp);
2195 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
2196 
2197 	/* Send a signal that only the second thread can handle. */
2198 	ATF_REQUIRE(kill(fpid, SIGUSR2) == 0);
2199 
2200 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2201 
2202 	/* The next wait() should report the SIGUSR2. */
2203 	wpid = waitpid(fpid, &status, 0);
2204 	ATF_REQUIRE(wpid == fpid);
2205 	ATF_REQUIRE(WIFSTOPPED(status));
2206 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2);
2207 
2208 	/* Allow the main thread to try to finish its system call. */
2209 	ATF_REQUIRE(ptrace(PT_RESUME, main_lwp, 0, 0) == 0);
2210 
2211 	/*
2212 	 * At this point, the main thread is in the middle of a system call and
2213 	 * has been resumed. The second thread has taken a SIGUSR2 which will
2214 	 * be replaced with a SIGKILL below. The main thread will get to run
2215 	 * first. It should notice the kill request (even though the signal
2216 	 * replacement occurred in the other thread) and exit accordingly.  It
2217 	 * should not stop for the system call exit event.
2218 	 */
2219 
2220 	/* Replace the SIGUSR2 with a kill. */
2221 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
2222 
2223 	/* The last wait() should report the SIGKILL (not a syscall exit). */
2224 	wpid = waitpid(fpid, &status, 0);
2225 	ATF_REQUIRE(wpid == fpid);
2226 	ATF_REQUIRE(WIFSIGNALED(status));
2227 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
2228 
2229 	wpid = wait(&status);
2230 	ATF_REQUIRE(wpid == -1);
2231 	ATF_REQUIRE(errno == ECHILD);
2232 }
2233 
2234 static void
2235 sigusr1_handler(int sig)
2236 {
2237 
2238 	CHILD_REQUIRE(sig == SIGUSR1);
2239 	_exit(2);
2240 }
2241 
2242 /*
2243  * Verify that even if the signal queue is full for a child process,
2244  * a PT_KILL will kill the process.
2245  */
2246 ATF_TC_WITHOUT_HEAD(ptrace__PT_KILL_with_signal_full_sigqueue);
2247 ATF_TC_BODY(ptrace__PT_KILL_with_signal_full_sigqueue, tc)
2248 {
2249 	pid_t fpid, wpid;
2250 	int status;
2251 	int max_pending_per_proc;
2252 	size_t len;
2253 	int i;
2254 
2255 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR);
2256 
2257 	ATF_REQUIRE((fpid = fork()) != -1);
2258 	if (fpid == 0) {
2259 		trace_me();
2260 		exit(1);
2261 	}
2262 
2263 	/* The first wait() should report the stop from SIGSTOP. */
2264 	wpid = waitpid(fpid, &status, 0);
2265 	ATF_REQUIRE(wpid == fpid);
2266 	ATF_REQUIRE(WIFSTOPPED(status));
2267 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2268 
2269 	len = sizeof(max_pending_per_proc);
2270 	ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc",
2271 	    &max_pending_per_proc, &len, NULL, 0) == 0);
2272 
2273 	/* Fill the signal queue. */
2274 	for (i = 0; i < max_pending_per_proc; ++i)
2275 		ATF_REQUIRE(kill(fpid, SIGUSR1) == 0);
2276 
2277 	/* Kill the child process. */
2278 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
2279 
2280 	/* The last wait() should report the SIGKILL. */
2281 	wpid = waitpid(fpid, &status, 0);
2282 	ATF_REQUIRE(wpid == fpid);
2283 	ATF_REQUIRE(WIFSIGNALED(status));
2284 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
2285 
2286 	wpid = wait(&status);
2287 	ATF_REQUIRE(wpid == -1);
2288 	ATF_REQUIRE(errno == ECHILD);
2289 }
2290 
2291 /*
2292  * Verify that when stopped at a system call entry, a signal can be
2293  * requested with PT_CONTINUE which will be delivered once the system
2294  * call is complete.
2295  */
2296 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_system_call_entry);
2297 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_system_call_entry, tc)
2298 {
2299 	struct ptrace_lwpinfo pl;
2300 	pid_t fpid, wpid;
2301 	int status;
2302 
2303 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR);
2304 
2305 	ATF_REQUIRE((fpid = fork()) != -1);
2306 	if (fpid == 0) {
2307 		trace_me();
2308 		getpid();
2309 		exit(1);
2310 	}
2311 
2312 	/* The first wait() should report the stop from SIGSTOP. */
2313 	wpid = waitpid(fpid, &status, 0);
2314 	ATF_REQUIRE(wpid == fpid);
2315 	ATF_REQUIRE(WIFSTOPPED(status));
2316 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2317 
2318 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2319 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2320 
2321 	/* The second wait() should report a system call entry for getpid(). */
2322 	wpid = waitpid(fpid, &status, 0);
2323 	ATF_REQUIRE(wpid == fpid);
2324 	ATF_REQUIRE(WIFSTOPPED(status));
2325 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2326 
2327 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2328 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2329 
2330 	/* Continue the child process with a signal. */
2331 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2332 
2333 	for (;;) {
2334 		/*
2335 		 * The last wait() should report exit 2, i.e., a normal _exit
2336 		 * from the signal handler. In the meantime, catch and proceed
2337 		 * past any syscall stops.
2338 		 */
2339 		wpid = waitpid(fpid, &status, 0);
2340 		ATF_REQUIRE(wpid == fpid);
2341 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2342 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2343 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2344 			ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2345 		} else {
2346 			ATF_REQUIRE(WIFEXITED(status));
2347 			ATF_REQUIRE(WEXITSTATUS(status) == 2);
2348 			break;
2349 		}
2350 	}
2351 
2352 	wpid = wait(&status);
2353 	ATF_REQUIRE(wpid == -1);
2354 	ATF_REQUIRE(errno == ECHILD);
2355 }
2356 
2357 static void
2358 sigusr1_counting_handler(int sig)
2359 {
2360 	static int counter = 0;
2361 
2362 	CHILD_REQUIRE(sig == SIGUSR1);
2363 	counter++;
2364 	if (counter == 2)
2365 		_exit(2);
2366 }
2367 
2368 /*
2369  * Verify that, when continuing from a stop at system call entry and exit,
2370  * a signal can be requested from both stops, and both will be delivered when
2371  * the system call is complete.
2372  */
2373 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit);
2374 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit, tc)
2375 {
2376 	struct ptrace_lwpinfo pl;
2377 	pid_t fpid, wpid;
2378 	int status;
2379 
2380 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_counting_handler) != SIG_ERR);
2381 
2382 	ATF_REQUIRE((fpid = fork()) != -1);
2383 	if (fpid == 0) {
2384 		trace_me();
2385 		getpid();
2386 		exit(1);
2387 	}
2388 
2389 	/* The first wait() should report the stop from SIGSTOP. */
2390 	wpid = waitpid(fpid, &status, 0);
2391 	ATF_REQUIRE(wpid == fpid);
2392 	ATF_REQUIRE(WIFSTOPPED(status));
2393 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2394 
2395 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2396 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2397 
2398 	/* The second wait() should report a system call entry for getpid(). */
2399 	wpid = waitpid(fpid, &status, 0);
2400 	ATF_REQUIRE(wpid == fpid);
2401 	ATF_REQUIRE(WIFSTOPPED(status));
2402 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2403 
2404 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2405 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2406 
2407 	/* Continue the child process with a signal. */
2408 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2409 
2410 	/* The third wait() should report a system call exit for getpid(). */
2411 	wpid = waitpid(fpid, &status, 0);
2412 	ATF_REQUIRE(wpid == fpid);
2413 	ATF_REQUIRE(WIFSTOPPED(status));
2414 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2415 
2416 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2417 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
2418 
2419 	/* Continue the child process with a signal. */
2420 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2421 
2422 	for (;;) {
2423 		/*
2424 		 * The last wait() should report exit 2, i.e., a normal _exit
2425 		 * from the signal handler. In the meantime, catch and proceed
2426 		 * past any syscall stops.
2427 		 */
2428 		wpid = waitpid(fpid, &status, 0);
2429 		ATF_REQUIRE(wpid == fpid);
2430 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2431 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2432 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2433 			ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2434 		} else {
2435 			ATF_REQUIRE(WIFEXITED(status));
2436 			ATF_REQUIRE(WEXITSTATUS(status) == 2);
2437 			break;
2438 		}
2439 	}
2440 
2441 	wpid = wait(&status);
2442 	ATF_REQUIRE(wpid == -1);
2443 	ATF_REQUIRE(errno == ECHILD);
2444 }
2445 
2446 /*
2447  * Verify that even if the signal queue is full for a child process,
2448  * a PT_CONTINUE with a signal will not result in loss of that signal.
2449  */
2450 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_full_sigqueue);
2451 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_full_sigqueue, tc)
2452 {
2453 	pid_t fpid, wpid;
2454 	int status;
2455 	int max_pending_per_proc;
2456 	size_t len;
2457 	int i;
2458 
2459 	ATF_REQUIRE(signal(SIGUSR2, handler) != SIG_ERR);
2460 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_handler) != SIG_ERR);
2461 
2462 	ATF_REQUIRE((fpid = fork()) != -1);
2463 	if (fpid == 0) {
2464 		trace_me();
2465 		exit(1);
2466 	}
2467 
2468 	/* The first wait() should report the stop from SIGSTOP. */
2469 	wpid = waitpid(fpid, &status, 0);
2470 	ATF_REQUIRE(wpid == fpid);
2471 	ATF_REQUIRE(WIFSTOPPED(status));
2472 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2473 
2474 	len = sizeof(max_pending_per_proc);
2475 	ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc",
2476 	    &max_pending_per_proc, &len, NULL, 0) == 0);
2477 
2478 	/* Fill the signal queue. */
2479 	for (i = 0; i < max_pending_per_proc; ++i)
2480 		ATF_REQUIRE(kill(fpid, SIGUSR2) == 0);
2481 
2482 	/* Continue with signal. */
2483 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2484 
2485 	for (;;) {
2486 		wpid = waitpid(fpid, &status, 0);
2487 		ATF_REQUIRE(wpid == fpid);
2488 		if (WIFSTOPPED(status)) {
2489 			ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2);
2490 			ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2491 		} else {
2492 			/*
2493 			 * The last wait() should report normal _exit from the
2494 			 * SIGUSR1 handler.
2495 			 */
2496 			ATF_REQUIRE(WIFEXITED(status));
2497 			ATF_REQUIRE(WEXITSTATUS(status) == 2);
2498 			break;
2499 		}
2500 	}
2501 
2502 	wpid = wait(&status);
2503 	ATF_REQUIRE(wpid == -1);
2504 	ATF_REQUIRE(errno == ECHILD);
2505 }
2506 
2507 static sem_t sigusr1_sem;
2508 static int got_usr1;
2509 
2510 static void
2511 sigusr1_sempost_handler(int sig __unused)
2512 {
2513 
2514 	got_usr1++;
2515 	CHILD_REQUIRE(sem_post(&sigusr1_sem) == 0);
2516 }
2517 
2518 /*
2519  * Verify that even if the signal queue is full for a child process,
2520  * and the signal is masked, a PT_CONTINUE with a signal will not
2521  * result in loss of that signal.
2522  */
2523 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_masked_full_sigqueue);
2524 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_masked_full_sigqueue, tc)
2525 {
2526 	struct ptrace_lwpinfo pl;
2527 	pid_t fpid, wpid;
2528 	int status, err;
2529 	int max_pending_per_proc;
2530 	size_t len;
2531 	int i;
2532 	sigset_t sigmask;
2533 
2534 	ATF_REQUIRE(signal(SIGUSR2, handler) != SIG_ERR);
2535 	ATF_REQUIRE(sem_init(&sigusr1_sem, 0, 0) == 0);
2536 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
2537 
2538 	got_usr1 = 0;
2539 	ATF_REQUIRE((fpid = fork()) != -1);
2540 	if (fpid == 0) {
2541 		CHILD_REQUIRE(sigemptyset(&sigmask) == 0);
2542 		CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0);
2543 		CHILD_REQUIRE(sigprocmask(SIG_BLOCK, &sigmask, NULL) == 0);
2544 
2545 		trace_me();
2546 		CHILD_REQUIRE(got_usr1 == 0);
2547 
2548 		/* Allow the pending SIGUSR1 in now. */
2549 		CHILD_REQUIRE(sigprocmask(SIG_UNBLOCK, &sigmask, NULL) == 0);
2550 		/* Wait to receive the SIGUSR1. */
2551 		do {
2552 			err = sem_wait(&sigusr1_sem);
2553 			CHILD_REQUIRE(err == 0 || errno == EINTR);
2554 		} while (err != 0 && errno == EINTR);
2555 		CHILD_REQUIRE(got_usr1 == 1);
2556 		exit(1);
2557 	}
2558 
2559 	/* The first wait() should report the stop from SIGSTOP. */
2560 	wpid = waitpid(fpid, &status, 0);
2561 	ATF_REQUIRE(wpid == fpid);
2562 	ATF_REQUIRE(WIFSTOPPED(status));
2563 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2564 
2565 	len = sizeof(max_pending_per_proc);
2566 	ATF_REQUIRE(sysctlbyname("kern.sigqueue.max_pending_per_proc",
2567 	    &max_pending_per_proc, &len, NULL, 0) == 0);
2568 
2569 	/* Fill the signal queue. */
2570 	for (i = 0; i < max_pending_per_proc; ++i)
2571 		ATF_REQUIRE(kill(fpid, SIGUSR2) == 0);
2572 
2573 	/* Continue with signal. */
2574 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2575 
2576 	/* Collect and ignore all of the SIGUSR2. */
2577 	for (i = 0; i < max_pending_per_proc; ++i) {
2578 		wpid = waitpid(fpid, &status, 0);
2579 		ATF_REQUIRE(wpid == fpid);
2580 		ATF_REQUIRE(WIFSTOPPED(status));
2581 		ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2);
2582 		ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2583 	}
2584 
2585 	/* Now our PT_CONTINUE'd SIGUSR1 should cause a stop after unmask. */
2586 	wpid = waitpid(fpid, &status, 0);
2587 	ATF_REQUIRE(wpid == fpid);
2588 	ATF_REQUIRE(WIFSTOPPED(status));
2589 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR1);
2590 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
2591 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGUSR1);
2592 
2593 	/* Continue the child, ignoring the SIGUSR1. */
2594 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2595 
2596 	/* The last wait() should report exit after receiving SIGUSR1. */
2597 	wpid = waitpid(fpid, &status, 0);
2598 	ATF_REQUIRE(wpid == fpid);
2599 	ATF_REQUIRE(WIFEXITED(status));
2600 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
2601 
2602 	wpid = wait(&status);
2603 	ATF_REQUIRE(wpid == -1);
2604 	ATF_REQUIRE(errno == ECHILD);
2605 }
2606 
2607 /*
2608  * Verify that, after stopping due to a signal, that signal can be
2609  * replaced with another signal.
2610  */
2611 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_change_sig);
2612 ATF_TC_BODY(ptrace__PT_CONTINUE_change_sig, tc)
2613 {
2614 	struct ptrace_lwpinfo pl;
2615 	pid_t fpid, wpid;
2616 	int status;
2617 
2618 	ATF_REQUIRE((fpid = fork()) != -1);
2619 	if (fpid == 0) {
2620 		trace_me();
2621 		sleep(20);
2622 		exit(1);
2623 	}
2624 
2625 	/* The first wait() should report the stop from SIGSTOP. */
2626 	wpid = waitpid(fpid, &status, 0);
2627 	ATF_REQUIRE(wpid == fpid);
2628 	ATF_REQUIRE(WIFSTOPPED(status));
2629 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2630 
2631 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2632 
2633 	/* Send a signal without ptrace. */
2634 	ATF_REQUIRE(kill(fpid, SIGINT) == 0);
2635 
2636 	/* The second wait() should report a SIGINT was received. */
2637 	wpid = waitpid(fpid, &status, 0);
2638 	ATF_REQUIRE(wpid == fpid);
2639 	ATF_REQUIRE(WIFSTOPPED(status));
2640 	ATF_REQUIRE(WSTOPSIG(status) == SIGINT);
2641 
2642 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2643 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
2644 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGINT);
2645 
2646 	/* Continue the child process with a different signal. */
2647 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGTERM) == 0);
2648 
2649 	/*
2650 	 * The last wait() should report having died due to the new
2651 	 * signal, SIGTERM.
2652 	 */
2653 	wpid = waitpid(fpid, &status, 0);
2654 	ATF_REQUIRE(wpid == fpid);
2655 	ATF_REQUIRE(WIFSIGNALED(status));
2656 	ATF_REQUIRE(WTERMSIG(status) == SIGTERM);
2657 
2658 	wpid = wait(&status);
2659 	ATF_REQUIRE(wpid == -1);
2660 	ATF_REQUIRE(errno == ECHILD);
2661 }
2662 
2663 /*
2664  * Verify that a signal can be passed through to the child even when there
2665  * was no true signal originally. Such cases arise when a SIGTRAP is
2666  * invented for e.g, system call stops.
2667  */
2668 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_sigtrap_system_call_entry);
2669 ATF_TC_BODY(ptrace__PT_CONTINUE_with_sigtrap_system_call_entry, tc)
2670 {
2671 	struct ptrace_lwpinfo pl;
2672 	struct rlimit rl;
2673 	pid_t fpid, wpid;
2674 	int status;
2675 
2676 	ATF_REQUIRE((fpid = fork()) != -1);
2677 	if (fpid == 0) {
2678 		trace_me();
2679 		/* SIGTRAP expected to cause exit on syscall entry. */
2680 		rl.rlim_cur = rl.rlim_max = 0;
2681 		ATF_REQUIRE(setrlimit(RLIMIT_CORE, &rl) == 0);
2682 		getpid();
2683 		exit(1);
2684 	}
2685 
2686 	/* The first wait() should report the stop from SIGSTOP. */
2687 	wpid = waitpid(fpid, &status, 0);
2688 	ATF_REQUIRE(wpid == fpid);
2689 	ATF_REQUIRE(WIFSTOPPED(status));
2690 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2691 
2692 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2693 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2694 
2695 	/* The second wait() should report a system call entry for getpid(). */
2696 	wpid = waitpid(fpid, &status, 0);
2697 	ATF_REQUIRE(wpid == fpid);
2698 	ATF_REQUIRE(WIFSTOPPED(status));
2699 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2700 
2701 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2702 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2703 
2704 	/* Continue the child process with a SIGTRAP. */
2705 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGTRAP) == 0);
2706 
2707 	for (;;) {
2708 		/*
2709 		 * The last wait() should report exit due to SIGTRAP.  In the
2710 		 * meantime, catch and proceed past any syscall stops.
2711 		 */
2712 		wpid = waitpid(fpid, &status, 0);
2713 		ATF_REQUIRE(wpid == fpid);
2714 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2715 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2716 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2717 			ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2718 		} else {
2719 			ATF_REQUIRE(WIFSIGNALED(status));
2720 			ATF_REQUIRE(WTERMSIG(status) == SIGTRAP);
2721 			break;
2722 		}
2723 	}
2724 
2725 	wpid = wait(&status);
2726 	ATF_REQUIRE(wpid == -1);
2727 	ATF_REQUIRE(errno == ECHILD);
2728 
2729 }
2730 
2731 /*
2732  * A mixed bag PT_CONTINUE with signal test.
2733  */
2734 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_mix);
2735 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_mix, tc)
2736 {
2737 	struct ptrace_lwpinfo pl;
2738 	pid_t fpid, wpid;
2739 	int status;
2740 
2741 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_counting_handler) != SIG_ERR);
2742 
2743 	ATF_REQUIRE((fpid = fork()) != -1);
2744 	if (fpid == 0) {
2745 		trace_me();
2746 		getpid();
2747 		exit(1);
2748 	}
2749 
2750 	/* The first wait() should report the stop from SIGSTOP. */
2751 	wpid = waitpid(fpid, &status, 0);
2752 	ATF_REQUIRE(wpid == fpid);
2753 	ATF_REQUIRE(WIFSTOPPED(status));
2754 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2755 
2756 	/* Continue the child ignoring the SIGSTOP and tracing system calls. */
2757 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
2758 
2759 	/* The second wait() should report a system call entry for getpid(). */
2760 	wpid = waitpid(fpid, &status, 0);
2761 	ATF_REQUIRE(wpid == fpid);
2762 	ATF_REQUIRE(WIFSTOPPED(status));
2763 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2764 
2765 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2766 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
2767 
2768 	/* Continue with the first SIGUSR1. */
2769 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2770 
2771 	/* The next wait() should report a system call exit for getpid(). */
2772 	wpid = waitpid(fpid, &status, 0);
2773 	ATF_REQUIRE(wpid == fpid);
2774 	ATF_REQUIRE(WIFSTOPPED(status));
2775 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
2776 
2777 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2778 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
2779 
2780 	/* Send an ABRT without ptrace. */
2781 	ATF_REQUIRE(kill(fpid, SIGABRT) == 0);
2782 
2783 	/* Continue normally. */
2784 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2785 
2786 	/* The next wait() should report the SIGABRT. */
2787 	wpid = waitpid(fpid, &status, 0);
2788 	ATF_REQUIRE(wpid == fpid);
2789 	ATF_REQUIRE(WIFSTOPPED(status));
2790 	ATF_REQUIRE(WSTOPSIG(status) == SIGABRT);
2791 
2792 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2793 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
2794 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGABRT);
2795 
2796 	/* Continue, replacing the SIGABRT with another SIGUSR1. */
2797 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2798 
2799 	for (;;) {
2800 		/*
2801 		 * The last wait() should report exit 2, i.e., a normal _exit
2802 		 * from the signal handler. In the meantime, catch and proceed
2803 		 * past any syscall stops.
2804 		 */
2805 		wpid = waitpid(fpid, &status, 0);
2806 		ATF_REQUIRE(wpid == fpid);
2807 		if (WIFSTOPPED(status) && WSTOPSIG(status) == SIGTRAP) {
2808 			ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
2809 			ATF_REQUIRE(pl.pl_flags & (PL_FLAG_SCE | PL_FLAG_SCX));
2810 			ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2811 		} else {
2812 			ATF_REQUIRE(WIFEXITED(status));
2813 			ATF_REQUIRE(WEXITSTATUS(status) == 2);
2814 			break;
2815 		}
2816 	}
2817 
2818 	wpid = wait(&status);
2819 	ATF_REQUIRE(wpid == -1);
2820 	ATF_REQUIRE(errno == ECHILD);
2821 
2822 }
2823 
2824 /*
2825  * Verify a signal delivered by ptrace is noticed by kevent(2).
2826  */
2827 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_kqueue);
2828 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_kqueue, tc)
2829 {
2830 	pid_t fpid, wpid;
2831 	int status, kq, nevents;
2832 	struct kevent kev;
2833 
2834 	ATF_REQUIRE(signal(SIGUSR1, SIG_IGN) != SIG_ERR);
2835 
2836 	ATF_REQUIRE((fpid = fork()) != -1);
2837 	if (fpid == 0) {
2838 		CHILD_REQUIRE((kq = kqueue()) > 0);
2839 		EV_SET(&kev, SIGUSR1, EVFILT_SIGNAL, EV_ADD, 0, 0, 0);
2840 		CHILD_REQUIRE(kevent(kq, &kev, 1, NULL, 0, NULL) == 0);
2841 
2842 		trace_me();
2843 
2844 		for (;;) {
2845 			nevents = kevent(kq, NULL, 0, &kev, 1, NULL);
2846 			if (nevents == -1 && errno == EINTR)
2847 				continue;
2848 			CHILD_REQUIRE(nevents > 0);
2849 			CHILD_REQUIRE(kev.filter == EVFILT_SIGNAL);
2850 			CHILD_REQUIRE(kev.ident == SIGUSR1);
2851 			break;
2852 		}
2853 
2854 		exit(1);
2855 	}
2856 
2857 	/* The first wait() should report the stop from SIGSTOP. */
2858 	wpid = waitpid(fpid, &status, 0);
2859 	ATF_REQUIRE(wpid == fpid);
2860 	ATF_REQUIRE(WIFSTOPPED(status));
2861 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2862 
2863 	/* Continue with the SIGUSR1. */
2864 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2865 
2866 	/*
2867 	 * The last wait() should report normal exit with code 1.
2868 	 */
2869 	wpid = waitpid(fpid, &status, 0);
2870 	ATF_REQUIRE(wpid == fpid);
2871 	ATF_REQUIRE(WIFEXITED(status));
2872 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
2873 
2874 	wpid = wait(&status);
2875 	ATF_REQUIRE(wpid == -1);
2876 	ATF_REQUIRE(errno == ECHILD);
2877 }
2878 
2879 static void *
2880 signal_thread(void *arg)
2881 {
2882 	int err;
2883 	sigset_t sigmask;
2884 
2885 	pthread_barrier_t *pbarrier = (pthread_barrier_t*)arg;
2886 
2887 	/* Wait for this thread to receive a SIGUSR1. */
2888 	do {
2889 		err = sem_wait(&sigusr1_sem);
2890 		CHILD_REQUIRE(err == 0 || errno == EINTR);
2891 	} while (err != 0 && errno == EINTR);
2892 
2893 	/* Free our companion thread from the barrier. */
2894 	pthread_barrier_wait(pbarrier);
2895 
2896 	/*
2897 	 * Swap ignore duties; the next SIGUSR1 should go to the
2898 	 * other thread.
2899 	 */
2900 	CHILD_REQUIRE(sigemptyset(&sigmask) == 0);
2901 	CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0);
2902 	CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0);
2903 
2904 	/* Sync up threads after swapping signal masks. */
2905 	pthread_barrier_wait(pbarrier);
2906 
2907 	/* Wait until our companion has received its SIGUSR1. */
2908 	pthread_barrier_wait(pbarrier);
2909 
2910 	return (NULL);
2911 }
2912 
2913 /*
2914  * Verify that a traced process with blocked signal received the
2915  * signal from kill() once unmasked.
2916  */
2917 ATF_TC_WITHOUT_HEAD(ptrace__killed_with_sigmask);
2918 ATF_TC_BODY(ptrace__killed_with_sigmask, tc)
2919 {
2920 	struct ptrace_lwpinfo pl;
2921 	pid_t fpid, wpid;
2922 	int status, err;
2923 	sigset_t sigmask;
2924 
2925 	ATF_REQUIRE(sem_init(&sigusr1_sem, 0, 0) == 0);
2926 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
2927 	got_usr1 = 0;
2928 
2929 	ATF_REQUIRE((fpid = fork()) != -1);
2930 	if (fpid == 0) {
2931 		CHILD_REQUIRE(sigemptyset(&sigmask) == 0);
2932 		CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0);
2933 		CHILD_REQUIRE(sigprocmask(SIG_BLOCK, &sigmask, NULL) == 0);
2934 
2935 		trace_me();
2936 		CHILD_REQUIRE(got_usr1 == 0);
2937 
2938 		/* Allow the pending SIGUSR1 in now. */
2939 		CHILD_REQUIRE(sigprocmask(SIG_UNBLOCK, &sigmask, NULL) == 0);
2940 		/* Wait to receive a SIGUSR1. */
2941 		do {
2942 			err = sem_wait(&sigusr1_sem);
2943 			CHILD_REQUIRE(err == 0 || errno == EINTR);
2944 		} while (err != 0 && errno == EINTR);
2945 		CHILD_REQUIRE(got_usr1 == 1);
2946 		exit(1);
2947 	}
2948 
2949 	/* The first wait() should report the stop from SIGSTOP. */
2950 	wpid = waitpid(fpid, &status, 0);
2951 	ATF_REQUIRE(wpid == fpid);
2952 	ATF_REQUIRE(WIFSTOPPED(status));
2953 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
2954 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
2955 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGSTOP);
2956 
2957 	/* Send blocked SIGUSR1 which should cause a stop. */
2958 	ATF_REQUIRE(kill(fpid, SIGUSR1) == 0);
2959 
2960 	/* Continue the child ignoring the SIGSTOP. */
2961 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
2962 
2963 	/* The next wait() should report the kill(SIGUSR1) was received. */
2964 	wpid = waitpid(fpid, &status, 0);
2965 	ATF_REQUIRE(wpid == fpid);
2966 	ATF_REQUIRE(WIFSTOPPED(status));
2967 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR1);
2968 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
2969 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGUSR1);
2970 
2971 	/* Continue the child, allowing in the SIGUSR1. */
2972 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
2973 
2974 	/* The last wait() should report normal exit with code 1. */
2975 	wpid = waitpid(fpid, &status, 0);
2976 	ATF_REQUIRE(wpid == fpid);
2977 	ATF_REQUIRE(WIFEXITED(status));
2978 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
2979 
2980 	wpid = wait(&status);
2981 	ATF_REQUIRE(wpid == -1);
2982 	ATF_REQUIRE(errno == ECHILD);
2983 }
2984 
2985 /*
2986  * Verify that a traced process with blocked signal received the
2987  * signal from PT_CONTINUE once unmasked.
2988  */
2989 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_sigmask);
2990 ATF_TC_BODY(ptrace__PT_CONTINUE_with_sigmask, tc)
2991 {
2992 	struct ptrace_lwpinfo pl;
2993 	pid_t fpid, wpid;
2994 	int status, err;
2995 	sigset_t sigmask;
2996 
2997 	ATF_REQUIRE(sem_init(&sigusr1_sem, 0, 0) == 0);
2998 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
2999 	got_usr1 = 0;
3000 
3001 	ATF_REQUIRE((fpid = fork()) != -1);
3002 	if (fpid == 0) {
3003 		CHILD_REQUIRE(sigemptyset(&sigmask) == 0);
3004 		CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0);
3005 		CHILD_REQUIRE(sigprocmask(SIG_BLOCK, &sigmask, NULL) == 0);
3006 
3007 		trace_me();
3008 		CHILD_REQUIRE(got_usr1 == 0);
3009 
3010 		/* Allow the pending SIGUSR1 in now. */
3011 		CHILD_REQUIRE(sigprocmask(SIG_UNBLOCK, &sigmask, NULL) == 0);
3012 		/* Wait to receive a SIGUSR1. */
3013 		do {
3014 			err = sem_wait(&sigusr1_sem);
3015 			CHILD_REQUIRE(err == 0 || errno == EINTR);
3016 		} while (err != 0 && errno == EINTR);
3017 
3018 		CHILD_REQUIRE(got_usr1 == 1);
3019 		exit(1);
3020 	}
3021 
3022 	/* The first wait() should report the stop from SIGSTOP. */
3023 	wpid = waitpid(fpid, &status, 0);
3024 	ATF_REQUIRE(wpid == fpid);
3025 	ATF_REQUIRE(WIFSTOPPED(status));
3026 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3027 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
3028 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGSTOP);
3029 
3030 	/* Continue the child replacing SIGSTOP with SIGUSR1. */
3031 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
3032 
3033 	/* The next wait() should report the SIGUSR1 was received. */
3034 	wpid = waitpid(fpid, &status, 0);
3035 	ATF_REQUIRE(wpid == fpid);
3036 	ATF_REQUIRE(WIFSTOPPED(status));
3037 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR1);
3038 	ATF_REQUIRE(ptrace(PT_LWPINFO, fpid, (caddr_t)&pl, sizeof(pl)) != -1);
3039 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGUSR1);
3040 
3041 	/* Continue the child, ignoring the SIGUSR1. */
3042 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3043 
3044 	/* The last wait() should report normal exit with code 1. */
3045 	wpid = waitpid(fpid, &status, 0);
3046 	ATF_REQUIRE(wpid == fpid);
3047 	ATF_REQUIRE(WIFEXITED(status));
3048 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
3049 
3050 	wpid = wait(&status);
3051 	ATF_REQUIRE(wpid == -1);
3052 	ATF_REQUIRE(errno == ECHILD);
3053 }
3054 
3055 /*
3056  * Verify that if ptrace stops due to a signal but continues with
3057  * a different signal that the new signal is routed to a thread
3058  * that can accept it, and that the thread is awakened by the signal
3059  * in a timely manner.
3060  */
3061 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_with_signal_thread_sigmask);
3062 ATF_TC_BODY(ptrace__PT_CONTINUE_with_signal_thread_sigmask, tc)
3063 {
3064 	pid_t fpid, wpid;
3065 	int status, err;
3066 	pthread_t t;
3067 	sigset_t sigmask;
3068 	pthread_barrier_t barrier;
3069 
3070 	ATF_REQUIRE(pthread_barrier_init(&barrier, NULL, 2) == 0);
3071 	ATF_REQUIRE(sem_init(&sigusr1_sem, 0, 0) == 0);
3072 	ATF_REQUIRE(signal(SIGUSR1, sigusr1_sempost_handler) != SIG_ERR);
3073 
3074 	ATF_REQUIRE((fpid = fork()) != -1);
3075 	if (fpid == 0) {
3076 		CHILD_REQUIRE(pthread_create(&t, NULL, signal_thread, (void*)&barrier) == 0);
3077 
3078 		/* The other thread should receive the first SIGUSR1. */
3079 		CHILD_REQUIRE(sigemptyset(&sigmask) == 0);
3080 		CHILD_REQUIRE(sigaddset(&sigmask, SIGUSR1) == 0);
3081 		CHILD_REQUIRE(pthread_sigmask(SIG_BLOCK, &sigmask, NULL) == 0);
3082 
3083 		trace_me();
3084 
3085 		/* Wait until other thread has received its SIGUSR1. */
3086 		pthread_barrier_wait(&barrier);
3087 
3088 		/*
3089 		 * Swap ignore duties; the next SIGUSR1 should go to this
3090 		 * thread.
3091 		 */
3092 		CHILD_REQUIRE(pthread_sigmask(SIG_UNBLOCK, &sigmask, NULL) == 0);
3093 
3094 		/* Sync up threads after swapping signal masks. */
3095 		pthread_barrier_wait(&barrier);
3096 
3097 		/*
3098 		 * Sync up with test code; we're ready for the next SIGUSR1
3099 		 * now.
3100 		 */
3101 		raise(SIGSTOP);
3102 
3103 		/* Wait for this thread to receive a SIGUSR1. */
3104 		do {
3105 			err = sem_wait(&sigusr1_sem);
3106 			CHILD_REQUIRE(err == 0 || errno == EINTR);
3107 		} while (err != 0 && errno == EINTR);
3108 
3109 		/* Free the other thread from the barrier. */
3110 		pthread_barrier_wait(&barrier);
3111 
3112 		CHILD_REQUIRE(pthread_join(t, NULL) == 0);
3113 
3114 		exit(1);
3115 	}
3116 
3117 	/* The first wait() should report the stop from SIGSTOP. */
3118 	wpid = waitpid(fpid, &status, 0);
3119 	ATF_REQUIRE(wpid == fpid);
3120 	ATF_REQUIRE(WIFSTOPPED(status));
3121 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3122 
3123 	/* Continue the child ignoring the SIGSTOP. */
3124 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3125 
3126 	/*
3127 	 * Send a signal without ptrace that either thread will accept (USR2,
3128 	 * in this case).
3129 	 */
3130 	ATF_REQUIRE(kill(fpid, SIGUSR2) == 0);
3131 
3132 	/* The second wait() should report a SIGUSR2 was received. */
3133 	wpid = waitpid(fpid, &status, 0);
3134 	ATF_REQUIRE(wpid == fpid);
3135 	ATF_REQUIRE(WIFSTOPPED(status));
3136 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2);
3137 
3138 	/* Continue the child, changing the signal to USR1. */
3139 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
3140 
3141 	/* The next wait() should report the stop from SIGSTOP. */
3142 	wpid = waitpid(fpid, &status, 0);
3143 	ATF_REQUIRE(wpid == fpid);
3144 	ATF_REQUIRE(WIFSTOPPED(status));
3145 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3146 
3147 	/* Continue the child ignoring the SIGSTOP. */
3148 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3149 
3150 	ATF_REQUIRE(kill(fpid, SIGUSR2) == 0);
3151 
3152 	/* The next wait() should report a SIGUSR2 was received. */
3153 	wpid = waitpid(fpid, &status, 0);
3154 	ATF_REQUIRE(wpid == fpid);
3155 	ATF_REQUIRE(WIFSTOPPED(status));
3156 	ATF_REQUIRE(WSTOPSIG(status) == SIGUSR2);
3157 
3158 	/* Continue the child, changing the signal to USR1. */
3159 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, SIGUSR1) == 0);
3160 
3161 	/* The last wait() should report normal exit with code 1. */
3162 	wpid = waitpid(fpid, &status, 0);
3163 	ATF_REQUIRE(wpid == fpid);
3164 	ATF_REQUIRE(WIFEXITED(status));
3165 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
3166 
3167 	wpid = wait(&status);
3168 	ATF_REQUIRE(wpid == -1);
3169 	ATF_REQUIRE(errno == ECHILD);
3170 }
3171 
3172 static void *
3173 raise_sigstop_thread(void *arg __unused)
3174 {
3175 
3176 	raise(SIGSTOP);
3177 	return NULL;
3178 }
3179 
3180 static void *
3181 sleep_thread(void *arg __unused)
3182 {
3183 
3184 	sleep(60);
3185 	return NULL;
3186 }
3187 
3188 static void
3189 terminate_with_pending_sigstop(bool sigstop_from_main_thread)
3190 {
3191 	pid_t fpid, wpid;
3192 	int status, i;
3193 	cpuset_t setmask;
3194 	cpusetid_t setid;
3195 	pthread_t t;
3196 
3197 	/*
3198 	 * Become the reaper for this process tree. We need to be able to check
3199 	 * that both child and grandchild have died.
3200 	 */
3201 	ATF_REQUIRE(procctl(P_PID, getpid(), PROC_REAP_ACQUIRE, NULL) == 0);
3202 
3203 	fpid = fork();
3204 	ATF_REQUIRE(fpid >= 0);
3205 	if (fpid == 0) {
3206 		fpid = fork();
3207 		CHILD_REQUIRE(fpid >= 0);
3208 		if (fpid == 0) {
3209 			trace_me();
3210 
3211 			/* Pin to CPU 0 to serialize thread execution. */
3212 			CPU_ZERO(&setmask);
3213 			CPU_SET(0, &setmask);
3214 			CHILD_REQUIRE(cpuset(&setid) == 0);
3215 			CHILD_REQUIRE(cpuset_setaffinity(CPU_LEVEL_CPUSET,
3216 			    CPU_WHICH_CPUSET, setid,
3217 			    sizeof(setmask), &setmask) == 0);
3218 
3219 			if (sigstop_from_main_thread) {
3220 				/*
3221 				 * We expect the SIGKILL sent when our parent
3222 				 * dies to be delivered to the new thread.
3223 				 * Raise the SIGSTOP in this thread so the
3224 				 * threads compete.
3225 				 */
3226 				CHILD_REQUIRE(pthread_create(&t, NULL,
3227 				    sleep_thread, NULL) == 0);
3228 				raise(SIGSTOP);
3229 			} else {
3230 				/*
3231 				 * We expect the SIGKILL to be delivered to
3232 				 * this thread. After creating the new thread,
3233 				 * just get off the CPU so the other thread can
3234 				 * raise the SIGSTOP.
3235 				 */
3236 				CHILD_REQUIRE(pthread_create(&t, NULL,
3237 				    raise_sigstop_thread, NULL) == 0);
3238 				sleep(60);
3239 			}
3240 
3241 			exit(0);
3242 		}
3243 		/* First stop is trace_me() immediately after fork. */
3244 		wpid = waitpid(fpid, &status, 0);
3245 		CHILD_REQUIRE(wpid == fpid);
3246 		CHILD_REQUIRE(WIFSTOPPED(status));
3247 		CHILD_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3248 
3249 		CHILD_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3250 
3251 		/* Second stop is from the raise(SIGSTOP). */
3252 		wpid = waitpid(fpid, &status, 0);
3253 		CHILD_REQUIRE(wpid == fpid);
3254 		CHILD_REQUIRE(WIFSTOPPED(status));
3255 		CHILD_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3256 
3257 		/*
3258 		 * Terminate tracing process without detaching. Our child
3259 		 * should be killed.
3260 		 */
3261 		exit(0);
3262 	}
3263 
3264 	/*
3265 	 * We should get a normal exit from our immediate child and a SIGKILL
3266 	 * exit from our grandchild. The latter case is the interesting one.
3267 	 * Our grandchild should not have stopped due to the SIGSTOP that was
3268 	 * left dangling when its parent died.
3269 	 */
3270 	for (i = 0; i < 2; ++i) {
3271 		wpid = wait(&status);
3272 		if (wpid == fpid)
3273 			ATF_REQUIRE(WIFEXITED(status) &&
3274 			    WEXITSTATUS(status) == 0);
3275 		else
3276 			ATF_REQUIRE(WIFSIGNALED(status) &&
3277 			    WTERMSIG(status) == SIGKILL);
3278 	}
3279 }
3280 
3281 /*
3282  * These two tests ensure that if the tracing process exits without detaching
3283  * just after the child received a SIGSTOP, the child is cleanly killed and
3284  * doesn't go to sleep due to the SIGSTOP. The parent's death will send a
3285  * SIGKILL to the child. If the SIGKILL and the SIGSTOP are handled by
3286  * different threads, the SIGKILL must win.  There are two variants of this
3287  * test, designed to catch the case where the SIGKILL is delivered to the
3288  * younger thread (the first test) and the case where the SIGKILL is delivered
3289  * to the older thread (the second test). This behavior has changed in the
3290  * past, so make no assumption.
3291  */
3292 ATF_TC(ptrace__parent_terminate_with_pending_sigstop1);
3293 ATF_TC_HEAD(ptrace__parent_terminate_with_pending_sigstop1, tc)
3294 {
3295 
3296 	atf_tc_set_md_var(tc, "require.user", "root");
3297 }
3298 ATF_TC_BODY(ptrace__parent_terminate_with_pending_sigstop1, tc)
3299 {
3300 
3301 	terminate_with_pending_sigstop(true);
3302 }
3303 
3304 ATF_TC(ptrace__parent_terminate_with_pending_sigstop2);
3305 ATF_TC_HEAD(ptrace__parent_terminate_with_pending_sigstop2, tc)
3306 {
3307 
3308 	atf_tc_set_md_var(tc, "require.user", "root");
3309 }
3310 ATF_TC_BODY(ptrace__parent_terminate_with_pending_sigstop2, tc)
3311 {
3312 
3313 	terminate_with_pending_sigstop(false);
3314 }
3315 
3316 /*
3317  * Verify that after ptrace() discards a SIGKILL signal, the event mask
3318  * is not modified.
3319  */
3320 ATF_TC_WITHOUT_HEAD(ptrace__event_mask_sigkill_discard);
3321 ATF_TC_BODY(ptrace__event_mask_sigkill_discard, tc)
3322 {
3323 	struct ptrace_lwpinfo pl;
3324 	pid_t fpid, wpid;
3325 	int status, event_mask, new_event_mask;
3326 
3327 	ATF_REQUIRE((fpid = fork()) != -1);
3328 	if (fpid == 0) {
3329 		trace_me();
3330 		raise(SIGSTOP);
3331 		exit(0);
3332 	}
3333 
3334 	/* The first wait() should report the stop from trace_me(). */
3335 	wpid = waitpid(fpid, &status, 0);
3336 	ATF_REQUIRE(wpid == fpid);
3337 	ATF_REQUIRE(WIFSTOPPED(status));
3338 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3339 
3340 	/* Set several unobtrusive event bits. */
3341 	event_mask = PTRACE_EXEC | PTRACE_FORK | PTRACE_LWP;
3342 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, wpid, (caddr_t)&event_mask,
3343 	    sizeof(event_mask)) == 0);
3344 
3345 	/* Send a SIGKILL without using ptrace. */
3346 	ATF_REQUIRE(kill(fpid, SIGKILL) == 0);
3347 
3348 	/* Continue the child ignoring the SIGSTOP. */
3349 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3350 
3351 	/* The next stop should be due to the SIGKILL. */
3352 	wpid = waitpid(fpid, &status, 0);
3353 	ATF_REQUIRE(wpid == fpid);
3354 	ATF_REQUIRE(WIFSTOPPED(status));
3355 	ATF_REQUIRE(WSTOPSIG(status) == SIGKILL);
3356 
3357 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3358 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3359 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGKILL);
3360 
3361 	/* Continue the child ignoring the SIGKILL. */
3362 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3363 
3364 	/* The next wait() should report the stop from SIGSTOP. */
3365 	wpid = waitpid(fpid, &status, 0);
3366 	ATF_REQUIRE(wpid == fpid);
3367 	ATF_REQUIRE(WIFSTOPPED(status));
3368 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3369 
3370 	/* Check the current event mask. It should not have changed. */
3371 	new_event_mask = 0;
3372 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, wpid, (caddr_t)&new_event_mask,
3373 	    sizeof(new_event_mask)) == 0);
3374 	ATF_REQUIRE(event_mask == new_event_mask);
3375 
3376 	/* Continue the child to let it exit. */
3377 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3378 
3379 	/* The last event should be for the child process's exit. */
3380 	wpid = waitpid(fpid, &status, 0);
3381 	ATF_REQUIRE(WIFEXITED(status));
3382 	ATF_REQUIRE(WEXITSTATUS(status) == 0);
3383 
3384 	wpid = wait(&status);
3385 	ATF_REQUIRE(wpid == -1);
3386 	ATF_REQUIRE(errno == ECHILD);
3387 }
3388 
3389 static void *
3390 flock_thread(void *arg)
3391 {
3392 	int fd;
3393 
3394 	fd = *(int *)arg;
3395 	(void)flock(fd, LOCK_EX);
3396 	(void)flock(fd, LOCK_UN);
3397 	return (NULL);
3398 }
3399 
3400 /*
3401  * Verify that PT_ATTACH will suspend threads sleeping in an SBDRY section.
3402  * We rely on the fact that the lockf implementation sets SBDRY before blocking
3403  * on a lock. This is a regression test for r318191.
3404  */
3405 ATF_TC_WITHOUT_HEAD(ptrace__PT_ATTACH_with_SBDRY_thread);
3406 ATF_TC_BODY(ptrace__PT_ATTACH_with_SBDRY_thread, tc)
3407 {
3408 	pthread_barrier_t barrier;
3409 	pthread_barrierattr_t battr;
3410 	char tmpfile[64];
3411 	pid_t child, wpid;
3412 	int error, fd, i, status;
3413 
3414 	ATF_REQUIRE(pthread_barrierattr_init(&battr) == 0);
3415 	ATF_REQUIRE(pthread_barrierattr_setpshared(&battr,
3416 	    PTHREAD_PROCESS_SHARED) == 0);
3417 	ATF_REQUIRE(pthread_barrier_init(&barrier, &battr, 2) == 0);
3418 
3419 	(void)snprintf(tmpfile, sizeof(tmpfile), "./ptrace.XXXXXX");
3420 	fd = mkstemp(tmpfile);
3421 	ATF_REQUIRE(fd >= 0);
3422 
3423 	ATF_REQUIRE((child = fork()) != -1);
3424 	if (child == 0) {
3425 		pthread_t t[2];
3426 		int cfd;
3427 
3428 		error = pthread_barrier_wait(&barrier);
3429 		if (error != 0 && error != PTHREAD_BARRIER_SERIAL_THREAD)
3430 			_exit(1);
3431 
3432 		cfd = open(tmpfile, O_RDONLY);
3433 		if (cfd < 0)
3434 			_exit(1);
3435 
3436 		/*
3437 		 * We want at least two threads blocked on the file lock since
3438 		 * the SIGSTOP from PT_ATTACH may kick one of them out of
3439 		 * sleep.
3440 		 */
3441 		if (pthread_create(&t[0], NULL, flock_thread, &cfd) != 0)
3442 			_exit(1);
3443 		if (pthread_create(&t[1], NULL, flock_thread, &cfd) != 0)
3444 			_exit(1);
3445 		if (pthread_join(t[0], NULL) != 0)
3446 			_exit(1);
3447 		if (pthread_join(t[1], NULL) != 0)
3448 			_exit(1);
3449 		_exit(0);
3450 	}
3451 
3452 	ATF_REQUIRE(flock(fd, LOCK_EX) == 0);
3453 
3454 	error = pthread_barrier_wait(&barrier);
3455 	ATF_REQUIRE(error == 0 || error == PTHREAD_BARRIER_SERIAL_THREAD);
3456 
3457 	/*
3458 	 * Give the child some time to block. Is there a better way to do this?
3459 	 */
3460 	sleep(1);
3461 
3462 	/*
3463 	 * Attach and give the child 3 seconds to stop.
3464 	 */
3465 	ATF_REQUIRE(ptrace(PT_ATTACH, child, NULL, 0) == 0);
3466 	for (i = 0; i < 3; i++) {
3467 		wpid = waitpid(child, &status, WNOHANG);
3468 		if (wpid == child && WIFSTOPPED(status) &&
3469 		    WSTOPSIG(status) == SIGSTOP)
3470 			break;
3471 		sleep(1);
3472 	}
3473 	ATF_REQUIRE_MSG(i < 3, "failed to stop child process after PT_ATTACH");
3474 
3475 	ATF_REQUIRE(ptrace(PT_DETACH, child, NULL, 0) == 0);
3476 
3477 	ATF_REQUIRE(flock(fd, LOCK_UN) == 0);
3478 	ATF_REQUIRE(unlink(tmpfile) == 0);
3479 	ATF_REQUIRE(close(fd) == 0);
3480 }
3481 
3482 static void
3483 sigusr1_step_handler(int sig)
3484 {
3485 
3486 	CHILD_REQUIRE(sig == SIGUSR1);
3487 	raise(SIGABRT);
3488 }
3489 
3490 /*
3491  * Verify that PT_STEP with a signal invokes the signal before
3492  * stepping the next instruction (and that the next instruction is
3493  * stepped correctly).
3494  */
3495 ATF_TC_WITHOUT_HEAD(ptrace__PT_STEP_with_signal);
3496 ATF_TC_BODY(ptrace__PT_STEP_with_signal, tc)
3497 {
3498 	struct ptrace_lwpinfo pl;
3499 	pid_t fpid, wpid;
3500 	int status;
3501 
3502 	ATF_REQUIRE((fpid = fork()) != -1);
3503 	if (fpid == 0) {
3504 		trace_me();
3505 		signal(SIGUSR1, sigusr1_step_handler);
3506 		raise(SIGABRT);
3507 		exit(1);
3508 	}
3509 
3510 	/* The first wait() should report the stop from SIGSTOP. */
3511 	wpid = waitpid(fpid, &status, 0);
3512 	ATF_REQUIRE(wpid == fpid);
3513 	ATF_REQUIRE(WIFSTOPPED(status));
3514 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3515 
3516 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3517 
3518 	/* The next stop should report the SIGABRT in the child body. */
3519 	wpid = waitpid(fpid, &status, 0);
3520 	ATF_REQUIRE(wpid == fpid);
3521 	ATF_REQUIRE(WIFSTOPPED(status));
3522 	ATF_REQUIRE(WSTOPSIG(status) == SIGABRT);
3523 
3524 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3525 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3526 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGABRT);
3527 
3528 	/* Step the child process inserting SIGUSR1. */
3529 	ATF_REQUIRE(ptrace(PT_STEP, fpid, (caddr_t)1, SIGUSR1) == 0);
3530 
3531 	/* The next stop should report the SIGABRT in the signal handler. */
3532 	wpid = waitpid(fpid, &status, 0);
3533 	ATF_REQUIRE(wpid == fpid);
3534 	ATF_REQUIRE(WIFSTOPPED(status));
3535 	ATF_REQUIRE(WSTOPSIG(status) == SIGABRT);
3536 
3537 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3538 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3539 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGABRT);
3540 
3541 	/* Continue the child process discarding the signal. */
3542 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3543 
3544 	/* The next stop should report a trace trap from PT_STEP. */
3545 	wpid = waitpid(fpid, &status, 0);
3546 	ATF_REQUIRE(wpid == fpid);
3547 	ATF_REQUIRE(WIFSTOPPED(status));
3548 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3549 
3550 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3551 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3552 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGTRAP);
3553 	ATF_REQUIRE(pl.pl_siginfo.si_code == TRAP_TRACE);
3554 
3555 	/* Continue the child to let it exit. */
3556 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3557 
3558 	/* The last event should be for the child process's exit. */
3559 	wpid = waitpid(fpid, &status, 0);
3560 	ATF_REQUIRE(WIFEXITED(status));
3561 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
3562 
3563 	wpid = wait(&status);
3564 	ATF_REQUIRE(wpid == -1);
3565 	ATF_REQUIRE(errno == ECHILD);
3566 }
3567 
3568 #ifdef HAVE_BREAKPOINT
3569 /*
3570  * Verify that a SIGTRAP event with the TRAP_BRKPT code is reported
3571  * for a breakpoint trap.
3572  */
3573 ATF_TC_WITHOUT_HEAD(ptrace__breakpoint_siginfo);
3574 ATF_TC_BODY(ptrace__breakpoint_siginfo, tc)
3575 {
3576 	struct ptrace_lwpinfo pl;
3577 	pid_t fpid, wpid;
3578 	int status;
3579 
3580 	ATF_REQUIRE((fpid = fork()) != -1);
3581 	if (fpid == 0) {
3582 		trace_me();
3583 		breakpoint();
3584 		exit(1);
3585 	}
3586 
3587 	/* The first wait() should report the stop from SIGSTOP. */
3588 	wpid = waitpid(fpid, &status, 0);
3589 	ATF_REQUIRE(wpid == fpid);
3590 	ATF_REQUIRE(WIFSTOPPED(status));
3591 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3592 
3593 	/* Continue the child ignoring the SIGSTOP. */
3594 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3595 
3596 	/* The second wait() should report hitting the breakpoint. */
3597 	wpid = waitpid(fpid, &status, 0);
3598 	ATF_REQUIRE(wpid == fpid);
3599 	ATF_REQUIRE(WIFSTOPPED(status));
3600 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3601 
3602 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3603 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3604 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGTRAP);
3605 	ATF_REQUIRE(pl.pl_siginfo.si_code == TRAP_BRKPT);
3606 
3607 	/* Kill the child process. */
3608 	ATF_REQUIRE(ptrace(PT_KILL, fpid, 0, 0) == 0);
3609 
3610 	/* The last wait() should report the SIGKILL. */
3611 	wpid = waitpid(fpid, &status, 0);
3612 	ATF_REQUIRE(wpid == fpid);
3613 	ATF_REQUIRE(WIFSIGNALED(status));
3614 	ATF_REQUIRE(WTERMSIG(status) == SIGKILL);
3615 
3616 	wpid = wait(&status);
3617 	ATF_REQUIRE(wpid == -1);
3618 	ATF_REQUIRE(errno == ECHILD);
3619 }
3620 #endif /* HAVE_BREAKPOINT */
3621 
3622 /*
3623  * Verify that a SIGTRAP event with the TRAP_TRACE code is reported
3624  * for a single-step trap from PT_STEP.
3625  */
3626 ATF_TC_WITHOUT_HEAD(ptrace__step_siginfo);
3627 ATF_TC_BODY(ptrace__step_siginfo, tc)
3628 {
3629 	struct ptrace_lwpinfo pl;
3630 	pid_t fpid, wpid;
3631 	int status;
3632 
3633 	ATF_REQUIRE((fpid = fork()) != -1);
3634 	if (fpid == 0) {
3635 		trace_me();
3636 		exit(1);
3637 	}
3638 
3639 	/* The first wait() should report the stop from SIGSTOP. */
3640 	wpid = waitpid(fpid, &status, 0);
3641 	ATF_REQUIRE(wpid == fpid);
3642 	ATF_REQUIRE(WIFSTOPPED(status));
3643 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3644 
3645 	/* Step the child ignoring the SIGSTOP. */
3646 	ATF_REQUIRE(ptrace(PT_STEP, fpid, (caddr_t)1, 0) == 0);
3647 
3648 	/* The second wait() should report a single-step trap. */
3649 	wpid = waitpid(fpid, &status, 0);
3650 	ATF_REQUIRE(wpid == fpid);
3651 	ATF_REQUIRE(WIFSTOPPED(status));
3652 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3653 
3654 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3655 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3656 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGTRAP);
3657 	ATF_REQUIRE(pl.pl_siginfo.si_code == TRAP_TRACE);
3658 
3659 	/* Continue the child process. */
3660 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3661 
3662 	/* The last event should be for the child process's exit. */
3663 	wpid = waitpid(fpid, &status, 0);
3664 	ATF_REQUIRE(WIFEXITED(status));
3665 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
3666 
3667 	wpid = wait(&status);
3668 	ATF_REQUIRE(wpid == -1);
3669 	ATF_REQUIRE(errno == ECHILD);
3670 }
3671 
3672 #if defined(HAVE_BREAKPOINT) && defined(SKIP_BREAK)
3673 static void *
3674 continue_thread(void *arg __unused)
3675 {
3676 	breakpoint();
3677 	return (NULL);
3678 }
3679 
3680 static __dead2 void
3681 continue_thread_main(void)
3682 {
3683 	pthread_t threads[2];
3684 
3685 	CHILD_REQUIRE(pthread_create(&threads[0], NULL, continue_thread,
3686 	    NULL) == 0);
3687 	CHILD_REQUIRE(pthread_create(&threads[1], NULL, continue_thread,
3688 	    NULL) == 0);
3689 	CHILD_REQUIRE(pthread_join(threads[0], NULL) == 0);
3690 	CHILD_REQUIRE(pthread_join(threads[1], NULL) == 0);
3691 	exit(1);
3692 }
3693 
3694 /*
3695  * Ensure that PT_CONTINUE clears the status of the thread that
3696  * triggered the stop even if a different thread's LWP was passed to
3697  * PT_CONTINUE.
3698  */
3699 ATF_TC_WITHOUT_HEAD(ptrace__PT_CONTINUE_different_thread);
3700 ATF_TC_BODY(ptrace__PT_CONTINUE_different_thread, tc)
3701 {
3702 	struct ptrace_lwpinfo pl;
3703 	pid_t fpid, wpid;
3704 	lwpid_t lwps[2];
3705 	bool hit_break[2];
3706 	struct reg reg;
3707 	int i, j, status;
3708 
3709 	ATF_REQUIRE((fpid = fork()) != -1);
3710 	if (fpid == 0) {
3711 		trace_me();
3712 		continue_thread_main();
3713 	}
3714 
3715 	/* The first wait() should report the stop from SIGSTOP. */
3716 	wpid = waitpid(fpid, &status, 0);
3717 	ATF_REQUIRE(wpid == fpid);
3718 	ATF_REQUIRE(WIFSTOPPED(status));
3719 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3720 
3721 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
3722 	    sizeof(pl)) != -1);
3723 
3724 	ATF_REQUIRE(ptrace(PT_LWP_EVENTS, wpid, NULL, 1) == 0);
3725 
3726 	/* Continue the child ignoring the SIGSTOP. */
3727 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3728 
3729 	/* One of the new threads should report it's birth. */
3730 	wpid = waitpid(fpid, &status, 0);
3731 	ATF_REQUIRE(wpid == fpid);
3732 	ATF_REQUIRE(WIFSTOPPED(status));
3733 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3734 
3735 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3736 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)) ==
3737 	    (PL_FLAG_BORN | PL_FLAG_SCX));
3738 	lwps[0] = pl.pl_lwpid;
3739 
3740 	/*
3741 	 * Suspend this thread to ensure both threads are alive before
3742 	 * hitting the breakpoint.
3743 	 */
3744 	ATF_REQUIRE(ptrace(PT_SUSPEND, lwps[0], NULL, 0) != -1);
3745 
3746 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3747 
3748 	/* Second thread should report it's birth. */
3749 	wpid = waitpid(fpid, &status, 0);
3750 	ATF_REQUIRE(wpid == fpid);
3751 	ATF_REQUIRE(WIFSTOPPED(status));
3752 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3753 
3754 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3755 	ATF_REQUIRE((pl.pl_flags & (PL_FLAG_BORN | PL_FLAG_SCX)) ==
3756 	    (PL_FLAG_BORN | PL_FLAG_SCX));
3757 	ATF_REQUIRE(pl.pl_lwpid != lwps[0]);
3758 	lwps[1] = pl.pl_lwpid;
3759 
3760 	/* Resume both threads waiting for breakpoint events. */
3761 	hit_break[0] = hit_break[1] = false;
3762 	ATF_REQUIRE(ptrace(PT_RESUME, lwps[0], NULL, 0) != -1);
3763 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3764 
3765 	/* One thread should report a breakpoint. */
3766 	wpid = waitpid(fpid, &status, 0);
3767 	ATF_REQUIRE(wpid == fpid);
3768 	ATF_REQUIRE(WIFSTOPPED(status));
3769 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3770 
3771 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3772 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3773 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGTRAP &&
3774 	    pl.pl_siginfo.si_code == TRAP_BRKPT);
3775 	if (pl.pl_lwpid == lwps[0])
3776 		i = 0;
3777 	else
3778 		i = 1;
3779 	hit_break[i] = true;
3780 	ATF_REQUIRE(ptrace(PT_GETREGS, pl.pl_lwpid, (caddr_t)&reg, 0) != -1);
3781 	SKIP_BREAK(&reg);
3782 	ATF_REQUIRE(ptrace(PT_SETREGS, pl.pl_lwpid, (caddr_t)&reg, 0) != -1);
3783 
3784 	/*
3785 	 * Resume both threads but pass the other thread's LWPID to
3786 	 * PT_CONTINUE.
3787 	 */
3788 	ATF_REQUIRE(ptrace(PT_CONTINUE, lwps[i ^ 1], (caddr_t)1, 0) == 0);
3789 
3790 	/*
3791 	 * Will now get two thread exit events and one more breakpoint
3792 	 * event.
3793 	 */
3794 	for (j = 0; j < 3; j++) {
3795 		wpid = waitpid(fpid, &status, 0);
3796 		ATF_REQUIRE(wpid == fpid);
3797 		ATF_REQUIRE(WIFSTOPPED(status));
3798 		ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3799 
3800 		ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl,
3801 		    sizeof(pl)) != -1);
3802 
3803 		if (pl.pl_lwpid == lwps[0])
3804 			i = 0;
3805 		else
3806 			i = 1;
3807 
3808 		ATF_REQUIRE_MSG(lwps[i] != 0, "event for exited thread");
3809 		if (pl.pl_flags & PL_FLAG_EXITED) {
3810 			ATF_REQUIRE_MSG(hit_break[i],
3811 			    "exited thread did not report breakpoint");
3812 			lwps[i] = 0;
3813 		} else {
3814 			ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) != 0);
3815 			ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGTRAP &&
3816 			    pl.pl_siginfo.si_code == TRAP_BRKPT);
3817 			ATF_REQUIRE_MSG(!hit_break[i],
3818 			    "double breakpoint event");
3819 			hit_break[i] = true;
3820 			ATF_REQUIRE(ptrace(PT_GETREGS, pl.pl_lwpid, (caddr_t)&reg,
3821 			    0) != -1);
3822 			SKIP_BREAK(&reg);
3823 			ATF_REQUIRE(ptrace(PT_SETREGS, pl.pl_lwpid, (caddr_t)&reg,
3824 			    0) != -1);
3825 		}
3826 
3827 		ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3828 	}
3829 
3830 	/* Both threads should have exited. */
3831 	ATF_REQUIRE(lwps[0] == 0);
3832 	ATF_REQUIRE(lwps[1] == 0);
3833 
3834 	/* The last event should be for the child process's exit. */
3835 	wpid = waitpid(fpid, &status, 0);
3836 	ATF_REQUIRE(WIFEXITED(status));
3837 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
3838 
3839 	wpid = wait(&status);
3840 	ATF_REQUIRE(wpid == -1);
3841 	ATF_REQUIRE(errno == ECHILD);
3842 }
3843 #endif
3844 
3845 /*
3846  * Verify that PT_LWPINFO doesn't return stale siginfo.
3847  */
3848 ATF_TC_WITHOUT_HEAD(ptrace__PT_LWPINFO_stale_siginfo);
3849 ATF_TC_BODY(ptrace__PT_LWPINFO_stale_siginfo, tc)
3850 {
3851 	struct ptrace_lwpinfo pl;
3852 	pid_t fpid, wpid;
3853 	int events, status;
3854 
3855 	ATF_REQUIRE((fpid = fork()) != -1);
3856 	if (fpid == 0) {
3857 		trace_me();
3858 		raise(SIGABRT);
3859 		exit(1);
3860 	}
3861 
3862 	/* The first wait() should report the stop from SIGSTOP. */
3863 	wpid = waitpid(fpid, &status, 0);
3864 	ATF_REQUIRE(wpid == fpid);
3865 	ATF_REQUIRE(WIFSTOPPED(status));
3866 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3867 
3868 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3869 
3870 	/* The next stop should report the SIGABRT in the child body. */
3871 	wpid = waitpid(fpid, &status, 0);
3872 	ATF_REQUIRE(wpid == fpid);
3873 	ATF_REQUIRE(WIFSTOPPED(status));
3874 	ATF_REQUIRE(WSTOPSIG(status) == SIGABRT);
3875 
3876 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3877 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SI);
3878 	ATF_REQUIRE(pl.pl_siginfo.si_signo == SIGABRT);
3879 
3880 	/*
3881 	 * Continue the process ignoring the signal, but enabling
3882 	 * syscall traps.
3883 	 */
3884 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
3885 
3886 	/*
3887 	 * The next stop should report a system call entry from
3888 	 * exit().  PL_FLAGS_SI should not be set.
3889 	 */
3890 	wpid = waitpid(fpid, &status, 0);
3891 	ATF_REQUIRE(wpid == fpid);
3892 	ATF_REQUIRE(WIFSTOPPED(status));
3893 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3894 
3895 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3896 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
3897 	ATF_REQUIRE((pl.pl_flags & PL_FLAG_SI) == 0);
3898 
3899 	/* Disable syscall tracing and continue the child to let it exit. */
3900 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
3901 	    sizeof(events)) == 0);
3902 	events &= ~PTRACE_SYSCALL;
3903 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
3904 	    sizeof(events)) == 0);
3905 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3906 
3907 	/* The last event should be for the child process's exit. */
3908 	wpid = waitpid(fpid, &status, 0);
3909 	ATF_REQUIRE(WIFEXITED(status));
3910 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
3911 
3912 	wpid = wait(&status);
3913 	ATF_REQUIRE(wpid == -1);
3914 	ATF_REQUIRE(errno == ECHILD);
3915 }
3916 
3917 /*
3918  * A simple test of PT_GET_SC_ARGS and PT_GET_SC_RET.
3919  */
3920 ATF_TC_WITHOUT_HEAD(ptrace__syscall_args);
3921 ATF_TC_BODY(ptrace__syscall_args, tc)
3922 {
3923 	struct ptrace_lwpinfo pl;
3924 	struct ptrace_sc_ret psr;
3925 	pid_t fpid, wpid;
3926 	register_t args[2];
3927 	int events, status;
3928 
3929 	ATF_REQUIRE((fpid = fork()) != -1);
3930 	if (fpid == 0) {
3931 		trace_me();
3932 		kill(getpid(), 0);
3933 		close(3);
3934 		exit(1);
3935 	}
3936 
3937 	/* The first wait() should report the stop from SIGSTOP. */
3938 	wpid = waitpid(fpid, &status, 0);
3939 	ATF_REQUIRE(wpid == fpid);
3940 	ATF_REQUIRE(WIFSTOPPED(status));
3941 	ATF_REQUIRE(WSTOPSIG(status) == SIGSTOP);
3942 
3943 	/*
3944 	 * Continue the process ignoring the signal, but enabling
3945 	 * syscall traps.
3946 	 */
3947 	ATF_REQUIRE(ptrace(PT_SYSCALL, fpid, (caddr_t)1, 0) == 0);
3948 
3949 	/*
3950 	 * The next stop should be the syscall entry from getpid().
3951 	 */
3952 	wpid = waitpid(fpid, &status, 0);
3953 	ATF_REQUIRE(wpid == fpid);
3954 	ATF_REQUIRE(WIFSTOPPED(status));
3955 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3956 
3957 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3958 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
3959 	ATF_REQUIRE(pl.pl_syscall_code == SYS_getpid);
3960 
3961 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3962 
3963 	/*
3964 	 * The next stop should be the syscall exit from getpid().
3965 	 */
3966 	wpid = waitpid(fpid, &status, 0);
3967 	ATF_REQUIRE(wpid == fpid);
3968 	ATF_REQUIRE(WIFSTOPPED(status));
3969 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3970 
3971 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3972 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
3973 	ATF_REQUIRE(pl.pl_syscall_code == SYS_getpid);
3974 
3975 	ATF_REQUIRE(ptrace(PT_GET_SC_RET, wpid, (caddr_t)&psr,
3976 	    sizeof(psr)) != -1);
3977 	ATF_REQUIRE(psr.sr_error == 0);
3978 	ATF_REQUIRE(psr.sr_retval[0] == wpid);
3979 
3980 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
3981 
3982 	/*
3983 	 * The next stop should be the syscall entry from kill().
3984 	 */
3985 	wpid = waitpid(fpid, &status, 0);
3986 	ATF_REQUIRE(wpid == fpid);
3987 	ATF_REQUIRE(WIFSTOPPED(status));
3988 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
3989 
3990 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
3991 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
3992 	ATF_REQUIRE(pl.pl_syscall_code == SYS_kill);
3993 	ATF_REQUIRE(pl.pl_syscall_narg == 2);
3994 
3995 	ATF_REQUIRE(ptrace(PT_GET_SC_ARGS, wpid, (caddr_t)args,
3996 	    sizeof(args)) != -1);
3997 	ATF_REQUIRE(args[0] == wpid);
3998 	ATF_REQUIRE(args[1] == 0);
3999 
4000 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
4001 
4002 	/*
4003 	 * The next stop should be the syscall exit from kill().
4004 	 */
4005 	wpid = waitpid(fpid, &status, 0);
4006 	ATF_REQUIRE(wpid == fpid);
4007 	ATF_REQUIRE(WIFSTOPPED(status));
4008 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
4009 
4010 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4011 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
4012 	ATF_REQUIRE(pl.pl_syscall_code == SYS_kill);
4013 
4014 	ATF_REQUIRE(ptrace(PT_GET_SC_RET, wpid, (caddr_t)&psr,
4015 	    sizeof(psr)) != -1);
4016 	ATF_REQUIRE(psr.sr_error == 0);
4017 
4018 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
4019 
4020 	/*
4021 	 * The next stop should be the syscall entry from close().
4022 	 */
4023 	wpid = waitpid(fpid, &status, 0);
4024 	ATF_REQUIRE(wpid == fpid);
4025 	ATF_REQUIRE(WIFSTOPPED(status));
4026 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
4027 
4028 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4029 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCE);
4030 	ATF_REQUIRE(pl.pl_syscall_code == SYS_close);
4031 	ATF_REQUIRE(pl.pl_syscall_narg == 1);
4032 
4033 	ATF_REQUIRE(ptrace(PT_GET_SC_ARGS, wpid, (caddr_t)args,
4034 	    sizeof(args)) != -1);
4035 	ATF_REQUIRE(args[0] == 3);
4036 
4037 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
4038 
4039 	/*
4040 	 * The next stop should be the syscall exit from close().
4041 	 */
4042 	wpid = waitpid(fpid, &status, 0);
4043 	ATF_REQUIRE(wpid == fpid);
4044 	ATF_REQUIRE(WIFSTOPPED(status));
4045 	ATF_REQUIRE(WSTOPSIG(status) == SIGTRAP);
4046 
4047 	ATF_REQUIRE(ptrace(PT_LWPINFO, wpid, (caddr_t)&pl, sizeof(pl)) != -1);
4048 	ATF_REQUIRE(pl.pl_flags & PL_FLAG_SCX);
4049 	ATF_REQUIRE(pl.pl_syscall_code == SYS_close);
4050 
4051 	ATF_REQUIRE(ptrace(PT_GET_SC_RET, wpid, (caddr_t)&psr,
4052 	    sizeof(psr)) != -1);
4053 	ATF_REQUIRE(psr.sr_error == EBADF);
4054 
4055 	/* Disable syscall tracing and continue the child to let it exit. */
4056 	ATF_REQUIRE(ptrace(PT_GET_EVENT_MASK, fpid, (caddr_t)&events,
4057 	    sizeof(events)) == 0);
4058 	events &= ~PTRACE_SYSCALL;
4059 	ATF_REQUIRE(ptrace(PT_SET_EVENT_MASK, fpid, (caddr_t)&events,
4060 	    sizeof(events)) == 0);
4061 	ATF_REQUIRE(ptrace(PT_CONTINUE, fpid, (caddr_t)1, 0) == 0);
4062 
4063 	/* The last event should be for the child process's exit. */
4064 	wpid = waitpid(fpid, &status, 0);
4065 	ATF_REQUIRE(WIFEXITED(status));
4066 	ATF_REQUIRE(WEXITSTATUS(status) == 1);
4067 
4068 	wpid = wait(&status);
4069 	ATF_REQUIRE(wpid == -1);
4070 	ATF_REQUIRE(errno == ECHILD);
4071 }
4072 
4073 ATF_TP_ADD_TCS(tp)
4074 {
4075 
4076 	ATF_TP_ADD_TC(tp, ptrace__parent_wait_after_trace_me);
4077 	ATF_TP_ADD_TC(tp, ptrace__parent_wait_after_attach);
4078 	ATF_TP_ADD_TC(tp, ptrace__parent_sees_exit_after_child_debugger);
4079 	ATF_TP_ADD_TC(tp, ptrace__parent_sees_exit_after_unrelated_debugger);
4080 	ATF_TP_ADD_TC(tp, ptrace__parent_exits_before_child);
4081 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_both_attached);
4082 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_child_detached);
4083 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_parent_detached);
4084 	ATF_TP_ADD_TC(tp, ptrace__follow_fork_both_attached_unrelated_debugger);
4085 	ATF_TP_ADD_TC(tp,
4086 	    ptrace__follow_fork_child_detached_unrelated_debugger);
4087 	ATF_TP_ADD_TC(tp,
4088 	    ptrace__follow_fork_parent_detached_unrelated_debugger);
4089 	ATF_TP_ADD_TC(tp, ptrace__getppid);
4090 	ATF_TP_ADD_TC(tp, ptrace__new_child_pl_syscall_code_fork);
4091 	ATF_TP_ADD_TC(tp, ptrace__new_child_pl_syscall_code_vfork);
4092 	ATF_TP_ADD_TC(tp, ptrace__new_child_pl_syscall_code_thread);
4093 	ATF_TP_ADD_TC(tp, ptrace__lwp_events);
4094 	ATF_TP_ADD_TC(tp, ptrace__lwp_events_exec);
4095 	ATF_TP_ADD_TC(tp, ptrace__siginfo);
4096 	ATF_TP_ADD_TC(tp, ptrace__ptrace_exec_disable);
4097 	ATF_TP_ADD_TC(tp, ptrace__ptrace_exec_enable);
4098 	ATF_TP_ADD_TC(tp, ptrace__event_mask);
4099 	ATF_TP_ADD_TC(tp, ptrace__ptrace_vfork);
4100 	ATF_TP_ADD_TC(tp, ptrace__ptrace_vfork_follow);
4101 #ifdef HAVE_BREAKPOINT
4102 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_breakpoint);
4103 #endif
4104 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_system_call);
4105 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_threads);
4106 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_competing_signal);
4107 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_competing_stop);
4108 	ATF_TP_ADD_TC(tp, ptrace__PT_KILL_with_signal_full_sigqueue);
4109 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_system_call_entry);
4110 	ATF_TP_ADD_TC(tp,
4111 	    ptrace__PT_CONTINUE_with_signal_system_call_entry_and_exit);
4112 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_full_sigqueue);
4113 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_masked_full_sigqueue);
4114 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_change_sig);
4115 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_sigtrap_system_call_entry);
4116 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_mix);
4117 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_kqueue);
4118 	ATF_TP_ADD_TC(tp, ptrace__killed_with_sigmask);
4119 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_sigmask);
4120 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_with_signal_thread_sigmask);
4121 	ATF_TP_ADD_TC(tp, ptrace__parent_terminate_with_pending_sigstop1);
4122 	ATF_TP_ADD_TC(tp, ptrace__parent_terminate_with_pending_sigstop2);
4123 	ATF_TP_ADD_TC(tp, ptrace__event_mask_sigkill_discard);
4124 	ATF_TP_ADD_TC(tp, ptrace__PT_ATTACH_with_SBDRY_thread);
4125 	ATF_TP_ADD_TC(tp, ptrace__PT_STEP_with_signal);
4126 #ifdef HAVE_BREAKPOINT
4127 	ATF_TP_ADD_TC(tp, ptrace__breakpoint_siginfo);
4128 #endif
4129 	ATF_TP_ADD_TC(tp, ptrace__step_siginfo);
4130 #if defined(HAVE_BREAKPOINT) && defined(SKIP_BREAK)
4131 	ATF_TP_ADD_TC(tp, ptrace__PT_CONTINUE_different_thread);
4132 #endif
4133 	ATF_TP_ADD_TC(tp, ptrace__PT_LWPINFO_stale_siginfo);
4134 	ATF_TP_ADD_TC(tp, ptrace__syscall_args);
4135 
4136 	return (atf_no_error());
4137 }
4138