FAIL_IF_EXIT_MSG
FAIL_IF_EXIT_MSG(true, "bad enum dexcr_source");
FAIL_IF_EXIT_MSG(pid == -1, "fork failed");
FAIL_IF_EXIT_MSG(waitpid(pid, &wstatus, 0) == -1, "wait failed");
FAIL_IF_EXIT_MSG(!WIFEXITED(wstatus), "child did not exit cleanly");
FAIL_IF_EXIT_MSG(WEXITSTATUS(wstatus) != 0, "child exit error");
FAIL_IF_EXIT_MSG(true, "unknown PR aspect");
FAIL_IF_EXIT_MSG(!(ctrl & PR_PPC_DEXCR_CTRL_SET_ONEXEC),
FAIL_IF_EXIT_MSG(mfspr(SPRN_DEXCR_RO) & aspect,
FAIL_IF_EXIT_MSG(!(ctrl & PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC),
FAIL_IF_EXIT_MSG(!(mfspr(SPRN_DEXCR_RO) & aspect),
FAIL_IF_EXIT_MSG(!(ctrl & PR_PPC_DEXCR_CTRL_SET),
FAIL_IF_EXIT_MSG(!(ctrl & PR_PPC_DEXCR_CTRL_SET_ONEXEC),
FAIL_IF_EXIT_MSG(!(aspect & dexcr), "setting aspect across exec did not take effect");
FAIL_IF_EXIT_MSG(!(ctrl & PR_PPC_DEXCR_CTRL_CLEAR),
FAIL_IF_EXIT_MSG(!(ctrl & PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC),
FAIL_IF_EXIT_MSG(aspect & dexcr, "clearing aspect across exec did not take effect");
FAIL_IF_EXIT_MSG(true, "unknown expected status");
FAIL_IF_EXIT_MSG(hash_values[HASH_COUNT] != (unsigned long)&hash_values,
FAIL_IF_EXIT_MSG(ptrace_traceme(), "PTRACE_TRACEME failed");
FAIL_IF_EXIT_MSG(raise(SIGSTOP), "Child failed to raise SIGSTOP");
FAIL_IF_EXIT_MSG(sigaction(sig, &sa, &old_handler),
FAIL_IF_EXIT_MSG(sigaction(sig, &old_handler, &popped),