[Lldb-commits] [lldb] 3bea730 - [lldb] Fix compilation with gcc-6.5
Chandler Carruth via lldb-commits
lldb-commits at lists.llvm.org
Wed Jun 16 00:58:21 PDT 2021
On Tue, Jun 15, 2021 at 4:29 PM Tom Stellard <tstellar at redhat.com> wrote:
> On 6/15/21 4:28 PM, Chandler Carruth wrote:
> > +Tom Stellard <mailto:tstellar at 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 at lists.llvm.org <mailto:lldb-commits at 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 at lists.llvm.org <mailto:lldb-commits at lists.llvm.org>
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits <
> https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits>
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20210616/57276322/attachment.html>
More information about the lldb-commits
mailing list