LLDB mainline
Public Member Functions | Static Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
lldb_private::ArchitectureMips Class Reference

#include <ArchitectureMips.h>

Inheritance diagram for lldb_private::ArchitectureMips:
Inheritance graph
[legend]

Public Member Functions

llvm::StringRef GetPluginName () override
 
void OverrideStopInfo (Thread &thread) const override
 This is currently intended to handle cases where a program stops at an instruction that won't get executed and it allows the stop reason, like "breakpoint hit", to be replaced with a different stop reason like "no stop reason".
 
lldb::addr_t GetBreakableLoadAddress (lldb::addr_t addr, Target &) const override
 
lldb::addr_t GetCallableLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const override
 Get load_addr as a callable code load address for this target.
 
lldb::addr_t GetOpcodeLoadAddress (lldb::addr_t load_addr, AddressClass addr_class) const override
 Get load_addr as an opcode for this target.
 
- Public Member Functions inherited from lldb_private::Architecture
virtual void OverrideStopInfo (Thread &thread) const =0
 This is currently intended to handle cases where a program stops at an instruction that won't get executed and it allows the stop reason, like "breakpoint hit", to be replaced with a different stop reason like "no stop reason".
 
virtual size_t GetBytesToSkip (Symbol &func, const Address &curr_addr) const
 This method is used to get the number of bytes that should be skipped, from function start address, to reach the first instruction after the prologue.
 
virtual void AdjustBreakpointAddress (const Symbol &func, Address &addr) const
 Adjust function breakpoint address, if needed.
 
virtual lldb::addr_t GetCallableLoadAddress (lldb::addr_t addr, AddressClass addr_class=AddressClass::eInvalid) const
 Get load_addr as a callable code load address for this target.
 
virtual lldb::addr_t GetOpcodeLoadAddress (lldb::addr_t addr, AddressClass addr_class=AddressClass::eInvalid) const
 Get load_addr as an opcode for this target.
 
virtual lldb::addr_t GetBreakableLoadAddress (lldb::addr_t addr, Target &target) const
 
virtual const MemoryTagManagerGetMemoryTagManager () const
 
virtual bool RegisterWriteCausesReconfigure (const llvm::StringRef name) const
 
virtual bool ReconfigureRegisterInfo (DynamicRegisterInfo &reg_info, DataExtractor &reg_data, RegisterContext &reg_context) const
 
- Public Member Functions inherited from lldb_private::PluginInterface
 PluginInterface ()=default
 
virtual ~PluginInterface ()=default
 
virtual llvm::StringRef GetPluginName ()=0
 
 PluginInterface (const PluginInterface &)=delete
 
PluginInterfaceoperator= (const PluginInterface &)=delete
 

Static Public Member Functions

static llvm::StringRef GetPluginNameStatic ()
 
static void Initialize ()
 
static void Terminate ()
 

Private Member Functions

InstructionGetInstructionAtAddress (Target &target, const Address &resolved_addr, lldb::addr_t symbol_offset) const
 
 ArchitectureMips (const ArchSpec &arch)
 

Static Private Member Functions

static std::unique_ptr< ArchitectureCreate (const ArchSpec &arch)
 

Private Attributes

ArchSpec m_arch
 

Detailed Description

Definition at line 17 of file ArchitectureMips.h.

Constructor & Destructor Documentation

◆ ArchitectureMips()

lldb_private::ArchitectureMips::ArchitectureMips ( const ArchSpec arch)
inlineprivate

Definition at line 42 of file ArchitectureMips.h.

Member Function Documentation

◆ Create()

std::unique_ptr< Architecture > ArchitectureMips::Create ( const ArchSpec arch)
staticprivate

Definition at line 37 of file ArchitectureMips.cpp.

References lldb_private::ArchSpec::IsMIPS().

Referenced by Initialize(), and Terminate().

◆ GetBreakableLoadAddress()

lldb::addr_t ArchitectureMips::GetBreakableLoadAddress ( lldb::addr_t  addr,
Target target 
) const
overridevirtual

◆ GetCallableLoadAddress()

addr_t ArchitectureMips::GetCallableLoadAddress ( lldb::addr_t  addr,
AddressClass  addr_class 
) const
overridevirtual

Get load_addr as a callable code load address for this target.

Take load_addr and potentially add any address bits that are needed to make the address callable. For ARM this can set bit zero (if it already isn't) if load_addr is a thumb function. If addr_class is set to AddressClass::eInvalid, then the address adjustment will always happen. If it is set to an address class that doesn't have code in it, LLDB_INVALID_ADDRESS will be returned.

Reimplemented from lldb_private::Architecture.

Definition at line 42 of file ArchitectureMips.cpp.

References lldb_private::eCodeAlternateISA, lldb_private::eData, lldb_private::eDebug, and LLDB_INVALID_ADDRESS.

◆ GetInstructionAtAddress()

Instruction * ArchitectureMips::GetInstructionAtAddress ( Target target,
const Address resolved_addr,
lldb::addr_t  symbol_offset 
) const
private

◆ GetOpcodeLoadAddress()

addr_t ArchitectureMips::GetOpcodeLoadAddress ( lldb::addr_t  addr,
AddressClass  addr_class 
) const
overridevirtual

Get load_addr as an opcode for this target.

Take load_addr and potentially strip any address bits that are needed to make the address point to an opcode. For ARM this can clear bit zero (if it already isn't) if load_addr is a thumb function and load_addr is in code. If addr_class is set to AddressClass::eInvalid, then the address adjustment will always happen. If it is set to an address class that doesn't have code in it, LLDB_INVALID_ADDRESS will be returned.

Reimplemented from lldb_private::Architecture.

Definition at line 61 of file ArchitectureMips.cpp.

References lldb_private::eData, lldb_private::eDebug, and LLDB_INVALID_ADDRESS.

◆ GetPluginName()

llvm::StringRef lldb_private::ArchitectureMips::GetPluginName ( )
inlineoverridevirtual

Implements lldb_private::PluginInterface.

Definition at line 23 of file ArchitectureMips.h.

References GetPluginNameStatic().

◆ GetPluginNameStatic()

static llvm::StringRef lldb_private::ArchitectureMips::GetPluginNameStatic ( )
inlinestatic

Definition at line 19 of file ArchitectureMips.h.

Referenced by GetPluginName().

◆ Initialize()

void ArchitectureMips::Initialize ( )
static

Definition at line 27 of file ArchitectureMips.cpp.

References Create(), and lldb_private::PluginManager::RegisterPlugin().

◆ OverrideStopInfo()

void lldb_private::ArchitectureMips::OverrideStopInfo ( Thread thread) const
inlineoverridevirtual

This is currently intended to handle cases where a program stops at an instruction that won't get executed and it allows the stop reason, like "breakpoint hit", to be replaced with a different stop reason like "no stop reason".

This is specifically used for ARM in Thumb code when we stop in an IT instruction (if/then/else) where the instruction won't get executed and therefore it wouldn't be correct to show the program stopped at the current PC. The code is generic and applies to all ARM CPUs.

Implements lldb_private::Architecture.

Definition at line 25 of file ArchitectureMips.h.

◆ Terminate()

void ArchitectureMips::Terminate ( )
static

Member Data Documentation

◆ m_arch

ArchSpec lldb_private::ArchitectureMips::m_arch
private

Definition at line 44 of file ArchitectureMips.h.

Referenced by GetInstructionAtAddress().


The documentation for this class was generated from the following files: