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/LLDBLog.h"
15 #include "lldb/Utility/Log.h"
16 
31 #include "ProcessElfCore.h"
39 #include "ThreadElfCore.h"
40 
41 #include <memory>
42 
43 using namespace lldb;
44 using namespace lldb_private;
45 
46 // Construct a Thread object with given data
48  : Thread(process, td.tid), m_thread_name(td.name), m_thread_reg_ctx_sp(),
49  m_signo(td.signo), m_gpregset_data(td.gpregset), m_notes(td.notes) {}
50 
52 
54  GetRegisterContext()->InvalidateIfNeeded(false);
55 }
56 
57 RegisterContextSP ThreadElfCore::GetRegisterContext() {
58  if (!m_reg_context_sp) {
60  }
61  return m_reg_context_sp;
62 }
63 
64 RegisterContextSP
66  RegisterContextSP reg_ctx_sp;
67  uint32_t concrete_frame_idx = 0;
68  Log *log = GetLog(LLDBLog::Thread);
69 
70  if (frame)
71  concrete_frame_idx = frame->GetConcreteFrameIndex();
72 
73  if (concrete_frame_idx == 0) {
75  return m_thread_reg_ctx_sp;
76 
77  ProcessElfCore *process = static_cast<ProcessElfCore *>(GetProcess().get());
78  ArchSpec arch = process->GetArchitecture();
79  RegisterInfoInterface *reg_interface = nullptr;
80 
81  switch (arch.GetTriple().getOS()) {
82  case llvm::Triple::FreeBSD: {
83  switch (arch.GetMachine()) {
84  case llvm::Triple::aarch64:
85  case llvm::Triple::arm:
86  break;
87  case llvm::Triple::ppc:
88  reg_interface = new RegisterContextFreeBSD_powerpc32(arch);
89  break;
90  case llvm::Triple::ppc64:
91  reg_interface = new RegisterContextFreeBSD_powerpc64(arch);
92  break;
93  case llvm::Triple::mips64:
94  reg_interface = new RegisterContextFreeBSD_mips64(arch);
95  break;
96  case llvm::Triple::x86:
97  reg_interface = new RegisterContextFreeBSD_i386(arch);
98  break;
99  case llvm::Triple::x86_64:
100  reg_interface = new RegisterContextFreeBSD_x86_64(arch);
101  break;
102  default:
103  break;
104  }
105  break;
106  }
107 
108  case llvm::Triple::NetBSD: {
109  switch (arch.GetMachine()) {
110  case llvm::Triple::aarch64:
111  break;
112  case llvm::Triple::x86:
113  reg_interface = new RegisterContextNetBSD_i386(arch);
114  break;
115  case llvm::Triple::x86_64:
116  reg_interface = new RegisterContextNetBSD_x86_64(arch);
117  break;
118  default:
119  break;
120  }
121  break;
122  }
123 
124  case llvm::Triple::Linux: {
125  switch (arch.GetMachine()) {
126  case llvm::Triple::aarch64:
127  break;
128  case llvm::Triple::ppc64le:
129  reg_interface = new RegisterInfoPOSIX_ppc64le(arch);
130  break;
131  case llvm::Triple::systemz:
132  reg_interface = new RegisterContextLinux_s390x(arch);
133  break;
134  case llvm::Triple::x86:
135  reg_interface = new RegisterContextLinux_i386(arch);
136  break;
137  case llvm::Triple::x86_64:
138  reg_interface = new RegisterContextLinux_x86_64(arch);
139  break;
140  default:
141  break;
142  }
143  break;
144  }
145 
146  case llvm::Triple::OpenBSD: {
147  switch (arch.GetMachine()) {
148  case llvm::Triple::aarch64:
149  break;
150  case llvm::Triple::x86:
151  reg_interface = new RegisterContextOpenBSD_i386(arch);
152  break;
153  case llvm::Triple::x86_64:
154  reg_interface = new RegisterContextOpenBSD_x86_64(arch);
155  break;
156  default:
157  break;
158  }
159  break;
160  }
161 
162  default:
163  break;
164  }
165 
166  if (!reg_interface && arch.GetMachine() != llvm::Triple::aarch64 &&
167  arch.GetMachine() != llvm::Triple::arm) {
168  LLDB_LOGF(log, "elf-core::%s:: Architecture(%d) or OS(%d) not supported",
169  __FUNCTION__, arch.GetMachine(), arch.GetTriple().getOS());
170  assert(false && "Architecture or OS not supported");
171  }
172 
173  switch (arch.GetMachine()) {
174  case llvm::Triple::aarch64:
176  *this, arch, m_gpregset_data, m_notes);
177  break;
178  case llvm::Triple::arm:
179  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_arm>(
180  *this, std::make_unique<RegisterInfoPOSIX_arm>(arch), m_gpregset_data,
181  m_notes);
182  break;
183  case llvm::Triple::mipsel:
184  case llvm::Triple::mips:
185  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_mips64>(
186  *this, reg_interface, m_gpregset_data, m_notes);
187  break;
188  case llvm::Triple::mips64:
189  case llvm::Triple::mips64el:
190  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_mips64>(
191  *this, reg_interface, m_gpregset_data, m_notes);
192  break;
193  case llvm::Triple::ppc:
194  case llvm::Triple::ppc64:
195  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_powerpc>(
196  *this, reg_interface, m_gpregset_data, m_notes);
197  break;
198  case llvm::Triple::ppc64le:
199  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_ppc64le>(
200  *this, reg_interface, m_gpregset_data, m_notes);
201  break;
202  case llvm::Triple::systemz:
203  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_s390x>(
204  *this, reg_interface, m_gpregset_data, m_notes);
205  break;
206  case llvm::Triple::x86:
207  case llvm::Triple::x86_64:
208  m_thread_reg_ctx_sp = std::make_shared<RegisterContextCorePOSIX_x86_64>(
209  *this, reg_interface, m_gpregset_data, m_notes);
210  break;
211  default:
212  break;
213  }
214 
215  reg_ctx_sp = m_thread_reg_ctx_sp;
216  } else {
217  reg_ctx_sp = GetUnwinder().CreateRegisterContextForFrame(frame);
218  }
219  return reg_ctx_sp;
220 }
221 
223  ProcessSP process_sp(GetProcess());
224  if (process_sp) {
225  SetStopInfo(StopInfo::CreateStopReasonWithSignal(*this, m_signo));
226  return true;
227  }
228  return false;
229 }
230 
231 // Parse PRSTATUS from NOTE entry
233  memset(this, 0, sizeof(ELFLinuxPrStatus));
234 }
235 
237  constexpr size_t mips_linux_pr_status_size_o32 = 96;
238  constexpr size_t mips_linux_pr_status_size_n32 = 72;
239  constexpr size_t num_ptr_size_members = 10;
240  if (arch.IsMIPS()) {
241  std::string abi = arch.GetTargetABI();
242  assert(!abi.empty() && "ABI is not set");
243  if (!abi.compare("n64"))
244  return sizeof(ELFLinuxPrStatus);
245  else if (!abi.compare("o32"))
246  return mips_linux_pr_status_size_o32;
247  // N32 ABI
248  return mips_linux_pr_status_size_n32;
249  }
250  switch (arch.GetCore()) {
253  return 72;
254  default:
255  if (arch.GetAddressByteSize() == 8)
256  return sizeof(ELFLinuxPrStatus);
257  else
258  return sizeof(ELFLinuxPrStatus) - num_ptr_size_members * 4;
259  }
260 }
261 
263  const ArchSpec &arch) {
264  Status error;
265  if (GetSize(arch) > data.GetByteSize()) {
266  error.SetErrorStringWithFormat(
267  "NT_PRSTATUS size should be %zu, but the remaining bytes are: %" PRIu64,
268  GetSize(arch), data.GetByteSize());
269  return error;
270  }
271 
272  // Read field by field to correctly account for endianess of both the core
273  // dump and the platform running lldb.
274  offset_t offset = 0;
275  si_signo = data.GetU32(&offset);
276  si_code = data.GetU32(&offset);
277  si_errno = data.GetU32(&offset);
278 
279  pr_cursig = data.GetU16(&offset);
280  offset += 2; // pad
281 
282  pr_sigpend = data.GetAddress(&offset);
283  pr_sighold = data.GetAddress(&offset);
284 
285  pr_pid = data.GetU32(&offset);
286  pr_ppid = data.GetU32(&offset);
287  pr_pgrp = data.GetU32(&offset);
288  pr_sid = data.GetU32(&offset);
289 
290  pr_utime.tv_sec = data.GetAddress(&offset);
291  pr_utime.tv_usec = data.GetAddress(&offset);
292 
293  pr_stime.tv_sec = data.GetAddress(&offset);
294  pr_stime.tv_usec = data.GetAddress(&offset);
295 
296  pr_cutime.tv_sec = data.GetAddress(&offset);
297  pr_cutime.tv_usec = data.GetAddress(&offset);
298 
299  pr_cstime.tv_sec = data.GetAddress(&offset);
300  pr_cstime.tv_usec = data.GetAddress(&offset);
301 
302  return error;
303 }
304 
305 // Parse PRPSINFO from NOTE entry
307  memset(this, 0, sizeof(ELFLinuxPrPsInfo));
308 }
309 
311  constexpr size_t mips_linux_pr_psinfo_size_o32_n32 = 128;
312  if (arch.IsMIPS()) {
313  uint8_t address_byte_size = arch.GetAddressByteSize();
314  if (address_byte_size == 8)
315  return sizeof(ELFLinuxPrPsInfo);
316  return mips_linux_pr_psinfo_size_o32_n32;
317  }
318 
319  switch (arch.GetCore()) {
322  return sizeof(ELFLinuxPrPsInfo);
325  return 124;
326  default:
327  return 0;
328  }
329 }
330 
332  const ArchSpec &arch) {
333  Status error;
334  ByteOrder byteorder = data.GetByteOrder();
335  if (GetSize(arch) > data.GetByteSize()) {
336  error.SetErrorStringWithFormat(
337  "NT_PRPSINFO size should be %zu, but the remaining bytes are: %" PRIu64,
338  GetSize(arch), data.GetByteSize());
339  return error;
340  }
341  size_t size = 0;
342  offset_t offset = 0;
343 
344  pr_state = data.GetU8(&offset);
345  pr_sname = data.GetU8(&offset);
346  pr_zomb = data.GetU8(&offset);
347  pr_nice = data.GetU8(&offset);
348  if (data.GetAddressByteSize() == 8) {
349  // Word align the next field on 64 bit.
350  offset += 4;
351  }
352 
353  pr_flag = data.GetAddress(&offset);
354 
355  if (arch.IsMIPS()) {
356  // The pr_uid and pr_gid is always 32 bit irrespective of platforms
357  pr_uid = data.GetU32(&offset);
358  pr_gid = data.GetU32(&offset);
359  } else {
360  // 16 bit on 32 bit platforms, 32 bit on 64 bit platforms
361  pr_uid = data.GetMaxU64(&offset, data.GetAddressByteSize() >> 1);
362  pr_gid = data.GetMaxU64(&offset, data.GetAddressByteSize() >> 1);
363  }
364 
365  pr_pid = data.GetU32(&offset);
366  pr_ppid = data.GetU32(&offset);
367  pr_pgrp = data.GetU32(&offset);
368  pr_sid = data.GetU32(&offset);
369 
370  size = 16;
371  data.ExtractBytes(offset, size, byteorder, pr_fname);
372  offset += size;
373 
374  size = 80;
375  data.ExtractBytes(offset, size, byteorder, pr_psargs);
376  offset += size;
377 
378  return error;
379 }
380 
381 // Parse SIGINFO from NOTE entry
382 ELFLinuxSigInfo::ELFLinuxSigInfo() { memset(this, 0, sizeof(ELFLinuxSigInfo)); }
383 
385  if (arch.IsMIPS())
386  return sizeof(ELFLinuxSigInfo);
387  switch (arch.GetCore()) {
389  return sizeof(ELFLinuxSigInfo);
393  return 12;
394  default:
395  return 0;
396  }
397 }
398 
400  Status error;
401  if (GetSize(arch) > data.GetByteSize()) {
402  error.SetErrorStringWithFormat(
403  "NT_SIGINFO size should be %zu, but the remaining bytes are: %" PRIu64,
404  GetSize(arch), data.GetByteSize());
405  return error;
406  }
407 
408  // Parsing from a 32 bit ELF core file, and populating/reusing the structure
409  // properly, because the struct is for the 64 bit version
410  offset_t offset = 0;
411  si_signo = data.GetU32(&offset);
412  si_code = data.GetU32(&offset);
413  si_errno = data.GetU32(&offset);
414 
415  return error;
416 }
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:236
lldb_private::ArchSpec
Definition: ArchSpec.h:32
lldb_private::ArchSpec::IsMIPS
bool IsMIPS() const
if MIPS architecture return true.
Definition: ArchSpec.cpp:554
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:649
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:200
ThreadElfCore::CreateRegisterContextForFrame
lldb::RegisterContextSP CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override
Definition: ThreadElfCore.cpp:65
lldb_private::ArchSpec::GetMachine
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
Definition: ArchSpec.cpp:678
ELFLinuxSigInfo::Parse
lldb_private::Status Parse(const lldb_private::DataExtractor &data, const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:399
RegisterContextLinux_x86_64
Definition: RegisterContextLinux_x86_64.h:14
ELFLinuxSigInfo::GetSize
static size_t GetSize(const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:384
ProcessElfCore.h
ThreadElfCore::RefreshStateAfterStop
void RefreshStateAfterStop() override
Definition: ThreadElfCore.cpp:53
ELFLinuxPrStatus::pr_stime
compat_timeval pr_stime
Definition: ThreadElfCore.h:50
lldb_private::Thread::GetUnwinder
virtual Unwind & GetUnwinder()
Definition: Thread.cpp:1877
ELFLinuxPrPsInfo::ELFLinuxPrPsInfo
ELFLinuxPrPsInfo()
Definition: ThreadElfCore.cpp:306
Unwind.h
lldb_private::ArchSpec::GetCore
Core GetCore() const
Definition: ArchSpec.h:442
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:193
LLDB_LOGF
#define LLDB_LOGF(log,...)
Definition: Log.h:344
lldb_private::Process
Definition: Process.h:338
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:232
ELFLinuxSigInfo::si_errno
int32_t si_errno
Definition: ThreadElfCore.h:73
lldb_private::ArchSpec::GetTriple
llvm::Triple & GetTriple()
Architecture triple accessor.
Definition: ArchSpec.h:463
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:262
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:659
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:331
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:412
RegisterContextLinux_s390x.h
ELFLinuxPrPsInfo::GetSize
static size_t GetSize(const lldb_private::ArchSpec &arch)
Definition: ThreadElfCore.cpp:310
lldb_private::Thread::GetProcess
lldb::ProcessSP GetProcess() const
Definition: Thread.h:153
lldb_private::Thread::DestroyThread
virtual void DestroyThread()
Definition: Thread.cpp:250
error
static llvm::raw_ostream & error(Stream &strm)
Definition: CommandReturnObject.cpp:17
ThreadElfCore::~ThreadElfCore
~ThreadElfCore() override
Definition: ThreadElfCore.cpp:51
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:61
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:47
lldb_private::DataExtractor::GetU8
uint8_t GetU8(lldb::offset_t *offset_ptr) const
Extract a uint8_t value from *offset_ptr.
Definition: DataExtractor.cpp:316
lldb_private::Thread::SetStopInfo
void SetStopInfo(const lldb::StopInfoSP &stop_info_sp)
Definition: Thread.cpp:445
RegisterContextNetBSD_i386.h
lldb_private::ArchSpec::eCore_x86_32_i386
@ eCore_x86_32_i386
Definition: ArchSpec.h:199
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:40
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:694
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:1271
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:524
RegisterContextPOSIXCore_s390x.h
ELFLinuxSigInfo::ELFLinuxSigInfo
ELFLinuxSigInfo()
Definition: ThreadElfCore.cpp:382
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:425
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:347
RegisterContextFreeBSD_mips64
Definition: RegisterContextFreeBSD_mips64.h:14
lldb_private::ArchSpec::eCore_x86_64_x86_64
@ eCore_x86_64_x86_64
Definition: ArchSpec.h:204
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:556
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:115
lldb_private::GetLog
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
Definition: Log.h:309
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
RegisterContext.h
ProcessElfCore::GetArchitecture
lldb_private::ArchSpec GetArchitecture()
Definition: ProcessElfCore.cpp:991
LLDBLog.h
ThreadElfCore::GetRegisterContext
lldb::RegisterContextSP GetRegisterContext() override
Definition: ThreadElfCore.cpp:57
ThreadElfCore::CalculateStopInfo
bool CalculateStopInfo() override
Definition: ThreadElfCore.cpp:222
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:139