#include "google_breakpad/processor/stack_frame.h" #include "cpp/c_string.h" #include "cpp/data_definitions.h" #include "cpp/data_structures.h" using google_breakpad::StackFrame; void process_state_delete(process_state_t *state) { if (state != nullptr) { delete process_state_t::cast(state); } } call_stack_t *const *process_state_threads(process_state_t *state, size_t *size_out) { if (state == nullptr) { return nullptr; } auto *threads = process_state_t::cast(state)->threads(); if (size_out != nullptr) { *size_out = threads->size(); } return reinterpret_cast(threads->data()); } uint32_t call_stack_thread_id(const call_stack_t *stack) { return (stack == nullptr) ? 0 : call_stack_t::cast(stack)->tid(); } stack_frame_t *const *call_stack_frames(const call_stack_t *stack, size_t *size_out) { if (stack == nullptr) { return nullptr; } auto *frames = call_stack_t::cast(stack)->frames(); if (size_out != nullptr) { *size_out = frames->size(); } return reinterpret_cast(frames->data()); } uint64_t stack_frame_instruction(const stack_frame_t *frame) { if (frame == nullptr) { return 0; } return stack_frame_t::cast(frame)->instruction; } const code_module_t *stack_frame_module(const stack_frame_t *frame) { if (frame == nullptr) { return nullptr; } return code_module_t::cast(stack_frame_t::cast(frame)->module); } int stack_frame_trust(const stack_frame_t *frame) { if (frame == nullptr) { return StackFrame::FRAME_TRUST_NONE; } return stack_frame_t::cast(frame)->trust; } uint64_t code_module_base_address(const code_module_t *module) { return code_module_t::cast(module)->base_address(); } uint64_t code_module_size(const code_module_t *module) { return code_module_t::cast(module)->size(); } char *code_module_code_file(const code_module_t *module) { if (module == nullptr) { return nullptr; } return string_from(code_module_t::cast(module)->code_file()); } char *code_module_code_identifier(const code_module_t *module) { if (module == nullptr) { return nullptr; } return string_from(code_module_t::cast(module)->code_identifier()); } char *code_module_debug_file(const code_module_t *module) { if (module == nullptr) { return nullptr; } return string_from(code_module_t::cast(module)->debug_file()); } char *code_module_debug_identifier(const code_module_t *module) { if (module == nullptr) { return nullptr; } return string_from(code_module_t::cast(module)->debug_identifier()); }