labath created this revision. labath added reviewers: JDevlieghere, jasonmolenda. Herald added subscribers: jsji, atanasyan, jrtc27, kbarton, nemanjai, sdardis. Herald added a project: LLDB.
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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D74243 Files: lldb/include/lldb/Target/ABI.h lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h lldb/source/Plugins/ABI/ARC/ABISysV_arc.h lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h lldb/source/Plugins/ABI/ARM/ABISysV_arm.h lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h lldb/source/Plugins/ABI/Mips/ABISysV_mips.h lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h lldb/source/Plugins/ABI/X86/ABISysV_i386.h lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h lldb/source/Target/ABI.cpp
Index: lldb/source/Target/ABI.cpp =================================================================== --- lldb/source/Target/ABI.cpp +++ 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; Index: lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h =================================================================== --- lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h +++ 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<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_ Index: lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h =================================================================== --- lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h +++ 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<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_ Index: lldb/source/Plugins/ABI/X86/ABISysV_i386.h =================================================================== --- lldb/source/Plugins/ABI/X86/ABISysV_i386.h +++ 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<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_ Index: lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h =================================================================== --- lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h +++ 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<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_ Index: lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h =================================================================== --- lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h +++ 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<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_ Index: lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h =================================================================== --- lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h +++ 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<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; }; Index: lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h =================================================================== --- lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h +++ 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<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_ Index: lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h =================================================================== --- lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h +++ 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<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_ Index: lldb/source/Plugins/ABI/Mips/ABISysV_mips.h =================================================================== --- lldb/source/Plugins/ABI/Mips/ABISysV_mips.h +++ 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<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_ Index: lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h =================================================================== --- lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h +++ 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<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_ Index: lldb/source/Plugins/ABI/ARM/ABISysV_arm.h =================================================================== --- lldb/source/Plugins/ABI/ARM/ABISysV_arm.h +++ 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<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_ Index: lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h =================================================================== --- lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h +++ 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<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_ Index: lldb/source/Plugins/ABI/ARC/ABISysV_arc.h =================================================================== --- lldb/source/Plugins/ABI/ARC/ABISysV_arc.h +++ 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<bool>; mutable RegisterFileFlag m_is_reg_file_reduced; Index: lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h =================================================================== --- lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h +++ 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<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_ Index: lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h =================================================================== --- lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h +++ 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<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_ Index: lldb/include/lldb/Target/ABI.h =================================================================== --- lldb/include/lldb/Target/ABI.h +++ 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_
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits