diff --git a/lldb/include/lldb/Target/ABI.h b/lldb/include/lldb/Target/ABI.h --- a/lldb/include/lldb/Target/ABI.h +++ b/lldb/include/lldb/Target/ABI.h @@ -126,7 +126,7 @@ 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 @@ 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 @@ 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_ diff --git a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h --- a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h +++ b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.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 @@ lldb_private::CompilerType &ast_type) const override; private: - ABIMacOSX_arm64(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h b/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h --- a/lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h +++ b/lldb/source/Plugins/ABI/AArch64/ABISysV_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 @@ lldb_private::CompilerType &ast_type) const override; private: - ABISysV_arm64(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h --- a/lldb/source/Plugins/ABI/ARC/ABISysV_arc.h +++ b/lldb/source/Plugins/ABI/ARC/ABISysV_arc.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 @@ 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; mutable RegisterFileFlag m_is_reg_file_reduced; diff --git a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h --- a/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h +++ b/lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h @@ -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 @@ lldb_private::CompilerType &ast_type) const override; private: - ABIMacOSX_arm(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h b/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h --- a/lldb/source/Plugins/ABI/ARM/ABISysV_arm.h +++ b/lldb/source/Plugins/ABI/ARM/ABISysV_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 @@ lldb_private::CompilerType &ast_type) const override; private: - ABISysV_arm(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h --- a/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h +++ b/lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_hexagon(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h --- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips.h +++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_mips(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h --- a/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h +++ b/lldb/source/Plugins/ABI/Mips/ABISysV_mips64.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_mips64(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h --- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h +++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_ppc(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h --- a/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h +++ b/lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_ppc64(lldb::ProcessSP process_sp, - std::unique_ptr 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; }; diff --git a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h --- a/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h +++ b/lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h @@ -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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_s390x(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h --- a/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h +++ b/lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABIMacOSX_i386(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/X86/ABISysV_i386.h b/lldb/source/Plugins/ABI/X86/ABISysV_i386.h --- a/lldb/source/Plugins/ABI/X86/ABISysV_i386.h +++ b/lldb/source/Plugins/ABI/X86/ABISysV_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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_i386(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h b/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h --- a/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h +++ b/lldb/source/Plugins/ABI/X86/ABISysV_x86_64.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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABISysV_x86_64(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h b/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h --- a/lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h +++ b/lldb/source/Plugins/ABI/X86/ABIWindows_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 @@ bool RegisterIsCalleeSaved(const lldb_private::RegisterInfo *reg_info); private: - ABIWindows_x86_64(lldb::ProcessSP process_sp, - std::unique_ptr 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_ diff --git a/lldb/source/Target/ABI.cpp b/lldb/source/Target/ABI.cpp --- a/lldb/source/Target/ABI.cpp +++ b/lldb/source/Target/ABI.cpp @@ -41,7 +41,7 @@ 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 @@ 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;