LLDB  mainline
ThreadElfCore.cpp
Go to the documentation of this file.
1 //===-- ThreadElfCore.cpp -------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
10 #include "lldb/Target/StopInfo.h"
11 #include "lldb/Target/Target.h"
12 #include "lldb/Target/Unwind.h"
14 #include "lldb/Utility/Log.h"
15 
30 #include "ProcessElfCore.h"
38 #include "ThreadElfCore.h"
39 
40 #include <memory>
41 
42 using namespace lldb;
43 using namespace lldb_private;
44 
45 // Construct a Thread object with given data
47  : Thread(process, td.tid), m_thread_name(td.name), m_thread_reg_ctx_sp(),
48  m_signo(td.signo), m_gpregset_data(td.gpregset), m_notes(td.notes) {}
49 
51 
53  GetRegisterContext()->InvalidateIfNeeded(false);
54 }
55 
56 RegisterContextSP ThreadElfCore::GetRegisterContext() {
57  if (!m_reg_context_sp) {
59  }
60  return m_reg_context_sp;
61 }
62 
63 RegisterContextSP
65  RegisterContextSP reg_ctx_sp;
66  uint32_t concrete_frame_idx = 0;
68 
69  if (frame)
70  concrete_frame_idx = frame->GetConcreteFrameIndex();
71 
72  if (concrete_frame_idx == 0) {
74  return m_thread_reg_ctx_sp;
75 
76  ProcessElfCore *process = static_cast<ProcessElfCore *>(GetProcess().get());
77  ArchSpec arch = process->GetArchitecture();
78  RegisterInfoInterface *reg_interface = nullptr;
79 
80  switch (arch.GetTriple().getOS()) {
81  case llvm::Triple::FreeBSD: {
82  switch (arch.GetMachine()) {
83  case llvm::Triple::aarch64:
84  case llvm::Triple::arm:
85  break;
86  case llvm::Triple::ppc:
87  reg_interface = new RegisterContextFreeBSD_powerpc32(arch);
88  break;
89  case llvm::Triple::ppc64:
90  reg_interface = new RegisterContextFreeBSD_powerpc64(arch);
91  break;
92  case llvm::Triple::mips64:
93  reg_interface = new RegisterContextFreeBSD_mips64(arch);
94  break;
95  case llvm::Triple::x86:
96  reg_interface = new RegisterContextFreeBSD_i386(arch);
97  break;
98  case llvm::Triple::x86_64:
99  reg_interface = new RegisterContextFreeBSD_x86_64(arch);
100  break;
101  default:
102  break;
103  }
104  break;
105  }
106 
107  case llvm::Triple::NetBSD: {
108  switch (arch.GetMachine()) {
109  case llvm::Triple::aarch64:
110  break;
111  case llvm::Triple::x86:
112  reg_interface = new RegisterContextNetBSD_i386(arch);
113  break;
114  case llvm::Triple::x86_64:
115  reg_interface = new RegisterContextNetBSD_x86_64(arch);
116  break;
117  default:
118  break;
119  }
120  break;
121  }
122 
123  case llvm::Triple::Linux: {
124  switch (arch.GetMachine()) {
125  case llvm::Triple::aarch64:
126  break;
127  case llvm::Triple::ppc64le:
128  reg_interface = new RegisterInfoPOSIX_ppc64le(arch);
129  break;
130  case llvm::Triple::systemz:
131  reg_interface = new RegisterContextLinux_s390x(arch);
132  break;
133  case llvm::Triple::x86:
134  reg_interface = new RegisterContextLinux_i386(arch);
135  break;
136  case llvm::Triple::x86_64:
137  reg_interface = new RegisterContextLinux_x86_64(arch);
138  break;
139  default:
140  break;
141  }
142  break;
143  }
144 
145  case llvm::Triple::OpenBSD: {
146  switch (arch.GetMachine()) {
147  case llvm::Triple::aarch64:
148  break;
149  case llvm::Triple::x86:
150  reg_interface = new RegisterContextOpenBSD_i386(arch);
151  break;
152  case llvm::Triple::x86_64:
153  reg_interface = new RegisterContextOpenBSD_x86_64(arch);
154  break;
155  default:
156  break;
157  }
158  break;
159  }
160 
161  default:
162  break;
163  }
164 
165  if (!reg_interface && arch.GetMachine() != llvm::Triple::aarch64 &&
166  arch.GetMachine() != llvm::Triple::arm) {
167  LLDB_LOGF(log, "elf-core::%s:: Architecture(%d) or OS(%d) not supported",
168  __FUNCTION__, arch.GetMachine(), arch.GetTriple().getOS());
169  assert(false && "Architecture or OS not supported");
170  }
171 
172  switch (arch.GetMachine()) {
173  case llvm::Triple::aarch64:
175  *this, arch, m_gpregset_data, m_notes);
176  break;
177  case llvm::Triple::arm:
178  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_arm>(
179  *this, std::make_unique<RegisterInfoPOSIX_arm>(arch), m_gpregset_data,
180  m_notes);
181  break;
182  case llvm::Triple::mipsel:
183  case llvm::Triple::mips:
184  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_mips64>(
185  *this, reg_interface, m_gpregset_data, m_notes);
186  break;
187  case llvm::Triple::mips64:
188  case llvm::Triple::mips64el:
189  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_mips64>(
190  *this, reg_interface, m_gpregset_data, m_notes);
191  break;
192  case llvm::Triple::ppc:
193  case llvm::Triple::ppc64:
194  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_powerpc>(
195  *this, reg_interface, m_gpregset_data, m_notes);
196  break;
197  case llvm::Triple::ppc64le:
198  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_ppc64le>(
199  *this, reg_interface, m_gpregset_data, m_notes);
200  break;
201  case llvm::Triple::systemz:
202  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_s390x>(
203  *this, reg_interface, m_gpregset_data, m_notes);
204  break;
205  case llvm::Triple::x86:
206  case llvm::Triple::x86_64:
207  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_x86_64>(
208  *this, reg_interface, m_gpregset_data, m_notes);
209  break;
210  default:
211  break;
212  }
213 
214  reg_ctx_sp = m_thread_reg_ctx_sp;
215  } else {
216  reg_ctx_sp = GetUnwinder().CreateRegisterContextForFrame(frame);
217  }
218  return reg_ctx_sp;
219 }
220 
222  ProcessSP process_sp(GetProcess());
223  if (process_sp) {
224  SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, m_signo));
225  return true;
226  }
227  return false;
228 }
229 
230 // Parse PRSTATUS from NOTE entry
232  memset(this, 0, sizeof(ELFLinuxPrStatus));
233 }
234 
236  constexpr size_t mips_linux_pr_status_size_o32 = 96;
237  constexpr size_t mips_linux_pr_status_size_n32 = 72;
238  constexpr size_t num_ptr_size_members = 10;
239  if (arch.IsMIPS()) {
240  std::string abi = arch.GetTargetABI();
241  assert(!abi.empty() && "ABI is not set");
242  if (!abi.compare("n64"))
243  return sizeof(ELFLinuxPrStatus);
244  else if (!abi.compare("o32"))
245  return mips_linux_pr_status_size_o32;
246  // N32 ABI
247  return mips_linux_pr_status_size_n32;
248  }
249  switch (arch.GetCore()) {
252  return 72;
253  default:
254  if (arch.GetAddressByteSize() == 8)
255  return sizeof(ELFLinuxPrStatus);
256  else
257  return sizeof(ELFLinuxPrStatus) - num_ptr_size_members * 4;
258  }
259 }
260 
262  const ArchSpec &arch) {
263  Status error;
264  if (GetSize(arch) > data.GetByteSize()) {
265  error.SetErrorStringWithFormat(
266  "NT_PRSTATUS size should be %zu, but the remaining bytes are: %" PRIu64,
267  GetSize(arch), data.GetByteSize());
268  return error;
269  }
270 
271  // Read field by field to correctly account for endianess of both the core
272  // dump and the platform running lldb.
273  offset_t offset = 0;
274  si_signo = data.GetU32(&offset);
275  si_code = data.GetU32(&offset);
276  si_errno = data.GetU32(&offset);
277 
278  pr_cursig = data.GetU16(&offset);
279  offset += 2; // pad
280 
281  pr_sigpend = data.GetAddress(&offset);
282  pr_sighold = data.GetAddress(&offset);
283 
284  pr_pid = data.GetU32(&offset);
285  pr_ppid = data.GetU32(&offset);
286  pr_pgrp = data.GetU32(&offset);
287  pr_sid = data.GetU32(&offset);
288 
289  pr_utime.tv_sec = data.GetAddress(&offset);
290  pr_utime.tv_usec = data.GetAddress(&offset);
291 
292  pr_stime.tv_sec = data.GetAddress(&offset);
293  pr_stime.tv_usec = data.GetAddress(&offset);
294 
295  pr_cutime.tv_sec = data.GetAddress(&offset);
296  pr_cutime.tv_usec = data.GetAddress(&offset);
297 
298  pr_cstime.tv_sec = data.GetAddress(&offset);
299  pr_cstime.tv_usec = data.GetAddress(&offset);
300 
301  return error;
302 }
303 
304 // Parse PRPSINFO from NOTE entry
306  memset(this, 0, sizeof(ELFLinuxPrPsInfo));
307 }
308 
310  constexpr size_t mips_linux_pr_psinfo_size_o32_n32 = 128;
311  if (arch.IsMIPS()) {
312  uint8_t address_byte_size = arch.GetAddressByteSize();
313  if (address_byte_size == 8)
314  return sizeof(ELFLinuxPrPsInfo);
315  return mips_linux_pr_psinfo_size_o32_n32;
316  }
317 
318  switch (arch.GetCore()) {
321  return sizeof(ELFLinuxPrPsInfo);
324  return 124;
325  default:
326  return 0;
327  }
328 }
329 
331  const ArchSpec &arch) {
332  Status error;
333  ByteOrder byteorder = data.GetByteOrder();
334  if (GetSize(arch) > data.GetByteSize()) {
335  error.SetErrorStringWithFormat(
336  "NT_PRPSINFO size should be %zu, but the remaining bytes are: %" PRIu64,
337  GetSize(arch), data.GetByteSize());
338  return error;
339  }
340  size_t size = 0;
341  offset_t offset = 0;
342 
343  pr_state = data.GetU8(&offset);
344  pr_sname = data.GetU8(&offset);
345  pr_zomb = data.GetU8(&offset);
346  pr_nice = data.GetU8(&offset);
347  if (data.GetAddressByteSize() == 8) {
348  // Word align the next field on 64 bit.
349  offset += 4;
350  }
351 
352  pr_flag = data.GetAddress(&offset);
353 
354  if (arch.IsMIPS()) {
355  // The pr_uid and pr_gid is always 32 bit irrespective of platforms
356  pr_uid = data.GetU32(&offset);
357  pr_gid = data.GetU32(&offset);
358  } else {
359  // 16 bit on 32 bit platforms, 32 bit on 64 bit platforms
360  pr_uid = data.GetMaxU64(&offset, data.GetAddressByteSize() >> 1);
361  pr_gid = data.GetMaxU64(&offset, data.GetAddressByteSize() >> 1);
362  }
363 
364  pr_pid = data.GetU32(&offset);
365  pr_ppid = data.GetU32(&offset);
366  pr_pgrp = data.GetU32(&offset);
367  pr_sid = data.GetU32(&offset);
368 
369  size = 16;
370  data.ExtractBytes(offset, size, byteorder, pr_fname);
371  offset += size;
372 
373  size = 80;
374  data.ExtractBytes(offset, size, byteorder, pr_psargs);
375  offset += size;
376 
377  return error;
378 }
379 
380 // Parse SIGINFO from NOTE entry
381 ELFLinuxSigInfo::ELFLinuxSigInfo() { memset(this, 0, sizeof(ELFLinuxSigInfo)); }
382 
384  if (arch.IsMIPS())
385  return sizeof(ELFLinuxSigInfo);
386  switch (arch.GetCore()) {
388  return sizeof(ELFLinuxSigInfo);
392  return 12;
393  default:
394  return 0;
395  }
396 }
397 
399  Status error;
400  if (GetSize(arch) > data.GetByteSize()) {
401  error.SetErrorStringWithFormat(
402  "NT_SIGINFO size should be %zu, but the remaining bytes are: %" PRIu64,
403  GetSize(arch), data.GetByteSize());
404  return error;
405  }
406 
407  // Parsing from a 32 bit ELF core file, and populating/reusing the structure
408  // properly, because the struct is for the 64 bit version
409  offset_t offset = 0;
410  si_signo = data.GetU32(&offset);
411  si_code = data.GetU32(&offset);
412  si_errno = data.GetU32(&offset);
413 
414  return error;
415 }
ELFLinuxPrStatus::pr_sid
uint32_t pr_sid
Definition: ThreadElfCore.h:47
ELFLinuxPrPsInfo::pr_fname
char pr_fname[16]
Definition: ThreadElfCore.h:107
ELFLinuxPrStatus::GetSize
static size_t GetSize(const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:235
lldb_private::ArchSpec
Definition: ArchSpec.h:33
lldb_private::ArchSpec::IsMIPS
bool IsMIPS() const
if MIPS architecture return true.
Definition: ArchSpec.cpp:545
ELFLinuxPrStatus
Definition: ThreadElfCore.h:34
lldb_private::DataExtractor::GetAddress
uint64_t GetAddress(lldb::offset_t *offset_ptr) const
Extract an address from *offset_ptr.
Definition: DataExtractor.cpp:651
ELFLinuxPrPsInfo::pr_psargs
char pr_psargs[80]
Definition: ThreadElfCore.h:108
lldb_private::ArchSpec::eCore_x86_32_i486
@ eCore_x86_32_i486
Definition: ArchSpec.h:184
ThreadElfCore::CreateRegisterContextForFrame
lldb::RegisterContextSP CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override
Definition: ThreadElfCore.cpp:64
lldb_private::ArchSpec::GetMachine
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
Definition: ArchSpec.cpp:667
ELFLinuxSigInfo::Parse
lldb_private::Status Parse(const lldb_private::DataExtractor &data, const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:398
RegisterContextLinux_x86_64
Definition: RegisterContextLinux_x86_64.h:14
ELFLinuxSigInfo::GetSize
static size_t GetSize(const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:383
ProcessElfCore.h
ThreadElfCore::RefreshStateAfterStop
void RefreshStateAfterStop() override
Definition: ThreadElfCore.cpp:52
ELFLinuxPrStatus::pr_stime
compat_timeval pr_stime
Definition: ThreadElfCore.h:50
lldb_private::Thread::GetUnwinder
virtual Unwind & GetUnwinder()
Definition: Thread.cpp:1862
ELFLinuxPrPsInfo::ELFLinuxPrPsInfo
ELFLinuxPrPsInfo()
Definition: ThreadElfCore.cpp:305
Unwind.h
lldb_private::ArchSpec::GetCore
Core GetCore() const
Definition: ArchSpec.h:423
RegisterContextOpenBSD_x86_64
Definition: RegisterContextOpenBSD_x86_64.h:14
RegisterContextLinux_x86_64.h
lldb_private::RegisterInfoInterface
Definition: RegisterInfoInterface.h:21
lldb_private::ArchSpec::eCore_s390x_generic
@ eCore_s390x_generic
Definition: ArchSpec.h:177
LLDB_LOGF
#define LLDB_LOGF(log,...)
Definition: Log.h:249
lldb_private::Process
Definition: Process.h:342
RegisterContextFreeBSD_powerpc.h
ELFLinuxPrStatus::pr_sigpend
uint64_t pr_sigpend
Definition: ThreadElfCore.h:41
ELFLinuxPrPsInfo::pr_flag
uint64_t pr_flag
Definition: ThreadElfCore.h:100
ThreadElfCore::m_gpregset_data
lldb_private::DataExtractor m_gpregset_data
Definition: ThreadElfCore.h:170
RegisterContextPOSIXCore_mips64.h
RegisterInfoPOSIX_arm.h
lldb::offset_t
uint64_t offset_t
Definition: lldb-types.h:87
ELFLinuxPrPsInfo::pr_pgrp
int32_t pr_pgrp
Definition: ThreadElfCore.h:105
ELFLinuxPrStatus::si_code
int32_t si_code
Definition: ThreadElfCore.h:36
ELFLinuxPrStatus::ELFLinuxPrStatus
ELFLinuxPrStatus()
Definition: ThreadElfCore.cpp:231
ELFLinuxSigInfo::si_errno
int32_t si_errno
Definition: ThreadElfCore.h:73
lldb_private::ArchSpec::GetTriple
llvm::Triple & GetTriple()
Architecture triple accessor.
Definition: ArchSpec.h:444
ThreadElfCore.h
RegisterContextOpenBSD_x86_64.h
ELFLinuxPrStatus::Parse
lldb_private::Status Parse(const lldb_private::DataExtractor &data, const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:261
RegisterContextNetBSD_x86_64
Definition: RegisterContextNetBSD_x86_64.h:14
lldb_private::DataExtractor::ExtractBytes
size_t ExtractBytes(lldb::offset_t offset, lldb::offset_t length, lldb::ByteOrder dst_byte_order, void *dst) const
Extract an arbitrary number of bytes in the specified byte order.
Definition: DataExtractor.cpp:661
ELFLinuxPrStatus::pr_ppid
uint32_t pr_ppid
Definition: ThreadElfCore.h:45
ELFLinuxPrPsInfo::Parse
lldb_private::Status Parse(const lldb_private::DataExtractor &data, const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:330
RegisterContextLinux_i386.h
RegisterContextPOSIXCore_arm.h
RegisterContextFreeBSD_mips64.h
ELFLinuxPrPsInfo
Definition: ThreadElfCore.h:95
Target.h
lldb_private::StackFrame::GetConcreteFrameIndex
uint32_t GetConcreteFrameIndex() const
Query this frame to find what frame it is in this Thread's StackFrameList, not counting inlined frame...
Definition: StackFrame.h:407
RegisterContextLinux_s390x.h
ELFLinuxPrPsInfo::GetSize
static size_t GetSize(const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:309
lldb_private::Thread::GetProcess
lldb::ProcessSP GetProcess() const
Definition: Thread.h:154
lldb_private::Thread::DestroyThread
virtual void DestroyThread()
Definition: Thread.cpp:248
error
static llvm::raw_ostream & error(Stream &strm)
Definition: CommandReturnObject.cpp:17
ThreadElfCore::~ThreadElfCore
~ThreadElfCore() override
Definition: ThreadElfCore.cpp:50
lldb_private::DataExtractor::GetAddressByteSize
uint32_t GetAddressByteSize() const
Get the current address size.
Definition: DataExtractor.h:264
lldb_private::DataExtractor
Definition: DataExtractor.h:48
RegisterContextNetBSD_i386
Definition: RegisterContextNetBSD_i386.h:14
Log.h
lldb_private::Thread
Definition: Thread.h:62
RegisterContextCorePOSIX_arm64::Create
static std::unique_ptr< RegisterContextCorePOSIX_arm64 > Create(lldb_private::Thread &thread, const lldb_private::ArchSpec &arch, const lldb_private::DataExtractor &gpregset, llvm::ArrayRef< lldb_private::CoreNote > notes)
Definition: RegisterContextPOSIXCore_arm64.cpp:21
ELFLinuxPrPsInfo::pr_nice
char pr_nice
Definition: ThreadElfCore.h:99
RegisterContextOpenBSD_i386
Definition: RegisterContextOpenBSD_i386.h:14
compat_timeval::tv_usec
uint64_t tv_usec
Definition: ThreadElfCore.h:20
ELFLinuxPrPsInfo::pr_ppid
int32_t pr_ppid
Definition: ThreadElfCore.h:104
lldb_private::DataExtractor::GetByteOrder
lldb::ByteOrder GetByteOrder() const
Get the current byte order value.
Definition: DataExtractor.h:594
ELFLinuxPrStatus::pr_pgrp
uint32_t pr_pgrp
Definition: ThreadElfCore.h:46
ThreadElfCore::ThreadElfCore
ThreadElfCore(lldb_private::Process &process, const ThreadData &td)
Definition: ThreadElfCore.cpp:46
lldb_private::DataExtractor::GetU8
uint8_t GetU8(lldb::offset_t *offset_ptr) const
Extract a uint8_t value from *offset_ptr.
Definition: DataExtractor.cpp:318
lldb_private::Thread::SetStopInfo
void SetStopInfo(const lldb::StopInfoSP &stop_info_sp)
Definition: Thread.cpp:434
RegisterContextNetBSD_i386.h
lldb_private::GetLogIfAllCategoriesSet
Log * GetLogIfAllCategoriesSet(uint32_t mask)
Definition: Logging.cpp:58
lldb_private::ArchSpec::eCore_x86_32_i386
@ eCore_x86_32_i386
Definition: ArchSpec.h:183
RegisterInfoPOSIX_arm64.h
RegisterContextOpenBSD_i386.h
RegisterContextPOSIXCore_arm64.h
ELFLinuxSigInfo::si_signo
int32_t si_signo
Definition: ThreadElfCore.h:71
ELFLinuxPrPsInfo::pr_zomb
char pr_zomb
Definition: ThreadElfCore.h:98
string
string(SUBSTRING ${p} 10 -1 pStripped) if($
Definition: Plugins/CMakeLists.txt:39
RegisterContextFreeBSD_powerpc32
Definition: RegisterContextFreeBSD_powerpc.h:28
RegisterContextLinux_i386
Definition: RegisterContextLinux_i386.h:14
RegisterInfoPOSIX_ppc64le
Definition: RegisterInfoPOSIX_ppc64le.h:16
RegisterInfoPOSIX_ppc64le.h
lldb_private::ArchSpec::GetAddressByteSize
uint32_t GetAddressByteSize() const
Returns the size in bytes of an address of the current architecture.
Definition: ArchSpec.cpp:683
ELFLinuxSigInfo
Definition: ThreadElfCore.h:70
RegisterContextPOSIXCore_x86_64.h
ELFLinuxPrStatus::si_errno
int32_t si_errno
Definition: ThreadElfCore.h:37
ThreadElfCore::m_notes
std::vector< lldb_private::CoreNote > m_notes
Definition: ThreadElfCore.h:171
RegisterContextPOSIXCore_powerpc.h
lldb_private::Unwind::CreateRegisterContextForFrame
lldb::RegisterContextSP CreateRegisterContextForFrame(StackFrame *frame)
Definition: Unwind.h:56
ELFLinuxPrPsInfo::pr_sid
int32_t pr_sid
Definition: ThreadElfCore.h:106
ELFLinuxPrStatus::pr_pid
uint32_t pr_pid
Definition: ThreadElfCore.h:44
ELFLinuxSigInfo::si_code
int32_t si_code
Definition: ThreadElfCore.h:72
RegisterContextFreeBSD_x86_64.h
RegisterContextFreeBSD_powerpc64
Definition: RegisterContextFreeBSD_powerpc.h:40
ELFLinuxPrStatus::pr_cursig
int16_t pr_cursig
Definition: ThreadElfCore.h:39
lldb_private::Status
Definition: Status.h:44
compat_timeval::tv_sec
uint64_t tv_sec
Definition: ThreadElfCore.h:19
lldb_private::Thread::m_reg_context_sp
lldb::RegisterContextSP m_reg_context_sp
The register context for this thread's current register state.
Definition: Thread.h:1249
ELFLinuxPrStatus::pr_cutime
compat_timeval pr_cutime
Definition: ThreadElfCore.h:51
uint32_t
ELFLinuxPrStatus::pr_utime
compat_timeval pr_utime
Definition: ThreadElfCore.h:49
ELFLinuxPrPsInfo::pr_sname
char pr_sname
Definition: ThreadElfCore.h:97
lldb_private::DataExtractor::GetMaxU64
uint64_t GetMaxU64(lldb::offset_t *offset_ptr, size_t byte_size) const
Extract an unsigned integer of size byte_size from *offset_ptr.
Definition: DataExtractor.cpp:526
RegisterContextPOSIXCore_s390x.h
ELFLinuxSigInfo::ELFLinuxSigInfo
ELFLinuxSigInfo()
Definition: ThreadElfCore.cpp:381
RegisterContextFreeBSD_i386.h
ThreadData
Definition: ThreadElfCore.h:126
ELFLinuxPrStatus::pr_cstime
compat_timeval pr_cstime
Definition: ThreadElfCore.h:52
StopInfo.h
lldb_private::DataExtractor::GetU32
uint32_t GetU32(lldb::offset_t *offset_ptr) const
Extract a uint32_t value from *offset_ptr.
Definition: DataExtractor.cpp:427
ThreadElfCore::m_signo
int m_signo
Definition: ThreadElfCore.h:168
ELFLinuxPrStatus::pr_sighold
uint64_t pr_sighold
Definition: ThreadElfCore.h:42
DataExtractor.h
ThreadElfCore::m_thread_reg_ctx_sp
lldb::RegisterContextSP m_thread_reg_ctx_sp
Definition: ThreadElfCore.h:166
lldb_private
A class that represents a running process on the host machine.
Definition: SBCommandInterpreterRunOptions.h:16
lldb_private::DataExtractor::GetU16
uint16_t GetU16(lldb::offset_t *offset_ptr) const
Extract a uint16_t value from *offset_ptr.
Definition: DataExtractor.cpp:349
RegisterContextFreeBSD_mips64
Definition: RegisterContextFreeBSD_mips64.h:14
lldb_private::ArchSpec::eCore_x86_64_x86_64
@ eCore_x86_64_x86_64
Definition: ArchSpec.h:188
ELFLinuxPrPsInfo::pr_gid
uint32_t pr_gid
Definition: ThreadElfCore.h:102
lldb_private::ArchSpec::GetTargetABI
std::string GetTargetABI() const
Return a string representing target application ABI.
Definition: ArchSpec.cpp:547
ELFLinuxPrStatus::si_signo
int32_t si_signo
Definition: ThreadElfCore.h:35
ELFLinuxPrPsInfo::pr_pid
int32_t pr_pid
Definition: ThreadElfCore.h:103
ProcessElfCore
Definition: ProcessElfCore.h:31
RegisterContextFreeBSD_i386
Definition: RegisterContextFreeBSD_i386.h:14
RegisterContextPOSIXCore_ppc64le.h
lldb_private::Log
Definition: Log.h:49
lldb_private::DataExtractor::GetByteSize
uint64_t GetByteSize() const
Get the number of bytes contained in this object.
Definition: DataExtractor.h:270
lldb_private::StackFrame
Definition: StackFrame.h:40
ELFLinuxPrPsInfo::pr_state
char pr_state
Definition: ThreadElfCore.h:96
lldb
Definition: SBAddress.h:15
RegisterContextNetBSD_x86_64.h
LIBLLDB_LOG_THREAD
#define LIBLLDB_LOG_THREAD
Definition: Logging.h:16
RegisterContext.h
ProcessElfCore::GetArchitecture
lldb_private::ArchSpec GetArchitecture()
Definition: ProcessElfCore.cpp:926
ThreadElfCore::GetRegisterContext
lldb::RegisterContextSP GetRegisterContext() override
Definition: ThreadElfCore.cpp:56
ThreadElfCore::CalculateStopInfo
bool CalculateStopInfo() override
Definition: ThreadElfCore.cpp:221
RegisterContextFreeBSD_x86_64
Definition: RegisterContextFreeBSD_x86_64.h:14
RegisterContextLinux_s390x
Definition: RegisterContextLinux_s390x.h:14
ELFLinuxPrPsInfo::pr_uid
uint32_t pr_uid
Definition: ThreadElfCore.h:101
lldb::ByteOrder
ByteOrder
Byte ordering definitions.
Definition: lldb-enumerations.h:138