10b57cec5SDimitry Andric //===-- UnwindAssembly-x86.h ------------------------------------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 95ffd83dbSDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_UNWINDASSEMBLY_X86_UNWINDASSEMBLY_X86_H 105ffd83dbSDimitry Andric #define LLDB_SOURCE_PLUGINS_UNWINDASSEMBLY_X86_UNWINDASSEMBLY_X86_H 110b57cec5SDimitry Andric 120b57cec5SDimitry Andric #include "x86AssemblyInspectionEngine.h" 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric #include "lldb/Target/UnwindAssembly.h" 150b57cec5SDimitry Andric #include "lldb/lldb-private.h" 160b57cec5SDimitry Andric 170b57cec5SDimitry Andric class UnwindAssembly_x86 : public lldb_private::UnwindAssembly { 180b57cec5SDimitry Andric public: 190b57cec5SDimitry Andric ~UnwindAssembly_x86() override; 200b57cec5SDimitry Andric 210b57cec5SDimitry Andric bool GetNonCallSiteUnwindPlanFromAssembly( 220b57cec5SDimitry Andric lldb_private::AddressRange &func, lldb_private::Thread &thread, 230b57cec5SDimitry Andric lldb_private::UnwindPlan &unwind_plan) override; 240b57cec5SDimitry Andric 250b57cec5SDimitry Andric bool 260b57cec5SDimitry Andric AugmentUnwindPlanFromCallSite(lldb_private::AddressRange &func, 270b57cec5SDimitry Andric lldb_private::Thread &thread, 280b57cec5SDimitry Andric lldb_private::UnwindPlan &unwind_plan) override; 290b57cec5SDimitry Andric 300b57cec5SDimitry Andric bool GetFastUnwindPlan(lldb_private::AddressRange &func, 310b57cec5SDimitry Andric lldb_private::Thread &thread, 320b57cec5SDimitry Andric lldb_private::UnwindPlan &unwind_plan) override; 330b57cec5SDimitry Andric 340b57cec5SDimitry Andric // thread may be NULL in which case we only use the Target (e.g. if this is 350b57cec5SDimitry Andric // called pre-process-launch). 360b57cec5SDimitry Andric bool 370b57cec5SDimitry Andric FirstNonPrologueInsn(lldb_private::AddressRange &func, 380b57cec5SDimitry Andric const lldb_private::ExecutionContext &exe_ctx, 390b57cec5SDimitry Andric lldb_private::Address &first_non_prologue_insn) override; 400b57cec5SDimitry Andric 410b57cec5SDimitry Andric static lldb_private::UnwindAssembly * 420b57cec5SDimitry Andric CreateInstance(const lldb_private::ArchSpec &arch); 430b57cec5SDimitry Andric 440b57cec5SDimitry Andric // PluginInterface protocol 450b57cec5SDimitry Andric static void Initialize(); 460b57cec5SDimitry Andric 470b57cec5SDimitry Andric static void Terminate(); 480b57cec5SDimitry Andric GetPluginNameStatic()49*349cc55cSDimitry Andric static llvm::StringRef GetPluginNameStatic() { return "x86"; } 500b57cec5SDimitry Andric 51*349cc55cSDimitry Andric static llvm::StringRef GetPluginDescriptionStatic(); 520b57cec5SDimitry Andric GetPluginName()53*349cc55cSDimitry Andric llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 540b57cec5SDimitry Andric 550b57cec5SDimitry Andric private: 560b57cec5SDimitry Andric UnwindAssembly_x86(const lldb_private::ArchSpec &arch); 570b57cec5SDimitry Andric 580b57cec5SDimitry Andric lldb_private::ArchSpec m_arch; 590b57cec5SDimitry Andric 600b57cec5SDimitry Andric lldb_private::x86AssemblyInspectionEngine *m_assembly_inspection_engine; 610b57cec5SDimitry Andric }; 620b57cec5SDimitry Andric 635ffd83dbSDimitry Andric #endif // LLDB_SOURCE_PLUGINS_UNWINDASSEMBLY_X86_UNWINDASSEMBLY_X86_H 64