| 1 | // These defines are from bsd/sys/reason.h: |
| 2 | #include <stdint.h> |
| 3 | #include <string.h> |
| 4 | |
| 5 | extern 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 | |
| 10 | extern 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 0x4 |
| 14 | #define OS_REASON_FLAG_NO_CRASH_REPORT 0x1 |
| 15 | #define OS_REASON_FLAG_ONE_TIME_FAILURE 0x80 |
| 16 | |
| 17 | #define MY_REASON_FLAGS \ |
| 18 | OS_REASON_FLAG_FROM_USERSPACE | OS_REASON_FLAG_NO_CRASH_REPORT | \ |
| 19 | OS_REASON_FLAG_ONE_TIME_FAILURE |
| 20 | #define OS_REASON_TEST 5 |
| 21 | |
| 22 | int 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(s: payload_string) + 1; |
| 26 | if (argc == 1) // Stop here before abort |
| 27 | abort_with_payload(OS_REASON_TEST, reason_code: 100, payload: (void *)payload_string, |
| 28 | payload_size: payload_string_len, reason_string, MY_REASON_FLAGS); |
| 29 | else |
| 30 | abort_with_reason(OS_REASON_TEST, reason_code: 100, reason_string, MY_REASON_FLAGS); |
| 31 | |
| 32 | return 0; |
| 33 | } |
| 34 | |