Lines Matching refs:child_pid

51 static void get_dbginfo(pid_t child_pid, struct ppc_debug_info *dbginfo)  in get_dbginfo()  argument
53 if (ptrace(PPC_PTRACE_GETHWDBGINFO, child_pid, NULL, dbginfo)) { in get_dbginfo()
211 static void check_success(pid_t child_pid, const char *name, const char *type, in check_success() argument
223 ptrace(PTRACE_GETSIGINFO, child_pid, NULL, &siginfo); in check_success()
240 ptrace(PTRACE_SINGLESTEP, child_pid, NULL, 0); in check_success()
245 static void ptrace_set_debugreg(pid_t child_pid, unsigned long wp_addr) in ptrace_set_debugreg() argument
247 if (ptrace(PTRACE_SET_DEBUGREG, child_pid, 0, wp_addr)) { in ptrace_set_debugreg()
253 static int ptrace_sethwdebug(pid_t child_pid, struct ppc_hw_breakpoint *info) in ptrace_sethwdebug() argument
255 int wh = ptrace(PPC_PTRACE_SETHWDEBUG, child_pid, 0, info); in ptrace_sethwdebug()
264 static void ptrace_delhwdebug(pid_t child_pid, int wh) in ptrace_delhwdebug() argument
266 if (ptrace(PPC_PTRACE_DELHWDEBUG, child_pid, 0, wh) < 0) { in ptrace_delhwdebug()
276 static int test_set_debugreg(pid_t child_pid) in test_set_debugreg() argument
287 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg()
288 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg()
289 check_success(child_pid, name, "WO", wp_addr, len); in test_set_debugreg()
297 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg()
298 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg()
299 check_success(child_pid, name, "RO", wp_addr, len); in test_set_debugreg()
308 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg()
309 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg()
310 check_success(child_pid, name, "RW", wp_addr, len); in test_set_debugreg()
313 ptrace_set_debugreg(child_pid, 0); in test_set_debugreg()
317 static int test_set_debugreg_kernel_userspace(pid_t child_pid) in test_set_debugreg_kernel_userspace() argument
327 ptrace_set_debugreg(child_pid, wp_addr); in test_set_debugreg_kernel_userspace()
328 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_set_debugreg_kernel_userspace()
329 check_success(child_pid, name, "Kernel Access Userspace", wp_addr, 8); in test_set_debugreg_kernel_userspace()
331 ptrace_set_debugreg(child_pid, 0); in test_set_debugreg_kernel_userspace()
350 static void test_sethwdebug_exact(pid_t child_pid) in test_sethwdebug_exact() argument
360 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact()
361 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact()
362 check_success(child_pid, name, "WO", wp_addr, len); in test_sethwdebug_exact()
363 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact()
367 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact()
368 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact()
369 check_success(child_pid, name, "RO", wp_addr, len); in test_sethwdebug_exact()
370 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact()
374 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact()
375 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact()
376 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_exact()
377 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact()
380 static void test_sethwdebug_exact_kernel_userspace(pid_t child_pid) in test_sethwdebug_exact_kernel_userspace() argument
390 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_exact_kernel_userspace()
391 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_exact_kernel_userspace()
392 check_success(child_pid, name, "Kernel Access Userspace", wp_addr, len); in test_sethwdebug_exact_kernel_userspace()
393 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_exact_kernel_userspace()
396 static void test_sethwdebug_range_aligned(pid_t child_pid) in test_sethwdebug_range_aligned() argument
408 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_aligned()
409 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_aligned()
410 check_success(child_pid, name, "WO", wp_addr, len); in test_sethwdebug_range_aligned()
411 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_aligned()
417 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_aligned()
418 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_aligned()
419 check_success(child_pid, name, "RO", wp_addr, len); in test_sethwdebug_range_aligned()
420 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_aligned()
426 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_aligned()
427 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_aligned()
428 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_range_aligned()
429 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_aligned()
432 static void test_multi_sethwdebug_range(pid_t child_pid) in test_multi_sethwdebug_range() argument
449 wh1 = ptrace_sethwdebug(child_pid, &info1); in test_multi_sethwdebug_range()
452 wh2 = ptrace_sethwdebug(child_pid, &info2); in test_multi_sethwdebug_range()
454 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range()
455 check_success(child_pid, name1, "WO", wp_addr1, len1); in test_multi_sethwdebug_range()
457 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range()
458 check_success(child_pid, name2, "RO", wp_addr2, len2); in test_multi_sethwdebug_range()
460 ptrace_delhwdebug(child_pid, wh1); in test_multi_sethwdebug_range()
461 ptrace_delhwdebug(child_pid, wh2); in test_multi_sethwdebug_range()
464 static void test_multi_sethwdebug_range_dawr_overlap(pid_t child_pid) in test_multi_sethwdebug_range_dawr_overlap() argument
480 wh1 = ptrace_sethwdebug(child_pid, &info1); in test_multi_sethwdebug_range_dawr_overlap()
483 wh2 = ptrace_sethwdebug(child_pid, &info2); in test_multi_sethwdebug_range_dawr_overlap()
485 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range_dawr_overlap()
486 check_success(child_pid, name, "WO", wp_addr1, len1); in test_multi_sethwdebug_range_dawr_overlap()
488 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_multi_sethwdebug_range_dawr_overlap()
489 check_success(child_pid, name, "RO", wp_addr2, len2); in test_multi_sethwdebug_range_dawr_overlap()
491 ptrace_delhwdebug(child_pid, wh1); in test_multi_sethwdebug_range_dawr_overlap()
492 ptrace_delhwdebug(child_pid, wh2); in test_multi_sethwdebug_range_dawr_overlap()
495 static void test_sethwdebug_range_unaligned(pid_t child_pid) in test_sethwdebug_range_unaligned() argument
507 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned()
508 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned()
509 check_success(child_pid, name, "WO", wp_addr, len); in test_sethwdebug_range_unaligned()
510 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned()
516 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned()
517 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned()
518 check_success(child_pid, name, "RO", wp_addr, len); in test_sethwdebug_range_unaligned()
519 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned()
525 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned()
526 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned()
527 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_range_unaligned()
528 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned()
532 static void test_sethwdebug_range_unaligned_dar(pid_t child_pid) in test_sethwdebug_range_unaligned_dar() argument
544 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_range_unaligned_dar()
545 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_range_unaligned_dar()
546 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_range_unaligned_dar()
547 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_range_unaligned_dar()
550 static void test_sethwdebug_dawr_max_range(pid_t child_pid) in test_sethwdebug_dawr_max_range() argument
562 wh = ptrace_sethwdebug(child_pid, &info); in test_sethwdebug_dawr_max_range()
563 ptrace(PTRACE_CONT, child_pid, NULL, 0); in test_sethwdebug_dawr_max_range()
564 check_success(child_pid, name, "RW", wp_addr, len); in test_sethwdebug_dawr_max_range()
565 ptrace_delhwdebug(child_pid, wh); in test_sethwdebug_dawr_max_range()
570 run_tests(pid_t child_pid, struct ppc_debug_info *dbginfo, bool dawr) in run_tests() argument
572 test_set_debugreg(child_pid); in run_tests()
573 test_set_debugreg_kernel_userspace(child_pid); in run_tests()
574 test_sethwdebug_exact(child_pid); in run_tests()
575 test_sethwdebug_exact_kernel_userspace(child_pid); in run_tests()
577 test_sethwdebug_range_aligned(child_pid); in run_tests()
579 test_sethwdebug_range_unaligned(child_pid); in run_tests()
580 test_sethwdebug_range_unaligned_dar(child_pid); in run_tests()
581 test_sethwdebug_dawr_max_range(child_pid); in run_tests()
583 test_multi_sethwdebug_range(child_pid); in run_tests()
584 test_multi_sethwdebug_range_dawr_overlap(child_pid); in run_tests()
592 pid_t child_pid; in ptrace_hwbreak() local
596 child_pid = fork(); in ptrace_hwbreak()
597 if (!child_pid) { in ptrace_hwbreak()
604 get_dbginfo(child_pid, &dbginfo); in ptrace_hwbreak()
608 run_tests(child_pid, &dbginfo, dawr); in ptrace_hwbreak()
611 ptrace(PTRACE_CONT, child_pid, NULL, 0); in ptrace_hwbreak()