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?

-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 
&reg_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

Reply via email to