| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "sandbox/mac/sandbox_crash_message.h" |
| |
| #include <stdint.h> |
| |
| #include <string> |
| |
| // SPI from CrashReporterClient.h |
| |
| struct crashreporter_annotations_t { |
| uint64_t version; |
| const char* message; |
| uint64_t signature_string; |
| uint64_t backtrace; |
| uint64_t message2; |
| uint64_t thread; |
| uint64_t dialog_mode; |
| uint64_t abort_cause; |
| }; |
| |
| namespace { |
| |
| crashreporter_annotations_t annotation |
| __attribute__((section("__DATA,__crash_info"))) = {5, nullptr, 0, 0, |
| 0, 0, 0, 0}; |
| |
| } |
| |
| namespace sandbox::crash_message { |
| |
| void SetCrashMessage(const char* message) { |
| // Copy the message into a static string to ensure that the pointer stored in |
| // gCRAnnotations remains valid. |
| static std::string* eternal_crash_message = new std::string; |
| eternal_crash_message->assign(message); |
| annotation.message = eternal_crash_message->data(); |
| } |
| |
| } // namespace sandbox::crash_message |