symbolication. Also improved the SBInstruction API to allow access to the instruction opcode name, mnemonics, comment and instruction data. Added the ability to edit SBLineEntry objects (change the file, line and column), and also allow SBSymbolContext objects to be modified (set module, comp unit, function, block, line entry or symbol). The SymbolContext and SBSymbolContext can now generate inlined call stack infomration for symbolication much easier using the SymbolContext::GetParentInlinedFrameInfo(...) and SBSymbolContext::GetParentInlinedFrameInfo(...) methods. llvm-svn: 140518
120 lines
3.1 KiB
C++
120 lines
3.1 KiB
C++
//===-- DisassemblerLLVM.h --------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_DisassemblerLLVM_h_
|
|
#define liblldb_DisassemblerLLVM_h_
|
|
|
|
|
|
#include "llvm-c/EnhancedDisassembly.h"
|
|
|
|
#include "lldb/Core/Disassembler.h"
|
|
#include "lldb/Host/Mutex.h"
|
|
|
|
class InstructionLLVM : public lldb_private::Instruction
|
|
{
|
|
public:
|
|
InstructionLLVM (const lldb_private::Address &addr,
|
|
lldb_private::AddressClass addr_class,
|
|
EDDisassemblerRef disassembler,
|
|
llvm::Triple::ArchType arch_type);
|
|
|
|
virtual
|
|
~InstructionLLVM();
|
|
|
|
virtual void
|
|
Dump (lldb_private::Stream *s,
|
|
uint32_t max_opcode_byte_size,
|
|
bool show_address,
|
|
bool show_bytes,
|
|
const lldb_private::ExecutionContext* exe_ctx,
|
|
bool raw);
|
|
|
|
virtual bool
|
|
DoesBranch () const;
|
|
|
|
virtual size_t
|
|
Decode (const lldb_private::Disassembler &disassembler,
|
|
const lldb_private::DataExtractor &data,
|
|
uint32_t data_offset);
|
|
|
|
virtual void
|
|
CalculateOpcodeName (lldb_private::ExecutionContextScope *exe_scope);
|
|
|
|
virtual void
|
|
CalculateMnemonics (lldb_private::ExecutionContextScope *exe_scope);
|
|
|
|
virtual void
|
|
CalculateComment (lldb_private::ExecutionContextScope *exe_scope);
|
|
|
|
protected:
|
|
EDDisassemblerRef m_disassembler;
|
|
EDInstRef m_inst;
|
|
llvm::Triple::ArchType m_arch_type;
|
|
};
|
|
|
|
|
|
class DisassemblerLLVM : public lldb_private::Disassembler
|
|
{
|
|
public:
|
|
//------------------------------------------------------------------
|
|
// Static Functions
|
|
//------------------------------------------------------------------
|
|
static void
|
|
Initialize();
|
|
|
|
static void
|
|
Terminate();
|
|
|
|
static const char *
|
|
GetPluginNameStatic();
|
|
|
|
static const char *
|
|
GetPluginDescriptionStatic();
|
|
|
|
static lldb_private::Disassembler *
|
|
CreateInstance(const lldb_private::ArchSpec &arch);
|
|
|
|
|
|
DisassemblerLLVM(const lldb_private::ArchSpec &arch);
|
|
|
|
virtual
|
|
~DisassemblerLLVM();
|
|
|
|
size_t
|
|
DecodeInstructions (const lldb_private::Address &base_addr,
|
|
const lldb_private::DataExtractor& data,
|
|
uint32_t data_offset,
|
|
uint32_t num_instructions,
|
|
bool append);
|
|
|
|
//------------------------------------------------------------------
|
|
// PluginInterface protocol
|
|
//------------------------------------------------------------------
|
|
virtual const char *
|
|
GetPluginName();
|
|
|
|
virtual const char *
|
|
GetShortPluginName();
|
|
|
|
virtual uint32_t
|
|
GetPluginVersion();
|
|
|
|
protected:
|
|
bool
|
|
IsValid() const
|
|
{
|
|
return m_disassembler != NULL;
|
|
}
|
|
|
|
EDDisassemblerRef m_disassembler;
|
|
EDDisassemblerRef m_disassembler_thumb;
|
|
};
|
|
|
|
#endif // liblldb_DisassemblerLLVM_h_
|