LLDB mainline
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | List of all members
lldb_private::ABI Class Referenceabstract

#include <ABI.h>

Inheritance diagram for lldb_private::ABI:
Inheritance graph


struct  CallArgument

Public Member Functions

 ~ABI () override
virtual size_t GetRedZoneSize () const =0
virtual bool PrepareTrivialCall (lldb_private::Thread &thread, lldb::addr_t sp, lldb::addr_t functionAddress, lldb::addr_t returnAddress, llvm::ArrayRef< lldb::addr_t > args) const =0
virtual bool PrepareTrivialCall (lldb_private::Thread &thread, lldb::addr_t sp, lldb::addr_t functionAddress, lldb::addr_t returnAddress, llvm::Type &prototype, llvm::ArrayRef< CallArgument > args) const
virtual bool GetArgumentValues (Thread &thread, ValueList &values) const =0
lldb::ValueObjectSP GetReturnValueObject (Thread &thread, CompilerType &type, bool persistent=true) const
lldb::ValueObjectSP GetReturnValueObject (Thread &thread, llvm::Type &type, bool persistent=true) const
virtual Status SetReturnValueObject (lldb::StackFrameSP &frame_sp, lldb::ValueObjectSP &new_value)=0
virtual bool CreateFunctionEntryUnwindPlan (UnwindPlan &unwind_plan)=0
virtual bool CreateDefaultUnwindPlan (UnwindPlan &unwind_plan)=0
virtual bool RegisterIsVolatile (const RegisterInfo *reg_info)=0
virtual bool GetFallbackRegisterLocation (const RegisterInfo *reg_info, UnwindPlan::Row::RegisterLocation &unwind_regloc)
virtual bool CallFrameAddressIsValid (lldb::addr_t cfa)=0
virtual bool CodeAddressIsValid (lldb::addr_t pc)=0
virtual lldb::addr_t FixAnyAddress (lldb::addr_t pc)
 Use this method when you do not know, or do not care what kind of address you are fixing.
llvm::MCRegisterInfo & GetMCRegisterInfo ()
virtual void AugmentRegisterInfo (std::vector< DynamicRegisterInfo::Register > &regs)=0
virtual bool GetPointerReturnRegister (const char *&name)
virtual uint64_t GetStackFrameSize ()
virtual lldb::addr_t FixCodeAddress (lldb::addr_t pc)
 Some targets might use bits in a code address to indicate a mode switch.
virtual lldb::addr_t FixDataAddress (lldb::addr_t pc)
- 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 lldb::ABISP FindPlugin (lldb::ProcessSP process_sp, const ArchSpec &arch)

Protected Member Functions

virtual lldb::ValueObjectSP GetReturnValueObjectImpl (Thread &thread, CompilerType &ast_type) const =0
virtual lldb::ValueObjectSP GetReturnValueObjectImpl (Thread &thread, llvm::Type &ir_type) const
lldb::ProcessSP GetProcessSP () const
 Request to get a Process shared pointer.
 ABI (lldb::ProcessSP process_sp, std::unique_ptr< llvm::MCRegisterInfo > info_up)
virtual lldb::addr_t FixCodeAddress (lldb::addr_t pc, lldb::addr_t mask)

Static Protected Member Functions

static std::unique_ptr< llvm::MCRegisterInfo > MakeMCRegisterInfo (const ArchSpec &arch)
 Utility function to construct a MCRegisterInfo using the ArchSpec triple.

Protected Attributes

lldb::ProcessWP m_process_wp
std::unique_ptr< llvm::MCRegisterInfo > m_mc_register_info_up

Private Member Functions

 ABI (const ABI &)=delete
const ABIoperator= (const ABI &)=delete

Detailed Description

Definition at line 27 of file ABI.h.

Constructor & Destructor Documentation

◆ ~ABI()

ABI::~ABI ( )

◆ ABI() [1/2]

lldb_private::ABI::ABI ( lldb::ProcessSP  process_sp,
std::unique_ptr< llvm::MCRegisterInfo >  info_up 

Definition at line 155 of file ABI.h.

References m_mc_register_info_up.

◆ ABI() [2/2]

lldb_private::ABI::ABI ( const ABI )

Member Function Documentation

◆ AugmentRegisterInfo()

virtual void lldb_private::ABI::AugmentRegisterInfo ( std::vector< DynamicRegisterInfo::Register > &  regs)
pure virtual

◆ CallFrameAddressIsValid()

virtual bool lldb_private::ABI::CallFrameAddressIsValid ( lldb::addr_t  cfa)
pure virtual

◆ CodeAddressIsValid()

virtual bool lldb_private::ABI::CodeAddressIsValid ( lldb::addr_t  pc)
pure virtual

◆ CreateDefaultUnwindPlan()

virtual bool lldb_private::ABI::CreateDefaultUnwindPlan ( UnwindPlan unwind_plan)
pure virtual

◆ CreateFunctionEntryUnwindPlan()

virtual bool lldb_private::ABI::CreateFunctionEntryUnwindPlan ( UnwindPlan unwind_plan)
pure virtual

◆ FindPlugin()

ABISP ABI::FindPlugin ( lldb::ProcessSP  process_sp,
const ArchSpec arch 

◆ FixAnyAddress()

virtual lldb::addr_t lldb_private::ABI::FixAnyAddress ( lldb::addr_t  pc)

Use this method when you do not know, or do not care what kind of address you are fixing.

On platforms where there would be a difference between the two types, it will pick the safest option.

Its purpose is to signal that no specific choice was made and provide an alternative to randomly picking FixCode/FixData address. Which could break platforms where there is a difference (only Arm Thumb at this time).

Definition at line 136 of file ABI.h.

References FixDataAddress(), and pc.

◆ FixCodeAddress() [1/2]

virtual lldb::addr_t lldb_private::ABI::FixCodeAddress ( lldb::addr_t  pc)

Some targets might use bits in a code address to indicate a mode switch.

ARM uses bit zero to signify a code address is thumb, so any ARM ABI plug-ins would strip those bits.

Reimplemented in ABIAArch64, ABIMacOSX_arm64, ABISysV_arm64, ABIMacOSX_arm, and ABISysV_arm.

Definition at line 125 of file ABI.h.

References pc.

Referenced by CommandObjectTargetModulesShowUnwind::DoExecute().

◆ FixCodeAddress() [2/2]

virtual lldb::addr_t lldb_private::ABI::FixCodeAddress ( lldb::addr_t  pc,
lldb::addr_t  mask 

Definition at line 169 of file ABI.h.

References pc.

◆ FixDataAddress()

virtual lldb::addr_t lldb_private::ABI::FixDataAddress ( lldb::addr_t  pc)

Reimplemented in ABIAArch64, ABIMacOSX_arm64, and ABISysV_arm64.

Definition at line 126 of file ABI.h.

References pc.

Referenced by FixAnyAddress().

◆ GetArgumentValues()

virtual bool lldb_private::ABI::GetArgumentValues ( Thread thread,
ValueList values 
) const
pure virtual

◆ GetFallbackRegisterLocation()

bool ABI::GetFallbackRegisterLocation ( const RegisterInfo reg_info,
UnwindPlan::Row::RegisterLocation unwind_regloc 

◆ GetMCRegisterInfo()

llvm::MCRegisterInfo & lldb_private::ABI::GetMCRegisterInfo ( )

Definition at line 143 of file ABI.h.

References m_mc_register_info_up.

Referenced by lldb_private::DWARFExpression::DumpLocation().

◆ GetPointerReturnRegister()

virtual bool lldb_private::ABI::GetPointerReturnRegister ( const char *&  name)

Reimplemented in ABISysV_arm64, ABISysV_x86_64, and ABIWindows_x86_64.

Definition at line 148 of file ABI.h.

◆ GetProcessSP()

lldb::ProcessSP lldb_private::ABI::GetProcessSP ( ) const

Request to get a Process shared pointer.

This ABI object may not have been created with a Process object, or the Process object may no longer be alive. Be sure to handle the case where the shared pointer returned does not have an object inside it.

Definition at line 96 of file ABI.h.

References m_process_wp.

Referenced by ABIX86::AugmentRegisterInfo(), ABISysV_riscv::CallFrameAddressIsValid(), ABISysV_riscv::CodeAddressIsValid(), ABIAArch64::FixCodeAddress(), ABIMacOSX_arm64::FixCodeAddress(), ABISysV_arm64::FixCodeAddress(), ABIAArch64::FixDataAddress(), ABIMacOSX_arm64::FixDataAddress(), ABISysV_arm64::FixDataAddress(), ABISysV_ppc64::GetByteOrder(), ABIMacOSX_arm::IsArmv7kProcess(), and ABISysV_riscv::RegisterIsCalleeSaved().

◆ GetRedZoneSize()

virtual size_t lldb_private::ABI::GetRedZoneSize ( ) const
pure virtual

◆ GetReturnValueObject() [1/2]

ValueObjectSP ABI::GetReturnValueObject ( Thread thread,
CompilerType type,
bool  persistent = true 
) const

◆ GetReturnValueObject() [2/2]

ValueObjectSP ABI::GetReturnValueObject ( Thread thread,
llvm::Type &  type,
bool  persistent = true 
) const

Definition at line 150 of file ABI.cpp.

References GetReturnValueObjectImpl().

◆ GetReturnValueObjectImpl() [1/2]

virtual lldb::ValueObjectSP lldb_private::ABI::GetReturnValueObjectImpl ( Thread thread,
CompilerType ast_type 
) const
protectedpure virtual

◆ GetReturnValueObjectImpl() [2/2]

lldb::ValueObjectSP ABI::GetReturnValueObjectImpl ( Thread thread,
llvm::Type &  ir_type 
) const

Reimplemented in ABISysV_arc, ABISysV_hexagon, and ABISysV_riscv.

Definition at line 161 of file ABI.cpp.

◆ GetStackFrameSize()

virtual uint64_t lldb_private::ABI::GetStackFrameSize ( )

Reimplemented in ABISysV_msp430.

Definition at line 150 of file ABI.h.

◆ MakeMCRegisterInfo()

std::unique_ptr< llvm::MCRegisterInfo > ABI::MakeMCRegisterInfo ( const ArchSpec arch)

◆ operator=()

const ABI & lldb_private::ABI::operator= ( const ABI )

◆ PrepareTrivialCall() [1/2]

virtual bool lldb_private::ABI::PrepareTrivialCall ( lldb_private::Thread thread,
lldb::addr_t  sp,
lldb::addr_t  functionAddress,
lldb::addr_t  returnAddress,
llvm::ArrayRef< lldb::addr_t args 
) const
pure virtual

◆ PrepareTrivialCall() [2/2]

virtual bool lldb_private::ABI::PrepareTrivialCall ( lldb_private::Thread thread,
lldb::addr_t  sp,
lldb::addr_t  functionAddress,
lldb::addr_t  returnAddress,
llvm::Type &  prototype,
llvm::ArrayRef< CallArgument args 
) const

◆ RegisterIsVolatile()

virtual bool lldb_private::ABI::RegisterIsVolatile ( const RegisterInfo reg_info)
pure virtual

◆ SetReturnValueObject()

virtual Status lldb_private::ABI::SetReturnValueObject ( lldb::StackFrameSP frame_sp,
lldb::ValueObjectSP new_value 
pure virtual

Member Data Documentation

◆ m_mc_register_info_up

std::unique_ptr<llvm::MCRegisterInfo> lldb_private::ABI::m_mc_register_info_up

Definition at line 167 of file ABI.h.

Referenced by ABI(), lldb_private::MCBasedABI::GetEHAndDWARFNums(), and GetMCRegisterInfo().

◆ m_process_wp

lldb::ProcessWP lldb_private::ABI::m_process_wp

Definition at line 166 of file ABI.h.

Referenced by GetProcessSP().

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