[Lldb-commits] [lldb] 3bea730 - [lldb] Fix compilation with gcc-6.5
Tom Stellard via lldb-commits
lldb-commits at lists.llvm.org
Tue Jun 15 16:29:45 PDT 2021
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?
-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>
>
More information about the lldb-commits
mailing list