kicad/thirdparty/sentry-native/external/crashpad/minidump/minidump_stacktrace_writer.h

89 lines
2.3 KiB
C++

#ifndef CRASHPAD_MINIDUMP_MINIDUMP_STACKTRACE_WRITER_H_
#define CRASHPAD_MINIDUMP_MINIDUMP_STACKTRACE_WRITER_H_
#include <stdint.h>
#include <sys/types.h>
#include <memory>
#include <string>
#include <vector>
#include "minidump/minidump_extensions.h"
#include "minidump/minidump_stream_writer.h"
#include "minidump/minidump_thread_id_map.h"
#include "minidump/minidump_writable.h"
namespace crashpad {
namespace internal {
struct Header {
uint32_t version;
uint32_t num_threads;
uint32_t num_frames;
uint32_t symbol_bytes;
};
struct RawThread {
uint32_t thread_id;
uint32_t start_frame;
uint32_t num_frames;
};
struct RawFrame {
uint64_t instruction_addr;
uint32_t symbol_offset;
uint32_t symbol_len;
};
} // namespace internal
class ThreadSnapshot;
class ExceptionSnapshot;
//! \brief The writer for our custom client-side stacktraces stream in a
//! minidump file.
class MinidumpStacktraceListWriter final
: public internal::MinidumpStreamWriter {
public:
MinidumpStacktraceListWriter();
MinidumpStacktraceListWriter(const MinidumpStacktraceListWriter&) = delete;
MinidumpStacktraceListWriter& operator=(const MinidumpStacktraceListWriter&) =
delete;
~MinidumpStacktraceListWriter() override;
//! \brief TODO
//!
//! \param[in] thread_snapshots The thread snapshots to use as source data.
//! \param[in] thread_id_map A MinidumpThreadIDMap to be consulted to
//! determine the 32-bit minidump thread ID to use for the thread
//! identified by \a thread_snapshots.
void InitializeFromSnapshot(
const std::vector<const ThreadSnapshot*>& thread_snapshots,
const MinidumpThreadIDMap& thread_id_map,
const ExceptionSnapshot* exception_snapshot);
protected:
// MinidumpWritable:
// bool Freeze() override;
size_t SizeOfObject() override;
size_t Alignment() override;
// std::vector<MinidumpWritable*> Children() override;
bool WriteObject(FileWriterInterface* file_writer) override;
// MinidumpStreamWriter:
MinidumpStreamType StreamType() const override;
private:
std::vector<internal::RawThread> threads_;
std::vector<internal::RawFrame> frames_;
std::vector<uint8_t> symbol_bytes_;
internal::Header stacktrace_header_;
};
} // namespace crashpad
#endif // CRASHPAD_MINIDUMP_MINIDUMP_STACKTRACE_WRITER_H_