<div dir="ltr"><div dir="ltr">On Tue, Jun 15, 2021 at 4:29 PM Tom Stellard <<a href="mailto:tstellar@redhat.com">tstellar@redhat.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 6/15/21 4:28 PM, Chandler Carruth wrote:<br>
> +Tom Stellard <mailto:<a href="mailto:tstellar@redhat.com" target="_blank">tstellar@redhat.com</a>> - 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.<br>
> <br>
<br>
Can you file a bug for this?<br></blockquote><div><br></div><div>Sure <a href="https://bugs.llvm.org/show_bug.cgi?id=50732">https://bugs.llvm.org/show_bug.cgi?id=50732</a> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
-Tom<br>
<br>
> On Wed, Mar 31, 2021 at 11:45 PM Pavel Labath via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a> <mailto:<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a>>> wrote:<br>
> <br>
> <br>
> Author: Pavel Labath<br>
> Date: 2021-04-01T08:44:50+02:00<br>
> New Revision: 3bea7306e8669f94bacafae68748a9139cfc0b98<br>
> <br>
> URL: <a href="https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98</a> <<a href="https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98</a>><br>
> DIFF: <a href="https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98.diff</a> <<a href="https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98.diff" rel="noreferrer" target="_blank">https://github.com/llvm/llvm-project/commit/3bea7306e8669f94bacafae68748a9139cfc0b98.diff</a>><br>
> <br>
> LOG: [lldb] Fix compilation with gcc-6.5<br>
> <br>
> This fixes (works around) two errors with gcc-6.5.<br>
> - in the RegisterContext_x86 files, gcc is unable to synthesize a<br>
> default constructor -- it thinks it needs to initialize the virtual<br>
> base class, even though said classes are abstract. I fix that by<br>
> providing a dummy constructor.<br>
> - In ReproducerInstrumentationTest, it is not able to deduce that the<br>
> TestingRegistry class is movable (it contains a map of unique<br>
> pointers). I change the type from Optional<TestingRegistry> to<br>
> unique_ptr<TestingRegistry), so that moving is not required<br>
> (copying/moving a polymorphic type is not a very good idea in any<br>
> case).<br>
> <br>
> Added:<br>
> <br>
> <br>
> Modified:<br>
> lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h<br>
> lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp<br>
> lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h<br>
> lldb/unittests/Utility/ReproducerInstrumentationTest.cpp<br>
> <br>
> Removed:<br>
> <br>
> <br>
> <br>
> ################################################################################<br>
> diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h<br>
> index dfd0106837853..7d5ea575269dc 100644<br>
> --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h<br>
> +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux.h<br>
> @@ -58,6 +58,12 @@ class NativeRegisterContextLinux<br>
> virtual llvm::Optional<MmapData> GetMmapData() { return llvm::None; }<br>
> <br>
> protected:<br>
> + // NB: This constructor is here only because gcc<=6.5 requires a virtual base<br>
> + // class initializer on abstract class (even though it is never used). It can<br>
> + // be deleted once we move to gcc>=7.0.<br>
> + NativeRegisterContextLinux(NativeThreadProtocol &thread)<br>
> + : NativeRegisterContextRegisterInfo(thread, nullptr) {}<br>
> +<br>
> lldb::ByteOrder GetByteOrder() const;<br>
> <br>
> virtual Status ReadRegisterRaw(uint32_t reg_index, RegisterValue ®_value);<br>
> <br>
> diff --git a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp<br>
> index c197d70825b4b..bd4b168f4964e 100644<br>
> --- a/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp<br>
> +++ b/lldb/source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp<br>
> @@ -292,6 +292,8 @@ NativeRegisterContextLinux_x86_64::NativeRegisterContextLinux_x86_64(<br>
> const ArchSpec &target_arch, NativeThreadProtocol &native_thread)<br>
> : NativeRegisterContextRegisterInfo(<br>
> native_thread, CreateRegisterInfoInterface(target_arch)),<br>
> + NativeRegisterContextLinux(native_thread),<br>
> + NativeRegisterContextDBReg_x86(native_thread),<br>
> m_xstate_type(XStateType::Invalid), m_ymm_set(), m_mpx_set(),<br>
> m_reg_info(), m_gpr_x86_64() {<br>
> // Set up data about ranges of valid registers.<br>
> <br>
> diff --git a/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h<br>
> index c0c6ce29eab53..a4ed8bfb97eaf 100644<br>
> --- a/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h<br>
> +++ b/lldb/source/Plugins/Process/Utility/NativeRegisterContextDBReg_x86.h<br>
> @@ -16,6 +16,12 @@ namespace lldb_private {<br>
> class NativeRegisterContextDBReg_x86<br>
> : public virtual NativeRegisterContextRegisterInfo {<br>
> public:<br>
> + // NB: This constructor is here only because gcc<=6.5 requires a virtual base<br>
> + // class initializer on abstract class (even though it is never used). It can<br>
> + // be deleted once we move to gcc>=7.0.<br>
> + NativeRegisterContextDBReg_x86(NativeThreadProtocol &thread)<br>
> + : NativeRegisterContextRegisterInfo(thread, nullptr) {}<br>
> +<br>
> Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override;<br>
> <br>
> Status GetWatchpointHitIndex(uint32_t &wp_index,<br>
> <br>
> diff --git a/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp b/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp<br>
> index e9f6fcf34e17f..ce259c5969e09 100644<br>
> --- a/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp<br>
> +++ b/lldb/unittests/Utility/ReproducerInstrumentationTest.cpp<br>
> @@ -50,7 +50,7 @@ class TestingRegistry : public Registry {<br>
> TestingRegistry();<br>
> };<br>
> <br>
> -static llvm::Optional<TestingRegistry> g_registry;<br>
> +static std::unique_ptr<TestingRegistry> g_registry;<br>
> static llvm::Optional<Serializer> g_serializer;<br>
> static llvm::Optional<Deserializer> g_deserializer;<br>
> <br>
> @@ -75,13 +75,13 @@ inline TestInstrumentationData GetTestInstrumentationData() {<br>
> class TestInstrumentationDataRAII {<br>
> public:<br>
> TestInstrumentationDataRAII(llvm::raw_string_ostream &os) {<br>
> - g_registry.emplace();<br>
> + g_registry = std::make_unique<TestingRegistry>();<br>
> g_serializer.emplace(os);<br>
> g_deserializer.reset();<br>
> }<br>
> <br>
> TestInstrumentationDataRAII(llvm::StringRef buffer) {<br>
> - g_registry.emplace();<br>
> + g_registry = std::make_unique<TestingRegistry>();<br>
> g_serializer.reset();<br>
> g_deserializer.emplace(buffer);<br>
> }<br>
> <br>
> <br>
> <br>
> _______________________________________________<br>
> lldb-commits mailing list<br>
> <a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a> <mailto:<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a>><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a> <<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a>><br>
> <br>
<br>
</blockquote></div></div>