54 lines · c
1//===-- PECallFrameInfo.h ---------------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_PECOFF_PECALLFRAMEINFO_H10#define LLDB_SOURCE_PLUGINS_OBJECTFILE_PECOFF_PECALLFRAMEINFO_H11 12#include "lldb/Core/AddressRange.h"13#include "lldb/Symbol/CallFrameInfo.h"14#include "lldb/Symbol/UnwindPlan.h"15#include "lldb/Utility/DataExtractor.h"16 17class ObjectFilePECOFF;18 19namespace llvm {20namespace Win64EH {21 22struct RuntimeFunction;23 24}25} // namespace llvm26 27class PECallFrameInfo : public virtual lldb_private::CallFrameInfo {28public:29 explicit PECallFrameInfo(ObjectFilePECOFF &object_file,30 uint32_t exception_dir_rva,31 uint32_t exception_dir_size);32 33 bool GetAddressRange(lldb_private::Address addr,34 lldb_private::AddressRange &range) override;35 36 std::unique_ptr<lldb_private::UnwindPlan>37 GetUnwindPlan(const lldb_private::Address &addr) override {38 return GetUnwindPlan({lldb_private::AddressRange(addr, 1)}, addr);39 }40 41 std::unique_ptr<lldb_private::UnwindPlan>42 GetUnwindPlan(llvm::ArrayRef<lldb_private::AddressRange> ranges,43 const lldb_private::Address &addr) override;44 45private:46 const llvm::Win64EH::RuntimeFunction *FindRuntimeFunctionIntersectsWithRange(47 const lldb_private::AddressRange &range) const;48 49 ObjectFilePECOFF &m_object_file;50 lldb_private::DataExtractor m_exception_dir;51};52 53#endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_PECOFF_PECALLFRAMEINFO_H54