From 12e32d32d39332a678b6a7b88f2c5bd8eb70bd69 Mon Sep 17 00:00:00 2001 From: Pavel Labath Date: Sun, 2 Feb 2020 10:27:40 +0100 Subject: [PATCH] [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 --- lldb/include/lldb/Target/ABI.h | 18 +++++++++++++----- lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h | 8 ++------ lldb/source/Plugins/ABI/AArch64/ABISysV_arm64.h | 8 ++------ lldb/source/Plugins/ABI/ARC/ABISysV_arc.h | 4 ++-- lldb/source/Plugins/ABI/ARM/ABIMacOSX_arm.h | 8 ++------ lldb/source/Plugins/ABI/ARM/ABISysV_arm.h | 8 ++------ lldb/source/Plugins/ABI/Hexagon/ABISysV_hexagon.h | 8 ++------ lldb/source/Plugins/ABI/Mips/ABISysV_mips.h | 8 ++------ lldb/source/Plugins/ABI/Mips/ABISysV_mips64.h | 8 ++------ lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc.h | 8 ++------ lldb/source/Plugins/ABI/PowerPC/ABISysV_ppc64.h | 8 ++------ lldb/source/Plugins/ABI/SystemZ/ABISysV_s390x.h | 8 ++------ lldb/source/Plugins/ABI/X86/ABIMacOSX_i386.h | 8 ++------ lldb/source/Plugins/ABI/X86/ABISysV_i386.h | 8 ++------ lldb/source/Plugins/ABI/X86/ABISysV_x86_64.h | 8 ++------ lldb/source/Plugins/ABI/X86/ABIWindows_x86_64.h | 8 ++------ lldb/source/Target/ABI.cpp | 4 ++-- 17 files changed, 45 insertions(+), 93 deletions(-) diff --git a/lldb/include/lldb/Target/ABI.h b/lldb/include/lldb/Target/ABI.h index 1aff1e2..4718fee 100644 --- a/lldb/include/lldb/Target/ABI.h +++ b/lldb/include/lldb/Target/ABI.h @@ -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_ diff --git a/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h b/lldb/source/Plugins/ABI/AArch64/ABIMacOSX_arm64.h index c7a91ba..208d3a0 100644 --- 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 @@ protected: 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 index 1bf5773..590f2cd 100644 --- 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 @@ protected: 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 index c4b26a5..3fbe64b 100644 --- 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 @@ 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; 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 index e512651..3b8819a 100644 --- 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 @@ protected: 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 index 60fb14b..78f810a 100644 --- 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 @@ protected: 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 index bef64a2..1f0068d 100644 --- 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 @@ protected: 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 index 8143f55..a471224 100644 --- 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 @@ protected: 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 index 76c3c54..3863b6d 100644 --- 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 @@ protected: 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 index 59907c4..7762536 100644 --- 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 @@ protected: 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 index 1b58975..37d7e66 100644 --- 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 @@ protected: 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 index 671d6a1..c74b179 100644 --- 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 @@ protected: 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 index 50062b8..b052ae9 100644 --- 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 @@ protected: 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 index 2362e9a..785791a 100644 --- 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 @@ protected: 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 index d445d8f..0730f19 100644 --- 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 @@ protected: 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 index 2366566..988f3d0 100644 --- 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 @@ protected: 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 index 7aeb479..def355a 100644 --- a/lldb/source/Target/ABI.cpp +++ b/lldb/source/Target/ABI.cpp @@ -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 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; -- 2.7.4