| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: t_ptrace_fork_wait.h,v 1.6 2020/05/16 23:10:26 kamil Exp $ */ | | 1 | /* $NetBSD: t_ptrace_fork_wait.h,v 1.7 2020/06/09 00:28:57 kamil Exp $ */ |
2 | | | 2 | |
3 | /*- | | 3 | /*- |
4 | * Copyright (c) 2016, 2017, 2018, 2020 The NetBSD Foundation, Inc. | | 4 | * Copyright (c) 2016, 2017, 2018, 2020 The NetBSD Foundation, Inc. |
5 | * All rights reserved. | | 5 | * All rights reserved. |
6 | * | | 6 | * |
7 | * Redistribution and use in source and binary forms, with or without | | 7 | * Redistribution and use in source and binary forms, with or without |
8 | * modification, are permitted provided that the following conditions | | 8 | * modification, are permitted provided that the following conditions |
9 | * are met: | | 9 | * are met: |
10 | * 1. Redistributions of source code must retain the above copyright | | 10 | * 1. Redistributions of source code must retain the above copyright |
11 | * notice, this list of conditions and the following disclaimer. | | 11 | * notice, this list of conditions and the following disclaimer. |
12 | * 2. Redistributions in binary form must reproduce the above copyright | | 12 | * 2. Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in the | | 13 | * notice, this list of conditions and the following disclaimer in the |
14 | * documentation and/or other materials provided with the distribution. | | 14 | * documentation and/or other materials provided with the distribution. |
| @@ -19,46 +19,54 @@ | | | @@ -19,46 +19,54 @@ |
19 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | | 19 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
20 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | | 20 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | | 21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | | 22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | | 23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | | 24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | | 25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
26 | * POSSIBILITY OF SUCH DAMAGE. | | 26 | * POSSIBILITY OF SUCH DAMAGE. |
27 | */ | | 27 | */ |
28 | | | 28 | |
29 | | | 29 | |
30 | static void | | 30 | static void |
31 | fork_body(const char *fn, bool trackspawn, bool trackfork, bool trackvfork, | | 31 | fork_body(const char *fn, bool trackspawn, bool trackfork, bool trackvfork, |
32 | bool trackvforkdone) | | 32 | bool trackvforkdone, bool newpgrp) |
33 | { | | 33 | { |
34 | const int exitval = 5; | | 34 | const int exitval = 5; |
35 | const int exitval2 = 0; /* This matched exit status from /bin/echo */ | | 35 | const int exitval2 = 0; /* This matched exit status from /bin/echo */ |
36 | const int sigval = SIGSTOP; | | 36 | const int sigval = SIGSTOP; |
37 | pid_t child, child2 = 0, wpid; | | 37 | pid_t child, child2 = 0, wpid; |
38 | #if defined(TWAIT_HAVE_STATUS) | | 38 | #if defined(TWAIT_HAVE_STATUS) |
39 | int status; | | 39 | int status; |
40 | #endif | | 40 | #endif |
41 | sigset_t set; | | 41 | sigset_t set; |
42 | ptrace_state_t state; | | 42 | ptrace_state_t state; |
43 | const int slen = sizeof(state); | | 43 | const int slen = sizeof(state); |
44 | ptrace_event_t event; | | 44 | ptrace_event_t event; |
45 | const int elen = sizeof(event); | | 45 | const int elen = sizeof(event); |
46 | | | 46 | |
47 | char * const arg[] = { __UNCONST("/bin/echo"), NULL }; | | 47 | char * const arg[] = { __UNCONST("/bin/echo"), NULL }; |
48 | | | 48 | |
| | | 49 | if (newpgrp) |
| | | 50 | atf_tc_skip("kernel panic (pg_jobc going negative)"); |
| | | 51 | |
49 | DPRINTF("Before forking process PID=%d\n", getpid()); | | 52 | DPRINTF("Before forking process PID=%d\n", getpid()); |
50 | SYSCALL_REQUIRE((child = fork()) != -1); | | 53 | SYSCALL_REQUIRE((child = fork()) != -1); |
51 | if (child == 0) { | | 54 | if (child == 0) { |
| | | 55 | if (newpgrp) { |
| | | 56 | DPRINTF("Before entering new process group"); |
| | | 57 | setpgid(0, 0); |
| | | 58 | } |
| | | 59 | |
52 | DPRINTF("Before calling PT_TRACE_ME from child %d\n", getpid()); | | 60 | DPRINTF("Before calling PT_TRACE_ME from child %d\n", getpid()); |
53 | FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1); | | 61 | FORKEE_ASSERT(ptrace(PT_TRACE_ME, 0, NULL, 0) != -1); |
54 | | | 62 | |
55 | DPRINTF("Before raising %s from child\n", strsignal(sigval)); | | 63 | DPRINTF("Before raising %s from child\n", strsignal(sigval)); |
56 | FORKEE_ASSERT(raise(sigval) == 0); | | 64 | FORKEE_ASSERT(raise(sigval) == 0); |
57 | | | 65 | |
58 | if (strcmp(fn, "spawn") == 0) { | | 66 | if (strcmp(fn, "spawn") == 0) { |
59 | FORKEE_ASSERT_EQ(posix_spawn(&child2, | | 67 | FORKEE_ASSERT_EQ(posix_spawn(&child2, |
60 | arg[0], NULL, NULL, arg, NULL), 0); | | 68 | arg[0], NULL, NULL, arg, NULL), 0); |
61 | } else { | | 69 | } else { |
62 | if (strcmp(fn, "fork") == 0) { | | 70 | if (strcmp(fn, "fork") == 0) { |
63 | FORKEE_ASSERT((child2 = fork()) != -1); | | 71 | FORKEE_ASSERT((child2 = fork()) != -1); |
64 | } else if (strcmp(fn, "vfork") == 0) { | | 72 | } else if (strcmp(fn, "vfork") == 0) { |
| @@ -222,144 +230,168 @@ fork_body(const char *fn, bool trackspaw | | | @@ -222,144 +230,168 @@ fork_body(const char *fn, bool trackspaw |
222 | #endif | | 230 | #endif |
223 | | | 231 | |
224 | DPRINTF("Before calling %s() for the child - expected exited\n", | | 232 | DPRINTF("Before calling %s() for the child - expected exited\n", |
225 | TWAIT_FNAME); | | 233 | TWAIT_FNAME); |
226 | TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child); | | 234 | TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(child, &status, 0), child); |
227 | | | 235 | |
228 | validate_status_exited(status, exitval); | | 236 | validate_status_exited(status, exitval); |
229 | | | 237 | |
230 | DPRINTF("Before calling %s() for the child - expected no process\n", | | 238 | DPRINTF("Before calling %s() for the child - expected no process\n", |
231 | TWAIT_FNAME); | | 239 | TWAIT_FNAME); |
232 | TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0)); | | 240 | TWAIT_REQUIRE_FAILURE(ECHILD, wpid = TWAIT_GENERIC(child, &status, 0)); |
233 | } | | 241 | } |
234 | | | 242 | |
235 | #define FORK_TEST(name,fun,tspawn,tfork,tvfork,tvforkdone) \ | | 243 | #define FORK_TEST2(name,fun,tspawn,tfork,tvfork,tvforkdone,newpgrp) \ |
236 | ATF_TC(name); \ | | 244 | ATF_TC(name); \ |
237 | ATF_TC_HEAD(name, tc) \ | | 245 | ATF_TC_HEAD(name, tc) \ |
238 | { \ | | 246 | { \ |
239 | atf_tc_set_md_var(tc, "descr", "Verify " fun "() " \ | | 247 | atf_tc_set_md_var(tc, "descr", "Verify " fun "() " \ |
240 | "called with 0%s%s%s%s in EVENT_MASK", \ | | 248 | "called with 0%s%s%s%s in EVENT_MASK%s", \ |
241 | tspawn ? "|PTRACE_POSIX_SPAWN" : "", \ | | 249 | tspawn ? "|PTRACE_POSIX_SPAWN" : "", \ |
242 | tfork ? "|PTRACE_FORK" : "", \ | | 250 | tfork ? "|PTRACE_FORK" : "", \ |
243 | tvfork ? "|PTRACE_VFORK" : "", \ | | 251 | tvfork ? "|PTRACE_VFORK" : "", \ |
244 | tvforkdone ? "|PTRACE_VFORK_DONE" : ""); \ | | 252 | tvforkdone ? "|PTRACE_VFORK_DONE" : "", \ |
| | | 253 | newpgrp ? " and the traced processes call setpgrp(0,0)":"");\ |
245 | } \ | | 254 | } \ |
246 | \ | | 255 | \ |
247 | ATF_TC_BODY(name, tc) \ | | 256 | ATF_TC_BODY(name, tc) \ |
248 | { \ | | 257 | { \ |
249 | \ | | 258 | \ |
250 | fork_body(fun, tspawn, tfork, tvfork, tvforkdone); \ | | 259 | fork_body(fun, tspawn, tfork, tvfork, tvforkdone, newpgrp); \ |
251 | } | | 260 | } |
252 | | | 261 | |
| | | 262 | #define FORK_TEST(name,fun,tspawn,tfork,tvfork,tvforkdone) \ |
| | | 263 | FORK_TEST2(name,fun,tspawn,tfork,tvfork,tvforkdone,false) |
| | | 264 | |
253 | FORK_TEST(fork1, "fork", false, false, false, false) | | 265 | FORK_TEST(fork1, "fork", false, false, false, false) |
254 | #if defined(TWAIT_HAVE_PID) | | 266 | #if defined(TWAIT_HAVE_PID) |
255 | FORK_TEST(fork2, "fork", false, true, false, false) | | 267 | FORK_TEST(fork2, "fork", false, true, false, false) |
256 | FORK_TEST(fork3, "fork", false, false, true, false) | | 268 | FORK_TEST(fork3, "fork", false, false, true, false) |
257 | FORK_TEST(fork4, "fork", false, true, true, false) | | 269 | FORK_TEST(fork4, "fork", false, true, true, false) |
258 | #endif | | 270 | #endif |
259 | FORK_TEST(fork5, "fork", false, false, false, true) | | 271 | FORK_TEST(fork5, "fork", false, false, false, true) |
260 | #if defined(TWAIT_HAVE_PID) | | 272 | #if defined(TWAIT_HAVE_PID) |
261 | FORK_TEST(fork6, "fork", false, true, false, true) | | 273 | FORK_TEST(fork6, "fork", false, true, false, true) |
262 | FORK_TEST(fork7, "fork", false, false, true, true) | | 274 | FORK_TEST(fork7, "fork", false, false, true, true) |
263 | FORK_TEST(fork8, "fork", false, true, true, true) | | 275 | FORK_TEST(fork8, "fork", false, true, true, true) |
264 | #endif | | 276 | #endif |
265 | FORK_TEST(fork9, "fork", true, false, false, false) | | 277 | FORK_TEST(fork9, "fork", true, false, false, false) |
266 | #if defined(TWAIT_HAVE_PID) | | 278 | #if defined(TWAIT_HAVE_PID) |
267 | FORK_TEST(fork10, "fork", true, true, false, false) | | 279 | FORK_TEST(fork10, "fork", true, true, false, false) |
268 | FORK_TEST(fork11, "fork", true, false, true, false) | | 280 | FORK_TEST(fork11, "fork", true, false, true, false) |
269 | FORK_TEST(fork12, "fork", true, true, true, false) | | 281 | FORK_TEST(fork12, "fork", true, true, true, false) |
270 | #endif | | 282 | #endif |
271 | FORK_TEST(fork13, "fork", true, false, false, true) | | 283 | FORK_TEST(fork13, "fork", true, false, false, true) |
272 | #if defined(TWAIT_HAVE_PID) | | 284 | #if defined(TWAIT_HAVE_PID) |
273 | FORK_TEST(fork14, "fork", true, true, false, true) | | 285 | FORK_TEST(fork14, "fork", true, true, false, true) |
274 | FORK_TEST(fork15, "fork", true, false, true, true) | | 286 | FORK_TEST(fork15, "fork", true, false, true, true) |
275 | FORK_TEST(fork16, "fork", true, true, true, true) | | 287 | FORK_TEST(fork16, "fork", true, true, true, true) |
276 | #endif | | 288 | #endif |
277 | | | 289 | |
| | | 290 | #if defined(TWAIT_HAVE_PID) |
| | | 291 | FORK_TEST2(fork_setpgid, "fork", true, true, true, true, true) |
| | | 292 | #endif |
| | | 293 | |
278 | FORK_TEST(vfork1, "vfork", false, false, false, false) | | 294 | FORK_TEST(vfork1, "vfork", false, false, false, false) |
279 | #if defined(TWAIT_HAVE_PID) | | 295 | #if defined(TWAIT_HAVE_PID) |
280 | FORK_TEST(vfork2, "vfork", false, true, false, false) | | 296 | FORK_TEST(vfork2, "vfork", false, true, false, false) |
281 | FORK_TEST(vfork3, "vfork", false, false, true, false) | | 297 | FORK_TEST(vfork3, "vfork", false, false, true, false) |
282 | FORK_TEST(vfork4, "vfork", false, true, true, false) | | 298 | FORK_TEST(vfork4, "vfork", false, true, true, false) |
283 | #endif | | 299 | #endif |
284 | FORK_TEST(vfork5, "vfork", false, false, false, true) | | 300 | FORK_TEST(vfork5, "vfork", false, false, false, true) |
285 | #if defined(TWAIT_HAVE_PID) | | 301 | #if defined(TWAIT_HAVE_PID) |
286 | FORK_TEST(vfork6, "vfork", false, true, false, true) | | 302 | FORK_TEST(vfork6, "vfork", false, true, false, true) |
287 | FORK_TEST(vfork7, "vfork", false, false, true, true) | | 303 | FORK_TEST(vfork7, "vfork", false, false, true, true) |
288 | FORK_TEST(vfork8, "vfork", false, true, true, true) | | 304 | FORK_TEST(vfork8, "vfork", false, true, true, true) |
289 | #endif | | 305 | #endif |
290 | FORK_TEST(vfork9, "vfork", true, false, false, false) | | 306 | FORK_TEST(vfork9, "vfork", true, false, false, false) |
291 | #if defined(TWAIT_HAVE_PID) | | 307 | #if defined(TWAIT_HAVE_PID) |
292 | FORK_TEST(vfork10, "vfork", true, true, false, false) | | 308 | FORK_TEST(vfork10, "vfork", true, true, false, false) |
293 | FORK_TEST(vfork11, "vfork", true, false, true, false) | | 309 | FORK_TEST(vfork11, "vfork", true, false, true, false) |
294 | FORK_TEST(vfork12, "vfork", true, true, true, false) | | 310 | FORK_TEST(vfork12, "vfork", true, true, true, false) |
295 | #endif | | 311 | #endif |
296 | FORK_TEST(vfork13, "vfork", true, false, false, true) | | 312 | FORK_TEST(vfork13, "vfork", true, false, false, true) |
297 | #if defined(TWAIT_HAVE_PID) | | 313 | #if defined(TWAIT_HAVE_PID) |
298 | FORK_TEST(vfork14, "vfork", true, true, false, true) | | 314 | FORK_TEST(vfork14, "vfork", true, true, false, true) |
299 | FORK_TEST(vfork15, "vfork", true, false, true, true) | | 315 | FORK_TEST(vfork15, "vfork", true, false, true, true) |
300 | FORK_TEST(vfork16, "vfork", true, true, true, true) | | 316 | FORK_TEST(vfork16, "vfork", true, true, true, true) |
301 | #endif | | 317 | #endif |
302 | | | 318 | |
| | | 319 | #if defined(TWAIT_HAVE_PID) |
| | | 320 | FORK_TEST2(vfork_setpgid, "vfork", true, true, true, true, true) |
| | | 321 | #endif |
| | | 322 | |
303 | FORK_TEST(posix_spawn1, "spawn", false, false, false, false) | | 323 | FORK_TEST(posix_spawn1, "spawn", false, false, false, false) |
304 | FORK_TEST(posix_spawn2, "spawn", false, true, false, false) | | 324 | FORK_TEST(posix_spawn2, "spawn", false, true, false, false) |
305 | FORK_TEST(posix_spawn3, "spawn", false, false, true, false) | | 325 | FORK_TEST(posix_spawn3, "spawn", false, false, true, false) |
306 | FORK_TEST(posix_spawn4, "spawn", false, true, true, false) | | 326 | FORK_TEST(posix_spawn4, "spawn", false, true, true, false) |
307 | FORK_TEST(posix_spawn5, "spawn", false, false, false, true) | | 327 | FORK_TEST(posix_spawn5, "spawn", false, false, false, true) |
308 | FORK_TEST(posix_spawn6, "spawn", false, true, false, true) | | 328 | FORK_TEST(posix_spawn6, "spawn", false, true, false, true) |
309 | FORK_TEST(posix_spawn7, "spawn", false, false, true, true) | | 329 | FORK_TEST(posix_spawn7, "spawn", false, false, true, true) |
310 | FORK_TEST(posix_spawn8, "spawn", false, true, true, true) | | 330 | FORK_TEST(posix_spawn8, "spawn", false, true, true, true) |
311 | #if defined(TWAIT_HAVE_PID) | | 331 | #if defined(TWAIT_HAVE_PID) |
312 | FORK_TEST(posix_spawn9, "spawn", true, false, false, false) | | 332 | FORK_TEST(posix_spawn9, "spawn", true, false, false, false) |
313 | FORK_TEST(posix_spawn10, "spawn", true, true, false, false) | | 333 | FORK_TEST(posix_spawn10, "spawn", true, true, false, false) |
314 | FORK_TEST(posix_spawn11, "spawn", true, false, true, false) | | 334 | FORK_TEST(posix_spawn11, "spawn", true, false, true, false) |
315 | FORK_TEST(posix_spawn12, "spawn", true, true, true, false) | | 335 | FORK_TEST(posix_spawn12, "spawn", true, true, true, false) |
316 | FORK_TEST(posix_spawn13, "spawn", true, false, false, true) | | 336 | FORK_TEST(posix_spawn13, "spawn", true, false, false, true) |
317 | FORK_TEST(posix_spawn14, "spawn", true, true, false, true) | | 337 | FORK_TEST(posix_spawn14, "spawn", true, true, false, true) |
318 | FORK_TEST(posix_spawn15, "spawn", true, false, true, true) | | 338 | FORK_TEST(posix_spawn15, "spawn", true, false, true, true) |
319 | FORK_TEST(posix_spawn16, "spawn", true, true, true, true) | | 339 | FORK_TEST(posix_spawn16, "spawn", true, true, true, true) |
320 | #endif | | 340 | #endif |
321 | | | 341 | |
| | | 342 | #if defined(TWAIT_HAVE_PID) |
| | | 343 | FORK_TEST2(posix_spawn_setpgid, "spawn", true, true, true, true, true) |
| | | 344 | #endif |
| | | 345 | |
322 | /// ---------------------------------------------------------------------------- | | 346 | /// ---------------------------------------------------------------------------- |
323 | | | 347 | |
324 | #if defined(TWAIT_HAVE_PID) | | 348 | #if defined(TWAIT_HAVE_PID) |
325 | static void | | 349 | static void |
326 | unrelated_tracer_fork_body(const char *fn, bool trackspawn, bool trackfork, | | 350 | unrelated_tracer_fork_body(const char *fn, bool trackspawn, bool trackfork, |
327 | bool trackvfork, bool trackvforkdone) | | 351 | bool trackvfork, bool trackvforkdone, bool newpgrp) |
328 | { | | 352 | { |
329 | const int sigval = SIGSTOP; | | 353 | const int sigval = SIGSTOP; |
330 | struct msg_fds parent_tracee, parent_tracer; | | 354 | struct msg_fds parent_tracee, parent_tracer; |
331 | const int exitval = 10; | | 355 | const int exitval = 10; |
332 | const int exitval2 = 0; /* This matched exit status from /bin/echo */ | | 356 | const int exitval2 = 0; /* This matched exit status from /bin/echo */ |
333 | pid_t tracee, tracer, wpid; | | 357 | pid_t tracee, tracer, wpid; |
334 | pid_t tracee2 = 0; | | 358 | pid_t tracee2 = 0; |
335 | uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */ | | 359 | uint8_t msg = 0xde; /* dummy message for IPC based on pipe(2) */ |
336 | #if defined(TWAIT_HAVE_STATUS) | | 360 | #if defined(TWAIT_HAVE_STATUS) |
337 | int status; | | 361 | int status; |
338 | #endif | | 362 | #endif |
339 | | | 363 | |
340 | sigset_t set; | | 364 | sigset_t set; |
341 | struct ptrace_siginfo info; | | 365 | struct ptrace_siginfo info; |
342 | ptrace_state_t state; | | 366 | ptrace_state_t state; |
343 | const int slen = sizeof(state); | | 367 | const int slen = sizeof(state); |
344 | ptrace_event_t event; | | 368 | ptrace_event_t event; |
345 | const int elen = sizeof(event); | | 369 | const int elen = sizeof(event); |
346 | | | 370 | |
347 | char * const arg[] = { __UNCONST("/bin/echo"), NULL }; | | 371 | char * const arg[] = { __UNCONST("/bin/echo"), NULL }; |
348 | | | 372 | |
| | | 373 | if (newpgrp) |
| | | 374 | atf_tc_skip("kernel panic (pg_jobc going negative)"); |
| | | 375 | |
349 | DPRINTF("Spawn tracee\n"); | | 376 | DPRINTF("Spawn tracee\n"); |
350 | SYSCALL_REQUIRE(msg_open(&parent_tracee) == 0); | | 377 | SYSCALL_REQUIRE(msg_open(&parent_tracee) == 0); |
351 | tracee = atf_utils_fork(); | | 378 | tracee = atf_utils_fork(); |
352 | if (tracee == 0) { | | 379 | if (tracee == 0) { |
| | | 380 | if (newpgrp) { |
| | | 381 | DPRINTF("Before entering new process group"); |
| | | 382 | setpgid(0, 0); |
| | | 383 | } |
| | | 384 | |
353 | // Wait for parent to let us crash | | 385 | // Wait for parent to let us crash |
354 | CHILD_FROM_PARENT("exit tracee", parent_tracee, msg); | | 386 | CHILD_FROM_PARENT("exit tracee", parent_tracee, msg); |
355 | | | 387 | |
356 | DPRINTF("Before raising %s from child\n", strsignal(sigval)); | | 388 | DPRINTF("Before raising %s from child\n", strsignal(sigval)); |
357 | FORKEE_ASSERT(raise(sigval) == 0); | | 389 | FORKEE_ASSERT(raise(sigval) == 0); |
358 | | | 390 | |
359 | if (strcmp(fn, "spawn") == 0) { | | 391 | if (strcmp(fn, "spawn") == 0) { |
360 | FORKEE_ASSERT_EQ(posix_spawn(&tracee2, | | 392 | FORKEE_ASSERT_EQ(posix_spawn(&tracee2, |
361 | arg[0], NULL, NULL, arg, NULL), 0); | | 393 | arg[0], NULL, NULL, arg, NULL), 0); |
362 | } else { | | 394 | } else { |
363 | if (strcmp(fn, "fork") == 0) { | | 395 | if (strcmp(fn, "fork") == 0) { |
364 | FORKEE_ASSERT((tracee2 = fork()) != -1); | | 396 | FORKEE_ASSERT((tracee2 = fork()) != -1); |
365 | } else if (strcmp(fn, "vfork") == 0) { | | 397 | } else if (strcmp(fn, "vfork") == 0) { |
| @@ -612,95 +644,105 @@ unrelated_tracer_fork_body(const char *f | | | @@ -612,95 +644,105 @@ unrelated_tracer_fork_body(const char *f |
612 | DPRINTF("Wait for tracee to finish its job and exit - calling %s()\n", | | 644 | DPRINTF("Wait for tracee to finish its job and exit - calling %s()\n", |
613 | TWAIT_FNAME); | | 645 | TWAIT_FNAME); |
614 | TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, 0), tracee); | | 646 | TWAIT_REQUIRE_SUCCESS(wpid = TWAIT_GENERIC(tracee, &status, 0), tracee); |
615 | | | 647 | |
616 | validate_status_exited(status, exitval); | | 648 | validate_status_exited(status, exitval); |
617 | | | 649 | |
618 | DPRINTF("Await normal exit of tracer\n"); | | 650 | DPRINTF("Await normal exit of tracer\n"); |
619 | PARENT_FROM_CHILD("tracer done", parent_tracer, msg); | | 651 | PARENT_FROM_CHILD("tracer done", parent_tracer, msg); |
620 | | | 652 | |
621 | msg_close(&parent_tracer); | | 653 | msg_close(&parent_tracer); |
622 | msg_close(&parent_tracee); | | 654 | msg_close(&parent_tracee); |
623 | } | | 655 | } |
624 | | | 656 | |
625 | #define UNRELATED_TRACER_FORK_TEST(name,fun,tspawn,tfork,tvfork,tvforkdone)\ | | 657 | #define UNRELATED_TRACER_FORK_TEST2(name,fun,tspawn,tfork,tvfork,tvforkdone,newpgrp)\ |
626 | ATF_TC(name); \ | | 658 | ATF_TC(name); \ |
627 | ATF_TC_HEAD(name, tc) \ | | 659 | ATF_TC_HEAD(name, tc) \ |
628 | { \ | | 660 | { \ |
629 | atf_tc_set_md_var(tc, "descr", "Verify " fun "() " \ | | 661 | atf_tc_set_md_var(tc, "descr", "Verify " fun "() " \ |
630 | "called with 0%s%s%s%s in EVENT_MASK", \ | | 662 | "called with 0%s%s%s%s in EVENT_MASK%s", \ |
631 | tspawn ? "|PTRACE_POSIX_SPAWN" : "", \ | | 663 | tspawn ? "|PTRACE_POSIX_SPAWN" : "", \ |
632 | tfork ? "|PTRACE_FORK" : "", \ | | 664 | tfork ? "|PTRACE_FORK" : "", \ |
633 | tvfork ? "|PTRACE_VFORK" : "", \ | | 665 | tvfork ? "|PTRACE_VFORK" : "", \ |
634 | tvforkdone ? "|PTRACE_VFORK_DONE" : ""); \ | | 666 | tvforkdone ? "|PTRACE_VFORK_DONE" : "", \ |
| | | 667 | newpgrp ? " and the traced processes call setpgrp(0,0)":"");\ |
635 | } \ | | 668 | } \ |
636 | \ | | 669 | \ |
637 | ATF_TC_BODY(name, tc) \ | | 670 | ATF_TC_BODY(name, tc) \ |
638 | { \ | | 671 | { \ |
639 | \ | | 672 | \ |
640 | unrelated_tracer_fork_body(fun, tspawn, tfork, tvfork, \ | | 673 | unrelated_tracer_fork_body(fun, tspawn, tfork, tvfork, \ |
641 | tvforkdone); \ | | 674 | tvforkdone, newpgrp); \ |
642 | } | | 675 | } |
643 | | | 676 | |
| | | 677 | #define UNRELATED_TRACER_FORK_TEST(name,fun,tspawn,tfork,tvfork,tvforkdone) \ |
| | | 678 | UNRELATED_TRACER_FORK_TEST2(name,fun,tspawn,tfork,tvfork,tvforkdone,false) |
| | | 679 | |
644 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork1, "fork", false, false, false, false) | | 680 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork1, "fork", false, false, false, false) |
645 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork2, "fork", false, true, false, false) | | 681 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork2, "fork", false, true, false, false) |
646 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork3, "fork", false, false, true, false) | | 682 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork3, "fork", false, false, true, false) |
647 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork4, "fork", false, true, true, false) | | 683 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork4, "fork", false, true, true, false) |
648 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork5, "fork", false, false, false, true) | | 684 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork5, "fork", false, false, false, true) |
649 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork6, "fork", false, true, false, true) | | 685 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork6, "fork", false, true, false, true) |
650 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork7, "fork", false, false, true, true) | | 686 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork7, "fork", false, false, true, true) |
651 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork8, "fork", false, true, true, true) | | 687 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork8, "fork", false, true, true, true) |
652 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork9, "fork", true, false, false, false) | | 688 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork9, "fork", true, false, false, false) |
653 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork10, "fork", true, true, false, false) | | 689 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork10, "fork", true, true, false, false) |
654 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork11, "fork", true, false, true, false) | | 690 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork11, "fork", true, false, true, false) |
655 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork12, "fork", true, true, true, false) | | 691 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork12, "fork", true, true, true, false) |
656 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork13, "fork", true, false, false, true) | | 692 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork13, "fork", true, false, false, true) |
657 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork14, "fork", true, true, false, true) | | 693 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork14, "fork", true, true, false, true) |
658 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork15, "fork", true, false, true, true) | | 694 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork15, "fork", true, false, true, true) |
659 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork16, "fork", true, true, true, true) | | 695 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_fork16, "fork", true, true, true, true) |
660 | | | 696 | |
| | | 697 | UNRELATED_TRACER_FORK_TEST2(unrelated_tracer_fork_setpgid, "fork", true, true, true, true, true) |
| | | 698 | |
661 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork1, "vfork", false, false, false, false) | | 699 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork1, "vfork", false, false, false, false) |
662 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork2, "vfork", false, true, false, false) | | 700 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork2, "vfork", false, true, false, false) |
663 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork3, "vfork", false, false, true, false) | | 701 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork3, "vfork", false, false, true, false) |
664 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork4, "vfork", false, true, true, false) | | 702 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork4, "vfork", false, true, true, false) |
665 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork5, "vfork", false, false, false, true) | | 703 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork5, "vfork", false, false, false, true) |
666 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork6, "vfork", false, true, false, true) | | 704 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork6, "vfork", false, true, false, true) |
667 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork7, "vfork", false, false, true, true) | | 705 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork7, "vfork", false, false, true, true) |
668 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork8, "vfork", false, true, true, true) | | 706 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork8, "vfork", false, true, true, true) |
669 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork9, "vfork", true, false, false, false) | | 707 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork9, "vfork", true, false, false, false) |
670 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork10, "vfork", true, true, false, false) | | 708 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork10, "vfork", true, true, false, false) |
671 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork11, "vfork", true, false, true, false) | | 709 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork11, "vfork", true, false, true, false) |
672 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork12, "vfork", true, true, true, false) | | 710 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork12, "vfork", true, true, true, false) |
673 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork13, "vfork", true, false, false, true) | | 711 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork13, "vfork", true, false, false, true) |
674 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork14, "vfork", true, true, false, true) | | 712 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork14, "vfork", true, true, false, true) |
675 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork15, "vfork", true, false, true, true) | | 713 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork15, "vfork", true, false, true, true) |
676 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork16, "vfork", true, true, true, true) | | 714 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_vfork16, "vfork", true, true, true, true) |
677 | | | 715 | |
| | | 716 | UNRELATED_TRACER_FORK_TEST2(unrelated_tracer_vfork_setpgid, "vfork", true, true, true, true, true) |
| | | 717 | |
678 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn1, "spawn", false, false, false, false) | | 718 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn1, "spawn", false, false, false, false) |
679 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn2, "spawn", false, true, false, false) | | 719 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn2, "spawn", false, true, false, false) |
680 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn3, "spawn", false, false, true, false) | | 720 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn3, "spawn", false, false, true, false) |
681 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn4, "spawn", false, true, true, false) | | 721 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn4, "spawn", false, true, true, false) |
682 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn5, "spawn", false, false, false, true) | | 722 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn5, "spawn", false, false, false, true) |
683 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn6, "spawn", false, true, false, true) | | 723 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn6, "spawn", false, true, false, true) |
684 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn7, "spawn", false, false, true, true) | | 724 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn7, "spawn", false, false, true, true) |
685 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn8, "spawn", false, true, true, true) | | 725 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn8, "spawn", false, true, true, true) |
686 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn9, "spawn", true, false, false, false) | | 726 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn9, "spawn", true, false, false, false) |
687 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn10, "spawn", true, true, false, false) | | 727 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn10, "spawn", true, true, false, false) |
688 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn11, "spawn", true, false, true, false) | | 728 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn11, "spawn", true, false, true, false) |
689 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn12, "spawn", true, true, true, false) | | 729 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn12, "spawn", true, true, true, false) |
690 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn13, "spawn", true, false, false, true) | | 730 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn13, "spawn", true, false, false, true) |
691 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn14, "spawn", true, true, false, true) | | 731 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn14, "spawn", true, true, false, true) |
692 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn15, "spawn", true, false, true, true) | | 732 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn15, "spawn", true, false, true, true) |
693 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn16, "spawn", true, true, true, true) | | 733 | UNRELATED_TRACER_FORK_TEST(unrelated_tracer_posix_spawn16, "spawn", true, true, true, true) |
| | | 734 | |
| | | 735 | UNRELATED_TRACER_FORK_TEST2(unrelated_tracer_posix_spawn_setpgid, "spawn", true, true, true, true, true) |
694 | #endif | | 736 | #endif |
695 | | | 737 | |
696 | /// ---------------------------------------------------------------------------- | | 738 | /// ---------------------------------------------------------------------------- |
697 | | | 739 | |
698 | #if defined(TWAIT_HAVE_PID) | | 740 | #if defined(TWAIT_HAVE_PID) |
699 | static void | | 741 | static void |
700 | fork_detach_forker_body(const char *fn, bool kill_process) | | 742 | fork_detach_forker_body(const char *fn, bool kill_process) |
701 | { | | 743 | { |
702 | const int exitval = 5; | | 744 | const int exitval = 5; |
703 | const int exitval2 = 0; /* Matches exit value from /bin/echo */ | | 745 | const int exitval2 = 0; /* Matches exit value from /bin/echo */ |
704 | const int sigval = SIGSTOP; | | 746 | const int sigval = SIGSTOP; |
705 | pid_t child, child2 = 0, wpid; | | 747 | pid_t child, child2 = 0, wpid; |
706 | #if defined(TWAIT_HAVE_STATUS) | | 748 | #if defined(TWAIT_HAVE_STATUS) |
| @@ -1623,106 +1665,112 @@ FORK2_TEST(vforkdone_signalignored, "vfo | | | @@ -1623,106 +1665,112 @@ FORK2_TEST(vforkdone_signalignored, "vfo |
1623 | ATF_TP_ADD_TC_HAVE_PID(tp, fork4); \ | | 1665 | ATF_TP_ADD_TC_HAVE_PID(tp, fork4); \ |
1624 | ATF_TP_ADD_TC(tp, fork5); \ | | 1666 | ATF_TP_ADD_TC(tp, fork5); \ |
1625 | ATF_TP_ADD_TC_HAVE_PID(tp, fork6); \ | | 1667 | ATF_TP_ADD_TC_HAVE_PID(tp, fork6); \ |
1626 | ATF_TP_ADD_TC_HAVE_PID(tp, fork7); \ | | 1668 | ATF_TP_ADD_TC_HAVE_PID(tp, fork7); \ |
1627 | ATF_TP_ADD_TC_HAVE_PID(tp, fork8); \ | | 1669 | ATF_TP_ADD_TC_HAVE_PID(tp, fork8); \ |
1628 | ATF_TP_ADD_TC(tp, fork9); \ | | 1670 | ATF_TP_ADD_TC(tp, fork9); \ |
1629 | ATF_TP_ADD_TC_HAVE_PID(tp, fork10); \ | | 1671 | ATF_TP_ADD_TC_HAVE_PID(tp, fork10); \ |
1630 | ATF_TP_ADD_TC_HAVE_PID(tp, fork11); \ | | 1672 | ATF_TP_ADD_TC_HAVE_PID(tp, fork11); \ |
1631 | ATF_TP_ADD_TC_HAVE_PID(tp, fork12); \ | | 1673 | ATF_TP_ADD_TC_HAVE_PID(tp, fork12); \ |
1632 | ATF_TP_ADD_TC(tp, fork13); \ | | 1674 | ATF_TP_ADD_TC(tp, fork13); \ |
1633 | ATF_TP_ADD_TC_HAVE_PID(tp, fork14); \ | | 1675 | ATF_TP_ADD_TC_HAVE_PID(tp, fork14); \ |
1634 | ATF_TP_ADD_TC_HAVE_PID(tp, fork15); \ | | 1676 | ATF_TP_ADD_TC_HAVE_PID(tp, fork15); \ |
1635 | ATF_TP_ADD_TC_HAVE_PID(tp, fork16); \ | | 1677 | ATF_TP_ADD_TC_HAVE_PID(tp, fork16); \ |
| | | 1678 | ATF_TP_ADD_TC_HAVE_PID(tp, fork_setpgid); \ |
1636 | ATF_TP_ADD_TC(tp, vfork1); \ | | 1679 | ATF_TP_ADD_TC(tp, vfork1); \ |
1637 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork2); \ | | 1680 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork2); \ |
1638 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork3); \ | | 1681 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork3); \ |
1639 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork4); \ | | 1682 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork4); \ |
1640 | ATF_TP_ADD_TC(tp, vfork5); \ | | 1683 | ATF_TP_ADD_TC(tp, vfork5); \ |
1641 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork6); \ | | 1684 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork6); \ |
1642 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork7); \ | | 1685 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork7); \ |
1643 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork8); \ | | 1686 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork8); \ |
1644 | ATF_TP_ADD_TC(tp, vfork9); \ | | 1687 | ATF_TP_ADD_TC(tp, vfork9); \ |
1645 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork10); \ | | 1688 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork10); \ |
1646 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork11); \ | | 1689 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork11); \ |
1647 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork12); \ | | 1690 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork12); \ |
1648 | ATF_TP_ADD_TC(tp, vfork13); \ | | 1691 | ATF_TP_ADD_TC(tp, vfork13); \ |
1649 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork14); \ | | 1692 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork14); \ |
1650 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork15); \ | | 1693 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork15); \ |
1651 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork16); \ | | 1694 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork16); \ |
| | | 1695 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_setpgid); \ |
1652 | ATF_TP_ADD_TC(tp, posix_spawn1); \ | | 1696 | ATF_TP_ADD_TC(tp, posix_spawn1); \ |
1653 | ATF_TP_ADD_TC(tp, posix_spawn2); \ | | 1697 | ATF_TP_ADD_TC(tp, posix_spawn2); \ |
1654 | ATF_TP_ADD_TC(tp, posix_spawn3); \ | | 1698 | ATF_TP_ADD_TC(tp, posix_spawn3); \ |
1655 | ATF_TP_ADD_TC(tp, posix_spawn4); \ | | 1699 | ATF_TP_ADD_TC(tp, posix_spawn4); \ |
1656 | ATF_TP_ADD_TC(tp, posix_spawn5); \ | | 1700 | ATF_TP_ADD_TC(tp, posix_spawn5); \ |
1657 | ATF_TP_ADD_TC(tp, posix_spawn6); \ | | 1701 | ATF_TP_ADD_TC(tp, posix_spawn6); \ |
1658 | ATF_TP_ADD_TC(tp, posix_spawn7); \ | | 1702 | ATF_TP_ADD_TC(tp, posix_spawn7); \ |
1659 | ATF_TP_ADD_TC(tp, posix_spawn8); \ | | 1703 | ATF_TP_ADD_TC(tp, posix_spawn8); \ |
1660 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn9); \ | | 1704 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn9); \ |
1661 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn10); \ | | 1705 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn10); \ |
1662 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn11); \ | | 1706 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn11); \ |
1663 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn12); \ | | 1707 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn12); \ |
1664 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn13); \ | | 1708 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn13); \ |
1665 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn14); \ | | 1709 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn14); \ |
1666 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn15); \ | | 1710 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn15); \ |
1667 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn16); \ | | 1711 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn16); \ |
| | | 1712 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn_setpgid); \ |
1668 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork1); \ | | 1713 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork1); \ |
1669 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork2); \ | | 1714 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork2); \ |
1670 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork3); \ | | 1715 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork3); \ |
1671 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork4); \ | | 1716 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork4); \ |
1672 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork5); \ | | 1717 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork5); \ |
1673 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork6); \ | | 1718 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork6); \ |
1674 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork7); \ | | 1719 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork7); \ |
1675 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork8); \ | | 1720 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork8); \ |
1676 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork9); \ | | 1721 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork9); \ |
1677 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork10); \ | | 1722 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork10); \ |
1678 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork11); \ | | 1723 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork11); \ |
1679 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork12); \ | | 1724 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork12); \ |
1680 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork13); \ | | 1725 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork13); \ |
1681 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork14); \ | | 1726 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork14); \ |
1682 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork15); \ | | 1727 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork15); \ |
1683 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork16); \ | | 1728 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork16); \ |
| | | 1729 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork_setpgid); \ |
1684 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork1); \ | | 1730 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork1); \ |
1685 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork2); \ | | 1731 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork2); \ |
1686 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork3); \ | | 1732 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork3); \ |
1687 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork4); \ | | 1733 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork4); \ |
1688 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork5); \ | | 1734 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork5); \ |
1689 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork6); \ | | 1735 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork6); \ |
1690 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork7); \ | | 1736 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork7); \ |
1691 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork8); \ | | 1737 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork8); \ |
1692 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork9); \ | | 1738 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork9); \ |
1693 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork10); \ | | 1739 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork10); \ |
1694 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork11); \ | | 1740 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork11); \ |
1695 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork12); \ | | 1741 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork12); \ |
1696 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork13); \ | | 1742 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork13); \ |
1697 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork14); \ | | 1743 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork14); \ |
1698 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork15); \ | | 1744 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork15); \ |
1699 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork16); \ | | 1745 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork16); \ |
| | | 1746 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork_setpgid); \ |
1700 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn1); \ | | 1747 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn1); \ |
1701 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn2); \ | | 1748 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn2); \ |
1702 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn3); \ | | 1749 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn3); \ |
1703 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn4); \ | | 1750 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn4); \ |
1704 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn5); \ | | 1751 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn5); \ |
1705 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn6); \ | | 1752 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn6); \ |
1706 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn7); \ | | 1753 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn7); \ |
1707 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn8); \ | | 1754 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn8); \ |
1708 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn9); \ | | 1755 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn9); \ |
1709 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn10); \ | | 1756 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn10); \ |
1710 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn11); \ | | 1757 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn11); \ |
1711 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn12); \ | | 1758 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn12); \ |
1712 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn13); \ | | 1759 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn13); \ |
1713 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn14); \ | | 1760 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn14); \ |
1714 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn15); \ | | 1761 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn15); \ |
1715 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn16); \ | | 1762 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn16); \ |
| | | 1763 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn_setpgid); \ |
1716 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn_detach_spawner); \ | | 1764 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn_detach_spawner); \ |
1717 | ATF_TP_ADD_TC_HAVE_PID(tp, fork_detach_forker); \ | | 1765 | ATF_TP_ADD_TC_HAVE_PID(tp, fork_detach_forker); \ |
1718 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_detach_vforker); \ | | 1766 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_detach_vforker); \ |
1719 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_detach_vforkerdone); \ | | 1767 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_detach_vforkerdone); \ |
1720 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn_kill_spawner); \ | | 1768 | ATF_TP_ADD_TC_HAVE_PID(tp, posix_spawn_kill_spawner); \ |
1721 | ATF_TP_ADD_TC_HAVE_PID(tp, fork_kill_forker); \ | | 1769 | ATF_TP_ADD_TC_HAVE_PID(tp, fork_kill_forker); \ |
1722 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_kill_vforker); \ | | 1770 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_kill_vforker); \ |
1723 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_kill_vforkerdone); \ | | 1771 | ATF_TP_ADD_TC_HAVE_PID(tp, vfork_kill_vforkerdone); \ |
1724 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn_detach_spawner); \ | | 1772 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn_detach_spawner); \ |
1725 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork_detach_forker); \ | | 1773 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_fork_detach_forker); \ |
1726 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork_detach_vforker); \ | | 1774 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork_detach_vforker); \ |
1727 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork_detach_vforkerdone); \ | | 1775 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_vfork_detach_vforkerdone); \ |
1728 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn_kill_spawner); \ | | 1776 | ATF_TP_ADD_TC_HAVE_PID(tp, unrelated_tracer_posix_spawn_kill_spawner); \ |