Bug 1861751 Part 4: Add tests of invalid buffers in various usages. r=webgpu-reviewer...
[gecko.git] / toolkit / crashreporter / breakpad-patches / 24-macos-exc-resource.patch
blob29cf1160485737652b5e002ca042930b3e637e51
1 diff --git a/src/google_breakpad/common/minidump_exception_mac.h b/src/google_breakpad/common/minidump_exception_mac.h
2 --- a/src/google_breakpad/common/minidump_exception_mac.h
3 +++ b/src/google_breakpad/common/minidump_exception_mac.h
4 @@ -62,16 +62,18 @@ typedef enum {
5 MD_EXCEPTION_MAC_BREAKPOINT = 6, /* code is CPU-specific */
6 /* EXC_BREAKPOINT */
7 MD_EXCEPTION_MAC_SYSCALL = 7,
8 /* EXC_SYSCALL */
9 MD_EXCEPTION_MAC_MACH_SYSCALL = 8,
10 /* EXC_MACH_SYSCALL */
11 MD_EXCEPTION_MAC_RPC_ALERT = 9,
12 /* EXC_RPC_ALERT */
13 + MD_EXCEPTION_MAC_RESOURCE = 11,
14 + /* EXC_RESOURCE */
15 MD_EXCEPTION_MAC_SIMULATED = 0x43507378
16 /* Fake exception code used by Crashpad's SimulateCrash ('CPsx'). */
17 } MDExceptionMac;
19 /* For (MDException).exception_flags. Breakpad minidump extension for Mac OS X
20 * support. Based on Darwin/Mac OS X' mach/ppc/exception.h and
21 * mach/i386/exception.h. This is what Mac OS X calls a "code". */
22 typedef enum {
23 @@ -201,9 +203,42 @@ typedef enum {
24 /* EXC_I386_PGFLT = 14: should not occur in user space */
25 /* EXC_I386_EXTERRFLT = 16: mapped to EXC_ARITHMETIC/EXC_I386_EXTERR */
26 MD_EXCEPTION_CODE_MAC_X86_ALIGNMENT_FAULT = 17
27 /* EXC_ALIGNFLT (for vector operations) */
28 /* EXC_I386_ENOEXTFLT = 32: should be handled by the kernel */
29 /* EXC_I386_ENDPERR = 33: should not occur */
30 } MDExceptionCodeMac;
32 +// The following definitions were taken from Darwin/XNU kernel sources.
33 +// See https://github.com/apple/darwin-xnu/blob/main/osfmk/kern/exc_resource.h
35 +typedef enum MDMacExcResourceType {
36 + MD_MAC_EXC_RESOURCE_TYPE_CPU = 1,
37 + MD_MAC_EXC_RESOURCE_TYPE_WAKEUPS = 2,
38 + MD_MAC_EXC_RESOURCE_TYPE_MEMORY = 3,
39 + MD_MAC_EXC_RESOURCE_TYPE_IO = 4,
40 + MD_MAC_EXC_RESOURCE_TYPE_THREADS = 5
41 +} MDMacExcResourceType;
43 +typedef enum MDMacExcResourceFlavorCpu {
44 + MD_MAC_EXC_RESOURCE_FLAVOR_CPU_MONITOR = 1,
45 + MD_MAC_EXC_RESOURCE_FLAVOR_CPU_MONITOR_FATAL = 2
46 +} MDMacExcResourceFlavorCpu;
48 +typedef enum MDMacExcResourceFlavorWakeup {
49 + MD_MAC_EXC_RESOURCE_FLAVOR_WAKEUPS_MONITOR = 1,
50 +} MDMacExcResourceFlavorWakeup;
52 +typedef enum MDMacExcResourceFlavorMemory {
53 + MD_MAC_EXC_RESOURCE_FLAVOR_HIGH_WATERMARK = 1,
54 +} MDMacExcResourceFlavorMemory;
56 +typedef enum MDMacExcResourceIOFlavor {
57 + MD_MAC_EXC_RESOURCE_FLAVOR_IO_PHYSICAL_WRITES = 1,
58 + MD_MAC_EXC_RESOURCE_FLAVOR_IO_LOGICAL_WRITES = 2,
59 +} MDMacExcResourceIOFlavor;
61 +typedef enum MDMacExcResourceThreadsFlavor {
62 + MD_MAC_EXC_RESOURCE_FLAVOR_THREADS_HIGH_WATERMARK = 1,
63 +} MDMacExcResourceThreadsFlavor;
65 #endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_MAC_OSX_H__ */
66 diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
67 --- a/src/processor/minidump_processor.cc
68 +++ b/src/processor/minidump_processor.cc
69 @@ -1143,16 +1143,86 @@ string MinidumpProcessor::GetCrashReason
70 case MD_EXCEPTION_MAC_MACH_SYSCALL:
71 reason = "EXC_MACH_SYSCALL / ";
72 reason.append(flags_string);
73 break;
74 case MD_EXCEPTION_MAC_RPC_ALERT:
75 reason = "EXC_RPC_ALERT / ";
76 reason.append(flags_string);
77 break;
78 + case MD_EXCEPTION_MAC_RESOURCE:
79 + reason = "EXC_RESOURCE / ";
80 + {
81 + uint32_t type = (exception_flags >> 29) & 0x7ULL;
82 + uint32_t flavor = (exception_flags >> 26) & 0x7ULL;
83 + char flavor_string[6] = {};
84 + switch (type) {
85 + case MD_MAC_EXC_RESOURCE_TYPE_CPU:
86 + reason.append("RESOURCE_TYPE_CPU / ");
87 + switch (flavor) {
88 + case MD_MAC_EXC_RESOURCE_FLAVOR_CPU_MONITOR:
89 + reason.append("FLAVOR_CPU_MONITOR");
90 + break;
91 + case MD_MAC_EXC_RESOURCE_FLAVOR_CPU_MONITOR_FATAL:
92 + reason.append("FLAVOR_CPU_MONITOR_FATAL");
93 + break;
94 + default:
95 + snprintf(flavor_string, sizeof(flavor_string), "%#3x", flavor);
96 + reason.append(flavor_string);
97 + break;
98 + }
99 + break;
100 + case MD_MAC_EXC_RESOURCE_TYPE_WAKEUPS:
101 + reason.append("RESOURCE_TYPE_WAKEUPS / ");
102 + if (flavor == MD_MAC_EXC_RESOURCE_FLAVOR_WAKEUPS_MONITOR) {
103 + reason.append("FLAVOR_WAKEUPS_MONITOR");
104 + } else {
105 + snprintf(flavor_string, sizeof(flavor_string), "%#3x", flavor);
106 + reason.append(flavor_string);
108 + break;
109 + case MD_MAC_EXC_RESOURCE_TYPE_MEMORY:
110 + reason.append("RESOURCE_TYPE_MEMORY / ");
111 + if (flavor == MD_MAC_EXC_RESOURCE_FLAVOR_HIGH_WATERMARK) {
112 + reason.append("FLAVOR_HIGH_WATERMARK");
113 + } else {
114 + snprintf(flavor_string, sizeof(flavor_string), "%#3x", flavor);
115 + reason.append(flavor_string);
117 + break;
118 + case MD_MAC_EXC_RESOURCE_TYPE_IO:
119 + reason.append("EXC_RESOURCE_TYPE_IO / ");
120 + switch (flavor) {
121 + case MD_MAC_EXC_RESOURCE_FLAVOR_IO_PHYSICAL_WRITES:
122 + reason.append("FLAVOR_IO_PHYSICAL_WRITES");
123 + break;
124 + case MD_MAC_EXC_RESOURCE_FLAVOR_IO_LOGICAL_WRITES:
125 + reason.append("FLAVOR_IO_LOGICAL_WRITES");
126 + break;
127 + default:
128 + snprintf(flavor_string, sizeof(flavor_string), "%#3x", flavor);
129 + reason.append(flavor_string);
130 + break;
132 + break;
133 + case MD_MAC_EXC_RESOURCE_TYPE_THREADS:
134 + reason.append("EXC_RESOURCE_TYPE_THREADS / ");
135 + if (flavor == MD_MAC_EXC_RESOURCE_FLAVOR_THREADS_HIGH_WATERMARK) {
136 + reason.append("FLAVOR_THREADS_HIGH_WATERMARK");
137 + } else {
138 + snprintf(flavor_string, sizeof(flavor_string), "%#3x", flavor);
139 + reason.append(flavor_string);
141 + break;
142 + default:
143 + reason.append(flags_string);
144 + break;
147 + break;
148 case MD_EXCEPTION_MAC_SIMULATED:
149 reason = "Simulated Exception";
150 break;
152 break;
155 case MD_OS_WIN32_NT: