Refactor Windows process plugin to allow code sharing between live and mini dump debugging.

llvm-svn: 251540
diff --git a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp
index 2ffdd1b..c27ddb2 100644
--- a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp
+++ b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.cpp
@@ -123,7 +123,7 @@
 
 ProcessWinMiniDump::ProcessWinMiniDump(lldb::TargetSP target_sp, Listener &listener,
                                        const FileSpec &core_file) :
-    Process(target_sp, listener),
+    ProcessWindows(target_sp, listener),
     m_data_up(new Data)
 {
     m_data_up->m_core_file = core_file;
@@ -285,18 +285,6 @@
     });
 }
 
-lldb::addr_t
-ProcessWinMiniDump::GetImageInfoAddress()
-{
-    Target *target = &GetTarget();
-    ObjectFile *obj_file = target->GetExecutableModule()->GetObjectFile();
-    Address addr = obj_file->GetImageInfoAddress(target);
-
-    if (addr.IsValid())
-        return addr.GetLoadAddress(target);
-    return LLDB_INVALID_ADDRESS;
-}
-
 ArchSpec
 ProcessWinMiniDump::GetArchitecture()
 {
diff --git a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h
index 7555a03..c761791 100644
--- a/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h
+++ b/lldb/source/Plugins/Process/Windows/MiniDump/ProcessWinMiniDump.h
@@ -17,9 +17,11 @@
 #include "lldb/Core/Error.h"
 #include "lldb/Target/Process.h"
 
+#include "Plugins/Process/Windows/Common/ProcessWindows.h"
+
 struct ThreadData;
 
-class ProcessWinMiniDump : public lldb_private::Process
+class ProcessWinMiniDump : public lldb_private::ProcessWindows
 {
 public:
     static lldb::ProcessSP
@@ -79,9 +81,6 @@
     size_t
     DoReadMemory(lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error) override;
 
-    lldb::addr_t
-    GetImageInfoAddress() override;
-
     lldb_private::ArchSpec
     GetArchitecture();
 
diff --git a/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.cpp b/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.cpp
index 8b07c11..2185ccc 100644
--- a/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.cpp
+++ b/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.cpp
@@ -1,146 +1,146 @@
-//===-- RegisterContextWindowsMiniDump.cpp ------------------------------*- C++ -*-===//

-//

-//                     The LLVM Compiler Infrastructure

-//

-// This file is distributed under the University of Illinois Open Source

-// License. See LICENSE.TXT for details.

-//

-//===----------------------------------------------------------------------===//

-

-#include "lldb/lldb-private-types.h"

-#include "lldb/Core/DataBufferHeap.h"

-#include "lldb/Core/Error.h"

-#include "lldb/Host/windows/HostThreadWindows.h"

-#include "lldb/Host/windows/windows.h"

-

-#include "RegisterContextWindowsMiniDump.h"

-

-#include "llvm/ADT/STLExtras.h"

-

-using namespace lldb;

-using namespace lldb_private;

-

-// This is a do-nothing stub implementation for now.

-

-RegisterContextWindowsMiniDump::RegisterContextWindowsMiniDump(Thread &thread, uint32_t concrete_frame_idx)

-    : RegisterContext(thread, concrete_frame_idx)

-{

-}

-

-RegisterContextWindowsMiniDump::~RegisterContextWindowsMiniDump()

-{

-}

-

-void

-RegisterContextWindowsMiniDump::InvalidateAllRegisters()

-{

-}

-

-size_t

-RegisterContextWindowsMiniDump::GetRegisterCount()

-{

-    return 0;

-}

-

-const RegisterInfo *

-RegisterContextWindowsMiniDump::GetRegisterInfoAtIndex(size_t reg)

-{

-    return nullptr;

-}

-

-size_t

-RegisterContextWindowsMiniDump::GetRegisterSetCount()

-{

-    return 0;

-}

-

-const RegisterSet *

-RegisterContextWindowsMiniDump::GetRegisterSet(size_t reg_set)

-{

-    return nullptr;

-}

-

-bool

-RegisterContextWindowsMiniDump::ReadRegister(const RegisterInfo *reg_info, RegisterValue &reg_value)

-{

-    return false;

-}

-

-bool

-RegisterContextWindowsMiniDump::WriteRegister (const RegisterInfo *reg_info, const RegisterValue &reg_value)

-{

-    return false;

-}

-

-bool

-RegisterContextWindowsMiniDump::ReadAllRegisterValues(lldb::DataBufferSP &data_sp)

-{

-    return false;

-}

-

-bool

-RegisterContextWindowsMiniDump::WriteAllRegisterValues(const lldb::DataBufferSP &data_sp)

-{

-    return false;

-}

-

-uint32_t

-RegisterContextWindowsMiniDump::ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num)

-{

-    const uint32_t num_regs = GetRegisterCount();

-

-    assert(kind < kNumRegisterKinds);

-    for (uint32_t reg_idx = 0; reg_idx < num_regs; ++reg_idx)

-    {

-        const RegisterInfo *reg_info = GetRegisterInfoAtIndex(reg_idx);

-

-        if (reg_info->kinds[kind] == num)

-            return reg_idx;

-    }

-

-    return LLDB_INVALID_REGNUM;

-}

-

-uint32_t

-RegisterContextWindowsMiniDump::NumSupportedHardwareBreakpoints()

-{

-    // Support for hardware breakpoints not yet implemented.

-    return 0;

-}

-

-uint32_t

-RegisterContextWindowsMiniDump::SetHardwareBreakpoint(lldb::addr_t addr, size_t size)

-{

-    return 0;

-}

-

-bool

-RegisterContextWindowsMiniDump::ClearHardwareBreakpoint(uint32_t hw_idx)

-{

-    return false;

-}

-

-uint32_t

-RegisterContextWindowsMiniDump::NumSupportedHardwareWatchpoints()

-{

-    // Support for hardware watchpoints not yet implemented.

-    return 0;

-}

-

-uint32_t

-RegisterContextWindowsMiniDump::SetHardwareWatchpoint(lldb::addr_t addr, size_t size, bool read, bool write)

-{

-    return 0;

-}

-

-bool

-RegisterContextWindowsMiniDump::ClearHardwareWatchpoint(uint32_t hw_index)

-{

-    return false;

-}

-

-bool

-RegisterContextWindowsMiniDump::HardwareSingleStep(bool enable)

-{

-    return false;

-}

+//===-- RegisterContextWindowsMiniDump.cpp ------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/lldb-private-types.h"
+#include "lldb/Core/DataBufferHeap.h"
+#include "lldb/Core/Error.h"
+#include "lldb/Host/windows/HostThreadWindows.h"
+#include "lldb/Host/windows/windows.h"
+
+#include "RegisterContextWindowsMiniDump.h"
+
+#include "llvm/ADT/STLExtras.h"
+
+using namespace lldb;
+using namespace lldb_private;
+
+// This is a do-nothing stub implementation for now.
+
+RegisterContextWindowsMiniDump::RegisterContextWindowsMiniDump(Thread &thread, uint32_t concrete_frame_idx)
+    : RegisterContextWindows(thread, concrete_frame_idx)
+{
+}
+
+RegisterContextWindowsMiniDump::~RegisterContextWindowsMiniDump()
+{
+}
+
+void
+RegisterContextWindowsMiniDump::InvalidateAllRegisters()
+{
+}
+
+size_t
+RegisterContextWindowsMiniDump::GetRegisterCount()
+{
+    return 0;
+}
+
+const RegisterInfo *
+RegisterContextWindowsMiniDump::GetRegisterInfoAtIndex(size_t reg)
+{
+    return nullptr;
+}
+
+size_t
+RegisterContextWindowsMiniDump::GetRegisterSetCount()
+{
+    return 0;
+}
+
+const RegisterSet *
+RegisterContextWindowsMiniDump::GetRegisterSet(size_t reg_set)
+{
+    return nullptr;
+}
+
+bool
+RegisterContextWindowsMiniDump::ReadRegister(const RegisterInfo *reg_info, RegisterValue &reg_value)
+{
+    return false;
+}
+
+bool
+RegisterContextWindowsMiniDump::WriteRegister (const RegisterInfo *reg_info, const RegisterValue &reg_value)
+{
+    return false;
+}
+
+bool
+RegisterContextWindowsMiniDump::ReadAllRegisterValues(lldb::DataBufferSP &data_sp)
+{
+    return false;
+}
+
+bool
+RegisterContextWindowsMiniDump::WriteAllRegisterValues(const lldb::DataBufferSP &data_sp)
+{
+    return false;
+}
+
+uint32_t
+RegisterContextWindowsMiniDump::ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num)
+{
+    const uint32_t num_regs = GetRegisterCount();
+
+    assert(kind < kNumRegisterKinds);
+    for (uint32_t reg_idx = 0; reg_idx < num_regs; ++reg_idx)
+    {
+        const RegisterInfo *reg_info = GetRegisterInfoAtIndex(reg_idx);
+
+        if (reg_info->kinds[kind] == num)
+            return reg_idx;
+    }
+
+    return LLDB_INVALID_REGNUM;
+}
+
+uint32_t
+RegisterContextWindowsMiniDump::NumSupportedHardwareBreakpoints()
+{
+    // Support for hardware breakpoints not yet implemented.
+    return 0;
+}
+
+uint32_t
+RegisterContextWindowsMiniDump::SetHardwareBreakpoint(lldb::addr_t addr, size_t size)
+{
+    return 0;
+}
+
+bool
+RegisterContextWindowsMiniDump::ClearHardwareBreakpoint(uint32_t hw_idx)
+{
+    return false;
+}
+
+uint32_t
+RegisterContextWindowsMiniDump::NumSupportedHardwareWatchpoints()
+{
+    // Support for hardware watchpoints not yet implemented.
+    return 0;
+}
+
+uint32_t
+RegisterContextWindowsMiniDump::SetHardwareWatchpoint(lldb::addr_t addr, size_t size, bool read, bool write)
+{
+    return 0;
+}
+
+bool
+RegisterContextWindowsMiniDump::ClearHardwareWatchpoint(uint32_t hw_index)
+{
+    return false;
+}
+
+bool
+RegisterContextWindowsMiniDump::HardwareSingleStep(bool enable)
+{
+    return false;
+}
diff --git a/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.h b/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.h
index 5c6e240..5c7830c 100644
--- a/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.h
+++ b/lldb/source/Plugins/Process/Windows/MiniDump/RegisterContextWindowsMiniDump.h
@@ -1,73 +1,75 @@
-//===-- RegisterContextWindowsMiniDump.h --------------------------------*- C++ -*-===//

-//

-//                     The LLVM Compiler Infrastructure

-//

-// This file is distributed under the University of Illinois Open Source

-// License. See LICENSE.TXT for details.

-//

-//===----------------------------------------------------------------------===//

-

-#ifndef liblldb_RegisterContextWindowsMiniDump_H_

-#define liblldb_RegisterContextWindowsMiniDump_H_

-

-#include "lldb/lldb-forward.h"

-#include "lldb/Target/RegisterContext.h"

-

-

-namespace lldb_private

-{

-

-class Thread;

-

-class RegisterContextWindowsMiniDump : public lldb_private::RegisterContext

-{

-  public:

-    RegisterContextWindowsMiniDump(Thread &thread, uint32_t concrete_frame_idx);

-

-    virtual ~RegisterContextWindowsMiniDump();

-

-    void

-    InvalidateAllRegisters() override;

-

-    size_t

-    GetRegisterCount() override;

-

-    const RegisterInfo *

-    GetRegisterInfoAtIndex(size_t reg) override;

-

-    size_t

-    GetRegisterSetCount() override;

-

-    const RegisterSet *

-    GetRegisterSet(size_t reg_set) override;

-

-    bool

-    ReadRegister(const RegisterInfo *reg_info, RegisterValue &reg_value) override;

-

-    bool

-    WriteRegister(const RegisterInfo *reg_info, const RegisterValue &reg_value) override;

-

-    bool ReadAllRegisterValues(lldb::DataBufferSP &data_sp) override;

-

-    bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;

-

-    uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override;

-

-    uint32_t NumSupportedHardwareBreakpoints() override;

-

-    uint32_t SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override;

-

-    bool ClearHardwareBreakpoint(uint32_t hw_idx) override;

-

-    uint32_t NumSupportedHardwareWatchpoints() override;

-

-    uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size, bool read, bool write) override;

-

-    bool ClearHardwareWatchpoint(uint32_t hw_index) override;

-

-    bool HardwareSingleStep(bool enable) override;

-};

-

-}

-

-#endif // #ifndef liblldb_RegisterContextWindowsMiniDump_H_

+//===-- RegisterContextWindowsMiniDump.h --------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_RegisterContextWindowsMiniDump_H_
+#define liblldb_RegisterContextWindowsMiniDump_H_
+
+#include "lldb/lldb-forward.h"
+#include "lldb/Target/RegisterContext.h"
+
+#include "Plugins/Process/Windows/Common/RegisterContextWindows.h"
+
+
+namespace lldb_private
+{
+
+class Thread;
+
+class RegisterContextWindowsMiniDump : public lldb_private::RegisterContextWindows
+{
+  public:
+    RegisterContextWindowsMiniDump(Thread &thread, uint32_t concrete_frame_idx);
+
+    virtual ~RegisterContextWindowsMiniDump();
+
+    void
+    InvalidateAllRegisters() override;
+
+    size_t
+    GetRegisterCount() override;
+
+    const RegisterInfo *
+    GetRegisterInfoAtIndex(size_t reg) override;
+
+    size_t
+    GetRegisterSetCount() override;
+
+    const RegisterSet *
+    GetRegisterSet(size_t reg_set) override;
+
+    bool
+    ReadRegister(const RegisterInfo *reg_info, RegisterValue &reg_value) override;
+
+    bool
+    WriteRegister(const RegisterInfo *reg_info, const RegisterValue &reg_value) override;
+
+    bool ReadAllRegisterValues(lldb::DataBufferSP &data_sp) override;
+
+    bool WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
+
+    uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override;
+
+    uint32_t NumSupportedHardwareBreakpoints() override;
+
+    uint32_t SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override;
+
+    bool ClearHardwareBreakpoint(uint32_t hw_idx) override;
+
+    uint32_t NumSupportedHardwareWatchpoints() override;
+
+    uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size, bool read, bool write) override;
+
+    bool ClearHardwareWatchpoint(uint32_t hw_index) override;
+
+    bool HardwareSingleStep(bool enable) override;
+};
+
+}
+
+#endif // #ifndef liblldb_RegisterContextWindowsMiniDump_H_