On Tue, Jun 15, 2021 at 4:29 PM Tom Stellard <tstel...@redhat.com> wrote:
> On 6/15/21 4:28 PM, Chandler Carruth wrote: > > +Tom Stellard <mailto: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. > > > > Can you file a bug for this? > Sure https://bugs.llvm.org/show_bug.cgi?id=50732 > > -Tom > > > On Wed, Mar 31, 2021 at 11:45 PM Pavel Labath via lldb-commits < > lldb-commits@lists.llvm.org <mailto: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 > < > https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98 > > > > DIFF: > 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 <mailto:lldb-commits@lists.llvm.org> > > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits < > 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