+Tom Stellard <tstel...@redhat.com> - Could this get cherry-picked into 12.0.N for the next point release? Without it, LLDB in the 12 release doesn't build with GCC <= 6.5 which the docs indicate is supposed to work.
On Wed, Mar 31, 2021 at 11:45 PM Pavel Labath via lldb-commits < lldb-commits@lists.llvm.org> wrote: > > Author: Pavel Labath > Date: 2021-04-01T08:44:50+02:00 > New Revision: 3bea7306e8669f94bacafae68748a9139cfc0b98 > > URL: > https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98 > DIFF: > https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98.diff > > LOG: [lldb] Fix compilation with gcc-6.5 > > This fixes (works around) two errors with gcc-6.5. > - in the RegisterContext_x86 files, gcc is unable to synthesize a > default constructor -- it thinks it needs to initialize the virtual > base class, even though said classes are abstract. I fix that by > providing a dummy constructor. > - In ReproducerInstrumentationTest, it is not able to deduce that the > TestingRegistry class is movable (it contains a map of unique > pointers). I change the type from Optional<TestingRegistry> to > unique_ptr<TestingRegistry), so that moving is not required > (copying/moving a polymorphic type is not a very good idea in any > case). > > Added: > > > Modified: > lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h > lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp > lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h > lldb/unittests/Utility/ReproducerInstrumentationTest.cpp > > Removed: > > > > > ################################################################################ > diff --git > a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h > b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h > index dfd0106837853..7d5ea575269dc 100644 > --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h > +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h > @@ -58,6 +58,12 @@ class NativeRegisterContextLinux > virtual llvm::Optional<MmapData> GetMmapData() { return llvm::None; } > > protected: > + // NB: This constructor is here only because gcc<=6.5 requires a > virtual base > + // class initializer on abstract class (even though it is never used). > It can > + // be deleted once we move to gcc>=7.0. > + NativeRegisterContextLinux(NativeThreadProtocol &thread) > + : NativeRegisterContextRegisterInfo(thread, nullptr) {} > + > lldb::ByteOrder GetByteOrder() const; > > virtual Status ReadRegisterRaw(uint32_t reg_index, RegisterValue > ®_value); > > diff --git > a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp > b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp > index c197d70825b4b..bd4b168f4964e 100644 > --- > a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp > +++ > b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp > @@ -292,6 +292,8 @@ > NativeRegisterContextLinux_x86_64::NativeRegisterContextLinux_x86_64( > const ArchSpec &target_arch, NativeThreadProtocol &native_thread) > : NativeRegisterContextRegisterInfo( > native_thread, CreateRegisterInfoInterface(target_arch)), > + NativeRegisterContextLinux(native_thread), > + NativeRegisterContextDBReg_x86(native_thread), > m_xstate_type(XStateType::Invalid), m_ymm_set(), m_mpx_set(), > m_reg_info(), m_gpr_x86_64() { > // Set up data about ranges of valid registers. > > diff --git > a/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h > b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h > index c0c6ce29eab53..a4ed8bfb97eaf 100644 > --- a/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h > +++ b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h > @@ -16,6 +16,12 @@ namespace lldb_private { > class NativeRegisterContextDBReg_x86 > : public virtual NativeRegisterContextRegisterInfo { > public: > + // NB: This constructor is here only because gcc<=6.5 requires a > virtual base > + // class initializer on abstract class (even though it is never used). > It can > + // be deleted once we move to gcc>=7.0. > + NativeRegisterContextDBReg_x86(NativeThreadProtocol &thread) > + : NativeRegisterContextRegisterInfo(thread, nullptr) {} > + > Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override; > > Status GetWatchpointHitIndex(uint32_t &wp_index, > > diff --git a/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp > b/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp > index e9f6fcf34e17f..ce259c5969e09 100644 > --- a/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp > +++ b/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp > @@ -50,7 +50,7 @@ class TestingRegistry : public Registry { > TestingRegistry(); > }; > > -static llvm::Optional<TestingRegistry> g_registry; > +static std::unique_ptr<TestingRegistry> g_registry; > static llvm::Optional<Serializer> g_serializer; > static llvm::Optional<Deserializer> g_deserializer; > > @@ -75,13 +75,13 @@ inline TestInstrumentationData > GetTestInstrumentationData() { > class TestInstrumentationDataRAII { > public: > TestInstrumentationDataRAII(llvm::raw_string_ostream &os) { > - g_registry.emplace(); > + g_registry = std::make_unique<TestingRegistry>(); > g_serializer.emplace(os); > g_deserializer.reset(); > } > > TestInstrumentationDataRAII(llvm::StringRef buffer) { > - g_registry.emplace(); > + g_registry = std::make_unique<TestingRegistry>(); > g_serializer.reset(); > g_deserializer.emplace(buffer); > } > > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits >
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits