Lines Matching refs:child_pid

52 static void get_dbginfo(pid_t child_pid, struct ppc_debug_info *dbginfo)  in get_dbginfo()  argument
54 if (ptrace(PPC_PTRACE_GETHWDBGINFO, child_pid, NULL, dbginfo)) { in get_dbginfo()
212 static void check_success(pid_t child_pid, const char *name, const char *type, in check_success() argument
224 ptrace(PTRACE_GETSIGINFO, child_pid, NULL, &siginfo); in check_success()
241 ptrace(PTRACE_SINGLESTEP, child_pid, NULL, 0); in check_success()
246 static void ptrace_set_debugreg(pid_t child_pid, unsigned long wp_addr) in ptrace_set_debugreg() argument
248 if (ptrace(PTRACE_SET_DEBUGREG, child_pid, 0, wp_addr)) { in ptrace_set_debugreg()
254 static int ptrace_sethwdebug(pid_t child_pid, struct ppc_hw_breakpoint *info) in ptrace_sethwdebug() argument
256 int wh = ptrace(PPC_PTRACE_SETHWDEBUG, child_pid, 0, info); in ptrace_sethwdebug()
265 static void ptrace_delhwdebug(pid_t child_pid, int wh) in ptrace_delhwdebug() argument
267 if (ptrace(PPC_PTRACE_DELHWDEBUG, child_pid, 0, wh) < 0) { in ptrace_delhwdebug()
277 static int test_set_debugreg(pid_t child_pid) in test_set_debugreg() argument
288 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg()
289 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg()
290 check_success(child_pid, name, "WO", wp_addr, len); in test_set_debugreg()
298 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg()
299 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg()
300 check_success(child_pid, name, "RO", wp_addr, len); in test_set_debugreg()
309 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg()
310 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg()
311 check_success(child_pid, name, "RW", wp_addr, len); in test_set_debugreg()
314 ptrace_set_debugreg(child_pid, 0); in test_set_debugreg()
318 static int test_set_debugreg_kernel_userspace(pid_t child_pid) in test_set_debugreg_kernel_userspace() argument
328 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg_kernel_userspace()
329 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg_kernel_userspace()
330 check_success(child_pid, name, "Kernel Access Userspace", wp_addr, 8); in test_set_debugreg_kernel_userspace()
332 ptrace_set_debugreg(child_pid, 0); in test_set_debugreg_kernel_userspace()
351 static void test_sethwdebug_exact(pid_t child_pid) in test_sethwdebug_exact() argument
361 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact()
362 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact()
363 check_success(child_pid, name, "WO", wp_addr, len); in test_sethwdebug_exact()
364 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact()
368 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact()
369 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact()
370 check_success(child_pid, name, "RO", wp_addr, len); in test_sethwdebug_exact()
371 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact()
375 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact()
376 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact()
377 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_exact()
378 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact()
381 static void test_sethwdebug_exact_kernel_userspace(pid_t child_pid) in test_sethwdebug_exact_kernel_userspace() argument
391 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact_kernel_userspace()
392 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact_kernel_userspace()
393 check_success(child_pid, name, "Kernel Access Userspace", wp_addr, len); in test_sethwdebug_exact_kernel_userspace()
394 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact_kernel_userspace()
397 static void test_sethwdebug_range_aligned(pid_t child_pid) in test_sethwdebug_range_aligned() argument
409 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_aligned()
410 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_aligned()
411 check_success(child_pid, name, "WO", wp_addr, len); in test_sethwdebug_range_aligned()
412 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_aligned()
418 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_aligned()
419 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_aligned()
420 check_success(child_pid, name, "RO", wp_addr, len); in test_sethwdebug_range_aligned()
421 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_aligned()
427 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_aligned()
428 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_aligned()
429 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_range_aligned()
430 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_aligned()
433 static void test_multi_sethwdebug_range(pid_t child_pid) in test_multi_sethwdebug_range() argument
450 wh1 = ptrace_sethwdebug(child_pid, &info1); in test_multi_sethwdebug_range()
453 wh2 = ptrace_sethwdebug(child_pid, &info2); in test_multi_sethwdebug_range()
455 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range()
456 check_success(child_pid, name1, "WO", wp_addr1, len1); in test_multi_sethwdebug_range()
458 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range()
459 check_success(child_pid, name2, "RO", wp_addr2, len2); in test_multi_sethwdebug_range()
461 ptrace_delhwdebug(child_pid, wh1); in test_multi_sethwdebug_range()
462 ptrace_delhwdebug(child_pid, wh2); in test_multi_sethwdebug_range()
465 static void test_multi_sethwdebug_range_dawr_overlap(pid_t child_pid) in test_multi_sethwdebug_range_dawr_overlap() argument
481 wh1 = ptrace_sethwdebug(child_pid, &info1); in test_multi_sethwdebug_range_dawr_overlap()
484 wh2 = ptrace_sethwdebug(child_pid, &info2); in test_multi_sethwdebug_range_dawr_overlap()
486 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range_dawr_overlap()
487 check_success(child_pid, name, "WO", wp_addr1, len1); in test_multi_sethwdebug_range_dawr_overlap()
489 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range_dawr_overlap()
490 check_success(child_pid, name, "RO", wp_addr2, len2); in test_multi_sethwdebug_range_dawr_overlap()
492 ptrace_delhwdebug(child_pid, wh1); in test_multi_sethwdebug_range_dawr_overlap()
493 ptrace_delhwdebug(child_pid, wh2); in test_multi_sethwdebug_range_dawr_overlap()
496 static void test_sethwdebug_range_unaligned(pid_t child_pid) in test_sethwdebug_range_unaligned() argument
508 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned()
509 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned()
510 check_success(child_pid, name, "WO", wp_addr, len); in test_sethwdebug_range_unaligned()
511 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned()
517 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned()
518 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned()
519 check_success(child_pid, name, "RO", wp_addr, len); in test_sethwdebug_range_unaligned()
520 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned()
526 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned()
527 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned()
528 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_range_unaligned()
529 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned()
533 static void test_sethwdebug_range_unaligned_dar(pid_t child_pid) in test_sethwdebug_range_unaligned_dar() argument
545 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned_dar()
546 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned_dar()
547 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_range_unaligned_dar()
548 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned_dar()
551 static void test_sethwdebug_dawr_max_range(pid_t child_pid) in test_sethwdebug_dawr_max_range() argument
563 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_dawr_max_range()
564 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_dawr_max_range()
565 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_dawr_max_range()
566 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_dawr_max_range()
571 run_tests(pid_t child_pid, struct ppc_debug_info *dbginfo, bool dawr) in run_tests() argument
573 test_set_debugreg(child_pid); in run_tests()
574 test_set_debugreg_kernel_userspace(child_pid); in run_tests()
575 test_sethwdebug_exact(child_pid); in run_tests()
576 test_sethwdebug_exact_kernel_userspace(child_pid); in run_tests()
578 test_sethwdebug_range_aligned(child_pid); in run_tests()
580 test_sethwdebug_range_unaligned(child_pid); in run_tests()
581 test_sethwdebug_range_unaligned_dar(child_pid); in run_tests()
582 test_sethwdebug_dawr_max_range(child_pid); in run_tests()
584 test_multi_sethwdebug_range(child_pid); in run_tests()
585 test_multi_sethwdebug_range_dawr_overlap(child_pid); in run_tests()
593 pid_t child_pid; in ptrace_hwbreak() local
597 child_pid = fork(); in ptrace_hwbreak()
598 if (!child_pid) { in ptrace_hwbreak()
605 get_dbginfo(child_pid, &dbginfo); in ptrace_hwbreak()
609 run_tests(child_pid, &dbginfo, dawr); in ptrace_hwbreak()
612 ptrace(PTRACE_CONT, child_pid, NULL, 0); in ptrace_hwbreak()