OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Crashpad Authors. All rights reserved. |
| 2 // |
| 3 // Licensed under the Apache License, Version 2.0 (the "License"); |
| 4 // you may not use this file except in compliance with the License. |
| 5 // You may obtain a copy of the License at |
| 6 // |
| 7 // http://www.apache.org/licenses/LICENSE-2.0 |
| 8 // |
| 9 // Unless required by applicable law or agreed to in writing, software |
| 10 // distributed under the License is distributed on an "AS IS" BASIS, |
| 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 // See the License for the specific language governing permissions and |
| 13 // limitations under the License. |
| 14 |
| 15 #ifndef CRASHPAD_UTIL_MACH_EXCEPTION_TYPES_H_ |
| 16 #define CRASHPAD_UTIL_MACH_EXCEPTION_TYPES_H_ |
| 17 |
| 18 #include <mach/mach.h> |
| 19 #include <sys/types.h> |
| 20 |
| 21 namespace crashpad { |
| 22 |
| 23 //! \brief Recovers the original exception, first exception code, and signal |
| 24 //! from the encoded form of the first exception code delivered with |
| 25 //! `EXC_CRASH` exceptions. |
| 26 //! |
| 27 //! `EXC_CRASH` exceptions are generated when the kernel has committed to |
| 28 //! terminating a process as a result of a core-generating POSIX signal and, for |
| 29 //! hardware exceptions, an earlier Mach exception. Information about this |
| 30 //! earlier exception and signal is made available to the `EXC_CRASH` handler |
| 31 //! via its `code[0]` parameter. This function recovers the original exception, |
| 32 //! the value of `code[0]` from the original exception, and the value of the |
| 33 //! signal responsible for process termination. |
| 34 //! |
| 35 //! \param[in] code_0 The first exception code (`code[0]`) passed to a Mach |
| 36 //! exception handler in an `EXC_CRASH` exception. It is invalid to call |
| 37 //! this function with an exception code from any exception other than |
| 38 //! `EXC_CRASH`. |
| 39 //! \param[out] original_code_0 The first exception code (`code[0]`) passed to |
| 40 //! the Mach exception handler for a hardware exception that resulted in the |
| 41 //! generation of a POSIX signal that caused process termination. If the |
| 42 //! signal that caused termination was not sent as a result of a hardware |
| 43 //! exception, this will be `0`. Callers that do not need this value may |
| 44 //! pass `nullptr`. |
| 45 //! \param[out] signal The POSIX signal that caused process termination. Callers |
| 46 //! that do not need this value may pass `nullptr`. |
| 47 //! |
| 48 //! \return The original exception for a hardware exception that resulted in the |
| 49 //! generation of a POSIX signal that caused process termination. If the |
| 50 //! signal that caused termination was not sent as a result of a hardware |
| 51 //! exception, this will be `0`. |
| 52 exception_type_t ExcCrashRecoverOriginalException( |
| 53 mach_exception_code_t code_0, |
| 54 mach_exception_code_t* original_code_0, |
| 55 int* signal); |
| 56 |
| 57 //! \brief Determines whether an exception is a non-fatal `EXC_RESOURCE`. |
| 58 //! |
| 59 //! \param[in] exception The exception type as received by a Mach exception |
| 60 //! handler. |
| 61 //! \param[in] code_0 The first exception code (`code[0]`) as received by a |
| 62 //! Mach exception handler. |
| 63 //! \param[in] pid The process ID that the exception occurred in. In some cases, |
| 64 //! process may need to be queried to determine whether an `EXC_RESOURCE` |
| 65 //! exception is fatal. |
| 66 //! |
| 67 //! \return `true` if the exception is a non-fatal `EXC_RESOURCE`. `false` |
| 68 //! otherwise. If the exception is `EXC_RESOURCE` of a recognized type but |
| 69 //! it is not possible to determine whether it is fatal, returns `true` |
| 70 //! under the assumption that all known `EXC_RESOURCE` exceptions are |
| 71 //! non-fatal by default. If the exception is not `EXC_RESOURCE` or is an |
| 72 //! unknown `EXC_RESOURCE` type, returns `false`. |
| 73 bool IsExceptionNonfatalResource(exception_type_t exception, |
| 74 mach_exception_code_t code_0, |
| 75 pid_t pid); |
| 76 |
| 77 } // namespace crashpad |
| 78 |
| 79 #endif // CRASHPAD_UTIL_MACH_EXCEPTION_TYPES_H_ |
OLD | NEW |