#include "lldb/Symbol/UnwindPlan.h"
#include "lldb/Target/Process.h"
#include "lldb/Target/RegisterContext.h"
#include "lldb/Target/Target.h"
#include "lldb/Target/Thread.h"
#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/LLDBLog.h"
#include "lldb/Utility/Log.h"
#include "llvm/DebugInfo/DIContext.h"
#include "llvm/DebugInfo/DWARF/DWARFExpression.h"
#include <optional>
usingnamespacelldb;
usingnamespacelldb_private;
bool UnwindPlan::Row::RegisterLocation::
operator==(const UnwindPlan::Row::RegisterLocation &rhs) const { … }
void UnwindPlan::Row::RegisterLocation::SetAtDWARFExpression(
const uint8_t *opcodes, uint32_t len) { … }
void UnwindPlan::Row::RegisterLocation::SetIsDWARFExpression(
const uint8_t *opcodes, uint32_t len) { … }
static std::optional<std::pair<lldb::ByteOrder, uint32_t>>
GetByteOrderAndAddrSize(Thread *thread) { … }
static void DumpDWARFExpr(Stream &s, llvm::ArrayRef<uint8_t> expr, Thread *thread) { … }
void UnwindPlan::Row::RegisterLocation::Dump(Stream &s,
const UnwindPlan *unwind_plan,
const UnwindPlan::Row *row,
Thread *thread,
bool verbose) const { … }
static void DumpRegisterName(Stream &s, const UnwindPlan *unwind_plan,
Thread *thread, uint32_t reg_num) { … }
bool UnwindPlan::Row::FAValue::
operator==(const UnwindPlan::Row::FAValue &rhs) const { … }
void UnwindPlan::Row::FAValue::Dump(Stream &s, const UnwindPlan *unwind_plan,
Thread *thread) const { … }
void UnwindPlan::Row::Clear() { … }
void UnwindPlan::Row::Dump(Stream &s, const UnwindPlan *unwind_plan,
Thread *thread, addr_t base_addr) const { … }
UnwindPlan::Row::Row() : … { … }
bool UnwindPlan::Row::GetRegisterInfo(
uint32_t reg_num,
UnwindPlan::Row::RegisterLocation ®ister_location) const { … }
void UnwindPlan::Row::RemoveRegisterInfo(uint32_t reg_num) { … }
void UnwindPlan::Row::SetRegisterInfo(
uint32_t reg_num,
const UnwindPlan::Row::RegisterLocation register_location) { … }
bool UnwindPlan::Row::SetRegisterLocationToAtCFAPlusOffset(uint32_t reg_num,
int32_t offset,
bool can_replace) { … }
bool UnwindPlan::Row::SetRegisterLocationToIsCFAPlusOffset(uint32_t reg_num,
int32_t offset,
bool can_replace) { … }
bool UnwindPlan::Row::SetRegisterLocationToUndefined(
uint32_t reg_num, bool can_replace, bool can_replace_only_if_unspecified) { … }
bool UnwindPlan::Row::SetRegisterLocationToUnspecified(uint32_t reg_num,
bool can_replace) { … }
bool UnwindPlan::Row::SetRegisterLocationToRegister(uint32_t reg_num,
uint32_t other_reg_num,
bool can_replace) { … }
bool UnwindPlan::Row::SetRegisterLocationToSame(uint32_t reg_num,
bool must_replace) { … }
bool UnwindPlan::Row::SetRegisterLocationToIsConstant(uint32_t reg_num,
uint64_t constant,
bool can_replace) { … }
bool UnwindPlan::Row::operator==(const UnwindPlan::Row &rhs) const { … }
void UnwindPlan::AppendRow(const UnwindPlan::RowSP &row_sp) { … }
void UnwindPlan::InsertRow(const UnwindPlan::RowSP &row_sp,
bool replace_existing) { … }
UnwindPlan::RowSP UnwindPlan::GetRowForFunctionOffset(int offset) const { … }
bool UnwindPlan::IsValidRowIndex(uint32_t idx) const { … }
const UnwindPlan::RowSP UnwindPlan::GetRowAtIndex(uint32_t idx) const { … }
const UnwindPlan::RowSP UnwindPlan::GetLastRow() const { … }
int UnwindPlan::GetRowCount() const { … }
void UnwindPlan::SetPlanValidAddressRange(const AddressRange &range) { … }
bool UnwindPlan::PlanValidAtAddress(Address addr) { … }
void UnwindPlan::Dump(Stream &s, Thread *thread, lldb::addr_t base_addr) const { … }
void UnwindPlan::SetSourceName(const char *source) { … }
ConstString UnwindPlan::GetSourceName() const { … }
const RegisterInfo *UnwindPlan::GetRegisterInfo(Thread *thread,
uint32_t unwind_reg) const { … }