Go to the documentation of this file.
9 #ifndef LLDB_TARGET_REGISTERCONTEXTUNWIND_H
10 #define LLDB_TARGET_REGISTERCONTEXTUNWIND_H
27 typedef std::shared_ptr<RegisterContextUnwind>
SharedPtr;
45 const lldb_private::RegisterSet *
GetRegisterSet(
size_t reg_set)
override;
47 bool ReadRegister(
const lldb_private::RegisterInfo *reg_info,
50 bool WriteRegister(
const lldb_private::RegisterInfo *reg_info,
156 const lldb_private::RegisterInfo *reg_info,
161 const lldb_private::RegisterInfo *reg_info,
201 void UnwindLogMsg(
const char *fmt, ...) __attribute__((format(printf, 2, 3)));
204 __attribute__((format(printf, 2, 3)));
265 #endif // LLDB_TARGET_REGISTERCONTEXTUNWIND_H
bool ReadPC(lldb::addr_t &start_pc)
~RegisterContextUnwind() override=default
size_t GetRegisterCount() override
void void bool IsUnwindPlanValidForCurrentPC(lldb::UnwindPlanSP unwind_plan_sp)
bool TryFallbackUnwindPlan()
If the unwind has to the caller frame has failed, try something else.
void UnwindLogMsg(const char *fmt,...) __attribute__((format(printf
std::shared_ptr< RegisterContextUnwind > SharedPtr
void InitializeNonZerothFrame()
bool ReadRegisterValueFromRegisterLocation(lldb_private::UnwindLLDB::RegisterLocation regloc, const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value)
const lldb_private::RegisterSet * GetRegisterSet(size_t reg_set) override
bool m_all_registers_available
void InitializeZerothFrame()
lldb::UnwindPlanSP GetFullUnwindPlanForFrame()
bool CheckIfLoopingStack()
bool ForceSwitchToFallbackUnwindPlan()
Switch to the fallback unwind plan unconditionally without any safety checks that it is providing bet...
bool GetCFA(lldb::addr_t &cfa)
A class to represent register numbers, and able to convert between different register numbering schem...
lldb::addr_t GetReturnAddressHint(int32_t plan_offset)
bool IsTrapHandlerSymbol(lldb_private::Process *process, const lldb_private::SymbolContext &m_sym_ctx) const
Determines if a SymbolContext is a trap handler or not.
RegisterContextUnwind(lldb_private::Thread &thread, const SharedPtr &next_frame, lldb_private::SymbolContext &sym_ctx, uint32_t frame_number, lldb_private::UnwindLLDB &unwind_lldb)
uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override
Convert from a given register numbering scheme to the lldb register numbering scheme.
bool IsTrapHandlerFrame() const
lldb_private::UnwindLLDB & m_parent_unwind
int m_current_offset_backed_up_one
bool GetStartPC(lldb::addr_t &start_pc)
SharedPtr GetPrevFrame() const
SharedPtr GetNextFrame() const
RegisterKind
Register numbering types.
lldb_private::Thread & m_thread
void PropagateTrapHandlerFlagFromUnwindPlan(lldb::UnwindPlanSP unwind_plan)
Check if the given unwind plan indicates a signal trap handler, and update frame type and symbol cont...
void InvalidateAllRegisters() override
size_t GetRegisterSetCount() override
lldb::UnwindPlanSP m_fast_unwind_plan_sp
lldb_private::SymbolContext & m_sym_ctx
lldb::UnwindPlanSP GetFastUnwindPlanForFrame()
bool ReadGPRValue(lldb::RegisterKind register_kind, uint32_t regnum, lldb::addr_t &value)
bool BehavesLikeZerothFrame() const override
Indicates that this frame is currently executing code, that the PC value is not a return-pc but an ac...
bool m_behaves_like_zeroth_frame
bool WriteRegisterValueToRegisterLocation(lldb_private::UnwindLLDB::RegisterLocation regloc, const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value)
bool WriteRegister(const lldb_private::RegisterInfo *reg_info, const lldb_private::RegisterValue &value) override
A class that represents a running process on the host machine.
void void UnwindLogMsgVerbose(const char *fmt,...) __attribute__((format(printf
lldb_private::Address m_start_pc
lldb_private::UnwindLLDB::RegisterSearchResult SavedLocationForRegister(uint32_t lldb_regnum, lldb_private::UnwindLLDB::RegisterLocation ®loc)
bool ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override
lldb_private::Address m_current_pc
bool ReadRegister(const lldb_private::RegisterInfo *reg_info, lldb_private::RegisterValue &value) override
const lldb_private::RegisterInfo * GetRegisterInfoAtIndex(size_t reg) override
lldb::UnwindPlanSP m_fallback_unwind_plan_sp
lldb::UnwindPlanSP m_full_unwind_plan_sp
bool ReadFrameAddress(lldb::RegisterKind register_kind, UnwindPlan::Row::FAValue &fa, lldb::addr_t &address)
bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override
std::map< uint32_t, lldb_private::UnwindLLDB::RegisterLocation > m_registers