xref: /llvm-project/lldb/test/API/macosx/abort_with_payload/main.c (revision 7a7cb8156b0a85f1eca772329644cae5989d4ed1)
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(payload_string) + 1;
26   if (argc == 1) // Stop here before abort
27     abort_with_payload(OS_REASON_TEST, 100, (void *)payload_string,
28                        payload_string_len, reason_string, MY_REASON_FLAGS);
29   else
30     abort_with_reason(OS_REASON_TEST, 100, reason_string, MY_REASON_FLAGS);
31 
32   return 0;
33 }
34