forked from OSchip/llvm-project
70 lines
1.9 KiB
C++
70 lines
1.9 KiB
C++
|
//===-- FreeBSDThread.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
|
||
|
// C++ Includes
|
||
|
// Other libraries and framework includes
|
||
|
#include "lldb/Core/State.h"
|
||
|
|
||
|
// Project includes
|
||
|
#include "FreeBSDThread.h"
|
||
|
#include "ProcessFreeBSD.h"
|
||
|
#include "ProcessPOSIXLog.h"
|
||
|
|
||
|
using namespace lldb;
|
||
|
using namespace lldb_private;
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// Constructors and destructors.
|
||
|
|
||
|
FreeBSDThread::FreeBSDThread(Process &process, lldb::tid_t tid)
|
||
|
: POSIXThread(process, tid)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
FreeBSDThread::~FreeBSDThread()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//------------------------------------------------------------------------------
|
||
|
// ProcessInterface protocol.
|
||
|
|
||
|
void
|
||
|
FreeBSDThread::WillResume(lldb::StateType resume_state)
|
||
|
{
|
||
|
Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD));
|
||
|
if (log)
|
||
|
log->Printf("tid %lu resume_state = %s", GetID(),
|
||
|
lldb_private::StateAsCString(resume_state));
|
||
|
ProcessSP process_sp(GetProcess());
|
||
|
ProcessFreeBSD *process = static_cast<ProcessFreeBSD *>(process_sp.get());
|
||
|
int signo = GetResumeSignal();
|
||
|
bool signo_valid = process->GetUnixSignals().SignalIsValid(signo);
|
||
|
|
||
|
switch (resume_state)
|
||
|
{
|
||
|
case eStateSuspended:
|
||
|
case eStateStopped:
|
||
|
process->m_suspend_tids.push_back(GetID());
|
||
|
break;
|
||
|
case eStateRunning:
|
||
|
process->m_run_tids.push_back(GetID());
|
||
|
if (signo_valid)
|
||
|
process->m_resume_signo = signo;
|
||
|
break;
|
||
|
case eStateStepping:
|
||
|
process->m_step_tids.push_back(GetID());
|
||
|
if (signo_valid)
|
||
|
process->m_resume_signo = signo;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|