1 //===-- FreeBSDThread.cpp ---------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // C Includes
11 // C++ Includes
12 // Other libraries and framework includes
13 #include "lldb/Core/State.h"
14 #include "lldb/Target/UnixSignals.h"
15 
16 // Project includes
17 #include "FreeBSDThread.h"
18 #include "ProcessFreeBSD.h"
19 #include "ProcessPOSIXLog.h"
20 
21 using namespace lldb;
22 using namespace lldb_private;
23 
24 //------------------------------------------------------------------------------
25 // Constructors and destructors.
26 
27 FreeBSDThread::FreeBSDThread(Process &process, lldb::tid_t tid)
28     : POSIXThread(process, tid)
29 {
30 }
31 
32 FreeBSDThread::~FreeBSDThread()
33 {
34 }
35 
36 //------------------------------------------------------------------------------
37 // ProcessInterface protocol.
38 
39 void
40 FreeBSDThread::WillResume(lldb::StateType resume_state)
41 {
42     Log *log (ProcessPOSIXLog::GetLogIfAllCategoriesSet (POSIX_LOG_THREAD));
43     if (log)
44         log->Printf("tid %lu resume_state = %s", GetID(),
45                     lldb_private::StateAsCString(resume_state));
46     ProcessSP process_sp(GetProcess());
47     ProcessFreeBSD *process = static_cast<ProcessFreeBSD *>(process_sp.get());
48     int signo = GetResumeSignal();
49     bool signo_valid = process->GetUnixSignals()->SignalIsValid(signo);
50 
51     switch (resume_state)
52     {
53     case eStateSuspended:
54     case eStateStopped:
55         process->m_suspend_tids.push_back(GetID());
56         break;
57     case eStateRunning:
58         process->m_run_tids.push_back(GetID());
59         if (signo_valid)
60             process->m_resume_signo = signo;
61         break;
62     case eStateStepping:
63         process->m_step_tids.push_back(GetID());
64         if (signo_valid)
65             process->m_resume_signo = signo;
66         break;
67     default:
68         break;
69     }
70 }
71