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 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
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(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

source code of lldb/test/API/macosx/abort_with_payload/main.c