#include "PECallFrameInfo.h" #include "ObjectFilePECOFF.h" #include "Plugins/Process/Utility/lldb-x86-register-enums.h" #include "lldb/Symbol/UnwindPlan.h" #include "llvm/Support/Win64EH.h" usingnamespacelldb; usingnamespacelldb_private; usingnamespacellvm::Win64EH; template <typename T> static const T *TypedRead(const DataExtractor &data_extractor, offset_t &offset, offset_t size = sizeof(T)) { … } struct EHInstruction { … }; EHProgram; class UnwindCodesIterator { … }; UnwindCodesIterator::UnwindCodesIterator(ObjectFilePECOFF &object_file, uint32_t unwind_info_rva) : … { … } bool UnwindCodesIterator::GetNext() { … } class EHProgramBuilder { … }; EHProgramBuilder::EHProgramBuilder(ObjectFilePECOFF &object_file, uint32_t unwind_info_rva) : … { … } bool EHProgramBuilder::Build() { … } uint32_t EHProgramBuilder::ConvertMachineToLLDBRegister(uint8_t machine_reg) { … } uint32_t EHProgramBuilder::ConvertXMMToLLDBRegister(uint8_t xmm_reg) { … } bool EHProgramBuilder::ProcessUnwindCode(UnwindCode code) { … } void EHProgramBuilder::Finalize() { … } bool EHProgramBuilder::ParseBigOrScaledFrameOffset(uint32_t &result, bool big, uint32_t scale) { … } bool EHProgramBuilder::ParseBigFrameOffset(uint32_t &result) { … } bool EHProgramBuilder::ParseFrameOffset(uint32_t &result) { … } class EHProgramRange { … }; EHProgramRange::EHProgramRange(EHProgram::const_iterator begin, EHProgram::const_iterator end) : … { … } std::unique_ptr<UnwindPlan::Row> EHProgramRange::BuildUnwindPlanRow() const { … } int32_t EHProgramRange::GetCFAFrameOffset() const { … } PECallFrameInfo::PECallFrameInfo(ObjectFilePECOFF &object_file, uint32_t exception_dir_rva, uint32_t exception_dir_size) : … { … } bool PECallFrameInfo::GetAddressRange(Address addr, AddressRange &range) { … } bool PECallFrameInfo::GetUnwindPlan(const Address &addr, UnwindPlan &unwind_plan) { … } bool PECallFrameInfo::GetUnwindPlan(const AddressRange &range, UnwindPlan &unwind_plan) { … } const RuntimeFunction *PECallFrameInfo::FindRuntimeFunctionIntersectsWithRange( const AddressRange &range) const { … }