summaryrefslogtreecommitdiffstats
path: root/lldb/source
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source')
-rw-r--r--lldb/source/API/SystemInitializerFull.cpp4
-rw-r--r--lldb/source/Plugins/Process/minidump/CMakeLists.txt2
-rw-r--r--lldb/source/Plugins/Process/minidump/MinidumpParser.cpp52
-rw-r--r--lldb/source/Plugins/Process/minidump/MinidumpParser.h22
-rw-r--r--lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp17
-rw-r--r--lldb/source/Plugins/Process/minidump/MinidumpTypes.h8
-rw-r--r--lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp263
-rw-r--r--lldb/source/Plugins/Process/minidump/ProcessMinidump.h103
-rw-r--r--lldb/source/Plugins/Process/minidump/ThreadMinidump.cpp102
-rw-r--r--lldb/source/Plugins/Process/minidump/ThreadMinidump.h52
10 files changed, 18 insertions, 607 deletions
diff --git a/lldb/source/API/SystemInitializerFull.cpp b/lldb/source/API/SystemInitializerFull.cpp
index cfc7c2c1740..a297a7c111c 100644
--- a/lldb/source/API/SystemInitializerFull.cpp
+++ b/lldb/source/API/SystemInitializerFull.cpp
@@ -78,7 +78,6 @@
#include "Plugins/Platform/gdb-server/PlatformRemoteGDBServer.h"
#include "Plugins/Process/elf-core/ProcessElfCore.h"
#include "Plugins/Process/gdb-remote/ProcessGDBRemote.h"
-#include "Plugins/Process/minidump/ProcessMinidump.h"
#include "Plugins/ScriptInterpreter/None/ScriptInterpreterNone.h"
#include "Plugins/SymbolFile/DWARF/SymbolFileDWARF.h"
#include "Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h"
@@ -308,7 +307,6 @@ void SystemInitializerFull::Initialize() {
#if defined(_MSC_VER)
ProcessWinMiniDump::Initialize();
#endif
- minidump::ProcessMinidump::Initialize();
MemoryHistoryASan::Initialize();
AddressSanitizerRuntime::Initialize();
ThreadSanitizerRuntime::Initialize();
@@ -431,11 +429,9 @@ void SystemInitializerFull::Terminate() {
JITLoaderGDB::Terminate();
ProcessElfCore::Terminate();
-
#if defined(_MSC_VER)
ProcessWinMiniDump::Terminate();
#endif
- minidump::ProcessMinidump::Terminate();
MemoryHistoryASan::Terminate();
AddressSanitizerRuntime::Terminate();
ThreadSanitizerRuntime::Terminate();
diff --git a/lldb/source/Plugins/Process/minidump/CMakeLists.txt b/lldb/source/Plugins/Process/minidump/CMakeLists.txt
index f6f9faff875..ab3cfbb58f0 100644
--- a/lldb/source/Plugins/Process/minidump/CMakeLists.txt
+++ b/lldb/source/Plugins/Process/minidump/CMakeLists.txt
@@ -4,6 +4,4 @@ add_lldb_library(lldbPluginProcessMinidump
MinidumpTypes.cpp
MinidumpParser.cpp
RegisterContextMinidump_x86_64.cpp
- ThreadMinidump.cpp
- ProcessMinidump.cpp
)
diff --git a/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp b/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp
index 6661e0bba1d..2ccea6839cb 100644
--- a/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp
+++ b/lldb/source/Plugins/Process/minidump/MinidumpParser.cpp
@@ -1,11 +1,11 @@
-//===-- MinidumpParser.cpp -------------------------------------*- C++ -*-===//
+//===-- MinidumpParser.cpp ---------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
-//===--------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
// Project includes
#include "MinidumpParser.h"
@@ -65,7 +65,8 @@ MinidumpParser::MinidumpParser(
}
llvm::ArrayRef<uint8_t> MinidumpParser::GetData() {
- return m_data_sp->GetData();
+ return llvm::ArrayRef<uint8_t>(m_data_sp->GetBytes(),
+ m_data_sp->GetByteSize());
}
llvm::ArrayRef<uint8_t>
@@ -75,14 +76,15 @@ MinidumpParser::GetStream(MinidumpStreamType stream_type) {
return {};
// check if there is enough data
- if (iter->second.rva + iter->second.data_size > GetData().size())
+ if (iter->second.rva + iter->second.data_size > m_data_sp->GetByteSize())
return {};
- return GetData().slice(iter->second.rva, iter->second.data_size);
+ return llvm::ArrayRef<uint8_t>(m_data_sp->GetBytes() + iter->second.rva,
+ iter->second.data_size);
}
llvm::Optional<std::string> MinidumpParser::GetMinidumpString(uint32_t rva) {
- auto arr_ref = GetData();
+ auto arr_ref = m_data_sp->GetData();
if (rva > arr_ref.size())
return llvm::None;
arr_ref = arr_ref.drop_front(rva);
@@ -98,14 +100,6 @@ llvm::ArrayRef<MinidumpThread> MinidumpParser::GetThreads() {
return MinidumpThread::ParseThreadList(data);
}
-llvm::ArrayRef<uint8_t>
-MinidumpParser::GetThreadContext(const MinidumpThread &td) {
- if (td.thread_context.rva + td.thread_context.data_size > GetData().size())
- return llvm::None;
-
- return GetData().slice(td.thread_context.rva, td.thread_context.data_size);
-}
-
const MinidumpSystemInfo *MinidumpParser::GetSystemInfo() {
llvm::ArrayRef<uint8_t> data = GetStream(MinidumpStreamType::SystemInfo);
@@ -230,33 +224,3 @@ const MinidumpExceptionStream *MinidumpParser::GetExceptionStream() {
return MinidumpExceptionStream::Parse(data);
}
-
-llvm::Optional<Range> MinidumpParser::FindMemoryRange(lldb::addr_t addr) {
- llvm::ArrayRef<uint8_t> data = GetStream(MinidumpStreamType::MemoryList);
-
- if (data.size() == 0)
- return llvm::None;
-
- llvm::ArrayRef<MinidumpMemoryDescriptor> memory_list =
- MinidumpMemoryDescriptor::ParseMemoryList(data);
-
- if (memory_list.size() == 0)
- return llvm::None;
-
- for (auto memory_desc : memory_list) {
- const MinidumpLocationDescriptor &loc_desc = memory_desc.memory;
- const lldb::addr_t range_start = memory_desc.start_of_memory_range;
- const size_t range_size = loc_desc.data_size;
-
- if (loc_desc.rva + loc_desc.data_size > GetData().size())
- return llvm::None;
-
- if (range_start <= addr && addr < range_start + range_size) {
- return Range(range_start, GetData().slice(loc_desc.rva, range_size));
- }
- }
-
- // TODO parse Memory64List which is present in full-memory Minidumps
-
- return llvm::None;
-}
diff --git a/lldb/source/Plugins/Process/minidump/MinidumpParser.h b/lldb/source/Plugins/Process/minidump/MinidumpParser.h
index 686d0f39f6e..76a8ece00b2 100644
--- a/lldb/source/Plugins/Process/minidump/MinidumpParser.h
+++ b/lldb/source/Plugins/Process/minidump/MinidumpParser.h
@@ -1,11 +1,12 @@
-//===-- MinidumpParser.h ---------------------------------------*- C++ -*-===//
+//===-- MinidumpParser.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_MinidumpParser_h_
#define liblldb_MinidumpParser_h_
@@ -24,22 +25,15 @@
#include "llvm/ADT/StringRef.h"
// C includes
+
// C++ includes
+#include <cstring>
+#include <unordered_map>
namespace lldb_private {
namespace minidump {
-// Describes a range of memory captured in the Minidump
-struct Range {
- lldb::addr_t start; // virtual address of the beginning of the range
- // range_ref - absolute pointer to the first byte of the range and size
- llvm::ArrayRef<uint8_t> range_ref;
-
- Range(lldb::addr_t start, llvm::ArrayRef<uint8_t> range_ref)
- : start(start), range_ref(range_ref) {}
-};
-
class MinidumpParser {
public:
static llvm::Optional<MinidumpParser>
@@ -53,8 +47,6 @@ public:
llvm::ArrayRef<MinidumpThread> GetThreads();
- llvm::ArrayRef<uint8_t> GetThreadContext(const MinidumpThread &td);
-
const MinidumpSystemInfo *GetSystemInfo();
ArchSpec GetArchitecture();
@@ -69,8 +61,6 @@ public:
const MinidumpExceptionStream *GetExceptionStream();
- llvm::Optional<Range> FindMemoryRange(lldb::addr_t addr);
-
private:
lldb::DataBufferSP m_data_sp;
const MinidumpHeader *m_header;
diff --git a/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp b/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp
index 55f859838cd..5f8aa59397f 100644
--- a/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp
+++ b/lldb/source/Plugins/Process/minidump/MinidumpTypes.cpp
@@ -85,7 +85,7 @@ MinidumpThread::ParseThreadList(llvm::ArrayRef<uint8_t> &data) {
if (error.Fail() || *thread_count * sizeof(MinidumpThread) > data.size())
return {};
- return llvm::makeArrayRef(
+ return llvm::ArrayRef<MinidumpThread>(
reinterpret_cast<const MinidumpThread *>(data.data()), *thread_count);
}
@@ -162,7 +162,7 @@ MinidumpModule::ParseModuleList(llvm::ArrayRef<uint8_t> &data) {
if (error.Fail() || *modules_count * sizeof(MinidumpModule) > data.size())
return {};
- return llvm::makeArrayRef(
+ return llvm::ArrayRef<MinidumpModule>(
reinterpret_cast<const MinidumpModule *>(data.data()), *modules_count);
}
@@ -176,16 +176,3 @@ MinidumpExceptionStream::Parse(llvm::ArrayRef<uint8_t> &data) {
return exception_stream;
}
-
-llvm::ArrayRef<MinidumpMemoryDescriptor>
-MinidumpMemoryDescriptor::ParseMemoryList(llvm::ArrayRef<uint8_t> &data) {
- const llvm::support::ulittle32_t *mem_ranges_count;
- Error error = consumeObject(data, mem_ranges_count);
- if (error.Fail() ||
- *mem_ranges_count * sizeof(MinidumpMemoryDescriptor) > data.size())
- return {};
-
- return llvm::makeArrayRef(
- reinterpret_cast<const MinidumpMemoryDescriptor *>(data.data()),
- *mem_ranges_count);
-}
diff --git a/lldb/source/Plugins/Process/minidump/MinidumpTypes.h b/lldb/source/Plugins/Process/minidump/MinidumpTypes.h
index b452c27514b..bc3d846550a 100644
--- a/lldb/source/Plugins/Process/minidump/MinidumpTypes.h
+++ b/lldb/source/Plugins/Process/minidump/MinidumpTypes.h
@@ -207,9 +207,6 @@ static_assert(sizeof(MinidumpLocationDescriptor) == 8,
struct MinidumpMemoryDescriptor {
llvm::support::ulittle64_t start_of_memory_range;
MinidumpLocationDescriptor memory;
-
- static llvm::ArrayRef<MinidumpMemoryDescriptor>
- ParseMemoryList(llvm::ArrayRef<uint8_t> &data);
};
static_assert(sizeof(MinidumpMemoryDescriptor) == 16,
"sizeof MinidumpMemoryDescriptor is not correct!");
@@ -365,8 +362,7 @@ static_assert(sizeof(MinidumpModule) == 108,
// Exception stuff
struct MinidumpException {
enum {
- ExceptonInfoMaxParams = 15,
- DumpRequested = 0xFFFFFFFF,
+ MaxParams = 15,
};
llvm::support::ulittle32_t exception_code;
@@ -375,7 +371,7 @@ struct MinidumpException {
llvm::support::ulittle64_t exception_address;
llvm::support::ulittle32_t number_parameters;
llvm::support::ulittle32_t unused_alignment;
- llvm::support::ulittle64_t exception_information[ExceptonInfoMaxParams];
+ llvm::support::ulittle64_t exception_information[MaxParams];
};
static_assert(sizeof(MinidumpException) == 152,
"sizeof MinidumpException is not correct!");
diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp b/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
deleted file mode 100644
index 12f83fe3f20..00000000000
--- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-//===-- ProcessMinidump.cpp -------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// Project includes
-#include "ProcessMinidump.h"
-#include "ThreadMinidump.h"
-
-// Other libraries and framework includes
-#include "lldb/Core/DataBufferHeap.h"
-#include "lldb/Core/Log.h"
-#include "lldb/Core/Module.h"
-#include "lldb/Core/ModuleSpec.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Core/Section.h"
-#include "lldb/Core/State.h"
-#include "lldb/Target/DynamicLoader.h"
-#include "lldb/Target/MemoryRegionInfo.h"
-#include "lldb/Target/Target.h"
-#include "lldb/Target/UnixSignals.h"
-#include "lldb/Utility/LLDBAssert.h"
-
-// C includes
-// C++ includes
-
-using namespace lldb_private;
-using namespace minidump;
-
-ConstString ProcessMinidump::GetPluginNameStatic() {
- static ConstString g_name("minidump");
- return g_name;
-}
-
-const char *ProcessMinidump::GetPluginDescriptionStatic() {
- return "Minidump plug-in.";
-}
-
-lldb::ProcessSP ProcessMinidump::CreateInstance(lldb::TargetSP target_sp,
- lldb::ListenerSP listener_sp,
- const FileSpec *crash_file) {
- if (!crash_file)
- return nullptr;
-
- lldb::ProcessSP process_sp;
- // Read enough data for the Minidump header
- const size_t header_size = sizeof(MinidumpHeader);
- lldb::DataBufferSP data_sp(crash_file->MemoryMapFileContents(0, header_size));
- // The memory map can fail
- if (!data_sp)
- return nullptr;
-
- // first, only try to parse the header, beacuse we need to be fast
- llvm::ArrayRef<uint8_t> header_data(data_sp->GetBytes(), header_size);
- const MinidumpHeader *header = MinidumpHeader::Parse(header_data);
-
- if (data_sp->GetByteSize() != header_size || header == nullptr)
- return nullptr;
-
- lldb::DataBufferSP all_data_sp(crash_file->MemoryMapFileContents());
- auto minidump_parser = MinidumpParser::Create(all_data_sp);
- // check if the parser object is valid
- // skip if the Minidump file is Windows generated, because we are still
- // work-in-progress
- if (!minidump_parser ||
- minidump_parser->GetArchitecture().GetTriple().getOS() ==
- llvm::Triple::OSType::Win32)
- return nullptr;
-
- return lldb::ProcessSP(new ProcessMinidump(
- target_sp, listener_sp, *crash_file, minidump_parser.getValue()));
-}
-
-// TODO leave it to be only "return true" ?
-bool ProcessMinidump::CanDebug(lldb::TargetSP target_sp,
- bool plugin_specified_by_name) {
- return true;
-}
-
-ProcessMinidump::ProcessMinidump(lldb::TargetSP target_sp,
- lldb::ListenerSP listener_sp,
- const FileSpec &core_file,
- MinidumpParser minidump_parser)
- : Process(target_sp, listener_sp), m_minidump_parser(minidump_parser),
- m_core_file(core_file) {}
-
-ProcessMinidump::~ProcessMinidump() {
- Clear();
- // We need to call finalize on the process before destroying ourselves
- // to make sure all of the broadcaster cleanup goes as planned. If we
- // destruct this class, then Process::~Process() might have problems
- // trying to fully destroy the broadcaster.
- Finalize();
-}
-
-void ProcessMinidump::Initialize() {
- static std::once_flag g_once_flag;
-
- std::call_once(g_once_flag, []() {
- PluginManager::RegisterPlugin(GetPluginNameStatic(),
- GetPluginDescriptionStatic(),
- ProcessMinidump::CreateInstance);
- });
-}
-
-void ProcessMinidump::Terminate() {
- PluginManager::UnregisterPlugin(ProcessMinidump::CreateInstance);
-}
-
-Error ProcessMinidump::DoLoadCore() {
- Error error;
-
- m_thread_list = m_minidump_parser.GetThreads();
- m_active_exception = m_minidump_parser.GetExceptionStream();
- GetTarget().SetArchitecture(GetArchitecture());
- ReadModuleList();
-
- llvm::Optional<lldb::pid_t> pid = m_minidump_parser.GetPid();
- if (!pid) {
- error.SetErrorString("failed to parse PID");
- return error;
- }
- SetID(pid.getValue());
-
- return error;
-}
-
-DynamicLoader *ProcessMinidump::GetDynamicLoader() {
- if (m_dyld_ap.get() == nullptr)
- m_dyld_ap.reset(DynamicLoader::FindPlugin(this, nullptr));
- return m_dyld_ap.get();
-}
-
-ConstString ProcessMinidump::GetPluginName() { return GetPluginNameStatic(); }
-
-uint32_t ProcessMinidump::GetPluginVersion() { return 1; }
-
-Error ProcessMinidump::DoDestroy() { return Error(); }
-
-void ProcessMinidump::RefreshStateAfterStop() {
- if (!m_active_exception)
- return;
-
- if (m_active_exception->exception_record.exception_code ==
- MinidumpException::DumpRequested) {
- return;
- }
-
- lldb::StopInfoSP stop_info;
- lldb::ThreadSP stop_thread;
-
- Process::m_thread_list.SetSelectedThreadByID(m_active_exception->thread_id);
- stop_thread = Process::m_thread_list.GetSelectedThread();
- ArchSpec arch = GetArchitecture();
-
- if (arch.GetTriple().getOS() == llvm::Triple::Linux) {
- stop_info = StopInfo::CreateStopReasonWithSignal(
- *stop_thread, m_active_exception->exception_record.exception_code);
- } else {
- std::string desc;
- llvm::raw_string_ostream desc_stream(desc);
- desc_stream << "Exception "
- << llvm::format_hex(
- m_active_exception->exception_record.exception_code, 8)
- << " encountered at address "
- << llvm::format_hex(
- m_active_exception->exception_record.exception_address,
- 8);
- stop_info = StopInfo::CreateStopReasonWithException(
- *stop_thread, desc_stream.str().c_str());
- }
-
- stop_thread->SetStopInfo(stop_info);
-}
-
-bool ProcessMinidump::IsAlive() { return true; }
-
-bool ProcessMinidump::WarnBeforeDetach() const { return false; }
-
-size_t ProcessMinidump::ReadMemory(lldb::addr_t addr, void *buf, size_t size,
- lldb_private::Error &error) {
- // Don't allow the caching that lldb_private::Process::ReadMemory does
- // since we have it all cached in our dump file anyway.
- return DoReadMemory(addr, buf, size, error);
-}
-
-size_t ProcessMinidump::DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
- lldb_private::Error &error) {
- // I don't have a sense of how frequently this is called or how many memory
- // ranges a Minidump typically has, so I'm not sure if searching for the
- // appropriate range linearly each time is stupid. Perhaps we should build
- // an index for faster lookups.
- llvm::Optional<Range> range = m_minidump_parser.FindMemoryRange(addr);
- if (!range)
- return 0;
-
- // There's at least some overlap between the beginning of the desired range
- // (addr) and the current range. Figure out where the overlap begins and
- // how much overlap there is, then copy it to the destination buffer.
- lldbassert(range->start <= addr);
- const size_t offset = addr - range->start;
- lldbassert(offset < range->range_ref.size());
- const size_t overlap = std::min(size, range->range_ref.size() - offset);
- std::memcpy(buf, range->range_ref.data() + offset, overlap);
- return overlap;
-}
-
-ArchSpec ProcessMinidump::GetArchitecture() {
- return m_minidump_parser.GetArchitecture();
-}
-
-// TODO - parse the MemoryInfoListStream and implement this method
-Error ProcessMinidump::GetMemoryRegionInfo(
- lldb::addr_t load_addr, lldb_private::MemoryRegionInfo &range_info) {
- return {};
-}
-
-void ProcessMinidump::Clear() { Process::m_thread_list.Clear(); }
-
-bool ProcessMinidump::UpdateThreadList(
- lldb_private::ThreadList &old_thread_list,
- lldb_private::ThreadList &new_thread_list) {
- uint32_t num_threads = 0;
- if (m_thread_list.size() > 0)
- num_threads = m_thread_list.size();
-
- for (lldb::tid_t tid = 0; tid < num_threads; ++tid) {
- lldb::ThreadSP thread_sp(new ThreadMinidump(
- *this, m_thread_list[tid],
- m_minidump_parser.GetThreadContext(m_thread_list[tid])));
- new_thread_list.AddThread(thread_sp);
- }
- return new_thread_list.GetSize(false) > 0;
-}
-
-void ProcessMinidump::ReadModuleList() {
- llvm::ArrayRef<MinidumpModule> modules = m_minidump_parser.GetModuleList();
-
- for (auto module : modules) {
- llvm::Optional<std::string> name =
- m_minidump_parser.GetMinidumpString(module.module_name_rva);
-
- if (!name)
- continue;
-
- const auto file_spec = FileSpec(name.getValue(), true);
- ModuleSpec module_spec = file_spec;
- Error error;
- lldb::ModuleSP module_sp =
- this->GetTarget().GetSharedModule(module_spec, &error);
- if (!module_sp || error.Fail()) {
- continue;
- }
-
- bool load_addr_changed = false;
- module_sp->SetLoadAddress(this->GetTarget(), module.base_of_image, false,
- load_addr_changed);
- }
-}
diff --git a/lldb/source/Plugins/Process/minidump/ProcessMinidump.h b/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
deleted file mode 100644
index 00c45d6491a..00000000000
--- a/lldb/source/Plugins/Process/minidump/ProcessMinidump.h
+++ /dev/null
@@ -1,103 +0,0 @@
-//===-- ProcessMinidump.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_ProcessMinidump_h_
-#define liblldb_ProcessMinidump_h_
-
-// Project includes
-#include "MinidumpParser.h"
-#include "MinidumpTypes.h"
-
-// Other libraries and framework includes
-#include "lldb/Core/ConstString.h"
-#include "lldb/Core/Error.h"
-#include "lldb/Target/Process.h"
-#include "lldb/Target/StopInfo.h"
-#include "lldb/Target/Target.h"
-
-#include "llvm/Support/Format.h"
-#include "llvm/Support/raw_ostream.h"
-
-// C Includes
-// C++ Includes
-
-namespace lldb_private {
-
-namespace minidump {
-
-class ProcessMinidump : public Process {
-public:
- static lldb::ProcessSP CreateInstance(lldb::TargetSP target_sp,
- lldb::ListenerSP listener_sp,
- const FileSpec *crash_file_path);
-
- static void Initialize();
-
- static void Terminate();
-
- static ConstString GetPluginNameStatic();
-
- static const char *GetPluginDescriptionStatic();
-
- ProcessMinidump(lldb::TargetSP target_sp, lldb::ListenerSP listener_sp,
- const lldb_private::FileSpec &core_file,
- MinidumpParser minidump_parser);
-
- ~ProcessMinidump() override;
-
- bool CanDebug(lldb::TargetSP target_sp,
- bool plugin_specified_by_name) override;
-
- Error DoLoadCore() override;
-
- DynamicLoader *GetDynamicLoader() override;
-
- ConstString GetPluginName() override;
-
- uint32_t GetPluginVersion() override;
-
- Error DoDestroy() override;
-
- void RefreshStateAfterStop() override;
-
- bool IsAlive() override;
-
- bool WarnBeforeDetach() const override;
-
- size_t ReadMemory(lldb::addr_t addr, void *buf, size_t size,
- Error &error) override;
-
- size_t DoReadMemory(lldb::addr_t addr, void *buf, size_t size,
- Error &error) override;
-
- ArchSpec GetArchitecture();
-
- Error GetMemoryRegionInfo(lldb::addr_t load_addr,
- MemoryRegionInfo &range_info) override;
-
- MinidumpParser m_minidump_parser;
-
-protected:
- void Clear();
-
- bool UpdateThreadList(ThreadList &old_thread_list,
- ThreadList &new_thread_list) override;
-
- void ReadModuleList();
-
-private:
- FileSpec m_core_file;
- llvm::ArrayRef<MinidumpThread> m_thread_list;
- const MinidumpExceptionStream *m_active_exception;
-};
-
-} // namespace minidump
-} // namespace lldb_private
-
-#endif // liblldb_ProcessMinidump_h_
diff --git a/lldb/source/Plugins/Process/minidump/ThreadMinidump.cpp b/lldb/source/Plugins/Process/minidump/ThreadMinidump.cpp
deleted file mode 100644
index 22641da9e69..00000000000
--- a/lldb/source/Plugins/Process/minidump/ThreadMinidump.cpp
+++ /dev/null
@@ -1,102 +0,0 @@
-//===-- ThreadMinidump.cpp --------------------------------------*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-// Project includes
-#include "ThreadMinidump.h"
-#include "ProcessMinidump.h"
-
-#include "RegisterContextMinidump_x86_64.h"
-
-// Other libraries and framework includes
-#include "Plugins/Process/Utility/RegisterContextLinux_x86_64.h"
-
-#include "Plugins/Process/elf-core/RegisterContextPOSIXCore_x86_64.h"
-
-#include "lldb/Core/DataExtractor.h"
-#include "lldb/Core/Log.h"
-#include "lldb/Target/RegisterContext.h"
-#include "lldb/Target/StopInfo.h"
-#include "lldb/Target/Target.h"
-#include "lldb/Target/Unwind.h"
-
-// C Includes
-// C++ Includes
-
-using namespace lldb;
-using namespace lldb_private;
-using namespace minidump;
-
-ThreadMinidump::ThreadMinidump(Process &process, const MinidumpThread &td,
- llvm::ArrayRef<uint8_t> gpregset_data)
- : Thread(process, td.thread_id), m_thread_reg_ctx_sp(),
- m_gpregset_data(gpregset_data) {}
-
-ThreadMinidump::~ThreadMinidump() {}
-
-void ThreadMinidump::RefreshStateAfterStop() {}
-
-void ThreadMinidump::ClearStackFrames() {}
-
-RegisterContextSP ThreadMinidump::GetRegisterContext() {
- if (!m_reg_context_sp) {
- m_reg_context_sp = CreateRegisterContextForFrame(nullptr);
- }
- return m_reg_context_sp;
-}
-
-RegisterContextSP
-ThreadMinidump::CreateRegisterContextForFrame(StackFrame *frame) {
- RegisterContextSP reg_ctx_sp;
- uint32_t concrete_frame_idx = 0;
- Log *log(GetLogIfAllCategoriesSet(LIBLLDB_LOG_THREAD));
-
- if (frame)
- concrete_frame_idx = frame->GetConcreteFrameIndex();
-
- if (concrete_frame_idx == 0) {
- if (m_thread_reg_ctx_sp)
- return m_thread_reg_ctx_sp;
-
- ProcessMinidump *process =
- static_cast<ProcessMinidump *>(GetProcess().get());
- ArchSpec arch = process->GetArchitecture();
- RegisterInfoInterface *reg_interface = nullptr;
-
- // TODO write other register contexts and add them here
- switch (arch.GetMachine()) {
- case llvm::Triple::x86_64: {
- reg_interface = new RegisterContextLinux_x86_64(arch);
- lldb::DataBufferSP buf =
- ConvertMinidumpContextToRegIface(m_gpregset_data, reg_interface);
- DataExtractor gpregs(buf, lldb::eByteOrderLittle, 8);
- DataExtractor fpregs;
- m_thread_reg_ctx_sp.reset(new RegisterContextCorePOSIX_x86_64(
- *this, reg_interface, gpregs, fpregs));
- break;
- }
- default:
- break;
- }
-
- if (!reg_interface) {
- if (log)
- log->Printf("elf-core::%s:: Architecture(%d) not supported",
- __FUNCTION__, arch.GetMachine());
- assert(false && "Architecture not supported");
- }
-
- reg_ctx_sp = m_thread_reg_ctx_sp;
- } else if (m_unwinder_ap) {
- reg_ctx_sp = m_unwinder_ap->CreateRegisterContextForFrame(frame);
- }
-
- return reg_ctx_sp;
-}
-
-bool ThreadMinidump::CalculateStopInfo() { return false; }
diff --git a/lldb/source/Plugins/Process/minidump/ThreadMinidump.h b/lldb/source/Plugins/Process/minidump/ThreadMinidump.h
deleted file mode 100644
index 97db452edff..00000000000
--- a/lldb/source/Plugins/Process/minidump/ThreadMinidump.h
+++ /dev/null
@@ -1,52 +0,0 @@
-//===-- ThreadMinidump.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_ThreadMinidump_h_
-#define liblldb_ThreadMinidump_h_
-
-// Project includes
-#include "MinidumpTypes.h"
-
-// Other libraries and framework includes
-#include "lldb/Target/Thread.h"
-
-// C Includes
-// C++ Includes
-
-namespace lldb_private {
-
-namespace minidump {
-
-class ThreadMinidump : public Thread {
-public:
- ThreadMinidump(Process &process, const MinidumpThread &td,
- llvm::ArrayRef<uint8_t> gpregset_data);
-
- ~ThreadMinidump() override;
-
- void RefreshStateAfterStop() override;
-
- lldb::RegisterContextSP GetRegisterContext() override;
-
- lldb::RegisterContextSP
- CreateRegisterContextForFrame(StackFrame *frame) override;
-
- void ClearStackFrames() override;
-
-protected:
- lldb::RegisterContextSP m_thread_reg_ctx_sp;
- llvm::ArrayRef<uint8_t> m_gpregset_data;
-
- bool CalculateStopInfo() override;
-};
-
-} // namespace minidump
-} // namespace lldb_private
-
-#endif // liblldb_ThreadMinidump_h_
OpenPOWER on IntegriCloud