diff options
19 files changed, 7 insertions, 1346 deletions
diff --git a/lldb/lib/Makefile b/lldb/lib/Makefile index a55f7c1f397..ea028ce3735 100644 --- a/lldb/lib/Makefile +++ b/lldb/lib/Makefile @@ -67,7 +67,6 @@ USEDLIBS = lldbAPI.a \ LLVMMCDisassembler.a \ lldbPluginPlatformMacOSX.a \ lldbPluginPlatformLinux.a \ - lldbPluginProcessElfCore.a \ lldbPluginPlatformFreeBSD.a # Because GCC requires RTTI enabled for lldbCore (see source/Core/Makefile) it is diff --git a/lldb/source/CMakeLists.txt b/lldb/source/CMakeLists.txt index d19f37a08f2..8b7d34f73ed 100644 --- a/lldb/source/CMakeLists.txt +++ b/lldb/source/CMakeLists.txt @@ -90,7 +90,6 @@ if ( CMAKE_SYSTEM_NAME MATCHES "Linux" ) lldbHostLinux
lldbPluginProcessLinux
lldbPluginProcessPOSIX
- lldbPluginProcessElfCore
)
endif ()
diff --git a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.cpp b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.cpp index 3ec67fe52d8..7123786b601 100644 --- a/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.cpp +++ b/lldb/source/Plugins/DynamicLoader/POSIX-DYLD/AuxVector.cpp @@ -19,8 +19,6 @@ #include "lldb/Core/Log.h" #include "lldb/Target/Process.h" -#include "Plugins/Process/elf-core/ProcessElfCore.h" - #include "AuxVector.h" using namespace lldb; @@ -55,10 +53,8 @@ ParseAuxvEntry(DataExtractor &data, DataBufferSP AuxVector::GetAuxvData() { - if (m_process->GetPluginName() == ProcessElfCore::GetPluginNameStatic()) - return static_cast<ProcessElfCore *>(m_process)->GetAuxvData(); - else - return lldb_private::Host::GetAuxvData(m_process); + + return lldb_private::Host::GetAuxvData(m_process); } void diff --git a/lldb/source/Plugins/Makefile b/lldb/source/Plugins/Makefile index 92bb01e9f9f..f420a03deee 100644 --- a/lldb/source/Plugins/Makefile +++ b/lldb/source/Plugins/Makefile @@ -35,7 +35,6 @@ ifeq ($(HOST_OS),Linux) DIRS += DynamicLoader/MacOSX-DYLD DIRS += Process/Linux Process/POSIX DIRS += SymbolVendor/ELF -DIRS += Process/elf-core endif ifneq (,$(filter $(HOST_OS), FreeBSD GNU/kFreeBSD)) diff --git a/lldb/source/Plugins/Process/CMakeLists.txt b/lldb/source/Plugins/Process/CMakeLists.txt index 44018808854..cf12bcdf34b 100644 --- a/lldb/source/Plugins/Process/CMakeLists.txt +++ b/lldb/source/Plugins/Process/CMakeLists.txt @@ -1,7 +1,6 @@ if (CMAKE_SYSTEM_NAME MATCHES "Linux")
add_subdirectory(Linux)
add_subdirectory(POSIX)
- add_subdirectory(elf-core)
elseif (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
add_subdirectory(FreeBSD)
add_subdirectory(POSIX)
diff --git a/lldb/source/Plugins/Process/Linux/ProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/ProcessLinux.cpp index 0051fad8281..8c0a2a240f2 100644 --- a/lldb/source/Plugins/Process/Linux/ProcessLinux.cpp +++ b/lldb/source/Plugins/Process/Linux/ProcessLinux.cpp @@ -32,9 +32,9 @@ using namespace lldb_private; // Static functions. ProcessSP -ProcessLinux::CreateInstance(Target &target, Listener &listener, const FileSpec *core_file) +ProcessLinux::CreateInstance(Target &target, Listener &listener, const FileSpec *) { - return ProcessSP(new ProcessLinux(target, listener, (FileSpec *)core_file)); + return ProcessSP(new ProcessLinux(target, listener)); } void @@ -63,10 +63,9 @@ ProcessLinux::Initialize() //------------------------------------------------------------------------------ // Constructors and destructors. -ProcessLinux::ProcessLinux(Target& target, Listener &listener, FileSpec *core_file) +ProcessLinux::ProcessLinux(Target& target, Listener &listener) : ProcessPOSIX(target, listener), m_stopping_threads(false) { - m_core_file = core_file; #if 0 // FIXME: Putting this code in the ctor and saving the byte order in a // member variable is a hack to avoid const qual issues in GetByteOrder. @@ -171,17 +170,3 @@ ProcessLinux::StopAllThreads(lldb::tid_t stop_tid) if (log) log->Printf ("ProcessLinux::%s() finished", __FUNCTION__); } - -bool -ProcessLinux::CanDebug(Target &target, bool plugin_specified_by_name) -{ - if (plugin_specified_by_name) - return true; - - /* If core file is specified then let elf-core plugin handle it */ - if (m_core_file) - return false; - - return ProcessPOSIX::CanDebug(target, plugin_specified_by_name); -} - diff --git a/lldb/source/Plugins/Process/Linux/ProcessLinux.h b/lldb/source/Plugins/Process/Linux/ProcessLinux.h index c651351599a..d7f338fe984 100644 --- a/lldb/source/Plugins/Process/Linux/ProcessLinux.h +++ b/lldb/source/Plugins/Process/Linux/ProcessLinux.h @@ -51,8 +51,7 @@ public: // Constructors and destructors //------------------------------------------------------------------ ProcessLinux(lldb_private::Target& target, - lldb_private::Listener &listener, - lldb_private::FileSpec *core_file); + lldb_private::Listener &listener); virtual bool UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list); @@ -85,9 +84,6 @@ public: return m_linux_signals; } - virtual bool - CanDebug(lldb_private::Target &target, bool plugin_specified_by_name); - //------------------------------------------------------------------ // ProcessPOSIX overrides //------------------------------------------------------------------ @@ -99,8 +95,6 @@ private: /// Linux-specific signal set. LinuxSignals m_linux_signals; - lldb_private::FileSpec *m_core_file; - // Flag to avoid recursion when stopping all threads. bool m_stopping_threads; }; diff --git a/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp b/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp index ef48e7e988f..73eb7b95135 100644 --- a/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp +++ b/lldb/source/Plugins/Process/POSIX/RegisterContext_x86_64.cpp @@ -25,7 +25,6 @@ #include "RegisterContext_i386.h" #include "RegisterContext_x86.h" #include "RegisterContext_x86_64.h" -#include "Plugins/Process/elf-core/ProcessElfCore.h" using namespace lldb_private; using namespace lldb; @@ -498,11 +497,6 @@ RegisterContext_x86_64::RegisterContext_x86_64(Thread &thread, ::memset(&m_fpr, 0, sizeof(RegisterContext_x86_64::FPR)); - // elf-core yet to support ReadFPR() - ProcessSP base = CalculateProcess(); - if (base.get()->GetPluginName() == ProcessElfCore::GetPluginNameStatic()) - return; - // TODO: Use assembly to call cpuid on the inferior and query ebx or ecx m_fpr_type = eXSAVE; // extended floating-point registers, if available if (false == ReadFPR()) diff --git a/lldb/source/Plugins/Process/elf-core/CMakeLists.txt b/lldb/source/Plugins/Process/elf-core/CMakeLists.txt index cf454b9f95e..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/CMakeLists.txt +++ b/lldb/source/Plugins/Process/elf-core/CMakeLists.txt @@ -1,10 +0,0 @@ -include_directories(../Utility) - -set(LLVM_NO_RTTI 1) - -add_lldb_library(lldbPluginProcessElfCore - ProcessElfCore.cpp - ThreadElfCore.cpp - RegisterContextCoreLinux_x86_64.cpp - RegisterContextCoreFreeBSD_x86_64.cpp - ) diff --git a/lldb/source/Plugins/Process/elf-core/Makefile b/lldb/source/Plugins/Process/elf-core/Makefile index 51a0aaea624..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/Makefile +++ b/lldb/source/Plugins/Process/elf-core/Makefile @@ -1,14 +0,0 @@ -##===- source/Plugins/Process/elf-core/Makefile -----------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## - -LLDB_LEVEL := ../../../.. -LIBRARYNAME := lldbPluginProcessElfCore -BUILD_ARCHIVE = 1 - -include $(LLDB_LEVEL)/Makefile diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp index ad715da9561..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.cpp @@ -1,518 +0,0 @@ -//===-- ProcessElfCore.cpp --------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -// C Includes -#include <stdlib.h> - -// Other libraries and framework includes -#include "lldb/Core/PluginManager.h" -#include "lldb/Core/Module.h" -#include "lldb/Core/ModuleSpec.h" -#include "lldb/Core/Section.h" -#include "lldb/Core/State.h" -#include "lldb/Core/DataBufferHeap.h" -#include "lldb/Target/Target.h" -#include "lldb/Target/DynamicLoader.h" - -#include "Plugins/ObjectFile/ELF/ObjectFileELF.h" -#include "Plugins/DynamicLoader/POSIX-DYLD/DynamicLoaderPOSIXDYLD.h" - -// Project includes -#include "ProcessElfCore.h" -#include "ThreadElfCore.h" - -using namespace lldb_private; - -ConstString -ProcessElfCore::GetPluginNameStatic() -{ - static ConstString g_name("elf-core"); - return g_name; -} - -const char * -ProcessElfCore::GetPluginDescriptionStatic() -{ - return "ELF core dump plug-in."; -} - -void -ProcessElfCore::Terminate() -{ - PluginManager::UnregisterPlugin (ProcessElfCore::CreateInstance); -} - - -lldb::ProcessSP -ProcessElfCore::CreateInstance (Target &target, Listener &listener, const FileSpec *crash_file) -{ - lldb::ProcessSP process_sp; - if (crash_file) - process_sp.reset(new ProcessElfCore (target, listener, *crash_file)); - return process_sp; -} - -bool -ProcessElfCore::CanDebug(Target &target, bool plugin_specified_by_name) -{ - // For now we are just making sure the file exists for a given module - if (!m_core_module_sp && m_core_file.Exists()) - { - ModuleSpec core_module_spec(m_core_file, target.GetArchitecture()); - Error error (ModuleList::GetSharedModule (core_module_spec, m_core_module_sp, - NULL, NULL, NULL)); - if (m_core_module_sp) - { - ObjectFile *core_objfile = m_core_module_sp->GetObjectFile(); - if (core_objfile && core_objfile->GetType() == ObjectFile::eTypeCoreFile) - return true; - } - } - return false; -} - -//---------------------------------------------------------------------- -// ProcessElfCore constructor -//---------------------------------------------------------------------- -ProcessElfCore::ProcessElfCore(Target& target, Listener &listener, - const FileSpec &core_file) : - Process (target, listener), - m_core_module_sp (), - m_core_file (core_file), - m_dyld_plugin_name (), - m_thread_data_valid(false), - m_thread_data(), - m_core_aranges () -{ -} - -//---------------------------------------------------------------------- -// Destructor -//---------------------------------------------------------------------- -ProcessElfCore::~ProcessElfCore() -{ - 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(); -} - -//---------------------------------------------------------------------- -// PluginInterface -//---------------------------------------------------------------------- -ConstString -ProcessElfCore::GetPluginName() -{ - return GetPluginNameStatic(); -} - -uint32_t -ProcessElfCore::GetPluginVersion() -{ - return 1; -} - -lldb::addr_t -ProcessElfCore::AddAddressRangeFromLoadSegment(const elf::ELFProgramHeader *header) -{ - lldb::addr_t addr = header->p_vaddr; - FileRange file_range (header->p_offset, header->p_filesz); - VMRangeToFileOffset::Entry range_entry(addr, header->p_memsz, file_range); - - VMRangeToFileOffset::Entry *last_entry = m_core_aranges.Back(); - if (last_entry && - last_entry->GetRangeEnd() == range_entry.GetRangeBase() && - last_entry->data.GetRangeEnd() == range_entry.data.GetRangeBase()) - { - last_entry->SetRangeEnd (range_entry.GetRangeEnd()); - last_entry->data.SetRangeEnd (range_entry.data.GetRangeEnd()); - } - else - { - m_core_aranges.Append(range_entry); - } - - return addr; -} - -//---------------------------------------------------------------------- -// Process Control -//---------------------------------------------------------------------- -Error -ProcessElfCore::DoLoadCore () -{ - Error error; - if (!m_core_module_sp) - { - error.SetErrorString ("invalid core module"); - return error; - } - - ObjectFileELF *core = (ObjectFileELF *)(m_core_module_sp->GetObjectFile()); - if (core == NULL) - { - error.SetErrorString ("invalid core object file"); - return error; - } - - const uint32_t num_segments = core->GetProgramHeaderCount(); - if (num_segments == 0) - { - error.SetErrorString ("core file has no sections"); - return error; - } - - SetCanJIT(false); - - m_thread_data_valid = true; - - bool ranges_are_sorted = true; - lldb::addr_t vm_addr = 0; - /// Walk through segments and Thread and Address Map information. - /// PT_NOTE - Contains Thread and Register information - /// PT_LOAD - Contains a contiguous range of Process Address Space - for(uint32_t i = 1; i <= num_segments; i++) - { - const elf::ELFProgramHeader *header = core->GetProgramHeaderByIndex(i); - assert(header != NULL); - - DataExtractor data = core->GetSegmentDataByIndex(i); - - // Parse thread contexts and auxv structure - if (header->p_type == llvm::ELF::PT_NOTE) - ParseThreadContextsFromNoteSegment(header, data); - - // PT_LOAD segments contains address map - if (header->p_type == llvm::ELF::PT_LOAD) - { - lldb::addr_t last_addr = AddAddressRangeFromLoadSegment(header); - if (vm_addr > last_addr) - ranges_are_sorted = false; - vm_addr = last_addr; - } - } - - if (!ranges_are_sorted) - m_core_aranges.Sort(); - - // Even if the architecture is set in the target, we need to override - // it to match the core file which is always single arch. - ArchSpec arch (m_core_module_sp->GetArchitecture()); - switch (arch.GetCore()) - { - case ArchSpec::eCore_x86_32_i486: - arch.SetTriple ("i386", m_target.GetPlatform().get()); - break; - case ArchSpec::eCore_x86_64_x86_64: - arch.SetTriple ("x86_64-linux-gnu", m_target.GetPlatform().get()); - break; - default: - assert(false && "Unhandled core type"); - } - if (arch.IsValid()) - m_target.SetArchitecture(arch); - - return error; -} - -lldb_private::DynamicLoader * -ProcessElfCore::GetDynamicLoader () -{ - if (m_dyld_ap.get() == NULL) - m_dyld_ap.reset (DynamicLoader::FindPlugin(this, DynamicLoaderPOSIXDYLD::GetPluginNameStatic().GetCString())); - return m_dyld_ap.get(); -} - -bool -ProcessElfCore::UpdateThreadList (ThreadList &old_thread_list, ThreadList &new_thread_list) -{ - const uint32_t num_threads = GetNumThreadContexts (); - if (!m_thread_data_valid) - return false; - - for (lldb::tid_t tid = 0; tid < num_threads; ++tid) - { - const ThreadData &td = m_thread_data[tid]; - lldb::ThreadSP thread_sp(new ThreadElfCore (*this, tid, td.prstatus, - td.prpsinfo, td.fpregset)); - new_thread_list.AddThread (thread_sp); - } - return new_thread_list.GetSize(false) > 0; -} - -void -ProcessElfCore::RefreshStateAfterStop () -{ -} - -Error -ProcessElfCore::DoDestroy () -{ - return Error(); -} - -//------------------------------------------------------------------ -// Process Queries -//------------------------------------------------------------------ - -bool -ProcessElfCore::IsAlive () -{ - return true; -} - -//------------------------------------------------------------------ -// Process Memory -//------------------------------------------------------------------ -size_t -ProcessElfCore::ReadMemory (lldb::addr_t addr, void *buf, size_t size, Error &error) -{ - // Don't allow the caching that lldb_private::Process::ReadMemory does - // since in core files we have it all cached our our core file anyway. - return DoReadMemory (addr, buf, size, error); -} - -size_t -ProcessElfCore::DoReadMemory (lldb::addr_t addr, void *buf, size_t size, Error &error) -{ - ObjectFile *core_objfile = m_core_module_sp->GetObjectFile(); - - if (core_objfile == NULL) - return 0; - - // Get the address range - const VMRangeToFileOffset::Entry *address_range = m_core_aranges.FindEntryThatContains (addr); - if (address_range == NULL || address_range->GetRangeEnd() < addr) - { - error.SetErrorStringWithFormat ("core file does not contain 0x%" PRIx64, addr); - return 0; - } - - // Convert the address into core file offset - const lldb::addr_t offset = addr - address_range->GetRangeBase(); - const lldb::addr_t file_start = address_range->data.GetRangeBase(); - const lldb::addr_t file_end = address_range->data.GetRangeEnd(); - size_t bytes_to_read = size; // Number of bytes to read from the core file - size_t bytes_copied = 0; // Number of bytes actually read from the core file - size_t zero_fill_size = 0; // Padding - lldb::addr_t bytes_left = 0; // Number of bytes available in the core file from the given address - - if (file_end > offset) - bytes_left = file_end - offset; - - if (bytes_to_read > bytes_left) - { - zero_fill_size = bytes_to_read - bytes_left; - bytes_to_read = bytes_left; - } - - // If there is data available on the core file read it - if (bytes_to_read) - bytes_copied = core_objfile->CopyData(offset + file_start, bytes_to_read, buf); - - assert(zero_fill_size <= size); - // Pad remaining bytes - if (zero_fill_size) - memset(((char *)buf) + bytes_copied, 0, zero_fill_size); - - return bytes_copied + zero_fill_size; -} - -void -ProcessElfCore::Clear() -{ - m_thread_list.Clear(); -} - -void -ProcessElfCore::Initialize() -{ - static bool g_initialized = false; - - if (g_initialized == false) - { - g_initialized = true; - PluginManager::RegisterPlugin (GetPluginNameStatic(), GetPluginDescriptionStatic(), CreateInstance); - } -} - -lldb::addr_t -ProcessElfCore::GetImageInfoAddress() -{ - Target *target = &GetTarget(); - ObjectFile *obj_file = target->GetExecutableModule()->GetObjectFile(); - Address addr = obj_file->GetImageInfoAddress(); - - if (addr.IsValid()) - return addr.GetLoadAddress(target); - return LLDB_INVALID_ADDRESS; -} - -/// Core files PT_NOTE segment descriptor types -enum { - NT_PRSTATUS = 1, - NT_FPREGSET, - NT_PRPSINFO, - NT_TASKSTRUCT, - NT_PLATFORM, - NT_AUXV -}; - -/// Note Structure found in ELF core dumps. -/// This is PT_NOTE type program/segments in the core file. -struct ELFNote -{ - elf::elf_word n_namesz; - elf::elf_word n_descsz; - elf::elf_word n_type; - - ELFNote() - { - memset(this, 0, sizeof(ELFNote)); - } - - /// Parse an ELFNote entry from the given DataExtractor starting at position - /// \p offset. - /// - /// @param[in] data - /// The DataExtractor to read from. - /// - /// @param[in,out] offset - /// Pointer to an offset in the data. On return the offset will be - /// advanced by the number of bytes read. - /// - /// @return - /// True if the ELFRel entry was successfully read and false otherwise. - bool - Parse(const DataExtractor &data, lldb::offset_t *offset) - { - // Read all fields. - if (!data.GetU32(offset, &n_namesz, 3)) - return false; - - return true; - } -}; - -/// Align the given value to next boundary specified by the alignment bytes -static uint32_t -AlignToNext(uint32_t value, int alignment_bytes) -{ - return (value + alignment_bytes - 1) & ~(alignment_bytes - 1); -} - -/// Parse Thread context from PT_NOTE segment and store it in the thread list -/// Notes: -/// 1) A PT_NOTE segment is composed of one or more NOTE entries. -/// 2) NOTE Entry contains a standard header followed by variable size data. -/// (see ELFNote structure) -/// 3) A Thread Context in a core file usually described by 3 NOTE entries. -/// a) NT_PRSTATUS - Register context -/// b) NT_PRPSINFO - Process info(pid..) -/// c) NT_FPREGSET - Floating point registers -/// 4) The NOTE entries can be in any order -/// 5) If a core file contains multiple thread contexts then there is two data forms -/// a) Each thread context(2 or more NOTE entries) contained in its own segment (PT_NOTE) -/// b) All thread context is stored in a single segment(PT_NOTE). -/// This case is little tricker since while parsing we have to find where the -/// new thread starts. The current implementation marks begining of -/// new thread when it finds NT_PRSTATUS or NT_PRPSINFO NOTE entry. -void -ProcessElfCore::ParseThreadContextsFromNoteSegment(const elf::ELFProgramHeader *segment_header, - DataExtractor segment_data) -{ - assert(segment_header && segment_header->p_type == llvm::ELF::PT_NOTE); - - lldb::offset_t offset = 0; - ThreadData *thread_data = NULL; - - // Loop through the NOTE entries in the segment - while (offset < segment_header->p_filesz) - { - static unsigned lead_n_type = -1; - ELFNote note = ELFNote(); - note.Parse(segment_data, &offset); - - if ((lead_n_type == (unsigned)-1) && - ((note.n_type == NT_PRSTATUS) || (note.n_type == NT_PRPSINFO))) - lead_n_type = note.n_type; - - // Begining of new thread - if (note.n_type == lead_n_type) - { - if (thread_data) - { - assert(thread_data->prstatus.GetByteSize() > 0); - // Add the new thread to thread list - m_thread_data.push_back(*thread_data); - } - thread_data = new ThreadData(); - } - - size_t note_start, note_size; - note_start = offset + AlignToNext(note.n_namesz, 4); - note_size = AlignToNext(note.n_descsz, 4); - - // Store the NOTE information in the current thread - DataExtractor note_data (segment_data, note_start, note_size); - switch (note.n_type) - { - case NT_PRSTATUS: - thread_data->prstatus = note_data; - break; - case NT_FPREGSET: - thread_data->fpregset = note_data; - break; - case NT_PRPSINFO: - thread_data->prpsinfo = note_data; - break; - case NT_AUXV: - m_auxv = DataExtractor(note_data); - break; - default: - break; - } - - offset += AlignToNext(note.n_namesz, 4) + note_size; - } - // Add last entry in the note section - if (thread_data && thread_data->prstatus.GetByteSize() > 0) - { - m_thread_data.push_back(*thread_data); - } -} - -uint32_t -ProcessElfCore::GetNumThreadContexts () -{ - if (!m_thread_data_valid) - DoLoadCore(); - return m_thread_data.size(); -} - -ArchSpec -ProcessElfCore::GetArchitecture() -{ - ObjectFileELF *core_file = (ObjectFileELF *)(m_core_module_sp->GetObjectFile()); - ArchSpec arch; - core_file->GetArchitecture(arch); - return arch; -} - -const lldb::DataBufferSP -ProcessElfCore::GetAuxvData() -{ - const uint8_t *start = m_auxv.GetDataStart(); - size_t len = m_auxv.GetByteSize(); - lldb::DataBufferSP buffer(new lldb_private::DataBufferHeap(start, len)); - return buffer; -} - diff --git a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h index 3d42a78ba08..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h +++ b/lldb/source/Plugins/Process/elf-core/ProcessElfCore.h @@ -1,180 +0,0 @@ -//===-- ProcessElfCore.h ---------------------------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -// Notes about Linux Process core dumps: -// 1) Linux core dump is stored as ELF file. -// 2) The ELF file's PT_NOTE and PT_LOAD segments describes the program's -// address space and thread contexts. -// 3) PT_NOTE segment contains note entries which describes a thread context. -// 4) PT_LOAD segment describes a valid contigous range of process address -// space. -//===----------------------------------------------------------------------===// - -#ifndef liblldb_ProcessElfCore_h_ -#define liblldb_ProcessElfCore_h_ - -// C++ Includes -#include <list> -#include <vector> - -// Other libraries and framework includes -#include "lldb/Core/ConstString.h" -#include "lldb/Core/Error.h" -#include "lldb/Target/Process.h" - -#include "Plugins/ObjectFile/ELF/ELFHeader.h" - -class ProcessElfCore : public lldb_private::Process -{ -public: - //------------------------------------------------------------------ - // Constructors and Destructors - //------------------------------------------------------------------ - static lldb::ProcessSP - CreateInstance (lldb_private::Target& target, - lldb_private::Listener &listener, - const lldb_private::FileSpec *crash_file_path); - - static void - Initialize(); - - static void - Terminate(); - - static lldb_private::ConstString - GetPluginNameStatic(); - - static const char * - GetPluginDescriptionStatic(); - - //------------------------------------------------------------------ - // Constructors and Destructors - //------------------------------------------------------------------ - ProcessElfCore(lldb_private::Target& target, - lldb_private::Listener &listener, - const lldb_private::FileSpec &core_file); - - virtual - ~ProcessElfCore(); - - //------------------------------------------------------------------ - // Check if a given Process - //------------------------------------------------------------------ - virtual bool - CanDebug (lldb_private::Target &target, - bool plugin_specified_by_name); - - //------------------------------------------------------------------ - // Creating a new process, or attaching to an existing one - //------------------------------------------------------------------ - virtual lldb_private::Error - DoLoadCore (); - - virtual lldb_private::DynamicLoader * - GetDynamicLoader (); - - //------------------------------------------------------------------ - // PluginInterface protocol - //------------------------------------------------------------------ - virtual lldb_private::ConstString - GetPluginName(); - - virtual uint32_t - GetPluginVersion(); - - //------------------------------------------------------------------ - // Process Control - //------------------------------------------------------------------ - virtual lldb_private::Error - DoDestroy (); - - virtual void - RefreshStateAfterStop(); - - //------------------------------------------------------------------ - // Process Queries - //------------------------------------------------------------------ - virtual bool - IsAlive (); - - //------------------------------------------------------------------ - // Process Memory - //------------------------------------------------------------------ - virtual size_t - ReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error); - - virtual size_t - DoReadMemory (lldb::addr_t addr, void *buf, size_t size, lldb_private::Error &error); - - virtual lldb::addr_t - GetImageInfoAddress (); - - lldb_private::ArchSpec - GetArchitecture(); - - // Returns AUXV structure found in the core file - const lldb::DataBufferSP - GetAuxvData(); - -protected: - friend class ThreadElfCore; - - void - Clear ( ); - - virtual bool - UpdateThreadList (lldb_private::ThreadList &old_thread_list, - lldb_private::ThreadList &new_thread_list); - -private: - //------------------------------------------------------------------ - // For ProcessElfCore only - //------------------------------------------------------------------ - typedef lldb_private::Range<lldb::addr_t, lldb::addr_t> FileRange; - typedef lldb_private::RangeDataArray<lldb::addr_t, lldb::addr_t, FileRange, 1> VMRangeToFileOffset; - - // In ELF core file thread context is described mainly by 3 Note entries - // The following structure holds pointers to those note entries. - struct ThreadData - { - lldb_private::DataExtractor prstatus; - lldb_private::DataExtractor fpregset; - lldb_private::DataExtractor prpsinfo; - }; - - lldb::ModuleSP m_core_module_sp; - lldb_private::FileSpec m_core_file; - std::string m_dyld_plugin_name; - DISALLOW_COPY_AND_ASSIGN (ProcessElfCore); - - // True if m_thread_contexts contains valid entries - bool m_thread_data_valid; - - // Contain thread data read from NOTE segments - std::vector<ThreadData> m_thread_data; - - // AUXV structure found from the NOTE segment - lldb_private::DataExtractor m_auxv; - - // Address ranges found in the core - VMRangeToFileOffset m_core_aranges; - - // Parse thread(s) data structures(prstatus, prpsinfo) from given NOTE segment - void - ParseThreadContextsFromNoteSegment (const elf::ELFProgramHeader *segment_header, - lldb_private::DataExtractor segment_data); - - // Returns number of thread contexts stored in the core file - uint32_t - GetNumThreadContexts(); - - // Parse a contiguous address range of the process from LOAD segment - lldb::addr_t - AddAddressRangeFromLoadSegment(const elf::ELFProgramHeader *header); -}; - -#endif // liblldb_ProcessElffCore_h_ diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.cpp index 6210175f9a7..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.cpp @@ -1,68 +0,0 @@ -//===-- RegisterContextCoreFreeBSD_x86_64.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/Core/DataExtractor.h" -#include "lldb/Core/RegisterValue.h" -#include "lldb/Target/Thread.h" -#include "RegisterContextCoreFreeBSD_x86_64.h" - -RegisterContextCoreFreeBSD_x86_64::RegisterContextCoreFreeBSD_x86_64(Thread &thread, - const DataExtractor &gpregset, const DataExtractor &fpregset) - : RegisterContextFreeBSD_x86_64(thread, 0) -{ - size_t size, len; - - size = GetGPRSize(); - m_gpregset = new uint8_t[size]; - len = gpregset.ExtractBytes(0, size, lldb::eByteOrderLittle, m_gpregset); - assert(len == size); -} - -RegisterContextCoreFreeBSD_x86_64::~RegisterContextCoreFreeBSD_x86_64() -{ - delete [] m_gpregset; -} - -bool -RegisterContextCoreFreeBSD_x86_64::ReadRegister(const RegisterInfo *reg_info, RegisterValue &value) -{ - value = *(uint64_t *)(m_gpregset + reg_info->byte_offset); - return true; -} - -bool -RegisterContextCoreFreeBSD_x86_64::ReadAllRegisterValues(lldb::DataBufferSP &data_sp) -{ - return false; -} - -bool -RegisterContextCoreFreeBSD_x86_64::WriteRegister(const RegisterInfo *reg_info, const RegisterValue &value) -{ - return false; -} - -bool -RegisterContextCoreFreeBSD_x86_64::WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) -{ - return false; -} - -bool -RegisterContextCoreFreeBSD_x86_64::UpdateAfterBreakpoint() -{ - return false; -} - -bool -RegisterContextCoreFreeBSD_x86_64::HardwareSingleStep(bool enable) -{ - return false; -} - diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.h b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.h index acd594a6e66..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.h +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreFreeBSD_x86_64.h @@ -1,47 +0,0 @@ -//===-- RegisterContextCoreFreeBSD_x86_64.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_RegisterContextCoreFreeBSD_x86_64_H_ -#define liblldb_RegisterContextCoreFreeBSD_x86_64_H_ - -#include "Plugins/Process/POSIX/RegisterContextFreeBSD_x86_64.h" - -using namespace lldb_private; - -class RegisterContextCoreFreeBSD_x86_64: public RegisterContextFreeBSD_x86_64 -{ -public: - RegisterContextCoreFreeBSD_x86_64 (Thread &thread, const DataExtractor &gpregset, - const DataExtractor &fpregset); - - ~RegisterContextCoreFreeBSD_x86_64(); - - virtual bool - ReadRegister(const RegisterInfo *reg_info, RegisterValue &value); - - bool - ReadAllRegisterValues(lldb::DataBufferSP &data_sp); - - virtual bool - WriteRegister(const RegisterInfo *reg_info, const RegisterValue &value); - - bool - WriteAllRegisterValues(const lldb::DataBufferSP &data_sp); - - bool - HardwareSingleStep(bool enable); - - bool - UpdateAfterBreakpoint(); - -private: - uint8_t *m_gpregset; -}; - -#endif // #ifndef liblldb_RegisterContextCoreFreeBSD_x86_64_H_ diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.cpp b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.cpp index 2c161d64a11..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.cpp +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.cpp @@ -1,69 +0,0 @@ -//===-- RegisterContextCoreLinux_x86_64.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/Core/DataExtractor.h" -#include "lldb/Core/RegisterValue.h" -#include "lldb/Target/Thread.h" -#include "RegisterContextCoreLinux_x86_64.h" - -RegisterContextCoreLinux_x86_64::RegisterContextCoreLinux_x86_64(Thread &thread, - const DataExtractor &gpregset, - const DataExtractor &fpregset) - : RegisterContextLinux_x86_64(thread, 0) -{ - size_t size, len; - - size = GetGPRSize(); - m_gpregset = new uint8_t[size]; - len = gpregset.ExtractBytes(0, size, lldb::eByteOrderLittle, m_gpregset); - assert(len == size); -} - -RegisterContextCoreLinux_x86_64::~RegisterContextCoreLinux_x86_64() -{ - delete [] m_gpregset; -} - -bool -RegisterContextCoreLinux_x86_64::ReadRegister(const RegisterInfo *reg_info, RegisterValue &value) -{ - value = *(uint64_t *)(m_gpregset + reg_info->byte_offset); - return true; -} - -bool -RegisterContextCoreLinux_x86_64::ReadAllRegisterValues(lldb::DataBufferSP &data_sp) -{ - return false; -} - -bool -RegisterContextCoreLinux_x86_64::WriteRegister(const RegisterInfo *reg_info, const RegisterValue &value) -{ - return false; -} - -bool -RegisterContextCoreLinux_x86_64::WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) -{ - return false; -} - -bool -RegisterContextCoreLinux_x86_64::UpdateAfterBreakpoint() -{ - return false; -} - -bool -RegisterContextCoreLinux_x86_64::HardwareSingleStep(bool enable) -{ - return false; -} - diff --git a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.h b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.h index 9cf545afd56..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.h +++ b/lldb/source/Plugins/Process/elf-core/RegisterContextCoreLinux_x86_64.h @@ -1,54 +0,0 @@ -//===-- RegisterContextCoreLinux_x86_64.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_RegisterContextCoreLinux_x86_64_H_ -#define liblldb_RegisterContextCoreLinux_x86_64_H_ - -#include "Plugins/Process/POSIX/RegisterContextLinux_x86_64.h" - -using namespace lldb_private; - -class RegisterContextCoreLinux_x86_64: public RegisterContextLinux_x86_64 -{ -public: - RegisterContextCoreLinux_x86_64 (Thread &thread, const DataExtractor &gpregset, - const DataExtractor &fpregset); - - ~RegisterContextCoreLinux_x86_64(); - - virtual bool - ReadRegister(const RegisterInfo *reg_info, RegisterValue &value); - - bool - ReadAllRegisterValues(lldb::DataBufferSP &data_sp); - - virtual bool - WriteRegister(const RegisterInfo *reg_info, const RegisterValue &value); - - bool - WriteAllRegisterValues(const lldb::DataBufferSP &data_sp); - - bool - HardwareSingleStep(bool enable); - - bool - UpdateAfterBreakpoint(); - -protected: - bool - ReadFPR() - { - assert(0); - } - -private: - uint8_t *m_gpregset; -}; - -#endif // #ifndef liblldb_RegisterContextCoreLinux_x86_64_H_ diff --git a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp index de57d25316d..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp +++ b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.cpp @@ -1,170 +0,0 @@ -//===-- ThreadElfCore.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/Core/DataExtractor.h" -#include "lldb/Target/RegisterContext.h" -#include "lldb/Target/StopInfo.h" -#include "lldb/Target/Target.h" -#include "lldb/Target/Unwind.h" -#include "ProcessPOSIXLog.h" - -#include "ThreadElfCore.h" -#include "ProcessElfCore.h" -#include "RegisterContextCoreLinux_x86_64.h" - -using namespace lldb; -using namespace lldb_private; - -//---------------------------------------------------------------------- -// Construct a Thread object with given PRSTATUS, PRPSINFO and FPREGSET -//---------------------------------------------------------------------- -ThreadElfCore::ThreadElfCore (Process &process, tid_t tid, DataExtractor prstatus, - DataExtractor prpsinfo, DataExtractor fpregset) : - Thread(process, tid), - m_thread_reg_ctx_sp () -{ - ProcessElfCore *pr = static_cast<ProcessElfCore *>(GetProcess().get()); - ArchSpec arch = pr->GetArchitecture(); - - /* Parse the datastructures from the file */ - m_prstatus.Parse(prstatus, arch); - m_prpsinfo.Parse(prpsinfo, arch); - - m_prstatus_data = prstatus; - m_fpregset_data = fpregset; - - m_thread_name = std::string(m_prpsinfo.pr_fname); -} - -ThreadElfCore::~ThreadElfCore () -{ - DestroyThread(); -} - -void -ThreadElfCore::RefreshStateAfterStop() -{ - GetRegisterContext()->InvalidateIfNeeded (false); -} - -void -ThreadElfCore::ClearStackFrames () -{ - Unwind *unwinder = GetUnwinder (); - if (unwinder) - unwinder->Clear(); - Thread::ClearStackFrames(); -} - -RegisterContextSP -ThreadElfCore::GetRegisterContext () -{ - if (m_reg_context_sp.get() == NULL) { - m_reg_context_sp = CreateRegisterContextForFrame (NULL); - } - return m_reg_context_sp; -} - -RegisterContextSP -ThreadElfCore::CreateRegisterContextForFrame (StackFrame *frame) -{ - RegisterContextSP reg_ctx_sp; - uint32_t concrete_frame_idx = 0; - Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_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; - - ProcessElfCore *process = static_cast<ProcessElfCore *>(GetProcess().get()); - ArchSpec arch = process->GetArchitecture(); - size_t header_size = ELFPrStatus::GetSize(arch); - size_t len = m_prstatus_data.GetByteSize() - header_size; - DataExtractor gpregset_data = DataExtractor(m_prstatus_data, header_size, len); - switch (arch.GetMachine()) - { - case llvm::Triple::x86_64: - m_thread_reg_ctx_sp.reset(new RegisterContextCoreLinux_x86_64 (*this, gpregset_data, m_fpregset_data)); - break; - default: - if (log) - log->Printf ("elf-core::%s:: Architecture(%d) not supported", - __FUNCTION__, arch.GetMachine()); - } - reg_ctx_sp = m_thread_reg_ctx_sp; - } - else if (m_unwinder_ap.get()) - { - reg_ctx_sp = m_unwinder_ap->CreateRegisterContextForFrame (frame); - } - return reg_ctx_sp; -} - -bool -ThreadElfCore::CalculateStopInfo () -{ - ProcessSP process_sp (GetProcess()); - if (process_sp) - { - SetStopInfo(StopInfo::CreateStopReasonWithSignal (*this, m_prstatus.pr_cursig)); - return true; - } - return false; -} - -//---------------------------------------------------------------- -// Parse PRSTATUS from NOTE entry -//---------------------------------------------------------------- -ELFPrStatus::ELFPrStatus() -{ - memset(this, 0, sizeof(ELFPrStatus)); -} - -bool -ELFPrStatus::Parse(DataExtractor &data, ArchSpec &arch) -{ - ByteOrder byteorder = data.GetByteOrder(); - size_t len; - switch(arch.GetCore()) - { - case ArchSpec::eCore_x86_64_x86_64: - len = data.ExtractBytes(0, ELFPRSTATUS64_SIZE, byteorder, this); - return len == ELFPRSTATUS64_SIZE; - default: - return false; - } -} - -//---------------------------------------------------------------- -// Parse PRPSINFO from NOTE entry -//---------------------------------------------------------------- -ELFPrPsInfo::ELFPrPsInfo() -{ - memset(this, 0, sizeof(ELFPrPsInfo)); -} - -bool -ELFPrPsInfo::Parse(DataExtractor &data, ArchSpec &arch) -{ - ByteOrder byteorder = data.GetByteOrder(); - size_t len; - switch(arch.GetCore()) - { - case ArchSpec::eCore_x86_64_x86_64: - len = data.ExtractBytes(0, ELFPRPSINFO64_SIZE, byteorder, this); - return len == ELFPRPSINFO64_SIZE; - default: - return false; - } -} - diff --git a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.h b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.h index 83f8fde720e..e69de29bb2d 100644 --- a/lldb/source/Plugins/Process/elf-core/ThreadElfCore.h +++ b/lldb/source/Plugins/Process/elf-core/ThreadElfCore.h @@ -1,171 +0,0 @@ -//===-- ThreadElfCore.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_ThreadElfCore_h_ -#define liblldb_ThreadElfCore_h_ - -#include <string> - -#include "lldb/Target/Thread.h" -#include "lldb/Core/DataExtractor.h" - -struct compat_timeval -{ - int64_t tv_sec; - int32_t tv_usec; -}; - -// PRSTATUS structure's size differs based on architecture. -// Currently parsing done only for x86-64 architecture by -// simply reading data from the buffer. -// The following macros are used to specify the size. -// Calculating size using sizeof() wont work because of padding. -#define ELFPRSTATUS64_SIZE (112) -#define ELFPRPSINFO64_SIZE (132) - -struct ELFPrStatus -{ - int32_t si_signo; - int32_t si_code; - int32_t si_errno; - - int16_t pr_cursig; - - uint64_t pr_sigpend; - uint64_t pr_sighold; - - uint32_t pr_pid; - uint32_t pr_ppid; - uint32_t pr_pgrp; - uint32_t pr_sid; - - compat_timeval pr_utime; - compat_timeval pr_stime; - compat_timeval pr_cutime; - compat_timeval pr_cstime; - - ELFPrStatus(); - - bool - Parse(lldb_private::DataExtractor &data, lldb_private::ArchSpec &arch); - - static size_t - GetSize(lldb_private::ArchSpec &arch) - { - switch(arch.GetCore()) - { - case lldb_private::ArchSpec::eCore_x86_64_x86_64: - return ELFPRSTATUS64_SIZE; - default: - return 0; - } - } -}; - -struct ELFPrPsInfo -{ - char pr_state; - char pr_sname; - char pr_zomb; - char pr_nice; - uint64_t pr_flag; - uint32_t pr_uid; - uint32_t pr_gid; - int32_t pr_pid; - int32_t pr_ppid; - int32_t pr_pgrp; - int32_t pr_sid; - char pr_fname[16]; - char pr_psargs[80]; - - ELFPrPsInfo(); - - bool - Parse(lldb_private::DataExtractor &data, lldb_private::ArchSpec &arch); - - static size_t - GetSize(lldb_private::ArchSpec &arch) - { - switch(arch.GetCore()) - { - case lldb_private::ArchSpec::eCore_x86_64_x86_64: - return ELFPRPSINFO64_SIZE; - default: - return 0; - } - } - -}; - -class ThreadElfCore : public lldb_private::Thread -{ -public: - ThreadElfCore (lldb_private::Process &process, lldb::tid_t tid, - lldb_private::DataExtractor prstatus, - lldb_private::DataExtractor prpsinfo, - lldb_private::DataExtractor fpregset); - - virtual - ~ThreadElfCore (); - - virtual void - RefreshStateAfterStop(); - - virtual lldb::RegisterContextSP - GetRegisterContext (); - - virtual lldb::RegisterContextSP - CreateRegisterContextForFrame (lldb_private::StackFrame *frame); - - virtual void - ClearStackFrames (); - - static bool - ThreadIDIsValid (lldb::tid_t thread) - { - return thread != 0; - } - - virtual const char * - GetName () - { - if (m_thread_name.empty()) - return NULL; - return m_thread_name.c_str(); - } - - void - SetName (const char *name) - { - if (name && name[0]) - m_thread_name.assign (name); - else - m_thread_name.clear(); - } - -protected: - - friend class ProcessElfCore; - - //------------------------------------------------------------------ - // Member variables. - //------------------------------------------------------------------ - std::string m_thread_name; - lldb::RegisterContextSP m_thread_reg_ctx_sp; - - ELFPrStatus m_prstatus; - ELFPrPsInfo m_prpsinfo; - lldb_private::DataExtractor m_prstatus_data; - lldb_private::DataExtractor m_fpregset_data; - - virtual bool CalculateStopInfo(); - -}; - -#endif // liblldb_ThreadElfCore_h_ diff --git a/lldb/source/lldb.cpp b/lldb/source/lldb.cpp index 681e46d6065..f2dfdee96a0 100644 --- a/lldb/source/lldb.cpp +++ b/lldb/source/lldb.cpp @@ -61,7 +61,6 @@ #endif #include "Plugins/Process/mach-core/ProcessMachCore.h" -#include "Plugins/Process/elf-core/ProcessElfCore.h" #if defined (__linux__) #include "Plugins/Process/Linux/ProcessLinux.h" @@ -146,7 +145,6 @@ lldb_private::Initialize () //---------------------------------------------------------------------- // Platform agnostic plugins //---------------------------------------------------------------------- - ProcessElfCore::Initialize(); PlatformRemoteGDBServer::Initialize (); ProcessGDBRemote::Initialize(); DynamicLoaderStatic::Initialize(); @@ -222,8 +220,7 @@ lldb_private::Terminate () #if defined (__FreeBSD__) ProcessFreeBSD::Terminate(); #endif - - ProcessElfCore::Terminate(); + ProcessGDBRemote::Terminate(); DynamicLoaderStatic::Terminate(); |