34 lines · c
1// These defines are from bsd/sys/reason.h:2#include <stdint.h>3#include <string.h>4 5extern void abort_with_payload(uint32_t reason_namespace, uint64_t reason_code,6 void *payload, uint32_t payload_size,7 const char *reason_string,8 uint64_t reason_flags);9 10extern void abort_with_reason(uint32_t reason_namespace, uint64_t reason_code,11 const char *reason_string, uint64_t reason_flags);12 13#define OS_REASON_FLAG_FROM_USERSPACE 0x414#define OS_REASON_FLAG_NO_CRASH_REPORT 0x115#define OS_REASON_FLAG_ONE_TIME_FAILURE 0x8016 17#define MY_REASON_FLAGS \18 OS_REASON_FLAG_FROM_USERSPACE | OS_REASON_FLAG_NO_CRASH_REPORT | \19 OS_REASON_FLAG_ONE_TIME_FAILURE20#define OS_REASON_TEST 521 22int main(int argc, char **argv) {23 const char *reason_string = "This is the reason string";24 const char *payload_string = "This is a payload that happens to be a string";25 size_t payload_string_len = strlen(payload_string) + 1;26 if (argc == 1) // Stop here before abort27 abort_with_payload(OS_REASON_TEST, 100, (void *)payload_string,28 payload_string_len, reason_string, MY_REASON_FLAGS);29 else30 abort_with_reason(OS_REASON_TEST, 100, reason_string, MY_REASON_FLAGS);31 32 return 0;33}34