SBValueList SBModule::FindGlobalVariables (SBTarget &target, const char *name, uint32_t max_matches) { SBValueList sb_value_list; ModuleSP module_sp (GetSP ()); if (name && module_sp) { VariableList variable_list; const uint32_t match_count = module_sp->FindGlobalVariables (ConstString (name), NULL, false, max_matches, variable_list); if (match_count > 0) { for (uint32_t i=0; i<match_count; ++i) { lldb::ValueObjectSP valobj_sp; TargetSP target_sp (target.GetSP()); valobj_sp = ValueObjectVariable::Create (target_sp.get(), variable_list.GetVariableAtIndex(i)); if (valobj_sp) sb_value_list.Append(SBValue(valobj_sp)); } } } return sb_value_list; }
lldb::addr_t SBAddress::GetLoadAddress (const SBTarget &target) const { Log *log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); lldb::addr_t addr = LLDB_INVALID_ADDRESS; TargetSP target_sp (target.GetSP()); if (target_sp) { if (m_opaque_ap->IsValid()) { Mutex::Locker api_locker (target_sp->GetAPIMutex()); addr = m_opaque_ap->GetLoadAddress (target_sp.get()); } } if (log) { if (addr == LLDB_INVALID_ADDRESS) log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => LLDB_INVALID_ADDRESS", static_cast<void*>(target_sp.get())); else log->Printf ("SBAddress::GetLoadAddress (SBTarget(%p)) => 0x%" PRIx64, static_cast<void*>(target_sp.get()), addr); } return addr; }
SBInstructionList SBFunction::GetInstructions (SBTarget target, const char *flavor) { SBInstructionList sb_instructions; if (m_opaque_ptr) { Mutex::Locker api_locker; ExecutionContext exe_ctx; TargetSP target_sp (target.GetSP()); if (target_sp) { api_locker.Lock (target_sp->GetAPIMutex()); target_sp->CalculateExecutionContext (exe_ctx); exe_ctx.SetProcessSP(target_sp->GetProcessSP()); } ModuleSP module_sp (m_opaque_ptr->GetAddressRange().GetBaseAddress().GetModule()); if (module_sp) { const bool prefer_file_cache = false; sb_instructions.SetDisassembler (Disassembler::DisassembleRange (module_sp->GetArchitecture(), NULL, flavor, exe_ctx, m_opaque_ptr->GetAddressRange(), prefer_file_cache)); } } return sb_instructions; }
SBInstructionList SBSymbol::GetInstructions(SBTarget target, const char *flavor_string) { SBInstructionList sb_instructions; if (m_opaque_ptr) { ExecutionContext exe_ctx; TargetSP target_sp(target.GetSP()); std::unique_lock<std::recursive_mutex> lock; if (target_sp) { lock = std::unique_lock<std::recursive_mutex>(target_sp->GetAPIMutex()); target_sp->CalculateExecutionContext(exe_ctx); } if (m_opaque_ptr->ValueIsAddress()) { const Address &symbol_addr = m_opaque_ptr->GetAddressRef(); ModuleSP module_sp = symbol_addr.GetModule(); if (module_sp) { AddressRange symbol_range(symbol_addr, m_opaque_ptr->GetByteSize()); const bool prefer_file_cache = false; sb_instructions.SetDisassembler(Disassembler::DisassembleRange( module_sp->GetArchitecture(), NULL, flavor_string, exe_ctx, symbol_range, prefer_file_cache)); } } } return sb_instructions; }
SBBreakpointNameImpl::SBBreakpointNameImpl(SBTarget &sb_target, const char *name) { if (!name || name[0] == '\0') return; m_name.assign(name); if (!sb_target.IsValid()) return; TargetSP target_sp = sb_target.GetSP(); if (!target_sp) return; m_target_wp = target_sp; }
void SBDebugger::SetSelectedTarget (SBTarget &sb_target) { LogSP log(GetLogIfAllCategoriesSet (LIBLLDB_LOG_API)); TargetSP target_sp (sb_target.GetSP()); if (m_opaque_sp) { m_opaque_sp->GetTargetList().SetSelectedTarget (target_sp.get()); } if (log) { SBStream sstr; sb_target.GetDescription (sstr, eDescriptionLevelBrief); log->Printf ("SBDebugger(%p)::SetSelectedTarget () => SBTarget(%p): %s", m_opaque_sp.get(), target_sp.get(), sstr.GetData()); } }
SBSourceManager::SBSourceManager (const SBTarget &target) { m_opaque_ap.reset(new SourceManagerImpl (target.GetSP())); }