UnwindAssemblyInstEmulation.cpp revision f6e287a873007543f3b419a71546ab8f007be90b
1f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton//===-- UnwindAssemblyInstEmulation.cpp --------------------------*- C++ -*-===// 2f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// 3f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// The LLVM Compiler Infrastructure 4f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// 5f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// This file is distributed under the University of Illinois Open Source 6f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// License. See LICENSE.TXT for details. 7f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// 8f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton//===----------------------------------------------------------------------===// 9f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 10f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "UnwindAssemblyInstEmulation.h" 11f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 12f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "llvm-c/EnhancedDisassembly.h" 13f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 14f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Core/Address.h" 15f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Core/Error.h" 16f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Core/ArchSpec.h" 17f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Core/PluginManager.h" 18f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Symbol/UnwindPlan.h" 19f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Target/ExecutionContext.h" 20f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Target/Process.h" 21f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Target/RegisterContext.h" 22f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Target/Thread.h" 23f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Target/Target.h" 24f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton#include "lldb/Target/UnwindAssemblyProfiler.h" 25f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 26f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonusing namespace lldb; 27f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonusing namespace lldb_private; 28f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 29f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 30f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 31f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton//----------------------------------------------------------------------------------------------- 32f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// UnwindAssemblyParser_x86 method definitions 33f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton//----------------------------------------------------------------------------------------------- 34f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 35f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonbool 36f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetNonCallSiteUnwindPlanFromAssembly (AddressRange& func, Thread& thread, UnwindPlan& unwind_plan) 37f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 38f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return false; 39f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 40f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 41f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonbool 42f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetFastUnwindPlan (AddressRange& func, Thread& thread, UnwindPlan &unwind_plan) 43f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 44f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return false; 45f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 46f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 47f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonbool 48f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::FirstNonPrologueInsn (AddressRange& func, Target& target, Thread* thread, Address& first_non_prologue_insn) 49f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 50f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return false; 51f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 52f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 53f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyProfiler * 54f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::CreateInstance (const ArchSpec &arch) 55f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 56f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return NULL; 57f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 58f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 59f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 60f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton//------------------------------------------------------------------ 61f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton// PluginInterface protocol in UnwindAssemblyParser_x86 62f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton//------------------------------------------------------------------ 63f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 64f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonconst char * 65f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetPluginName() 66f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 67f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return "UnwindAssemblyInstEmulation"; 68f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 69f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 70f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonconst char * 71f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetShortPluginName() 72f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 73f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return "unwindassembly.inst-emulation"; 74f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 75f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 76f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 77f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonuint32_t 78f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetPluginVersion() 79f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 80f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return 1; 81f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 82f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 83f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonvoid 84f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::Initialize() 85f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 86f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton PluginManager::RegisterPlugin (GetPluginNameStatic(), 87f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton GetPluginDescriptionStatic(), 88f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton CreateInstance); 89f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 90f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 91f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonvoid 92f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::Terminate() 93f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 94f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton PluginManager::UnregisterPlugin (CreateInstance); 95f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 96f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 97f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 98f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonconst char * 99f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetPluginNameStatic() 100f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 101f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return "UnwindAssemblyInstEmulation"; 102f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 103f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton 104f6e287a873007543f3b419a71546ab8f007be90bGreg Claytonconst char * 105f6e287a873007543f3b419a71546ab8f007be90bGreg ClaytonUnwindAssemblyInstEmulation::GetPluginDescriptionStatic() 106f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton{ 107f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton return "Instruction emulation based unwind information."; 108f6e287a873007543f3b419a71546ab8f007be90bGreg Clayton} 109