Summary: Currently, the local-only path fails about 50% of the tests, which means that: a) nobody is using it; and b) the remote debugging path is much more stable. This commit removes the local-only linux debugging code (ProcessLinux) and makes remote-loopback the only way to debug local applications (the same architecture as OSX). The ProcessPOSIX code is moved to the FreeBSD directory, which is now the only user of this class. Hopefully, FreeBSD will soon move to the new architecture as well and then this code can be removed completely. Test Plan: Test suite passes via remote stub. Reviewers: emaste, vharron, ovyalov, clayborg Subscribers: tberghammer, emaste, lldb-commits Differential Revision: http://reviews.llvm.org/D10661 llvm-svn: 240543
133 lines
3.6 KiB
C++
133 lines
3.6 KiB
C++
//===-- POSIXThread.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_POSIXThread_H_
|
|
#define liblldb_POSIXThread_H_
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
// Other libraries and framework includes
|
|
#include "lldb/Target/Thread.h"
|
|
#include "Plugins/Process/Utility/RegisterContextPOSIX.h"
|
|
|
|
class ProcessMessage;
|
|
class ProcessMonitor;
|
|
class POSIXBreakpointProtocol;
|
|
|
|
//------------------------------------------------------------------------------
|
|
// @class POSIXThread
|
|
// @brief Abstraction of a POSIX thread.
|
|
class POSIXThread
|
|
: public lldb_private::Thread
|
|
{
|
|
public:
|
|
POSIXThread(lldb_private::Process &process, lldb::tid_t tid);
|
|
|
|
virtual ~POSIXThread();
|
|
|
|
void
|
|
RefreshStateAfterStop() override;
|
|
|
|
// This notifies the thread when a private stop occurs.
|
|
void
|
|
DidStop () override;
|
|
|
|
const char *
|
|
GetInfo() override;
|
|
|
|
void
|
|
SetName (const char *name) override;
|
|
|
|
const char *
|
|
GetName () override;
|
|
|
|
lldb::RegisterContextSP
|
|
GetRegisterContext() override;
|
|
|
|
lldb::RegisterContextSP
|
|
CreateRegisterContextForFrame (lldb_private::StackFrame *frame) override;
|
|
|
|
lldb::addr_t
|
|
GetThreadPointer () override;
|
|
|
|
//--------------------------------------------------------------------------
|
|
// These functions provide a mapping from the register offset
|
|
// back to the register index or name for use in debugging or log
|
|
// output.
|
|
|
|
unsigned
|
|
GetRegisterIndexFromOffset(unsigned offset);
|
|
|
|
const char *
|
|
GetRegisterName(unsigned reg);
|
|
|
|
const char *
|
|
GetRegisterNameFromOffset(unsigned offset);
|
|
|
|
//--------------------------------------------------------------------------
|
|
// These methods form a specialized interface to POSIX threads.
|
|
//
|
|
bool Resume();
|
|
|
|
void Notify(const ProcessMessage &message);
|
|
|
|
//--------------------------------------------------------------------------
|
|
// These methods provide an interface to watchpoints
|
|
//
|
|
bool EnableHardwareWatchpoint(lldb_private::Watchpoint *wp);
|
|
|
|
bool DisableHardwareWatchpoint(lldb_private::Watchpoint *wp);
|
|
|
|
uint32_t NumSupportedHardwareWatchpoints();
|
|
|
|
uint32_t FindVacantWatchpointIndex();
|
|
|
|
protected:
|
|
POSIXBreakpointProtocol *
|
|
GetPOSIXBreakpointProtocol ()
|
|
{
|
|
if (!m_reg_context_sp)
|
|
m_reg_context_sp = GetRegisterContext();
|
|
return m_posix_thread;
|
|
}
|
|
|
|
std::unique_ptr<lldb_private::StackFrame> m_frame_ap;
|
|
|
|
lldb::BreakpointSiteSP m_breakpoint;
|
|
|
|
bool m_thread_name_valid;
|
|
std::string m_thread_name;
|
|
POSIXBreakpointProtocol *m_posix_thread;
|
|
|
|
ProcessMonitor &
|
|
GetMonitor();
|
|
|
|
bool
|
|
CalculateStopInfo() override;
|
|
|
|
void BreakNotify(const ProcessMessage &message);
|
|
void WatchNotify(const ProcessMessage &message);
|
|
virtual void TraceNotify(const ProcessMessage &message);
|
|
void LimboNotify(const ProcessMessage &message);
|
|
void SignalNotify(const ProcessMessage &message);
|
|
void SignalDeliveredNotify(const ProcessMessage &message);
|
|
void CrashNotify(const ProcessMessage &message);
|
|
void ThreadNotify(const ProcessMessage &message);
|
|
void ExitNotify(const ProcessMessage &message);
|
|
void ExecNotify(const ProcessMessage &message);
|
|
|
|
lldb_private::Unwind *
|
|
GetUnwinder() override;
|
|
};
|
|
|
|
#endif // #ifndef liblldb_POSIXThread_H_
|