#include "Plugins/ObjectFile/Breakpad/BreakpadRecords.h"
#include "lldb/lldb-defines.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/FormatVariadic.h"
#include <optional>
usingnamespacelldb_private;
usingnamespacelldb_private::breakpad;
namespace {
enum class Token { … };
}
template<typename T>
static T stringTo(llvm::StringRef Str);
template <> Token stringTo<Token>(llvm::StringRef Str) { … }
template <>
llvm::Triple::OSType stringTo<llvm::Triple::OSType>(llvm::StringRef Str) { … }
template <>
llvm::Triple::ArchType stringTo<llvm::Triple::ArchType>(llvm::StringRef Str) { … }
template<typename T>
static T consume(llvm::StringRef &Str) { … }
template <typename T> static constexpr size_t hex_digits() { … }
static UUID parseModuleId(llvm::Triple::OSType os, llvm::StringRef str) { … }
std::optional<Record::Kind> Record::classify(llvm::StringRef Line) { … }
std::optional<ModuleRecord> ModuleRecord::parse(llvm::StringRef Line) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const ModuleRecord &R) { … }
std::optional<InfoRecord> InfoRecord::parse(llvm::StringRef Line) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const InfoRecord &R) { … }
template <typename T>
static std::optional<T> parseNumberName(llvm::StringRef Line, Token TokenType) { … }
std::optional<FileRecord> FileRecord::parse(llvm::StringRef Line) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const FileRecord &R) { … }
std::optional<InlineOriginRecord>
InlineOriginRecord::parse(llvm::StringRef Line) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const InlineOriginRecord &R) { … }
static bool parsePublicOrFunc(llvm::StringRef Line, bool &Multiple,
lldb::addr_t &Address, lldb::addr_t *Size,
lldb::addr_t &ParamSize, llvm::StringRef &Name) { … }
std::optional<FuncRecord> FuncRecord::parse(llvm::StringRef Line) { … }
bool breakpad::operator==(const FuncRecord &L, const FuncRecord &R) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const FuncRecord &R) { … }
std::optional<InlineRecord> InlineRecord::parse(llvm::StringRef Line) { … }
bool breakpad::operator==(const InlineRecord &L, const InlineRecord &R) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const InlineRecord &R) { … }
std::optional<LineRecord> LineRecord::parse(llvm::StringRef Line) { … }
bool breakpad::operator==(const LineRecord &L, const LineRecord &R) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const LineRecord &R) { … }
std::optional<PublicRecord> PublicRecord::parse(llvm::StringRef Line) { … }
bool breakpad::operator==(const PublicRecord &L, const PublicRecord &R) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const PublicRecord &R) { … }
std::optional<StackCFIRecord> StackCFIRecord::parse(llvm::StringRef Line) { … }
bool breakpad::operator==(const StackCFIRecord &L, const StackCFIRecord &R) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const StackCFIRecord &R) { … }
std::optional<StackWinRecord> StackWinRecord::parse(llvm::StringRef Line) { … }
bool breakpad::operator==(const StackWinRecord &L, const StackWinRecord &R) { … }
llvm::raw_ostream &breakpad::operator<<(llvm::raw_ostream &OS,
const StackWinRecord &R) { … }
llvm::StringRef breakpad::toString(Record::Kind K) { … }