18#include <llvm/Support/ConvertUTF.h>
20#if defined(__x86_64__) || defined(_M_AMD64)
22#elif defined(__i386__) || defined(_M_IX86)
24#elif defined(__aarch64__) || defined(_M_ARM64)
26#elif defined(__arm__) || defined(_M_ARM)
35 :
Thread(process, thread.GetNativeThread().GetThreadId()),
41 ::SuspendThread(
m_host_thread.GetNativeThread().GetSystemHandle());
59 uint32_t concrete_frame_idx = 0;
65 if (concrete_frame_idx == 0) {
67 ArchSpec arch = HostInfo::GetArchitecture();
69 case llvm::Triple::arm:
70 case llvm::Triple::thumb:
71#if defined(__arm__) || defined(_M_ARM)
73 new RegisterContextWindows_arm(*
this, concrete_frame_idx));
75 LLDB_LOG(log,
"debugging foreign targets is currently unsupported");
79 case llvm::Triple::aarch64:
80#if defined(__aarch64__) || defined(_M_ARM64)
82 new RegisterContextWindows_arm64(*
this, concrete_frame_idx));
84 LLDB_LOG(log,
"debugging foreign targets is currently unsupported");
88 case llvm::Triple::x86:
89#if defined(__i386__) || defined(_M_IX86)
91 new RegisterContextWindows_x86(*
this, concrete_frame_idx));
93 LLDB_LOG(log,
"debugging foreign targets is currently unsupported");
97 case llvm::Triple::x86_64:
98#if defined(__x86_64__) || defined(_M_AMD64)
100 new RegisterContextWindows_x64(*
this, concrete_frame_idx));
102 LLDB_LOG(log,
"debugging foreign targets is currently unsupported");
126 if (resume_state == current_state)
132 uint32_t flags_index =
135 uint64_t flags_value =
138 const ArchSpec &arch = process->GetTarget().GetArchitecture();
140 case llvm::Triple::x86:
141 case llvm::Triple::x86_64:
142 flags_value |= 0x100;
144 case llvm::Triple::aarch64:
145 case llvm::Triple::arm:
146 case llvm::Triple::thumb:
147 flags_value |= 0x200000;
150 LLDB_LOG(log,
"single stepping unsupported on this architecture");
157 DWORD previous_suspend_count = 0;
164 previous_suspend_count = ::ResumeThread(thread_handle);
166 if (previous_suspend_count ==
static_cast<DWORD
>(-1))
169 }
while (previous_suspend_count > 1);
178 s_get_thread_description{L
"Kernel32.dll",
"GetThreadDescription"};
179 if (!s_get_thread_description)
181 auto GetThreadDescription = *s_get_thread_description;
184 if (SUCCEEDED(GetThreadDescription(
185 m_host_thread.GetNativeThread().GetSystemHandle(), &pszThreadName))) {
186 LLDB_LOGF(log,
"GetThreadDescription: %ls", pszThreadName);
188 llvm::convertUTF16ToUTF8String(
189 llvm::ArrayRef(
reinterpret_cast<char *
>(pszThreadName),
190 wcslen(pszThreadName) *
sizeof(
wchar_t)),
192 ::LocalFree(pszThreadName);
#define LLDB_LOG(log,...)
The LLDB_LOG* macros defined below are the way to emit log messages.
#define LLDB_LOGF(log,...)
An architecture specification class.
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
virtual uint32_t GetConcreteFrameIndex()
Query this frame to find what frame it is in this Thread's StackFrameList, not counting inlined frame...
void RefreshStateAfterStop() override
bool CalculateStopInfo() override
Ask the thread subclass to set its stop info.
TargetThreadWindows(ProcessWindows &process, const HostThread &thread)
const char * GetName() override
virtual ~TargetThreadWindows()
lldb::RegisterContextSP GetRegisterContext() override
lldb::RegisterContextSP CreateRegisterContextForFrame(StackFrame *frame) override
void WillResume(lldb::StateType resume_state) override
lldb::RegisterContextSP m_thread_reg_ctx_sp
void SetStopInfo(const lldb::StopInfoSP &stop_info_sp)
virtual void DestroyThread()
virtual Unwind & GetUnwinder()
Thread(Process &process, lldb::tid_t tid, bool use_invalid_index_id=false)
Constructor.
lldb::StateType GetTemporaryResumeState() const
lldb::ProcessSP GetProcess() const
lldb::StopInfoSP m_stop_info_sp
The private stop reason for this thread.
lldb::StateType GetState() const
lldb::RegisterContextSP m_reg_context_sp
The register context for this thread's current register state.
lldb::RegisterContextSP CreateRegisterContextForFrame(StackFrame *frame)
#define LLDB_REGNUM_GENERIC_FLAGS
A class that represents a running process on the host machine.
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
StateType
Process and Thread States.
@ eStateRunning
Process or thread is running and can't be examined.
@ eStateStepping
Process or thread is in the process of stepping and can not be examined.
@ eErrorTypeWin32
Standard Win32 error codes.
std::shared_ptr< lldb_private::Process > ProcessSP
std::shared_ptr< lldb_private::RegisterContext > RegisterContextSP
@ eRegisterKindGeneric
insn ptr reg, stack ptr reg, etc not specific to any particular target