Index: util/mach/exception_types.h |
diff --git a/util/mach/exception_types.h b/util/mach/exception_types.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..834f2123b0d8e49c90f580f59937b1a491549780 |
--- /dev/null |
+++ b/util/mach/exception_types.h |
@@ -0,0 +1,79 @@ |
+// Copyright 2015 The Crashpad Authors. All rights reserved. |
+// |
+// Licensed under the Apache License, Version 2.0 (the "License"); |
+// you may not use this file except in compliance with the License. |
+// You may obtain a copy of the License at |
+// |
+// http://www.apache.org/licenses/LICENSE-2.0 |
+// |
+// Unless required by applicable law or agreed to in writing, software |
+// distributed under the License is distributed on an "AS IS" BASIS, |
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+// See the License for the specific language governing permissions and |
+// limitations under the License. |
+ |
+#ifndef CRASHPAD_UTIL_MACH_EXCEPTION_TYPES_H_ |
+#define CRASHPAD_UTIL_MACH_EXCEPTION_TYPES_H_ |
+ |
+#include <mach/mach.h> |
+#include <sys/types.h> |
+ |
+namespace crashpad { |
+ |
+//! \brief Recovers the original exception, first exception code, and signal |
+//! from the encoded form of the first exception code delivered with |
+//! `EXC_CRASH` exceptions. |
+//! |
+//! `EXC_CRASH` exceptions are generated when the kernel has committed to |
+//! terminating a process as a result of a core-generating POSIX signal and, for |
+//! hardware exceptions, an earlier Mach exception. Information about this |
+//! earlier exception and signal is made available to the `EXC_CRASH` handler |
+//! via its `code[0]` parameter. This function recovers the original exception, |
+//! the value of `code[0]` from the original exception, and the value of the |
+//! signal responsible for process termination. |
+//! |
+//! \param[in] code_0 The first exception code (`code[0]`) passed to a Mach |
+//! exception handler in an `EXC_CRASH` exception. It is invalid to call |
+//! this function with an exception code from any exception other than |
+//! `EXC_CRASH`. |
+//! \param[out] original_code_0 The first exception code (`code[0]`) passed to |
+//! the Mach exception handler for a hardware exception that resulted in the |
+//! generation of a POSIX signal that caused process termination. If the |
+//! signal that caused termination was not sent as a result of a hardware |
+//! exception, this will be `0`. Callers that do not need this value may |
+//! pass `nullptr`. |
+//! \param[out] signal The POSIX signal that caused process termination. Callers |
+//! that do not need this value may pass `nullptr`. |
+//! |
+//! \return The original exception for a hardware exception that resulted in the |
+//! generation of a POSIX signal that caused process termination. If the |
+//! signal that caused termination was not sent as a result of a hardware |
+//! exception, this will be `0`. |
+exception_type_t ExcCrashRecoverOriginalException( |
+ mach_exception_code_t code_0, |
+ mach_exception_code_t* original_code_0, |
+ int* signal); |
+ |
+//! \brief Determines whether an exception is a non-fatal `EXC_RESOURCE`. |
+//! |
+//! \param[in] exception The exception type as received by a Mach exception |
+//! handler. |
+//! \param[in] code_0 The first exception code (`code[0]`) as received by a |
+//! Mach exception handler. |
+//! \param[in] pid The process ID that the exception occurred in. In some cases, |
+//! process may need to be queried to determine whether an `EXC_RESOURCE` |
+//! exception is fatal. |
+//! |
+//! \return `true` if the exception is a non-fatal `EXC_RESOURCE`. `false` |
+//! otherwise. If the exception is `EXC_RESOURCE` of a recognized type but |
+//! it is not possible to determine whether it is fatal, returns `true` |
+//! under the assumption that all known `EXC_RESOURCE` exceptions are |
+//! non-fatal by default. If the exception is not `EXC_RESOURCE` or is an |
+//! unknown `EXC_RESOURCE` type, returns `false`. |
+bool IsExceptionNonfatalResource(exception_type_t exception, |
+ mach_exception_code_t code_0, |
+ pid_t pid); |
+ |
+} // namespace crashpad |
+ |
+#endif // CRASHPAD_UTIL_MACH_EXCEPTION_TYPES_H_ |