forked from OSchip/llvm-project
[lldb] Introduce "RegInfoBasedABI"
Summary: This patch creates a new subclass of the ABI class in order to abstract away the mechanism in which we "augment" register information. This enables alternate augmentation strategies to be introduced. All existing ABI classes have been modified to inherit from RegInfoBasedABI, but they will be refactored in subsequent patches. Reviewers: JDevlieghere, jasonmolenda Subscribers: sdardis, nemanjai, kbarton, jrtc27, atanasyan, jsji, lldb-commits Tags: #lldb Differential Revision: https://reviews.llvm.org/D74243
This commit is contained in:
parent
32176133fa
commit
12e32d32d3
|
@ -126,7 +126,7 @@ public:
|
|||
|
||||
llvm::MCRegisterInfo &GetMCRegisterInfo() { return *m_mc_register_info_up; }
|
||||
|
||||
virtual void AugmentRegisterInfo(RegisterInfo &info);
|
||||
virtual void AugmentRegisterInfo(RegisterInfo &info) = 0;
|
||||
|
||||
virtual bool GetPointerReturnRegister(const char *&name) { return false; }
|
||||
|
||||
|
@ -138,10 +138,6 @@ protected:
|
|||
assert(m_mc_register_info_up && "ABI must have MCRegisterInfo");
|
||||
}
|
||||
|
||||
bool GetRegisterInfoByName(ConstString name, RegisterInfo &info);
|
||||
|
||||
virtual const RegisterInfo *GetRegisterInfoArray(uint32_t &count) = 0;
|
||||
|
||||
/// Utility function to construct a MCRegisterInfo using the ArchSpec triple.
|
||||
/// Plugins wishing to customize the construction can construct the
|
||||
/// MCRegisterInfo themselves.
|
||||
|
@ -155,6 +151,18 @@ private:
|
|||
DISALLOW_COPY_AND_ASSIGN(ABI);
|
||||
};
|
||||
|
||||
class RegInfoBasedABI : public ABI {
|
||||
public:
|
||||
void AugmentRegisterInfo(RegisterInfo &info) override;
|
||||
|
||||
protected:
|
||||
using ABI::ABI;
|
||||
|
||||
bool GetRegisterInfoByName(ConstString name, RegisterInfo &info);
|
||||
|
||||
virtual const RegisterInfo *GetRegisterInfoArray(uint32_t &count) = 0;
|
||||
};
|
||||
|
||||
} // namespace lldb_private
|
||||
|
||||
#endif // liblldb_ABI_h_
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "lldb/Utility/ConstString.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABIMacOSX_arm64 : public lldb_private::ABI {
|
||||
class ABIMacOSX_arm64 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABIMacOSX_arm64() override = default;
|
||||
|
||||
|
@ -93,11 +93,7 @@ protected:
|
|||
lldb_private::CompilerType &ast_type) const override;
|
||||
|
||||
private:
|
||||
ABIMacOSX_arm64(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABIMacOSX_arm64_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_arm64 : public lldb_private::ABI {
|
||||
class ABISysV_arm64 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_arm64() override = default;
|
||||
|
||||
|
@ -92,11 +92,7 @@ protected:
|
|||
lldb_private::CompilerType &ast_type) const override;
|
||||
|
||||
private:
|
||||
ABISysV_arm64(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_arm64_h_
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_arc : public lldb_private::ABI {
|
||||
class ABISysV_arc : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_arc() override = default;
|
||||
|
||||
|
@ -97,7 +97,7 @@ private:
|
|||
|
||||
bool IsRegisterFileReduced(lldb_private::RegisterContext ®_ctx) const;
|
||||
|
||||
using lldb_private::ABI::ABI; // Call CreateInstance instead.
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
|
||||
using RegisterFileFlag = llvm::Optional<bool>;
|
||||
mutable RegisterFileFlag m_is_reg_file_reduced;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABIMacOSX_arm : public lldb_private::ABI {
|
||||
class ABIMacOSX_arm : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABIMacOSX_arm() override = default;
|
||||
|
||||
|
@ -85,11 +85,7 @@ protected:
|
|||
lldb_private::CompilerType &ast_type) const override;
|
||||
|
||||
private:
|
||||
ABIMacOSX_arm(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABIMacOSX_arm_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_arm : public lldb_private::ABI {
|
||||
class ABISysV_arm : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_arm() override = default;
|
||||
|
||||
|
@ -85,11 +85,7 @@ protected:
|
|||
lldb_private::CompilerType &ast_type) const override;
|
||||
|
||||
private:
|
||||
ABISysV_arm(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_arm_h_
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_hexagon : public lldb_private::ABI {
|
||||
class ABISysV_hexagon : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_hexagon() override = default;
|
||||
|
||||
|
@ -97,11 +97,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_hexagon(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_hexagon_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_mips : public lldb_private::ABI {
|
||||
class ABISysV_mips : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_mips() override = default;
|
||||
|
||||
|
@ -87,11 +87,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_mips(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_mips_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_mips64 : public lldb_private::ABI {
|
||||
class ABISysV_mips64 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_mips64() override = default;
|
||||
|
||||
|
@ -100,11 +100,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_mips64(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_mips64_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_ppc : public lldb_private::ABI {
|
||||
class ABISysV_ppc : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_ppc() override = default;
|
||||
|
||||
|
@ -96,11 +96,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_ppc(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_ppc_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_ppc64 : public lldb_private::ABI {
|
||||
class ABISysV_ppc64 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_ppc64() override = default;
|
||||
|
||||
|
@ -96,11 +96,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_ppc64(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
|
||||
lldb::ByteOrder GetByteOrder() const;
|
||||
};
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_s390x : public lldb_private::ABI {
|
||||
class ABISysV_s390x : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_s390x() override = default;
|
||||
|
||||
|
@ -88,11 +88,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_s390x(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_s390x_h_
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABIMacOSX_i386 : public lldb_private::ABI {
|
||||
class ABIMacOSX_i386 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABIMacOSX_i386() override = default;
|
||||
|
||||
|
@ -92,11 +92,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABIMacOSX_i386(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABIMacOSX_i386_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_i386 : public lldb_private::ABI {
|
||||
class ABISysV_i386 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_i386() override = default;
|
||||
|
||||
|
@ -100,11 +100,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_i386(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_i386_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABISysV_x86_64 : public lldb_private::ABI {
|
||||
class ABISysV_x86_64 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABISysV_x86_64() override = default;
|
||||
|
||||
|
@ -98,11 +98,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABISysV_x86_64(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_x86_64_h_
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "lldb/Target/ABI.h"
|
||||
#include "lldb/lldb-private.h"
|
||||
|
||||
class ABIWindows_x86_64 : public lldb_private::ABI {
|
||||
class ABIWindows_x86_64 : public lldb_private::RegInfoBasedABI {
|
||||
public:
|
||||
~ABIWindows_x86_64() override = default;
|
||||
|
||||
|
@ -91,11 +91,7 @@ protected:
|
|||
bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info);
|
||||
|
||||
private:
|
||||
ABIWindows_x86_64(lldb::ProcessSP process_sp,
|
||||
std::unique_ptr<llvm::MCRegisterInfo> info_up)
|
||||
: lldb_private::ABI(std::move(process_sp), std::move(info_up)) {
|
||||
// Call CreateInstance instead.
|
||||
}
|
||||
using lldb_private::RegInfoBasedABI::RegInfoBasedABI; // Call CreateInstance instead.
|
||||
};
|
||||
|
||||
#endif // liblldb_ABISysV_x86_64_h_
|
||||
|
|
|
@ -41,7 +41,7 @@ ABI::FindPlugin(lldb::ProcessSP process_sp, const ArchSpec &arch) {
|
|||
|
||||
ABI::~ABI() = default;
|
||||
|
||||
bool ABI::GetRegisterInfoByName(ConstString name, RegisterInfo &info) {
|
||||
bool RegInfoBasedABI::GetRegisterInfoByName(ConstString name, RegisterInfo &info) {
|
||||
uint32_t count = 0;
|
||||
const RegisterInfo *register_info_array = GetRegisterInfoArray(count);
|
||||
if (register_info_array) {
|
||||
|
@ -212,7 +212,7 @@ std::unique_ptr<llvm::MCRegisterInfo> ABI::MakeMCRegisterInfo(const ArchSpec &ar
|
|||
return info_up;
|
||||
}
|
||||
|
||||
void ABI::AugmentRegisterInfo(RegisterInfo &info) {
|
||||
void RegInfoBasedABI::AugmentRegisterInfo(RegisterInfo &info) {
|
||||
if (info.kinds[eRegisterKindEHFrame] != LLDB_INVALID_REGNUM &&
|
||||
info.kinds[eRegisterKindDWARF] != LLDB_INVALID_REGNUM)
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue