32 #ifndef CLIENT_MAC_GENERATOR_MINIDUMP_GENERATOR_H__ 33 #define CLIENT_MAC_GENERATOR_MINIDUMP_GENERATOR_H__ 35 #include <mach/mach.h> 36 #include <TargetConditionals.h> 48 #if !TARGET_OS_IPHONE && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7) 49 #define HAS_PPC_SUPPORT 52 #define HAS_ARM_SUPPORT 53 #elif defined(__i386__) || defined(__x86_64__) 54 #define HAS_X86_SUPPORT 63 #if __DARWIN_UNIX03 || TARGET_CPU_X86_64 || TARGET_CPU_PPC64 || TARGET_CPU_ARM 68 #define REGISTER_FROM_THREADSTATE(a, b) ((a)->__ ## b) 70 #define REGISTER_FROM_THREADSTATE(a, b) (a->b) 94 bool Write(
const char *path);
98 mach_port_t thread_name) {
99 exception_type_ = type;
100 exception_code_ = code;
101 exception_subcode_ = subcode;
102 exception_thread_ = thread_name;
130 bool WriteBreakpadInfoStream(
MDRawDirectory *breakpad_info_stream);
134 bool GetThreadState(thread_act_t target_thread, thread_state_t state,
135 mach_msg_type_number_t *count);
136 bool WriteStackFromStartAddress(mach_vm_address_t start_addr,
142 bool WriteCVRecord(
MDRawModule *module,
int cpu_type,
143 const char *module_path,
bool in_memory);
144 bool WriteModuleStream(
unsigned int index,
MDRawModule *module);
145 size_t CalculateStackSize(mach_vm_address_t start_addr);
146 int FindExecutableModule();
149 #ifdef HAS_ARM_SUPPORT 156 #ifdef HAS_PPC_SUPPORT 168 #ifdef HAS_X86_SUPPORT 193 int exception_subcode_;
194 mach_port_t exception_thread_;
195 mach_port_t crashing_task_;
196 mach_port_t handler_thread_;
199 cpu_type_t cpu_type_;
202 static char build_string_[16];
203 static int os_major_version_;
204 static int os_minor_version_;
205 static int os_build_number_;
208 ucontext_t *task_context_;
226 #endif // CLIENT_MAC_GENERATOR_MINIDUMP_GENERATOR_H__
bool Write(const char *path)
static void GatherSystemInformation()
virtual bool WriteExceptionStream(MDRawDirectory *exception_stream)
virtual ~MinidumpGenerator()
natural_t breakpad_thread_state_data_t[THREAD_STATE_MAX]
virtual bool WriteThreadStream(mach_port_t thread_id, MDRawThread *thread)
MinidumpFileWriter writer_
void SetTaskContext(ucontext_t *task_context)
static string UniqueNameInDirectory(const string &dir, string *unique_name)
void SetExceptionInformation(int type, int code, int subcode, mach_port_t thread_name)
wasteful_vector< MDMemoryDescriptor > memory_blocks_