31#include "llvm/BinaryFormat/ELF.h"
32#include "llvm/Support/ThreadPool.h"
52 return "Dynamic loader plug-in that watches for shared library "
53 "loads/unloads in POSIX processes.";
60 const llvm::Triple &triple_ref =
62 if (triple_ref.getOS() == llvm::Triple::FreeBSD ||
63 triple_ref.getOS() == llvm::Triple::Linux ||
64 triple_ref.getOS() == llvm::Triple::NetBSD ||
65 triple_ref.getOS() == llvm::Triple::OpenBSD)
91 LLDB_LOGF(log,
"DynamicLoaderPOSIXDYLD::%s() pid %" PRIu64, __FUNCTION__,
96 log,
"DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
" reloaded auxv data",
106 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
107 " executable '%s', load_offset 0x%" PRIx64,
110 executable_sp ? executable_sp->GetFileSpec().GetPath().c_str()
111 :
"<null executable>",
123 module_list.
Append(executable_sp);
125 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
126 " added executable '%s' to module load list",
129 executable_sp->GetFileSpec().GetPath().c_str());
136 m_process->GetTarget().ModulesDidLoad(module_list);
139 "DynamicLoaderPOSIXDYLD::%s told the target about the "
140 "modules that loaded:",
142 for (
auto module_sp : module_list.
Modules()) {
143 LLDB_LOGF(log,
"-- [module] %s (pid %" PRIu64
")",
144 module_sp ? module_sp->GetFileSpec().GetPath().c_str()
151 if (executable_sp.get()) {
162 LLDB_LOGF(log,
"DynamicLoaderPOSIXDYLD::%s()", __FUNCTION__);
175 module_list.
Append(executable);
178 LLDB_LOGF(log,
"DynamicLoaderPOSIXDYLD::%s about to call ProbeEntry()",
188 m_process->GetTarget().ModulesDidLoad(module_list);
205std::optional<lldb::addr_t>
217 bool base_addr_is_offset) {
240 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
241 " GetEntryPoint() returned no address, not setting entry breakpoint",
247 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
248 " GetEntryPoint() returned address 0x%" PRIx64
249 ", setting entry breakpoint",
255 m_process->GetTarget().CreateBreakpoint(entry,
true,
false).get();
273 assert(baton &&
"null baton");
280 LLDB_LOGF(log,
"DynamicLoaderPOSIXDYLD::%s called for pid %" PRIu64,
296 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
297 " disabling breakpoint id %" PRIu64,
299 breakpoint_sp->SetEnabled(
false);
302 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
303 " failed to find breakpoint for breakpoint id %" PRIu64,
308 "DynamicLoaderPOSIXDYLD::%s breakpoint id %" PRIu64
309 " no Process instance! Cannot disable breakpoint",
310 __FUNCTION__, break_id);
327 "Rendezvous breakpoint breakpoint id {0} for pid {1}"
339 LLDB_LOG(log,
"Setting rendezvous break address for pid {0} at {1:x}",
344 LLDB_LOG(log,
"Rendezvous structure is not set up yet. "
345 "Trying to locate rendezvous breakpoint in the interpreter "
349 static std::vector<std::string> DebugStateCandidates{
350 "_dl_debug_state",
"rtld_db_dlactivity",
"__dl_rtld_db_dlactivity",
351 "r_debug_state",
"_r_debug_state",
"_rtld_debug_state",
357 containingModules.
Append(interpreter->GetFileSpec());
360 m_process->GetTarget().GetExecutableModulePointer()->GetFileSpec());
363 &containingModules,
nullptr,
371 if (dyld_break->GetNumResolvedLocations() != 1) {
374 "Rendezvous breakpoint has abnormal number of"
375 " resolved locations ({0}) in pid {1}. It's supposed to be exactly 1.",
376 dyld_break->GetNumResolvedLocations(),
385 "Successfully set rendezvous breakpoint at address {0:x} "
387 location->GetLoadAddress(),
391 dyld_break->SetBreakpointKind(
"shared-library-event");
399 assert(baton &&
"null baton");
406 LLDB_LOGF(log,
"DynamicLoaderPOSIXDYLD::%s called for pid %" PRIu64,
416 "DynamicLoaderPOSIXDYLD::%s pid %" PRIu64
417 " stop_when_images_change=%s",
421 stop_when_images_change ?
"true" :
"false");
422 return stop_when_images_change;
456 std::mutex interpreter_module_mutex;
459 auto load_module_fn =
460 [
this, &loaded_modules, &new_modules,
470 std::lock_guard<std::mutex> lock(interpreter_module_mutex);
477 so_entry.file_spec, so_entry.link_addr, so_entry.base_addr,
479 if (!module_sp.get())
485 std::lock_guard<std::mutex> lock(interpreter_module_mutex);
487 if (module_sp->GetObjectFile()->GetBaseAddress().GetLoadAddress(
492 }
else if (module_sp == interpreter_sp) {
506 new_modules.
Append(module_sp);
509 if (
m_process->GetTarget().GetParallelModuleLoad()) {
512 task_group.async(load_module_fn, *I);
519 m_process->GetTarget().ModulesDidLoad(new_modules);
530 if (module_sp.get()) {
531 old_modules.
Append(module_sp);
535 loaded_modules.
Remove(old_modules);
536 m_process->GetTarget().ModulesDidUnload(old_modules,
false);
545 StackFrame *frame = thread.GetStackFrameAtIndex(0).get();
550 return thread_plan_sp;
554 return thread_plan_sp;
557 Target &target = thread.GetProcess()->GetTarget();
565 if (target_name.consume_front(
"__AArch64ADRPThunk_") ||
566 target_name.consume_front(
"__AArch64AbsLongThunk_")) {
569 if (!target_name.empty()) {
575 return thread_plan_sp;
577 typedef std::vector<lldb::addr_t> AddressVector;
582 addrs.push_back(addr);
585 if (addrs.size() > 0) {
586 AddressVector::iterator start = addrs.begin();
587 AddressVector::iterator end = addrs.end();
589 llvm::sort(start, end);
590 addrs.erase(std::unique(start, end), end);
592 std::make_shared<ThreadPlanRunToAddress>(thread, addrs, stop);
595 return thread_plan_sp;
608 LLDB_LOG(log,
"Failed to get vdso region info: {0}", status);
612 llvm::Expected<ModuleSP> module_sp_or_err =
m_process->ReadModuleFromMemory(
614 if (
auto err = module_sp_or_err.takeError()) {
616 "Failed to read module from memory: {0}");
617 }
else if (
ModuleSP module_sp = *module_sp_or_err) {
619 m_process->GetTarget().GetImages().AppendIfNeeded(module_sp);
633 LLDB_LOG(log,
"Failed to get interpreter region info: {0}", status);
649 module_list.
Append(module_sp);
660 bool base_addr_is_offset) {
662 file, link_map_addr, base_addr, base_addr_is_offset))
673 if (
m_process->GetTarget().GetArchitecture().GetTriple().isAndroid()) {
681 base_addr, base_addr_is_offset))
699 "DynamicLoaderPOSIXDYLD::%s unable to resolve POSIX DYLD "
700 "rendezvous address",
711 std::vector<FileSpec> module_names;
713 module_names.push_back(I->file_spec);
714 m_process->PrefetchModuleSpecs(module_names,
717 auto load_module_fn = [
this, &module_list, &target,
720 so_entry.file_spec, so_entry.link_addr, so_entry.base_addr,
true);
721 if (!module_sp && !
m_process->IsLiveDebugSession()) {
725 if (
UUID uuid =
m_process->FindModuleUUID(so_entry.file_spec.GetPath()))
728 module_spec, so_entry.base_addr, 512);
729 bool load_addr_changed =
false;
731 module_sp->SetLoadAddress(target, so_entry.base_addr,
false,
734 if (module_sp.get()) {
735 LLDB_LOG(log,
"LoadAllCurrentModules loading module: {0}",
736 so_entry.file_spec.GetFilename());
737 module_list.
Append(module_sp);
741 "DynamicLoaderPOSIXDYLD::%s failed loading module %s at 0x%" PRIx64,
742 __FUNCTION__, so_entry.file_spec.GetPath().c_str(),
746 if (
m_process->GetTarget().GetParallelModuleLoad()) {
749 task_group.async(load_module_fn, *I);
756 m_process->GetTarget().ModulesDidLoad(module_list);
787 if (std::optional<uint64_t> vdso_base =
791 if (std::optional<uint64_t> interpreter_base =
803 std::optional<uint64_t> entry_point =
823 ObjectFile *objfile = module_sp->GetObjectFile();
827 auto *elf_obj = llvm::dyn_cast<ObjectFileELF>(objfile);
831 for (
const auto &phdr : elf_obj->ProgramHeaders()) {
832 if (phdr.p_type == llvm::ELF::PT_TLS)
845 if (!link_map_addr_opt.has_value()) {
848 "GetThreadLocalData error: module({0}) not found in loaded modules",
849 module_sp->GetObjectName());
853 addr_t link_map = link_map_addr_opt.value();
856 "GetThreadLocalData error: invalid link map address=0x%" PRIx64,
862 if (!metadata.
valid) {
864 "GetThreadLocalData error: fail to read thread info metadata");
869 "GetThreadLocalData info: link_map=0x%" PRIx64
870 ", thread info metadata: "
871 "modid_offset=0x%" PRIx32
", pthread_size=0x%" PRIx32
872 ", dtv_offset=0x%" PRIx32
", tls_offset=0x%" PRIx32
873 ", dtv_slot_size=%" PRIx32
"\n",
878 addr_t tp = thread->GetThreadPointer();
880 LLDB_LOGF(log,
"GetThreadLocalData error: fail to read thread pointer");
889 LLDB_LOGF(log,
"GetThreadLocalData error: fail to read modid");
914 const llvm::Triple &triple = module_sp->GetArchitecture().GetTriple();
915 if (triple.isAArch64() || triple.isARM()) {
919 const llvm::Triple &triple = module_sp->GetArchitecture().GetTriple();
928 if (triple.isRISCV())
929 dtv_ptr = tp - 2 * triple.getArchPointerBitWidth() / 8;
934 LLDB_LOGF(log,
"GetThreadLocalData error: fail to read dtv");
943 "DynamicLoaderPOSIXDYLD::Performed TLS lookup: "
944 "module=%s, link_map=0x%" PRIx64
", tp=0x%" PRIx64
945 ", modid=%" PRId64
", tls_block=0x%" PRIx64
"\n",
946 module_sp->GetObjectName().AsCString(
""), link_map, tp,
947 (int64_t)modid, tls_block);
950 LLDB_LOGF(log,
"GetThreadLocalData error: fail to read tls_block");
962 addr_t tpoff = tls_file_addr;
969 tpoff = tls_file_addr - pt_tls_vaddr;
971 return tls_block + tpoff;
982 const auto platform_sp = target.GetPlatform();
985 if (!
m_process->GetProcessInfo(process_info)) {
987 "DynamicLoaderPOSIXDYLD::%s - failed to get process info for "
994 log,
"DynamicLoaderPOSIXDYLD::%s - got executable by pid %" PRIu64
": %s",
1000 if (module_sp && module_sp->MatchesModuleSpec(module_spec))
1003 module_spec.
SetTarget(target.shared_from_this());
1005 auto error = platform_sp->ResolveExecutable(module_spec, module_sp);
1008 module_spec.
Dump(stream);
1011 "DynamicLoaderPOSIXDYLD::%s - failed to resolve executable "
1012 "with module spec \"%s\": %s",
1025 if (!module_sp && sym_ctx.
function)
1030 return module_sp->GetFileSpec().GetPath() ==
"[vdso]";
1034 return !
m_process->IsLiveDebugSession();
1039 std::vector<MemoryRegionInfo> &ranges) {
1044 const RegisterInfo *reg_info = reg_ctx->GetRegisterInfo(
1050 bool success = reg_ctx->ReadRegister(reg_info, thread_local_register_value);
1055 bool readSuccess =
false;
1057 thread_local_register_value.
GetAsUInt64(fail_value, &readSuccess);
1058 if (!readSuccess || reg_value_addr == fail_value)
1066 ranges.push_back(thread_local_region);
1071 std::vector<MemoryRegionInfo> &ranges) {
1074 for (
size_t idx = 0; idx < module_list.
GetSize(); idx++) {
1079 ObjectFile *obj = module_sp->GetObjectFile();
1092 ranges.push_back(link_map_section);
1098 std::vector<lldb_private::MemoryRegionInfo> &ranges,
1100 save_thread_predicate) {
1102 for (
size_t idx = 0; idx < thread_list.
GetSize(); idx++) {
1107 if (!save_thread_predicate(*thread_sp))
static llvm::raw_ostream & error(Stream &strm)
static lldb::addr_t GetPTTLSVAddr(const lldb::ModuleSP &module_sp)
static void AddLinkMapSections(Process &process, std::vector< MemoryRegionInfo > &ranges)
static void AddThreadLocalMemoryRegions(Process &process, ThreadSP &thread_sp, std::vector< MemoryRegionInfo > &ranges)
#define LLDB_LOG(log,...)
The LLDB_LOG* macros defined below are the way to emit log messages.
#define LLDB_LOGF(log,...)
#define LLDB_LOG_ERROR(log, error,...)
#define LLDB_PLUGIN_DEFINE_ADV(ClassName, PluginName)
@ AUXV_AT_ENTRY
Program entry point.
@ AUXV_AT_BASE
Interpreter base address.
SOEntryList::const_iterator iterator
static bool RendezvousBreakpointHit(void *baton, lldb_private::StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id)
Callback routine which updates the current list of loaded modules based on the information supplied b...
std::map< lldb::ModuleWP, lldb::addr_t, std::owner_less< lldb::ModuleWP > > m_loaded_modules
Loaded module list.
static lldb_private::DynamicLoader * CreateInstance(lldb_private::Process *process, bool force)
llvm::sys::RWMutex m_loaded_modules_rw_mutex
bool m_initial_modules_added
Indicates whether the initial set of modules was reported added.
lldb::addr_t m_load_offset
Virtual load address of the inferior process.
lldb::break_id_t m_dyld_bid
Rendezvous breakpoint.
lldb::addr_t GetEntryPoint()
Computes a value for m_entry_point returning the computed address on success and LLDB_INVALID_ADDRESS...
std::unique_ptr< AuxVector > m_auxv
Auxiliary vector of the inferior process.
static llvm::StringRef GetPluginDescriptionStatic()
void EvalSpecialModulesStatus()
Evaluate if Aux vectors contain vDSO and LD information in case they do, read and assign the address ...
lldb::addr_t GetThreadLocalData(const lldb::ModuleSP module, const lldb::ThreadSP thread, lldb::addr_t tls_file_addr) override
Retrieves the per-module TLS block for a given thread.
bool SetRendezvousBreakpoint()
If possible sets a breakpoint on a function called by the runtime linker each time a module is loaded...
lldb::ModuleSP LoadInterpreterModule()
void RefreshModules()
Helper method for RendezvousBreakpointHit.
bool AlwaysRelyOnEHUnwindInfo(lldb_private::SymbolContext &sym_ctx) override
Ask if the eh_frame information for the given SymbolContext should be relied on even when it's the fi...
lldb::addr_t m_interpreter_base
Contains AT_BASE, which means a dynamic loader has been mapped to the address space.
void ProbeEntry()
Resolves the entry point for the current inferior process and sets a breakpoint at that address.
lldb_private::Status CanLoadImage() override
Ask if it is ok to try and load or unload an shared library (image).
lldb::addr_t m_vdso_base
Contains AT_SYSINFO_EHDR, which means a vDSO has been mapped to the address space.
~DynamicLoaderPOSIXDYLD() override
void UpdateLoadedSections(lldb::ModuleSP module, lldb::addr_t link_map_addr, lldb::addr_t base_addr, bool base_addr_is_offset) override
Updates the load address of every allocatable section in module.
lldb::addr_t ComputeLoadOffset()
Computes a value for m_load_offset returning the computed address on success and LLDB_INVALID_ADDRESS...
void SetLoadedModule(const lldb::ModuleSP &module_sp, lldb::addr_t link_map_addr)
void UnloadSections(const lldb::ModuleSP module) override
Removes the loaded sections from the target in module.
std::optional< lldb::addr_t > GetLoadedModuleLinkAddr(const lldb::ModuleSP &module_sp)
DYLDRendezvous m_rendezvous
Runtime linker rendezvous structure.
void DidLaunch() override
Called after launching a process.
lldb::ModuleSP LoadModuleAtAddress(const lldb_private::FileSpec &file, lldb::addr_t link_map_addr, lldb::addr_t base_addr, bool base_addr_is_offset) override
Locates or creates a module given by file and updates/loads the resulting module at the virtual base ...
static bool EntryBreakpointHit(void *baton, lldb_private::StoppointCallbackContext *context, lldb::user_id_t break_id, lldb::user_id_t break_loc_id)
Callback routine invoked when we hit the breakpoint on process entry.
void DidAttach() override
Called after attaching a process.
lldb::ThreadPlanSP GetStepThroughTrampolinePlan(lldb_private::Thread &thread, bool stop_others) override
Provides a plan to step through the dynamic loader trampoline for the current state of thread.
static llvm::StringRef GetPluginNameStatic()
void ResolveExecutableModule(lldb::ModuleSP &module_sp)
Loads Module from inferior process.
lldb::addr_t m_entry_point
Virtual entry address of the inferior process.
virtual void LoadAllCurrentModules()
Helper for the entry breakpoint callback.
std::weak_ptr< lldb_private::Module > m_interpreter_module
Contains the pointer to the interpret module, if loaded.
bool IsCoreFile() const
Returns true if the process is for a core file.
DynamicLoaderPOSIXDYLD(lldb_private::Process *process)
void CalculateDynamicSaveCoreRanges(lldb_private::Process &process, std::vector< lldb_private::MemoryRegionInfo > &ranges, llvm::function_ref< bool(const lldb_private::Thread &)> save_thread_predicate) override
void UnloadModule(const lldb::ModuleSP &module_sp)
A section + offset based address class.
lldb::addr_t GetLoadAddress(Target *target) const
Get the load address.
lldb::ModuleSP GetModule() const
Get accessor for the module for this address.
lldb::addr_t GetFileAddress() const
Get the file address.
bool IsValid() const
Check if the object state is valid.
An architecture specification class.
llvm::Triple & GetTriple()
Architecture triple accessor.
llvm::Triple::ArchType GetMachine() const
Returns a machine family for the current architecture.
General Outline: A breakpoint has four main parts, a filter, a resolver, the list of breakpoint locat...
void SetOneShot(bool one_shot)
If one_shot is true, breakpoint will be deleted on first hit.
void SetBreakpointKind(const char *kind)
Set the "kind" description for a breakpoint.
void SetCallback(BreakpointHitCallback callback, void *baton, bool is_synchronous=false)
Set the callback action invoked when the breakpoint is hit.
A uniqued constant string class.
bool IsEmpty() const
Test for empty string.
llvm::StringRef GetStringRef() const
Get the string value as a llvm::StringRef.
const char * GetCString() const
Get the string value as a C string.
static llvm::ThreadPoolInterface & GetThreadPool()
Shared thread pool. Use only with ThreadPoolTaskGroup.
int64_t ReadUnsignedIntWithSizeInBytes(lldb::addr_t addr, int size_in_bytes)
lldb::addr_t ReadPointer(lldb::addr_t addr)
Process * m_process
The process that this dynamic loader plug-in is tracking.
void UpdateLoadedSectionsCommon(lldb::ModuleSP module, lldb::addr_t base_addr, bool base_addr_is_offset)
lldb::ModuleSP GetTargetExecutable()
Checks to see if the target module has changed, updates the target accordingly and returns the target...
bool GetStopWhenImagesChange() const
Get whether the process should stop when images change.
virtual lldb::ModuleSP LoadModuleAtAddress(const lldb_private::FileSpec &file, lldb::addr_t link_map_addr, lldb::addr_t base_addr, bool base_addr_is_offset)
Locates or creates a module given by file and updates/loads the resulting module at the virtual base ...
DynamicLoader(Process *process)
Construct with a process.
void UnloadSectionsCommon(const lldb::ModuleSP module)
void Append(const FileSpec &file)
Append a FileSpec object to the list.
size_t GetPath(char *path, size_t max_path_length, bool denormalize=true) const
Extract the full path to the file.
const Address & GetAddress() const
Return the address of the function (its entry point).
ConstString GetName(NamePreference preference=ePreferDemangled) const
Best name get accessor.
LazyBool GetMapped() const
ConstString GetName() const
A collection class for Module objects.
lldb::ModuleSP FindFirstModule(const ModuleSpec &module_spec) const
Finds the first module whose file specification matches module_spec.
bool AppendIfNeeded(const lldb::ModuleSP &new_module, bool notify=true)
Append a module to the module list, if it is not already there.
void FindSymbolsWithNameAndType(ConstString name, lldb::SymbolType symbol_type, SymbolContextList &sc_list) const
bool Remove(const lldb::ModuleSP &module_sp, bool notify=true)
Remove a module from the module list.
lldb::ModuleSP GetModuleAtIndex(size_t idx) const
Get the module shared pointer for the module at index idx.
void Append(const lldb::ModuleSP &module_sp, bool notify=true)
Append a module to the module list.
ModuleIterable Modules() const
size_t GetSize() const
Gets the size of the module list.
void Dump(Stream &strm) const
void SetTarget(lldb::TargetSP target)
Set the target to be used when resolving a module.
static lldb::ModuleSP CreateModuleFromObjectFile(Args &&...args)
A plug-in interface definition class for object file parsers.
virtual lldb_private::Address GetImageInfoAddress(Target *target)
Similar to Process::GetImageInfoAddress().
virtual lldb_private::Address GetEntryPointAddress()
Returns the address of the Entry Point in this object file - if the object file doesn't have an entry...
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description, ABICreateInstance create_callback)
static bool UnregisterPlugin(ABICreateInstance create_callback)
FileSpec & GetExecutableFile()
ArchSpec & GetArchitecture()
A plug-in interface definition class for debugging a process.
lldb::pid_t GetID() const
Returns the pid of the process or LLDB_INVALID_PROCESS_ID if there is no known pid.
ThreadList & GetThreadList()
Status GetMemoryRegionInfo(lldb::addr_t load_addr, MemoryRegionInfo &range_info)
Locate the memory region that contains load_addr.
Target & GetTarget()
Get the target object pointer for this module.
uint64_t GetAsUInt64(uint64_t fail_value=UINT64_MAX, bool *success_ptr=nullptr) const
This base class provides an interface to stack frames.
virtual const SymbolContext & GetSymbolContext(lldb::SymbolContextItem resolve_scope)
Provide a SymbolContext for this StackFrame's current pc value.
bool Fail() const
Test for error condition.
General Outline: When we hit a breakpoint we need to package up whatever information is needed to eva...
const char * GetData() const
Defines a list of symbol context objects.
uint32_t GetSize() const
Get accessor for a symbol context list size.
Defines a symbol context baton that can be handed other debug core functions.
Function * function
The Function for a given query.
Symbol * symbol
The Symbol for a given query.
Address GetFunctionOrSymbolAddress() const
Get the address of the function or symbol represented by this symbol context.
bool IsTrampoline() const
Address & GetAddressRef()
void ModulesDidLoad(ModuleList &module_list)
This call may preload module symbols, and may do so in parallel depending on the following target set...
lldb::BreakpointSP GetBreakpointByID(lldb::break_id_t break_id)
bool RemoveBreakpointByID(lldb::break_id_t break_id)
lldb::ModuleSP GetOrCreateModule(const ModuleSpec &module_spec, bool notify, Status *error_ptr=nullptr)
Find a binary on the system and return its Module, or return an existing Module that is already in th...
static FileSpecList GetDefaultExecutableSearchPaths()
lldb::BreakpointSP CreateBreakpoint(const FileSpecList *containingModules, const FileSpec &file, uint32_t line_no, uint32_t column, lldb::addr_t offset, LazyBool check_inlines, LazyBool skip_prologue, bool internal, bool request_hardware, LazyBool move_to_nearest_code)
const ModuleList & GetImages() const
Get accessor for the images for this process.
const ArchSpec & GetArchitecture() const
uint32_t GetSize(bool can_update=true)
lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update=true)
Represents UUID's of various sizes.
#define LLDB_INVALID_BREAK_ID
#define LLDB_INVALID_ADDRESS
#define LLDB_REGNUM_GENERIC_TP
#define LLDB_INVALID_PROCESS_ID
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.
std::shared_ptr< lldb_private::ThreadPlan > ThreadPlanSP
std::shared_ptr< lldb_private::BreakpointLocation > BreakpointLocationSP
std::shared_ptr< lldb_private::Thread > ThreadSP
@ eLanguageTypeC
Non-standardized C, such as K&R.
std::shared_ptr< lldb_private::Breakpoint > BreakpointSP
std::shared_ptr< lldb_private::RegisterContext > RegisterContextSP
std::shared_ptr< lldb_private::Module > ModuleSP
@ eRegisterKindGeneric
insn ptr reg, stack ptr reg, etc not specific to any particular target
Structure representing the shared objects currently loaded into the inferior process.
BaseType GetRangeBase() const
SizeType GetByteSize() const
Every register is described in detail including its name, alternate name (optional),...