68#include "llvm/ADT/ScopeExit.h"
69#include "llvm/ADT/SetVector.h"
70#include "llvm/Support/ThreadPool.h"
82struct ExecutableInstaller {
85 : m_platform{platform}, m_module{module},
86 m_local_file{m_module->GetFileSpec()},
87 m_remote_file{m_module->GetRemoteInstallFileSpec()} {}
89 void setupRemoteFile()
const { m_module->SetPlatformFileSpec(m_remote_file); }
97struct MainExecutableInstaller {
101 : m_platform{platform}, m_module{module},
102 m_local_file{m_module->GetFileSpec()},
104 getRemoteFileSpec(m_platform, target, m_module, m_local_file)},
105 m_launch_info{launch_info} {}
107 void setupRemoteFile()
const {
108 m_module->SetPlatformFileSpec(m_remote_file);
111 m_platform->SetFilePermissions(m_remote_file, 0700 );
123 FileSpec remote_file = module->GetRemoteInstallFileSpec();
124 if (remote_file || !target->GetAutoInstallMainExecutable())
130 remote_file = platform->GetRemoteWorkingDirectory();
140template <
typename Installer>
142 if (!installer.m_local_file || !installer.m_remote_file)
145 Status error = installer.m_platform->Install(installer.m_local_file,
146 installer.m_remote_file);
150 installer.setupRemoteFile();
158 m_plugin_up(
PluginManager::CreateArchitectureInstance(spec)) {}
167 static constexpr llvm::StringLiteral class_name(
"lldb.target");
195 static_cast<void *
>(
this));
198 "Target::Target created with architecture {0} ({1})",
200 target_arch.
GetTriple().getTriple().c_str());
208 LLDB_LOG(log,
"{0} Target::~Target()",
static_cast<void *
>(
this));
216 if (breakpoint_sp->IsInternal())
261 std::unique_lock<std::recursive_mutex> lock;
292 llvm::StringRef plugin_name,
299 listener_sp, crash_file, can_connect);
306 const char *repl_options,
bool can_create) {
314 language = *single_lang;
315 }
else if (repl_languages.
Empty()) {
317 "LLDB isn't configured with REPL support for any languages.");
321 "Multiple possible REPL languages. Please specify a language.");
326 REPLMap::iterator pos =
m_repl_map.find(language);
334 "Couldn't find an existing REPL for %s, and can't create a new one",
349 "Couldn't create a REPL for %s",
363 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
370 const bool notify =
false;
393 return abi_sp->GetPluginName();
424 ModuleSP main_module_sp = GetExecutableModule();
426 shared_lib_filter.
Append(main_module_sp->GetFileSpec());
427 llvm::SetVector<std::string, std::vector<std::string>,
428 std::unordered_set<std::string>>
437 if (!entryPointName.empty())
438 entryPointNamesSet.insert(entryPointName);
440 if (entryPointNamesSet.empty()) {
446 nullptr, entryPointNamesSet.takeVector(),
447 eFunctionNameTypeFull,
457 bp_sp->SetOneShot(
true);
464 const std::unordered_set<std::string> &function_names,
468 containingModules, source_file_spec_list));
472 nullptr, std::move(source_regex), function_names,
473 !
static_cast<bool>(move_to_nearest_code)));
479 const FileSpec &file, uint32_t line_no,
482 LazyBool skip_prologue,
bool internal,
486 std::optional<llvm::StringRef> removed_prefix_opt =
488 if (!removed_prefix_opt)
489 remapped_file = file;
493 switch (inline_strategy) {
514 compile_unit_list.
Append(remapped_file);
527 !
static_cast<bool>(move_to_nearest_code));
532 nullptr, offset, skip_prologue, location_spec, removed_prefix_opt));
568 bool request_hardware) {
572 nullptr, file_addr, file_spec));
579 const FileSpecList *containingSourceFiles,
const char *func_name,
580 FunctionNameType func_name_type_mask,
LanguageType language,
585 containingModules, containingSourceFiles));
594 offset, skip_prologue));
603 const std::vector<std::string> &func_names,
604 FunctionNameType func_name_type_mask,
606 LazyBool skip_prologue,
bool internal,
bool hardware) {
608 size_t num_names = func_names.size();
611 containingModules, containingSourceFiles));
620 language, offset, skip_prologue));
629 const char *func_names[],
size_t num_names,
630 FunctionNameType func_name_type_mask,
632 LazyBool skip_prologue,
bool internal,
bool hardware) {
636 containingModules, containingSourceFiles));
648 nullptr, func_names, num_names, func_name_type_mask, language, offset,
650 resolver_sp->SetOffset(offset);
659 if (containingModule !=
nullptr) {
662 filter_sp = std::make_shared<SearchFilterByModule>(shared_from_this(),
667 std::make_shared<SearchFilterForUnconstrainedSearches>(
677 if (containingModules && containingModules->
GetSize() != 0) {
680 filter_sp = std::make_shared<SearchFilterByModuleList>(shared_from_this(),
685 std::make_shared<SearchFilterForUnconstrainedSearches>(
695 if (containingSourceFiles ==
nullptr || containingSourceFiles->
GetSize() == 0)
699 if (containingModules ==
nullptr) {
703 filter_sp = std::make_shared<SearchFilterByModuleListAndCU>(
704 shared_from_this(),
FileSpecList(), *containingSourceFiles);
706 filter_sp = std::make_shared<SearchFilterByModuleListAndCU>(
707 shared_from_this(), *containingModules, *containingSourceFiles);
716 bool internal,
bool hardware) {
718 containingModules, containingSourceFiles));
721 :
static_cast<bool>(skip_prologue);
723 nullptr, std::move(func_regex), requested_language, 0, skip));
730 bool catch_bp,
bool throw_bp,
bool internal,
733 *
this, language, catch_bp, throw_bp, internal);
734 if (exc_bkpt_sp && additional_args) {
736 if (precondition_sp && additional_args) {
738 *
error = precondition_sp->ConfigurePrecondition(*additional_args);
740 precondition_sp->ConfigurePrecondition(*additional_args);
747 const llvm::StringRef class_name,
const FileSpecList *containingModules,
748 const FileSpecList *containingSourceFiles,
bool internal,
755 containingSourceFiles && containingSourceFiles->
GetSize() > 0;
756 bool has_modules = containingModules && containingModules->
GetSize() > 0;
758 if (has_files && has_modules) {
760 containingSourceFiles);
761 }
else if (has_files) {
764 }
else if (has_modules) {
767 filter_sp = std::make_shared<SearchFilterForUnconstrainedSearches>(
778 bool internal,
bool request_hardware,
779 bool resolve_indirect_symbols) {
781 if (filter_sp && resolver_sp) {
783 bp_sp.reset(
new Breakpoint(*
this, filter_sp, resolver_sp, hardware,
784 resolve_indirect_symbols));
785 resolver_sp->SetBreakpoint(bp_sp);
803 LLDB_LOGF(log,
"Target::%s (internal = %s) => break_id = %s\n",
804 __FUNCTION__, bp_sp->IsInternal() ?
"yes" :
"no", s.
GetData());
807 bp_sp->ResolveBreakpoint();
838 bp_sp->AddName(name);
843 std::make_pair(bp_name->GetName(), std::move(bp_name)));
849 if (!
error.Success())
854 return iter->second.get();
859 "Breakpoint name \"%s\" doesn't exist and "
860 "can_create is false.",
866 .insert(std::make_pair(name, std::make_unique<BreakpointName>(name)))
867 .first->second.get();
874 const char *name_cstr = name.
AsCString();
877 bp_sp->RemoveName(name_cstr);
895 llvm::Expected<std::vector<BreakpointSP>> expected_vector =
898 if (!expected_vector) {
900 llvm::toString(expected_vector.takeError()));
904 for (
auto bp_sp : *expected_vector)
911 names.push_back(bp_name_entry.first.AsCString());
921 std::optional<uint32_t> num_supported_hardware_watchpoints =
926 if (!num_supported_hardware_watchpoints)
929 if (*num_supported_hardware_watchpoints == 0) {
931 "Target supports (%u) hardware watchpoint slots.\n",
932 *num_supported_hardware_watchpoints);
945 "Target::%s (addr = 0x%8.8" PRIx64
" size = %" PRIu64
947 __FUNCTION__, addr, (uint64_t)size, kind);
958 "cannot set a watchpoint with watch_size of 0");
961 "invalid watch address: %" PRIu64, addr);
977 const bool notify =
false;
982 addr = abi->FixDataAddress(addr);
996 std::unique_lock<std::recursive_mutex> lock;
1000 size_t old_size = matched_sp->GetByteSize();
1006 if (size == old_size && kind == old_type) {
1008 wp_sp->SetEnabled(
false, notify);
1017 wp_sp = std::make_shared<Watchpoint>(*
this, addr, size, type);
1018 wp_sp->SetWatchpointType(kind, notify);
1023 LLDB_LOGF(log,
"Target::%s (creation of watchpoint %s with id = %u)\n",
1024 __FUNCTION__,
error.Success() ?
"succeeded" :
"failed",
1039 LLDB_LOGF(log,
"Target::%s \n", __FUNCTION__);
1048 LLDB_LOGF(log,
"Target::%s (internal_also = %s)\n", __FUNCTION__,
1049 internal_also ?
"yes" :
"no");
1060 LLDB_LOGF(log,
"Target::%s (internal_also = %s)\n", __FUNCTION__,
1061 internal_also ?
"yes" :
"no");
1070 LLDB_LOGF(log,
"Target::%s", __FUNCTION__);
1077 LLDB_LOGF(log,
"Target::%s (internal_also = %s)\n", __FUNCTION__,
1078 internal_also ?
"yes" :
"no");
1087 LLDB_LOGF(log,
"Target::%s", __FUNCTION__);
1094 LLDB_LOGF(log,
"Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__,
1114 LLDB_LOGF(log,
"Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__,
1124 bp_sp->SetEnabled(
false);
1132 LLDB_LOGF(log,
"Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__,
1143 bp_sp->SetEnabled(
true);
1163 std::string path(file.
GetPath());
1171 if (
error.Success()) {
1172 break_store_ptr = input_data_sp->
GetAsArray();
1173 if (!break_store_ptr) {
1175 "Tried to append to invalid input file %s", path.c_str());
1181 if (!break_store_ptr) {
1182 break_store_sp = std::make_shared<StructuredData::Array>();
1183 break_store_ptr = break_store_sp.get();
1190 lldb::eFilePermissionsFileDefault);
1197 std::unique_lock<std::recursive_mutex> lock;
1203 size_t num_breakpoints = breakpoints.
GetSize();
1204 for (
size_t i = 0; i < num_breakpoints; i++) {
1209 break_store_ptr->
AddItem(bkpt_save_sp);
1213 std::unordered_set<lldb::break_id_t> processed_bkpts;
1214 const size_t count = bp_ids.
GetSize();
1215 for (
size_t i = 0; i < count; ++i) {
1221 std::pair<std::unordered_set<lldb::break_id_t>::iterator,
bool>
1222 insert_result = processed_bkpts.insert(bp_id);
1223 if (!insert_result.second)
1230 if (!bkpt_save_sp) {
1232 "Unable to serialize breakpoint %d", bp_id);
1235 break_store_ptr->
AddItem(bkpt_save_sp);
1240 break_store_ptr->
Dump(out_file,
false);
1247 std::vector<std::string> no_names;
1252 std::vector<std::string> &names,
1254 std::unique_lock<std::recursive_mutex> lock;
1260 if (!
error.Success()) {
1262 }
else if (!input_data_sp || !input_data_sp->IsValid()) {
1264 "Invalid JSON from input file: %s.", file.
GetPath().c_str());
1271 "Invalid breakpoint data from input file: %s.", file.
GetPath().c_str());
1275 size_t num_bkpts = bkpt_array->
GetSize();
1276 size_t num_names = names.size();
1278 for (
size_t i = 0; i < num_bkpts; i++) {
1284 "Invalid breakpoint data for element %zu from input file: %s.", i,
1295 shared_from_this(), bkpt_data_sp,
error);
1296 if (!
error.Success()) {
1298 "Error restoring breakpoint %zu from %s: %s.", i,
1314 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1343 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1370 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1396 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1402 wp_sp->ResetHitCount();
1410 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1416 wp_sp->ResetHistoricValues();
1425 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1434 wp_sp->SetIgnoreCount(ignore_count);
1442 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1461 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1480 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1495 uint32_t ignore_count) {
1497 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1504 wp_sp->SetIgnoreCount(ignore_count);
1532 if (module_sp && !module_sp->LoadScriptingResourceInTarget(target,
error,
1534 if (
error.AsCString())
1536 "unable to load scripting data for module %s - error reported was "
1538 module_sp->GetFileSpec().GetFileNameStrippingExtension().GetCString(),
1541 if (feedback_stream.
GetSize())
1564 if (executable_sp) {
1567 executable_sp->GetFileSpec().GetPath().c_str());
1569 const bool notify =
true;
1576 m_arch = executable_sp->GetArchitecture();
1578 "Target::SetExecutableModule setting architecture to {0} ({1}) "
1579 "based on executable file",
1584 ObjectFile *executable_objfile = executable_sp->GetObjectFile();
1585 bool load_dependents =
true;
1586 switch (load_dependent_files) {
1588 load_dependents = executable_sp->IsExecutable();
1591 load_dependents =
true;
1594 load_dependents =
false;
1598 if (executable_objfile && load_dependents) {
1601 std::mutex dependent_files_mutex;
1606 auto GetDependentModules = [&](
FileSpec dependent_file_spec) {
1607 FileSpec platform_dependent_file_spec;
1609 m_platform_sp->GetFileWithUUID(dependent_file_spec,
nullptr,
1610 platform_dependent_file_spec);
1612 platform_dependent_file_spec = dependent_file_spec;
1617 if (image_module_sp) {
1619 ObjectFile *objfile = image_module_sp->GetObjectFile();
1625 std::lock_guard<std::mutex> guard(dependent_files_mutex);
1626 dependent_files_copy = dependent_files;
1631 const size_t previous_dependent_files =
1632 dependent_files_copy.
GetSize();
1637 std::lock_guard<std::mutex> guard(dependent_files_mutex);
1638 for (
size_t i = previous_dependent_files;
1639 i < dependent_files_copy.
GetSize(); ++i)
1650 for (uint32_t i = 0; i < dependent_files.
GetSize(); i++) {
1656 std::lock_guard<std::mutex> guard(dependent_files_mutex);
1657 for (; i < dependent_files.
GetSize(); i++)
1658 task_group.async(GetDependentModules,
1672 bool replace_local_arch =
true;
1673 bool compatible_local_arch =
false;
1682 if (!platform_sp || !platform_sp->IsCompatibleArchitecture(
1686 GetDebugger().GetPlatformList().GetOrCreate(other, {},
1690 other = platform_arch;
1696 if (!missing_local_arch) {
1701 compatible_local_arch =
true;
1704 replace_local_arch =
false;
1709 if (compatible_local_arch || missing_local_arch) {
1713 if (replace_local_arch)
1716 "Target::SetArchitecture merging compatible arch; arch "
1727 "Target::SetArchitecture changing architecture to %s (%s) from %s (%s)",
1729 arch_spec.
GetTriple().getTriple().c_str(),
1738 if (executable_sp) {
1740 "Target::SetArchitecture Trying to select executable file "
1741 "architecture %s (%s)",
1743 arch_spec.
GetTriple().getTriple().c_str());
1744 ModuleSpec module_spec(executable_sp->GetFileSpec(), other);
1747 &search_paths,
nullptr,
nullptr);
1749 if (!
error.Fail() && executable_sp) {
1765 "Target::MergeArchitecture target has arch %s, merging with "
1768 arch_spec.
GetTriple().getTriple().c_str());
1789 my_module_list.
Append(module_sp);
1799 my_module_list.
Append(module_sp);
1812 old_module_sp, new_module_sp);
1821 const size_t num_images = module_list.
GetSize();
1823 for (
size_t idx = 0; idx < num_images; ++idx) {
1835 std::make_shared<TargetEventData>(shared_from_this(), module_list);
1844 runtime->SymbolsDidLoad(module_list);
1851 std::make_shared<TargetEventData>(shared_from_this(), module_list);
1860 std::make_shared<TargetEventData>(shared_from_this(), module_list);
1874 const bool should_flush_type_systems =
1881 auto type = object_file->
GetType();
1891 if (should_flush_type_systems)
1897 const FileSpec &module_file_spec) {
1902 size_t num_modules = matchingModules.
GetSize();
1906 if (num_modules > 0) {
1907 for (
size_t i = 0; i < num_modules; i++) {
1922 return m_platform_sp->ModuleIsExcludedForUnconstrainedSearches(*
this,
1934 if (section_sp->IsEncrypted()) {
1938 ModuleSP module_sp(section_sp->GetModule());
1943 section_sp.get(), addr.
GetOffset(), dst, dst_len);
1948 "error reading data from section %s",
1949 section_sp->GetName().GetCString());
1956 "address doesn't contain a section that points to a "
1957 "section in a object file");
1978 size_t bytes_read = 0;
1985 if (section_load_list.
IsEmpty()) {
2004 resolved_addr = fixed_addr;
2009 std::unique_ptr<uint8_t[]> file_cache_read_buffer;
2010 size_t file_cache_bytes_read = 0;
2016 auto permissions =
Flags(section_sp->GetPermissions());
2017 bool is_readonly = !permissions.Test(ePermissionsWritable) &&
2018 permissions.Test(ePermissionsReadable);
2020 file_cache_bytes_read =
2022 if (file_cache_bytes_read == dst_len)
2023 return file_cache_bytes_read;
2024 else if (file_cache_bytes_read > 0) {
2025 file_cache_read_buffer =
2026 std::make_unique<uint8_t[]>(file_cache_bytes_read);
2027 std::memcpy(file_cache_read_buffer.get(), dst, file_cache_bytes_read);
2039 if (addr_module_sp && addr_module_sp->GetFileSpec())
2041 "{0:F}[{1:x+}] can't be resolved, {0:F} is not currently loaded",
2045 "0x%" PRIx64
" can't be resolved", resolved_addr.
GetFileAddress());
2048 if (bytes_read != dst_len) {
2049 if (
error.Success()) {
2050 if (bytes_read == 0)
2052 "read memory from 0x%" PRIx64
" failed", load_addr);
2055 "only %" PRIu64
" of %" PRIu64
2056 " bytes were read from memory at 0x%" PRIx64,
2057 (uint64_t)bytes_read, (uint64_t)dst_len, load_addr);
2062 *load_addr_ptr = load_addr;
2068 if (file_cache_read_buffer && file_cache_bytes_read > 0) {
2071 std::memcpy(dst, file_cache_read_buffer.get(), file_cache_bytes_read);
2072 return file_cache_bytes_read;
2094 out_str.append(buf, length);
2097 if (length ==
sizeof(buf) - 1)
2098 curr_addr += length;
2103 return out_str.size();
2107 size_t dst_max_len,
Status &result_error,
2108 bool force_live_memory) {
2109 size_t total_cstr_len = 0;
2110 if (dst && dst_max_len) {
2111 result_error.
Clear();
2113 memset(dst, 0, dst_max_len);
2120 const size_t cache_line_size = 512;
2122 size_t bytes_left = dst_max_len - 1;
2123 char *curr_dst = dst;
2125 while (bytes_left > 0) {
2126 addr_t cache_line_bytes_left =
2127 cache_line_size - (curr_addr % cache_line_size);
2129 std::min<addr_t>(bytes_left, cache_line_bytes_left);
2131 size_t bytes_read =
ReadMemory(address, curr_dst, bytes_to_read,
error,
2134 if (bytes_read == 0) {
2135 result_error = std::move(
error);
2136 dst[total_cstr_len] =
'\0';
2139 const size_t len = strlen(curr_dst);
2141 total_cstr_len += len;
2143 if (len < bytes_to_read)
2146 curr_dst += bytes_read;
2147 curr_addr += bytes_read;
2148 bytes_left -= bytes_read;
2155 result_error.
Clear();
2157 return total_cstr_len;
2165 return cache_line_size - (load_addr % cache_line_size);
2175 size_t type_width,
bool force_live_memory) {
2176 if (!dst || !max_bytes || !type_width || max_bytes < type_width)
2179 size_t total_bytes_read = 0;
2183 memset(dst, 0, max_bytes);
2184 size_t bytes_left = max_bytes - type_width;
2186 const char terminator[4] = {
'\0',
'\0',
'\0',
'\0'};
2187 assert(
sizeof(terminator) >= type_width &&
"Attempting to validate a "
2188 "string with more than 4 bytes "
2192 char *curr_dst = dst;
2195 while (bytes_left > 0 &&
error.Success()) {
2199 ReadMemory(address, curr_dst, bytes_to_read,
error, force_live_memory);
2201 if (bytes_read == 0)
2206 size_t aligned_start = total_bytes_read - total_bytes_read % type_width;
2207 for (
size_t i = aligned_start;
2208 i + type_width <= total_bytes_read + bytes_read; i += type_width)
2209 if (::memcmp(&dst[i], terminator, type_width) == 0) {
2214 total_bytes_read += bytes_read;
2215 curr_dst += bytes_read;
2216 address.
Slide(bytes_read);
2217 bytes_left -= bytes_read;
2219 return total_bytes_read;
2223 bool is_signed,
Scalar &scalar,
2225 bool force_live_memory) {
2228 if (byte_size <=
sizeof(uval)) {
2231 if (bytes_read == byte_size) {
2236 scalar = data.
GetMaxU32(&offset, byte_size);
2238 scalar = data.
GetMaxU64(&offset, byte_size);
2246 "byte size of %u is too large for integer scalar type", byte_size);
2252 size_t integer_byte_size,
2254 bool force_live_memory) {
2264 bool force_live_memory) {
2267 false, scalar,
error, force_live_memory)) {
2271 if (section_load_list.
IsEmpty()) {
2285 pointer_addr.
SetOffset(pointer_vm_addr);
2293 bool notify,
Status *error_ptr) {
2301 if (std::optional<FileSpec> remapped_obj_file =
2315 llvm::SmallVector<ModuleSP, 1>
2318 bool did_create_module =
false;
2328 module_spec, module_sp, symbol_file_spec, &did_create_module);
2359 &search_paths, &old_modules,
2360 &did_create_module);
2378 &old_modules, &did_create_module);
2386 module_spec,
m_process_sp.get(), module_sp, &search_paths,
2387 &old_modules, &did_create_module);
2398 ObjectFile *objfile = module_sp->GetObjectFile();
2414 "debug info files aren't valid target "
2415 "modules, please specify an executable");
2422 "stub libraries aren't valid target "
2423 "modules, please specify an executable");
2428 "unsupported file type, please specify an executable");
2449 old_modules.push_back(found_module);
2456 if (symbol_file_spec)
2457 module_sp->SetSymbolFileFileSpec(symbol_file_spec);
2462 module_sp->PreloadSymbols();
2463 llvm::SmallVector<ModuleSP, 1> replaced_modules;
2464 for (
ModuleSP &old_module_sp : old_modules) {
2467 if (replaced_modules.empty())
2472 replaced_modules.push_back(std::move(old_module_sp));
2476 if (replaced_modules.size() > 1) {
2489 auto dump = [&message](
Module &dump_module) ->
void {
2490 UUID dump_uuid = dump_module.GetUUID();
2494 message <<
" (uuid ";
2497 dump_uuid.
Dump(message);
2499 message <<
"not specified";
2504 message <<
"New module ";
2507 << llvm::formatv(
" simultaneously replaced {0} old modules: ",
2508 replaced_modules.size());
2509 for (
ModuleSP &replaced_module_sp : replaced_modules)
2510 dump(*replaced_module_sp);
2516 if (replaced_modules.empty())
2519 for (
ModuleSP &old_module_sp : replaced_modules) {
2520 Module *old_module_ptr = old_module_sp.get();
2521 old_module_sp.reset();
2529 *error_ptr = std::move(
error);
2558llvm::Expected<lldb::TypeSystemSP>
2560 bool create_on_demand) {
2562 return llvm::createStringError(
"Invalid Target");
2574 if (languages_for_expressions.
Empty())
2575 return llvm::createStringError(
2576 "No expression support for any languages");
2587 uint32_t byte_size) {
2590 return provider->GetRegisterType(name, flags, byte_size);
2593std::vector<lldb::TypeSystemSP>
2601 std::vector<lldb::TypeSystemSP> scratch_type_systems;
2606 for (
auto bit : languages_for_expressions.
bitvector.set_bits()) {
2608 auto type_system_or_err =
2610 if (!type_system_or_err)
2613 "Language '{1}' has expression support but no scratch type "
2614 "system available: {0}",
2617 if (
auto ts = *type_system_or_err)
2618 scratch_type_systems.push_back(ts);
2621 std::sort(scratch_type_systems.begin(), scratch_type_systems.end());
2622 scratch_type_systems.erase(
2623 std::unique(scratch_type_systems.begin(), scratch_type_systems.end()),
2624 scratch_type_systems.end());
2625 return scratch_type_systems;
2632 if (
auto err = type_system_or_err.takeError()) {
2635 "Unable to get persistent expression state for language {1}: {0}",
2640 if (
auto ts = *type_system_or_err)
2641 return ts->GetPersistentExpressionState();
2644 "Unable to get persistent expression state for language {1}: {0}",
2650 llvm::StringRef expr, llvm::StringRef prefix,
SourceLanguage language,
2654 auto type_system_or_err =
2656 if (
auto err = type_system_or_err.takeError()) {
2658 "Could not find type system for language %s: %s",
2660 llvm::toString(std::move(err)).c_str());
2664 auto ts = *type_system_or_err;
2667 "Type system for language %s is no longer live",
2672 auto *user_expr = ts->GetUserExpression(expr, prefix, language, desired_type,
2676 "Could not create an expression for language %s",
2687 if (
auto err = type_system_or_err.takeError()) {
2689 "Could not find type system for language %s: %s",
2691 llvm::toString(std::move(err)).c_str());
2694 auto ts = *type_system_or_err;
2697 "Type system for language %s is no longer live",
2701 auto *persistent_fn = ts->GetFunctionCaller(return_type, function_address,
2702 arg_value_list, name);
2705 "Could not create an expression for language %s",
2708 return persistent_fn;
2711llvm::Expected<std::unique_ptr<UtilityFunction>>
2716 if (!type_system_or_err)
2717 return type_system_or_err.takeError();
2718 auto ts = *type_system_or_err;
2720 return llvm::createStringError(
2721 llvm::StringRef(
"Type system for language ") +
2723 llvm::StringRef(
" is no longer live"));
2724 std::unique_ptr<UtilityFunction> utility_fn =
2725 ts->CreateUtilityFunction(std::move(expression), std::move(name));
2727 return llvm::createStringError(
2728 llvm::StringRef(
"Could not create an expression for language") +
2732 if (!utility_fn->Install(diagnostics, exe_ctx))
2734 "Could not install utility function:");
2736 return std::move(utility_fn);
2757 "setting target's default architecture to {0} ({1})",
2764 if (llvm::to_integer(label, n))
2765 return llvm::createStringError(
"Cannot use integer as target label.");
2769 if (target_sp && target_sp->GetLabel() == label) {
2770 return llvm::make_error<llvm::StringError>(
2772 "Cannot use label '{0}' since it's set in target #{1}.", label,
2774 llvm::inconvertibleErrorCode());
2779 return llvm::Error::success();
2788 Target *target =
nullptr;
2789 if (sc_ptr !=
nullptr)
2791 if (target ==
nullptr && exe_ctx_ptr)
2801 result_valobj_sp.reset();
2807 return execution_results;
2813 auto on_exit = llvm::make_scope_exit([
this, old_suppress_value]() {
2831 if (expr[0] ==
'$') {
2832 auto type_system_or_err =
2834 if (
auto err = type_system_or_err.takeError()) {
2836 "Unable to get scratch type system");
2838 auto ts = *type_system_or_err;
2841 "Scratch type system is no longer live: {0}");
2844 ts->GetPersistentExpressionState()->GetVariable(expr);
2847 if (persistent_var_sp) {
2848 result_valobj_sp = persistent_var_sp->GetValueObject();
2854 result_valobj_sp, fixed_expression, ctx_obj);
2861 return execution_results;
2867 [name, &variable_sp](
TypeSystemSP type_system) ->
bool {
2868 auto ts = type_system.get();
2872 ts->GetPersistentExpressionState()) {
2873 variable_sp = persistent_state->GetVariable(name);
2888 auto ts = type_system.get();
2893 ts->GetPersistentExpressionState()) {
2894 address = persistent_state->LookupSymbol(name);
2895 if (address != LLDB_INVALID_ADDRESS)
2907 const bool has_primary_executable = exe_module && exe_module->
GetObjectFile();
2908 if (has_primary_executable) {
2915 const size_t num_images = modules.
GetSize();
2916 for (
size_t idx = 0; idx < num_images; ++idx) {
2918 if (!module_sp || !module_sp->GetObjectFile())
2921 Address entry_addr = module_sp->GetObjectFile()->GetEntryPointAddress();
2927 if (!has_primary_executable)
2928 return llvm::createStringError(
2929 "No primary executable found and could not find entry point address in "
2930 "any executable module");
2932 return llvm::createStringError(
2933 "Could not find entry point address for primary executable module \"" +
2941 ? arch_plugin->GetCallableLoadAddress(load_addr, addr_class)
2948 return arch_plugin ? arch_plugin->GetOpcodeLoadAddress(load_addr, addr_class)
2954 return arch_plugin ? arch_plugin->GetBreakableLoadAddress(addr, *
this) : addr;
2975 return stop_hook_sp;
2987 return (num_removed != 0);
2995 StopHookCollection::iterator specified_hook_iter;
2998 found_hook = (*specified_hook_iter).second;
3003 bool active_state) {
3004 StopHookCollection::iterator specified_hook_iter;
3009 (*specified_hook_iter).second->SetIsActive(active_state);
3014 StopHookCollection::iterator pos, end =
m_stop_hooks.end();
3016 (*pos).second->SetIsActive(active_state);
3036 bool any_active_hooks =
false;
3038 if (hook.second->IsActive()) {
3039 any_active_hooks =
true;
3043 if (!any_active_hooks)
3052 uint32_t last_natural_stop =
m_process_sp->GetModIDRef().GetLastNaturalStopID();
3058 std::vector<ExecutionContext> exc_ctx_with_reasons;
3061 size_t num_threads = cur_threadlist.
GetSize();
3062 for (
size_t i = 0; i < num_threads; i++) {
3064 if (cur_thread_sp->ThreadStoppedForAReason()) {
3066 exc_ctx_with_reasons.emplace_back(
m_process_sp.get(), cur_thread_sp.get(),
3067 cur_frame_sp.get());
3072 size_t num_exe_ctx = exc_ctx_with_reasons.size();
3073 if (num_exe_ctx == 0)
3078 bool auto_continue =
false;
3079 bool hooks_ran =
false;
3081 bool print_thread_header = (num_exe_ctx != 1);
3082 bool should_stop =
false;
3083 bool somebody_restarted =
false;
3087 if (!cur_hook_sp->IsActive())
3090 bool any_thread_matched =
false;
3091 for (
auto exc_ctx : exc_ctx_with_reasons) {
3094 if (somebody_restarted)
3097 if (!cur_hook_sp->ExecutionContextPasses(exc_ctx))
3102 auto_continue |= cur_hook_sp->GetAutoContinue();
3107 if (print_hook_header && !any_thread_matched) {
3111 output_sp->
Printf(
"\n- Hook %" PRIu64
" (%s)\n", cur_hook_sp->GetID(),
3114 output_sp->Printf(
"\n- Hook %" PRIu64
"\n", cur_hook_sp->GetID());
3115 any_thread_matched =
true;
3118 if (print_thread_header)
3119 output_sp->Printf(
"-- Thread %d\n",
3120 exc_ctx.GetThreadPtr()->GetIndexID());
3123 cur_hook_sp->HandleStop(exc_ctx, output_sp);
3124 bool this_should_stop =
true;
3126 switch (this_result) {
3130 if (cur_hook_sp->GetAutoContinue())
3131 this_should_stop =
false;
3133 this_should_stop =
true;
3137 this_should_stop =
false;
3143 output_sp->Printf(
"\nAborting stop hooks, hook %" PRIu64
3144 " set the program running.\n"
3145 " Consider using '-G true' to make "
3146 "stop hooks auto-continue.\n",
3147 cur_hook_sp->GetID());
3148 somebody_restarted =
true;
3155 if (somebody_restarted)
3160 should_stop = this_should_stop;
3168 if (somebody_restarted)
3174 if ((hooks_ran && !should_stop) || auto_continue) {
3177 if (
error.Success()) {
3178 LLDB_LOG(log,
"Resuming from RunStopHooks");
3181 LLDB_LOG(log,
"Resuming from RunStopHooks failed: {0}",
error);
3194 return *g_settings_ptr;
3200 if (!platform_sp || !platform_sp->IsRemote() || !platform_sp->IsConnected())
3210 MainExecutableInstaller installer{platform_sp, module_sp,
3211 shared_from_this(), *launch_info};
3214 ExecutableInstaller installer{platform_sp, module_sp};
3226 uint32_t stop_id,
bool allow_section_end) {
3237 addr_t new_section_load_addr,
3238 bool warn_multiple) {
3239 const addr_t old_section_load_addr =
3242 if (old_section_load_addr != new_section_load_addr) {
3243 uint32_t stop_id = 0;
3246 stop_id = process_sp->GetStopID();
3250 stop_id, section_sp, new_section_load_addr, warn_multiple))
3257 size_t section_unload_count = 0;
3258 size_t num_modules = module_list.
GetSize();
3259 for (
size_t i = 0; i < num_modules; ++i) {
3260 section_unload_count +=
3263 return section_unload_count;
3267 uint32_t stop_id = 0;
3270 stop_id = process_sp->GetStopID();
3273 SectionList *sections = module_sp->GetSectionList();
3274 size_t section_unload_count = 0;
3277 for (uint32_t i = 0; i < num_sections; ++i) {
3282 return section_unload_count;
3286 uint32_t stop_id = 0;
3289 stop_id = process_sp->GetStopID();
3297 uint32_t stop_id = 0;
3300 stop_id = process_sp->GetStopID();
3335 LLDB_LOGF(log,
"Target::%s() called for %s", __FUNCTION__,
3347 state = process_sp->GetState();
3349 "Target::%s the process exists, and its current state is %s",
3352 LLDB_LOGF(log,
"Target::%s the process instance doesn't currently exist.",
3365 const bool synchronous_execution =
3373 if (launch_info.
GetFlags().
Test(eLaunchFlagLaunchInTTY))
3375 "can't launch in tty when launching through a remote connection");
3393 LLDB_LOGF(log,
"Target::%s asking the platform to debug the process",
3407 "Target::%s the platform doesn't know how to debug a "
3408 "process, getting a process plugin to do this for us.",
3427 if (!
error.Success())
3433 bool rebroadcast_first_stop =
3434 !synchronous_execution &&
3440 state =
m_process_sp->WaitForProcessToStop(std::nullopt, &first_stop_event_sp,
3441 rebroadcast_first_stop,
3445 if (rebroadcast_first_stop) {
3446 assert(first_stop_event_sp);
3453 if (launch_info.
GetFlags().
Test(eLaunchFlagStopAtEntry))
3455 if (synchronous_execution)
3462 if (!
error.Success()) {
3464 "process resume at entry point failed: %s",
error.AsCString());
3468 bool with_shell = !!launch_info.
GetShell();
3470 const char *exit_desc =
m_process_sp->GetExitDescription();
3472 if (exit_desc && exit_desc[0])
3473 desc =
" (" + std::string(exit_desc) +
')';
3476 "process exited with status %i%s\n"
3477 "'r' and 'run' are aliases that default to launching through a "
3479 "Try launching without going through a shell by using "
3480 "'process launch'.",
3481 exit_status, desc.c_str());
3484 "process exited with status %i%s", exit_status, desc.c_str());
3488 "initial process state wasn't stopped: %s",
StateAsCString(state));
3500 return llvm::createStringError(llvm::inconvertibleErrorCode(),
3501 "A process is required for tracing");
3503 return llvm::createStringError(llvm::inconvertibleErrorCode(),
3504 "A trace already exists for the target");
3506 llvm::Expected<TraceSupportedResponse> trace_type =
3509 return llvm::createStringError(
3510 llvm::inconvertibleErrorCode(),
"Tracing is not supported. %s",
3511 llvm::toString(trace_type.takeError()).c_str());
3512 if (llvm::Expected<TraceSP> trace_sp =
3516 return llvm::createStringError(
3517 llvm::inconvertibleErrorCode(),
3518 "Couldn't create a Trace object for the process. %s",
3519 llvm::toString(trace_sp.takeError()).c_str());
3534 state = process_sp->GetState();
3547 if (old_exec_module_sp)
3549 old_exec_module_sp->GetPlatformFileSpec().GetFilename());
3553 "no process specified, create a target with a file, or "
3554 "specify the --pid or --name");
3558 const auto platform_sp =
3561 const bool async = attach_info.
GetAsync();
3579 plugin_name,
nullptr,
false);
3582 "failed to create process using plugin '{0}'",
3583 plugin_name.empty() ?
"<empty>" : plugin_name);
3587 if (hijack_listener_sp)
3588 process_sp->HijackProcessEvents(hijack_listener_sp);
3589 error = process_sp->Attach(attach_info);
3592 if (
error.Success() && process_sp) {
3594 process_sp->RestoreProcessEvents();
3597 state = process_sp->WaitForProcessToStop(
3600 process_sp->RestoreProcessEvents();
3603 const char *exit_desc = process_sp->GetExitDescription();
3608 "process did not stop (no such process or permission problem?)");
3609 process_sp->Destroy(
false);
3622 const bool default_to_use_pty =
3626 "have platform={0}, platform_sp->IsHost()={1}, default_to_use_pty={2}",
3628 platform_sp ? (platform_sp->IsHost() ?
"true" :
"false") :
"n/a",
3629 default_to_use_pty);
3636 LLDB_LOG(log,
"at least one of stdin/stdout/stderr was not set, evaluating "
3637 "default handling");
3646 LLDB_LOG(log,
"eLaunchFlagDisableSTDIO set, adding suppression action "
3647 "for stdin, stdout and stderr");
3667 LLDB_LOG(log,
"target stdin='{0}', target stdout='{1}', stderr='{2}'",
3668 in_file_spec, out_file_spec, err_file_spec);
3672 LLDB_LOG(log,
"appended stdin open file action for {0}", in_file_spec);
3675 if (out_file_spec) {
3677 LLDB_LOG(log,
"appended stdout open file action for {0}",
3681 if (err_file_spec) {
3683 LLDB_LOG(log,
"appended stderr open file action for {0}",
3687 if (default_to_use_pty) {
3689 LLDB_LOG_ERROR(log, std::move(Err),
"SetUpPtyRedirection failed: {0}");
3706 elem.notify = notify;
3716 = signals_sp->GetSignalNumberFromName(elem.first().str().c_str());
3721 signals_sp->SetShouldSuppress(signo,
false);
3723 signals_sp->SetShouldSuppress(signo,
true);
3726 signals_sp->SetShouldNotify(signo,
true);
3728 signals_sp->SetShouldNotify(signo,
false);
3731 signals_sp->SetShouldStop(signo,
true);
3733 signals_sp->SetShouldStop(signo,
false);
3742 = signals_sp->GetSignalNumberFromName(elem.first().str().c_str());
3748 signals_sp->ResetSignal(signo, do_stop, do_notify, do_pass);
3759 warning_stream_sp->Printf(
"Target signal '%s' not found in process\n",
3760 elem.first().str().c_str());
3773 signals_sp = process_sp->GetUnixSignals();
3776 const char *signal_name = entry.c_str();
3790 strm.
Printf(
"NAME PASS STOP NOTIFY\n");
3791 strm.
Printf(
"=========== ======= ======= =======\n");
3793 auto str_for_lazy = [] (
LazyBool lazy) ->
const char * {
3799 llvm_unreachable(
"Fully covered switch above!");
3803 bool print_it =
false;
3804 for (
size_t idx = 0; idx < num_args; idx++) {
3811 strm.
Printf(
"%-11s ", elem.first().str().c_str());
3812 strm.
Printf(
"%s %s %s\n", str_for_lazy(elem.second.pass),
3813 str_for_lazy(elem.second.stop),
3814 str_for_lazy(elem.second.notify));
3821 :
UserID(uid), m_target_sp(target_sp), m_specifier_sp(),
3822 m_thread_spec_up() {}
3825 :
UserID(rhs.GetID()), m_target_sp(rhs.m_target_sp),
3826 m_specifier_sp(rhs.m_specifier_sp), m_thread_spec_up(),
3827 m_active(rhs.m_active), m_auto_continue(rhs.m_auto_continue) {
3833 m_specifier_sp.reset(specifier);
3837 m_thread_spec_up.reset(specifier);
3845 bool will_run =
true;
3847 will_run = GetSpecifier()->SymbolContextMatches(
3849 if (will_run && GetThreadSpecifier() !=
nullptr)
3851 GetThreadSpecifier()->ThreadPassesBasicTests(exc_ctx.
GetThreadRef());
3861 GetSubclassDescription(s, level);
3869 s.
Printf(
"Hook: %" PRIu64
"\n", GetID());
3871 s.
Indent(
"State: enabled\n");
3873 s.
Indent(
"State: disabled\n");
3875 if (m_auto_continue)
3876 s.
Indent(
"AutoContinue on\n");
3878 if (m_specifier_sp) {
3882 m_specifier_sp->GetDescription(&s, level);
3886 if (m_thread_spec_up) {
3889 m_thread_spec_up->GetDescription(&tmp, level);
3895 GetSubclassDescription(s, level);
3902 if (m_commands.GetSize() == 1)
3903 s.
PutCString(m_commands.GetStringAtIndex(0));
3906 s.
Indent(
"Commands: \n");
3908 uint32_t num_commands = m_commands.GetSize();
3909 for (uint32_t i = 0; i < num_commands; i++) {
3910 s.
Indent(m_commands.GetStringAtIndex(i));
3918 GetCommands().SplitIntoLines(
string);
3922 const std::vector<std::string> &strings) {
3923 for (
auto string : strings)
3924 GetCommands().AppendString(
string.c_str());
3930 assert(exc_ctx.
GetTargetPtr() &&
"Can't call PerformAction on a context "
3933 if (!m_commands.GetSize())
3934 return StopHookResult::KeepStopped;
3957 return StopHookResult::AlreadyContinued;
3958 return StopHookResult::KeepStopped;
3967 GetTarget()->GetDebugger().GetScriptInterpreter();
3968 if (!script_interp) {
3974 if (!m_interface_sp) {
3976 "ScriptedStopHook::%s () - ERROR: %s", __FUNCTION__,
3977 "Script interpreter couldn't create Scripted Stop Hook Interface");
3981 m_class_name = class_name;
3982 m_extra_args.SetObjectSP(extra_args_sp);
3984 auto obj_or_err = m_interface_sp->CreatePluginObject(
3985 m_class_name, GetTarget(), m_extra_args);
3991 if (!object_sp || !object_sp->IsValid()) {
3993 "ScriptedStopHook::%s () - ERROR: %s", __FUNCTION__,
3994 "Failed to create valid script object");
4004 assert(exc_ctx.
GetTargetPtr() &&
"Can't call HandleStop on a context "
4007 if (!m_interface_sp)
4008 return StopHookResult::KeepStopped;
4010 lldb::StreamSP stream = std::make_shared<lldb_private::StreamString>();
4011 auto should_stop_or_err = m_interface_sp->HandleStop(exc_ctx, stream);
4012 output_sp->PutCString(
4014 if (!should_stop_or_err)
4015 return StopHookResult::KeepStopped;
4017 return *should_stop_or_err ? StopHookResult::KeepStopped
4018 : StopHookResult::RequestContinue;
4028 s.
Printf(
"%s\n", m_class_name.c_str());
4033 if (!m_extra_args.IsValid())
4036 if (!object_sp || !object_sp->IsValid())
4040 if (!as_dict || !as_dict->
IsValid())
4043 uint32_t num_keys = as_dict->
GetSize();
4050 auto print_one_element = [&s](llvm::StringRef key,
4053 s.
Format(
"{0} : {1}\n", key, object->GetStringValue());
4057 as_dict->
ForEach(print_one_element);
4065 "no-dynamic-values",
4066 "Don't calculate the dynamic type of values",
4071 "Calculate the dynamic type of values "
4072 "even if you have to run the target.",
4077 "Calculate the dynamic type of values, but don't run the target.",
4089 "Never look for inline breakpoint locations (fastest). This setting "
4090 "should only be used if you know that no inlining occurs in your"
4096 "Only check for inline breakpoint locations when setting breakpoints "
4097 "in header files, but not when setting breakpoint in implementation "
4098 "source files (default).",
4103 "Always look for inline breakpoint locations when setting file and "
4104 "line breakpoints (slower but most accurate).",
4118 "Disassembler default (currently att).",
4123 "Intel disassembler flavor.",
4128 "AT&T disassembler flavor.",
4136 "Never import the 'std' C++ module in the expression parser.",
4141 "Retry evaluating expressions with an imported 'std' C++ module if they"
4142 " failed to parse without the module. This allows evaluating more "
4143 "complex expressions involving C++ standard library types."
4148 "Always import the 'std' C++ module. This allows evaluating more "
4149 "complex expressions involving C++ standard library types. This feature"
4159 "Automatically determine the most appropriate method for the "
4163 "Prefer using the realized classes struct."},
4165 "Prefer using the CopyRealizedClassList API."},
4167 "Prefer using the GetRealizedClassList API."},
4174 "C-style (0xffff).",
4179 "Asm-style (0ffffh).",
4187 "Load debug scripts inside symbol files",
4192 "Do not load debug scripts inside symbol files.",
4197 "Warn about debug scripts inside symbol files but do not load them.",
4205 "Load .lldbinit files from current directory",
4210 "Do not load .lldbinit files from current directory",
4215 "Warn about loading .lldbinit files from current directory",
4223 "Load minimal information when loading modules from memory. Currently "
4224 "this setting loads sections only.",
4229 "Load partial information when loading modules from memory. Currently "
4230 "this setting loads sections and function bounds.",
4235 "Load complete information when loading modules from memory. Currently "
4236 "this setting loads sections and all symbols.",
4240#define LLDB_PROPERTIES_target
4241#include "TargetProperties.inc"
4244#define LLDB_PROPERTIES_target
4245#include "TargetPropertiesEnum.inc"
4250 :
public Cloneable<TargetOptionValueProperties, OptionValueProperties> {
4261 Target *target = exe_ctx->GetTargetPtr();
4266 if (
this != target_properties)
4270 return ProtectedGetPropertyAtIndex(idx);
4275#define LLDB_PROPERTIES_target_experimental
4276#include "TargetProperties.inc"
4279#define LLDB_PROPERTIES_target_experimental
4280#include "TargetPropertiesEnum.inc"
4284 :
public Cloneable<TargetExperimentalOptionValueProperties,
4285 OptionValueProperties> {
4299 :
Properties(), m_launch_info(), m_target(target) {
4322 m_collection_sp->SetValueChangedCallback(ePropertyDetachOnError, [
this] {
4335 std::make_unique<TargetExperimentalProperties>();
4338 "Experimental settings - setting these won't produce "
4339 "errors if the setting is not present.",
4342 m_collection_sp = std::make_shared<TargetOptionValueProperties>(
"target");
4345 std::make_unique<TargetExperimentalProperties>();
4348 "Experimental settings - setting these won't produce "
4349 "errors if the setting is not present.",
4352 "process",
"Settings specific to processes.",
true,
4379 exp_property->
GetValue()->GetAsProperties();
4382 return std::nullopt;
4395 exp_property->
GetValue()->GetAsProperties();
4407 exp_property->
GetValue()->GetAsProperties();
4413 const uint32_t idx = ePropertyDefaultArch;
4414 return GetPropertyAtIndexAs<ArchSpec>(idx, {});
4418 const uint32_t idx = ePropertyDefaultArch;
4423 const uint32_t idx = ePropertyMoveToNearestCode;
4424 return GetPropertyAtIndexAs<bool>(
4425 idx, g_target_properties[idx].default_uint_value != 0);
4429 const uint32_t idx = ePropertyPreferDynamic;
4430 return GetPropertyAtIndexAs<lldb::DynamicValueType>(
4432 g_target_properties[idx].default_uint_value));
4436 const uint32_t idx = ePropertyPreferDynamic;
4442 "Interrupted checking preload symbols")) {
4445 const uint32_t idx = ePropertyPreloadSymbols;
4446 return GetPropertyAtIndexAs<bool>(
4447 idx, g_target_properties[idx].default_uint_value != 0);
4451 const uint32_t idx = ePropertyPreloadSymbols;
4456 const uint32_t idx = ePropertyDisableASLR;
4457 return GetPropertyAtIndexAs<bool>(
4458 idx, g_target_properties[idx].default_uint_value != 0);
4462 const uint32_t idx = ePropertyDisableASLR;
4467 const uint32_t idx = ePropertyInheritTCC;
4468 return GetPropertyAtIndexAs<bool>(
4469 idx, g_target_properties[idx].default_uint_value != 0);
4473 const uint32_t idx = ePropertyInheritTCC;
4478 const uint32_t idx = ePropertyDetachOnError;
4479 return GetPropertyAtIndexAs<bool>(
4480 idx, g_target_properties[idx].default_uint_value != 0);
4484 const uint32_t idx = ePropertyDetachOnError;
4489 const uint32_t idx = ePropertyDisableSTDIO;
4490 return GetPropertyAtIndexAs<bool>(
4491 idx, g_target_properties[idx].default_uint_value != 0);
4495 const uint32_t idx = ePropertyDisableSTDIO;
4499 const uint32_t idx = ePropertyLaunchWorkingDir;
4500 return GetPropertyAtIndexAs<llvm::StringRef>(
4501 idx, g_target_properties[idx].default_cstr_value);
4505 const uint32_t idx = ePropertyDisassemblyFlavor;
4506 const char *return_value;
4509 GetPropertyAtIndexAs<x86DisassemblyFlavor>(
4511 g_target_properties[idx].default_uint_value));
4514 return return_value;
4518 const uint32_t idx = ePropertyDisassemblyCPU;
4519 llvm::StringRef str = GetPropertyAtIndexAs<llvm::StringRef>(
4520 idx, g_target_properties[idx].default_cstr_value);
4521 return str.empty() ? nullptr : str.data();
4525 const uint32_t idx = ePropertyDisassemblyFeatures;
4526 llvm::StringRef str = GetPropertyAtIndexAs<llvm::StringRef>(
4527 idx, g_target_properties[idx].default_cstr_value);
4528 return str.empty() ? nullptr : str.data();
4532 const uint32_t idx = ePropertyInlineStrategy;
4533 return GetPropertyAtIndexAs<InlineStrategy>(
4535 static_cast<InlineStrategy>(g_target_properties[idx].default_uint_value));
4541 const uint32_t idx = ePropertySourceRealpathPrefixes;
4546 const uint32_t idx = ePropertyArg0;
4547 return GetPropertyAtIndexAs<llvm::StringRef>(
4548 idx, g_target_properties[idx].default_cstr_value);
4552 const uint32_t idx = ePropertyArg0;
4558 const uint32_t idx = ePropertyRunArgs;
4563 const uint32_t idx = ePropertyRunArgs;
4572 GetPropertyAtIndexAs<bool>(
4573 ePropertyInheritEnv,
4574 g_target_properties[ePropertyInheritEnv].default_uint_value != 0)) {
4576 Environment platform_env = platform_sp->GetEnvironment();
4577 for (
const auto &KV : platform_env)
4578 env[KV.first()] = KV.second;
4582 Args property_unset_env;
4584 property_unset_env);
4585 for (
const auto &var : property_unset_env)
4586 env.erase(var.ref());
4589 m_collection_sp->GetPropertyAtIndexAsArgs(ePropertyEnvVars, property_env);
4591 env[KV.first()] = KV.second;
4606 if (!GetPropertyAtIndexAs<bool>(
4607 ePropertyInheritEnv,
4608 g_target_properties[ePropertyInheritEnv].default_uint_value != 0))
4612 if (platform_sp ==
nullptr)
4615 Environment platform_environment = platform_sp->GetEnvironment();
4616 for (
const auto &KV : platform_environment)
4617 environment[KV.first()] = KV.second;
4619 Args property_unset_environment;
4621 property_unset_environment);
4622 for (
const auto &var : property_unset_environment)
4623 environment.erase(var.ref());
4629 Args property_environment;
4631 property_environment);
4633 for (
const auto &KV :
Environment(property_environment))
4634 environment[KV.first()] = KV.second;
4641 const uint32_t idx = ePropertyEnvVars;
4646 const uint32_t idx = ePropertySkipPrologue;
4647 return GetPropertyAtIndexAs<bool>(
4648 idx, g_target_properties[idx].default_uint_value != 0);
4652 const uint32_t idx = ePropertySourceMap;
4655 assert(option_value);
4660 const uint32_t idx = ePropertyObjectMap;
4663 assert(option_value);
4668 const uint32_t idx = ePropertyAutoSourceMapRelative;
4669 return GetPropertyAtIndexAs<bool>(
4670 idx, g_target_properties[idx].default_uint_value != 0);
4674 const uint32_t idx = ePropertyExecutableSearchPaths;
4677 assert(option_value);
4682 const uint32_t idx = ePropertyExecutableSearchPaths;
4683 return GetPropertyAtIndexAs<FileSpecList>(idx, {});
4687 const uint32_t idx = ePropertyDebugFileSearchPaths;
4688 return GetPropertyAtIndexAs<FileSpecList>(idx, {});
4692 const uint32_t idx = ePropertyClangModuleSearchPaths;
4693 return GetPropertyAtIndexAs<FileSpecList>(idx, {});
4697 const uint32_t idx = ePropertyAutoImportClangModules;
4698 return GetPropertyAtIndexAs<bool>(
4699 idx, g_target_properties[idx].default_uint_value != 0);
4703 const uint32_t idx = ePropertyImportStdModule;
4704 return GetPropertyAtIndexAs<ImportStdModule>(
4706 g_target_properties[idx].default_uint_value));
4710 const uint32_t idx = ePropertyDynamicClassInfoHelper;
4711 return GetPropertyAtIndexAs<DynamicClassInfoHelper>(
4713 g_target_properties[idx].default_uint_value));
4717 const uint32_t idx = ePropertyAutoApplyFixIts;
4718 return GetPropertyAtIndexAs<bool>(
4719 idx, g_target_properties[idx].default_uint_value != 0);
4723 const uint32_t idx = ePropertyRetriesWithFixIts;
4724 return GetPropertyAtIndexAs<uint64_t>(
4725 idx, g_target_properties[idx].default_uint_value);
4729 const uint32_t idx = ePropertyNotifyAboutFixIts;
4730 return GetPropertyAtIndexAs<bool>(
4731 idx, g_target_properties[idx].default_uint_value != 0);
4735 const uint32_t idx = ePropertySaveObjectsDir;
4736 return GetPropertyAtIndexAs<FileSpec>(idx, {});
4745 bool exists = instance.
Exists(new_dir);
4746 bool is_directory = instance.
IsDirectory(new_dir);
4747 std::string path = new_dir.
GetPath(
true);
4748 bool writable = llvm::sys::fs::can_write(path);
4749 if (exists && is_directory && writable)
4757 llvm::raw_string_ostream os(buffer);
4758 os <<
"JIT object dir '" << path <<
"' ";
4760 os <<
"does not exist";
4761 else if (!is_directory)
4762 os <<
"is not a directory";
4764 os <<
"is not writable";
4766 std::optional<lldb::user_id_t> debugger_id;
4773 const uint32_t idx = ePropertyEnableSynthetic;
4774 return GetPropertyAtIndexAs<bool>(
4775 idx, g_target_properties[idx].default_uint_value != 0);
4779 const uint32_t idx = ePropertyShowHexVariableValuesWithLeadingZeroes;
4780 return GetPropertyAtIndexAs<bool>(
4781 idx, g_target_properties[idx].default_uint_value != 0);
4785 const uint32_t idx = ePropertyMaxZeroPaddingInFloatFormat;
4786 return GetPropertyAtIndexAs<uint64_t>(
4787 idx, g_target_properties[idx].default_uint_value);
4791 const uint32_t idx = ePropertyMaxChildrenCount;
4792 return GetPropertyAtIndexAs<uint64_t>(
4793 idx, g_target_properties[idx].default_uint_value);
4796std::pair<uint32_t, bool>
4798 const uint32_t idx = ePropertyMaxChildrenDepth;
4799 auto *option_value =
4801 bool is_default = !option_value->OptionWasSet();
4802 return {option_value->GetCurrentValue(), is_default};
4806 const uint32_t idx = ePropertyMaxSummaryLength;
4807 return GetPropertyAtIndexAs<uint64_t>(
4808 idx, g_target_properties[idx].default_uint_value);
4812 const uint32_t idx = ePropertyMaxMemReadSize;
4813 return GetPropertyAtIndexAs<uint64_t>(
4814 idx, g_target_properties[idx].default_uint_value);
4818 const uint32_t idx = ePropertyInputPath;
4819 return GetPropertyAtIndexAs<FileSpec>(idx, {});
4823 const uint32_t idx = ePropertyInputPath;
4828 const uint32_t idx = ePropertyOutputPath;
4829 return GetPropertyAtIndexAs<FileSpec>(idx, {});
4833 const uint32_t idx = ePropertyOutputPath;
4838 const uint32_t idx = ePropertyErrorPath;
4839 return GetPropertyAtIndexAs<FileSpec>(idx, {});
4843 const uint32_t idx = ePropertyErrorPath;
4848 const uint32_t idx = ePropertyLanguage;
4849 return {GetPropertyAtIndexAs<LanguageType>(idx, {})};
4853 const uint32_t idx = ePropertyExprPrefix;
4859 return llvm::StringRef(
4860 reinterpret_cast<const char *
>(data_sp->GetBytes()),
4861 data_sp->GetByteSize());
4867 const uint32_t idx = ePropertyExprErrorLimit;
4868 return GetPropertyAtIndexAs<uint64_t>(
4869 idx, g_target_properties[idx].default_uint_value);
4873 const uint32_t idx = ePropertyExprAllocAddress;
4874 return GetPropertyAtIndexAs<uint64_t>(
4875 idx, g_target_properties[idx].default_uint_value);
4879 const uint32_t idx = ePropertyExprAllocSize;
4880 return GetPropertyAtIndexAs<uint64_t>(
4881 idx, g_target_properties[idx].default_uint_value);
4885 const uint32_t idx = ePropertyExprAllocAlign;
4886 return GetPropertyAtIndexAs<uint64_t>(
4887 idx, g_target_properties[idx].default_uint_value);
4891 const uint32_t idx = ePropertyBreakpointUseAvoidList;
4892 return GetPropertyAtIndexAs<bool>(
4893 idx, g_target_properties[idx].default_uint_value != 0);
4897 const uint32_t idx = ePropertyUseHexImmediates;
4898 return GetPropertyAtIndexAs<bool>(
4899 idx, g_target_properties[idx].default_uint_value != 0);
4903 const uint32_t idx = ePropertyUseFastStepping;
4904 return GetPropertyAtIndexAs<bool>(
4905 idx, g_target_properties[idx].default_uint_value != 0);
4909 const uint32_t idx = ePropertyDisplayExpressionsInCrashlogs;
4910 return GetPropertyAtIndexAs<bool>(
4911 idx, g_target_properties[idx].default_uint_value != 0);
4915 const uint32_t idx = ePropertyLoadScriptFromSymbolFile;
4916 return GetPropertyAtIndexAs<LoadScriptFromSymFile>(
4918 g_target_properties[idx].default_uint_value));
4922 const uint32_t idx = ePropertyLoadCWDlldbinitFile;
4923 return GetPropertyAtIndexAs<LoadCWDlldbinitFile>(
4925 g_target_properties[idx].default_uint_value));
4929 const uint32_t idx = ePropertyHexImmediateStyle;
4930 return GetPropertyAtIndexAs<Disassembler::HexImmediateStyle>(
4932 g_target_properties[idx].default_uint_value));
4936 const uint32_t idx = ePropertyMemoryModuleLoadLevel;
4937 return GetPropertyAtIndexAs<MemoryModuleLoadLevel>(
4939 g_target_properties[idx].default_uint_value));
4943 const uint32_t idx = ePropertyTrapHandlerNames;
4948 const uint32_t idx = ePropertyTrapHandlerNames;
4953 const uint32_t idx = ePropertyDisplayRuntimeSupportValues;
4954 return GetPropertyAtIndexAs<bool>(
4955 idx, g_target_properties[idx].default_uint_value != 0);
4959 const uint32_t idx = ePropertyDisplayRuntimeSupportValues;
4964 const uint32_t idx = ePropertyDisplayRecognizedArguments;
4965 return GetPropertyAtIndexAs<bool>(
4966 idx, g_target_properties[idx].default_uint_value != 0);
4970 const uint32_t idx = ePropertyDisplayRecognizedArguments;
4986 if (input_file_action) {
4991 if (output_file_action) {
4996 if (error_file_action) {
5002 launch_info.
GetFlags().
Test(lldb::eLaunchFlagInheritTCCFromParent));
5007 const uint32_t idx = ePropertyRequireHardwareBreakpoints;
5008 return GetPropertyAtIndexAs<bool>(
5009 idx, g_target_properties[idx].default_uint_value != 0);
5013 const uint32_t idx = ePropertyRequireHardwareBreakpoints;
5018 const uint32_t idx = ePropertyAutoInstallMainExecutable;
5019 return GetPropertyAtIndexAs<bool>(
5020 idx, g_target_properties[idx].default_uint_value != 0);
5081 const uint32_t idx = ePropertyDebugUtilityExpression;
5082 return GetPropertyAtIndexAs<bool>(
5083 idx, g_target_properties[idx].default_uint_value != 0);
5087 const uint32_t idx = ePropertyDebugUtilityExpression;
5094 :
EventData(), m_target_sp(target_sp), m_module_list() {}
5098 :
EventData(), m_target_sp(target_sp), m_module_list(module_list) {}
5103 return "Target::TargetEventData";
5107 for (
size_t i = 0; i < m_module_list.GetSize(); ++i) {
5110 m_module_list.GetModuleAtIndex(i)->GetDescription(
static llvm::raw_ostream & error(Stream &strm)
#define INTERRUPT_REQUESTED(debugger,...)
This handy define will keep you from having to generate a report for the interruption by hand.
#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,...)
static double elapsed(const StatsTimepoint &start, const StatsTimepoint &end)
static Status installExecutable(const Installer &installer)
static constexpr OptionEnumValueElement g_dynamic_class_info_helper_value_types[]
static bool CheckIfWatchpointsSupported(Target *target, Status &error)
static constexpr OptionEnumValueElement g_load_cwd_lldbinit_values[]
static void LoadScriptingResourceForModule(const ModuleSP &module_sp, Target *target)
static constexpr OptionEnumValueElement g_dynamic_value_types[]
static constexpr OptionEnumValueElement g_memory_module_load_level_values[]
static constexpr OptionEnumValueElement g_load_script_from_sym_file_values[]
static constexpr OptionEnumValueElement g_x86_dis_flavor_value_types[]
static constexpr OptionEnumValueElement g_hex_immediate_style_values[]
static constexpr OptionEnumValueElement g_inline_breakpoint_enums[]
static constexpr OptionEnumValueElement g_import_std_module_value_types[]
#define LLDB_SCOPED_TIMERF(...)
TargetExperimentalOptionValueProperties()
const Property * GetPropertyAtIndex(size_t idx, const ExecutionContext *exe_ctx=nullptr) const override
TargetOptionValueProperties(llvm::StringRef name)
static lldb::ABISP FindPlugin(lldb::ProcessSP process_sp, const ArchSpec &arch)
A section + offset based address class.
lldb::addr_t GetLoadAddress(Target *target) const
Get the load address.
bool SetLoadAddress(lldb::addr_t load_addr, Target *target, bool allow_section_end=false)
Set the address to represent load_addr.
lldb::SectionSP GetSection() const
Get const accessor for the section.
bool Slide(int64_t offset)
lldb::ModuleSP GetModule() const
Get accessor for the module for this address.
lldb::addr_t GetFileAddress() const
Get the file address.
lldb::addr_t GetOffset() const
Get the section relative offset value.
bool IsValid() const
Check if the object state is valid.
bool IsSectionOffset() const
Check if an address is section offset.
bool SetOffset(lldb::addr_t offset)
Set accessor for the offset.
An architecture specification class.
uint32_t GetAddressByteSize() const
Returns the size in bytes of an address of the current architecture.
bool IsValid() const
Tests if this ArchSpec is valid.
llvm::Triple & GetTriple()
Architecture triple accessor.
void MergeFrom(const ArchSpec &other)
Merges fields from another ArchSpec into this ArchSpec.
bool IsCompatibleMatch(const ArchSpec &rhs) const
Shorthand for IsMatch(rhs, CompatibleMatch).
lldb::ByteOrder GetByteOrder() const
Returns the byte order for the architecture specification.
const char * GetArchitectureName() const
Returns a static string representing the current architecture.
A command line argument class.
size_t GetArgumentCount() const
Gets the number of arguments left in this command object.
const char * GetArgumentAtIndex(size_t idx) const
Gets the NULL terminated C string argument pointer for the argument at index idx.
bool AddBreakpointID(BreakpointID bp_id)
BreakpointID GetBreakpointIDAtIndex(size_t index) const
lldb::break_id_t GetBreakpointID() const
static bool StringIsBreakpointName(llvm::StringRef str, Status &error)
Takes an input string and checks to see whether it is a breakpoint name.
General Outline: Allows adding and removing breakpoints and find by ID and index.
BreakpointIterable Breakpoints()
void RemoveInvalidLocations(const ArchSpec &arch)
Removes all invalid breakpoint locations.
lldb::BreakpointSP FindBreakpointByID(lldb::break_id_t breakID) const
Returns a shared pointer to the breakpoint with id breakID.
void GetListMutex(std::unique_lock< std::recursive_mutex > &lock)
Sets the passed in Locker to hold the Breakpoint List mutex.
lldb::break_id_t Add(lldb::BreakpointSP &bp_sp, bool notify)
Add the breakpoint bp_sp to the list.
void SetEnabledAllowed(bool enabled)
void ResetHitCounts()
Resets the hit count of all breakpoints.
size_t GetSize() const
Returns the number of elements in this breakpoint list.
void UpdateBreakpointsWhenModuleIsReplaced(lldb::ModuleSP old_module_sp, lldb::ModuleSP new_module_sp)
void RemoveAll(bool notify)
Removes all the breakpoints from this list.
void UpdateBreakpoints(ModuleList &module_list, bool load, bool delete_locations)
Tell all the breakpoints to update themselves due to a change in the modules in module_list.
void ClearAllBreakpointSites()
llvm::Expected< std::vector< lldb::BreakpointSP > > FindBreakpointsByName(const char *name)
Find all the breakpoints with a given name.
void Dump(Stream *s) const
Standard "Dump" method. At present it does nothing.
bool Remove(lldb::break_id_t breakID, bool notify)
Removes the breakpoint given by breakID from this list.
void RemoveAllowed(bool notify)
Removes all the breakpoints from this list - first checking the ePermDelete on the breakpoints.
lldb::BreakpointSP GetBreakpointAtIndex(size_t i) const
Returns a shared pointer to the breakpoint with index i.
void SetEnabledAll(bool enabled)
void MergeInto(const Permissions &incoming)
ConstString GetName() const
Permissions & GetPermissions()
BreakpointOptions & GetOptions()
void ConfigureBreakpoint(lldb::BreakpointSP bp_sp)
"lldb/Breakpoint/BreakpointOptions.h" Class that manages the options on a breakpoint or breakpoint lo...
void CopyOverSetOptions(const BreakpointOptions &rhs)
Copy over only the options set in the incoming BreakpointOptions.
"lldb/Breakpoint/BreakpointResolverAddress.h" This class sets breakpoints on a given Address.
"lldb/Breakpoint/BreakpointResolverFileLine.h" This class sets breakpoints by file and line.
"lldb/Breakpoint/BreakpointResolverFileRegex.h" This class sets breakpoints by file and line.
"lldb/Breakpoint/BreakpointResolverName.h" This class sets breakpoints on a given function name,...
"lldb/Breakpoint/BreakpointResolverScripted.h" This class sets breakpoints on a given Address.
General Outline: A breakpoint has four main parts, a filter, a resolver, the list of breakpoint locat...
virtual StructuredData::ObjectSP SerializeToStructuredData()
static lldb::BreakpointSP CreateFromStructuredData(lldb::TargetSP target_sp, StructuredData::ObjectSP &data_object_sp, Status &error)
static lldb::BreakpointSP CopyFromBreakpoint(lldb::TargetSP new_target, const Breakpoint &bp_to_copy_from)
static const char * GetSerializationKey()
static bool SerializedBreakpointMatchesNames(StructuredData::ObjectSP &bkpt_object_sp, std::vector< std::string > &names)
An event broadcasting class.
void SetEventName(uint32_t event_mask, const char *name)
Set the name for an event bit.
void BroadcastEvent(lldb::EventSP &event_sp)
Broadcast an event which has no associated data.
void CheckInWithManager()
A class that implements CRTP-based "virtual constructor" idiom.
void SetStopOnContinue(bool stop_on_continue)
void SetPrintErrors(bool print_errors)
void SetEchoCommands(bool echo_commands)
void SetAddToHistory(bool add_to_history)
void SetStopOnError(bool stop_on_error)
void SetPrintResults(bool print_results)
void HandleCommands(const StringList &commands, const ExecutionContext &context, const CommandInterpreterRunOptions &options, CommandReturnObject &result)
Execute a list of commands in sequence.
void SetInteractive(bool b)
void SetImmediateOutputStream(const lldb::StreamSP &stream_sp)
lldb::ReturnStatus GetStatus() const
Generic representation of a type in a programming language.
A uniqued constant string class.
const char * AsCString(const char *value_if_empty=nullptr) const
Get the string value as a C string.
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.
A class to manage flag bits.
lldb::StreamSP GetAsyncOutputStream()
void SetAsyncExecution(bool async)
CommandInterpreter & GetCommandInterpreter()
StreamFile & GetErrorStream()
TargetList & GetTargetList()
Get accessor for the target list.
static llvm::ThreadPoolInterface & GetThreadPool()
Shared thread pool. Use only with ThreadPoolTaskGroup.
static void ReportError(std::string message, std::optional< lldb::user_id_t > debugger_id=std::nullopt, std::once_flag *once=nullptr)
Report error events.
PlatformList & GetPlatformList()
lldb::ListenerSP GetListener()
lldb::LanguageType GetREPLLanguage() const
llvm::Error GetAsError(lldb::ExpressionResults result, llvm::Twine message={}) const
Returns an ExpressionError with arg as error code.
A class that measures elapsed time in an exception safe way.
static constexpr std::chrono::milliseconds default_timeout
virtual llvm::StringRef GetFlavor() const =0
"lldb/Target/ExecutionContextScope.h" Inherit from this if your object can reconstruct its execution ...
virtual void CalculateExecutionContext(ExecutionContext &exe_ctx)=0
Reconstruct the object's execution context into sc.
"lldb/Target/ExecutionContext.h" A class that contains an execution context.
void Clear()
Clear the object's state.
void SetTargetPtr(Target *target)
Set accessor to set only the target shared pointer from a target pointer.
StackFrame * GetFramePtr() const
Returns a pointer to the frame object.
Target * GetTargetPtr() const
Returns a pointer to the target object.
Thread & GetThreadRef() const
Returns a reference to the thread object.
llvm::StringRef GetPath() const
const FileSpec & GetFileSpecAtIndex(size_t idx) const
Get file at index.
void Append(const FileSpec &file)
Append a FileSpec object to the list.
size_t GetSize() const
Get the number of files in the file list.
bool AppendIfUnique(const FileSpec &file)
Append a FileSpec object if unique.
void AppendPathComponent(llvm::StringRef component)
void SetDirectory(ConstString directory)
Directory string set accessor.
const ConstString & GetFilename() const
Filename string const get accessor.
const ConstString & GetDirectory() const
Directory string const get accessor.
void SetPath(llvm::StringRef p)
Temporary helper for FileSystem change.
size_t GetPath(char *path, size_t max_path_length, bool denormalize=true) const
Extract the full path to the file.
bool IsSourceImplementationFile() const
Returns true if the filespec represents an implementation source file (files with a "....
void SetFilename(ConstString filename)
Filename string set accessor.
bool Exists(const FileSpec &file_spec) const
Returns whether the given file exists.
bool IsDirectory(const FileSpec &file_spec) const
Returns whether the given path is a directory.
static FileSystem & Instance()
bool IsValid() const override
IsValid.
ValueType Clear(ValueType mask=~static_cast< ValueType >(0))
Clear one or more flags.
bool Test(ValueType bit) const
Test a single flag bit.
ValueType Set(ValueType mask)
Set one or more flags by logical OR'ing mask with the current flags.
Encapsulates a function that can be called.
static lldb::BreakpointSP CreateExceptionBreakpoint(Target &target, lldb::LanguageType language, bool catch_bp, bool throw_bp, bool is_internal=false)
static LanguageSet GetLanguagesSupportingREPLs()
static Language * FindPlugin(lldb::LanguageType language)
static const char * GetNameForLanguageType(lldb::LanguageType language)
static LanguageSet GetLanguagesSupportingTypeSystemsForExpressions()
virtual llvm::StringRef GetUserEntryPointName() const
static std::set< lldb::LanguageType > GetSupportedLanguages()
static lldb::ListenerSP MakeListener(const char *name)
lldb::ModuleSP GetModule() const
Get const accessor for the module pointer.
A collection class for Module objects.
bool ReplaceModule(const lldb::ModuleSP &old_module_sp, const lldb::ModuleSP &new_module_sp)
void ForEach(std::function< bool(const lldb::ModuleSP &module_sp)> const &callback) const
Applies 'callback' to each module in this ModuleList.
bool AnyOf(std::function< bool(lldb_private::Module &module)> const &callback) const
Returns true if 'callback' returns true for one of the modules in this ModuleList.
size_t GetIndexForModule(const Module *module) const
lldb::ModuleSP FindFirstModule(const ModuleSpec &module_spec) const
void Clear()
Clear the object's state.
void Dump(Stream *s) const
Dump the description of each module contained in this list.
static bool RemoveSharedModuleIfOrphaned(const Module *module_ptr)
bool AppendIfNeeded(const lldb::ModuleSP &new_module, bool notify=true)
Append a module to the module list, if it is not already there.
static Status GetSharedModule(const ModuleSpec &module_spec, lldb::ModuleSP &module_sp, const FileSpecList *module_search_paths_ptr, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr, bool always_create=false)
void FindModules(const ModuleSpec &module_spec, ModuleList &matching_module_list) const
Finds the first module whose file specification matches file_spec.
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.
bool ResolveFileAddress(lldb::addr_t vm_addr, Address &so_addr) const
size_t GetSize() const
Gets the size of the module list.
A class that describes an executable image and its associated object and symbol files.
virtual ObjectFile * GetObjectFile()
Get the object file representation for the current architecture.
bool FileHasChanged() const
const FileSpec & GetFileSpec() const
Get const accessor for the module file specification.
A plug-in interface definition class for object file parsers.
virtual uint32_t GetDependentModules(FileSpecList &file_list)=0
Extract the dependent modules from an object file.
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...
@ eTypeExecutable
A normal executable.
@ eTypeDebugInfo
An object file that contains only debug information.
@ eTypeStubLibrary
A library that can be linked against but not used for execution.
@ eTypeObjectFile
An intermediate object file.
@ eTypeDynamicLinker
The platform's dynamic linker executable.
@ eTypeCoreFile
A core file that has a checkpoint of a program's execution state.
@ eTypeSharedLibrary
A shared library that can be used during execution.
virtual size_t ReadSectionData(Section *section, lldb::offset_t section_offset, void *dst, size_t dst_len)
void AppendCurrentValue(const FileSpec &value)
const lldb::DataBufferSP & GetFileContents()
PathMappingList & GetCurrentValue()
auto GetPropertyAtIndexAs(size_t idx, const ExecutionContext *exe_ctx=nullptr) const
Property * ProtectedGetPropertyAtIndex(size_t idx)
bool SetPropertyAtIndex(size_t idx, T t, const ExecutionContext *exe_ctx=nullptr) const
static lldb::OptionValuePropertiesSP CreateLocalCopy(const Properties &global_properties)
bool RemapPath(ConstString path, ConstString &new_path) const
std::optional< llvm::StringRef > ReverseRemapPath(const FileSpec &file, FileSpec &fixed) const
Perform reverse source path remap for input file.
static std::unique_ptr< Architecture > CreateArchitectureInstance(const ArchSpec &arch)
static lldb::RegisterTypeBuilderSP GetRegisterTypeBuilder(Target &target)
bool ProcessInfoSpecified() const
lldb::ListenerSP GetListenerForProcess(Debugger &debugger)
llvm::StringRef GetProcessPluginName() const
void SetHijackListener(const lldb::ListenerSP &listener_sp)
void SetExecutableFile(const FileSpec &exe_file, bool add_exe_file_as_first_arg)
lldb::ScriptedMetadataSP GetScriptedMetadata() const
lldb::ListenerSP GetHijackListener() const
void SetArg0(llvm::StringRef arg)
llvm::StringRef GetArg0() const
void SetScriptedMetadata(lldb::ScriptedMetadataSP metadata_sp)
FileSpec & GetExecutableFile()
lldb::ListenerSP GetListener() const
lldb::ListenerSP GetShadowListener() const
Environment & GetEnvironment()
bool IsScriptedProcess() const
ArchSpec & GetArchitecture()
llvm::StringRef GetProcessPluginName() const
const FileSpec & GetShell() const
llvm::Error SetUpPtyRedirection()
bool AppendOpenFileAction(int fd, const FileSpec &file_spec, bool read, bool write)
bool AppendSuppressFileAction(int fd, bool read, bool write)
const FileAction * GetFileActionForFD(int fd) const
void SetProcessPluginName(llvm::StringRef plugin)
static void SettingsInitialize()
static constexpr llvm::StringRef AttachSynchronousHijackListenerName
static lldb::ProcessSP FindPlugin(lldb::TargetSP target_sp, llvm::StringRef plugin_name, lldb::ListenerSP listener_sp, const FileSpec *crash_file_path, bool can_connect)
Find a Process plug-in that can debug module using the currently selected architecture.
static constexpr llvm::StringRef LaunchSynchronousHijackListenerName
static ProcessProperties & GetGlobalProperties()
static void SettingsTerminate()
lldb::OptionValuePropertiesSP m_collection_sp
static llvm::StringRef GetExperimentalSettingsName()
bool SetPropertyAtIndex(uint32_t idx, T t, const ExecutionContext *exe_ctx=nullptr) const
virtual lldb::OptionValuePropertiesSP GetValueProperties() const
const lldb::OptionValueSP & GetValue() const
static lldb::REPLSP Create(Status &Status, lldb::LanguageType language, Debugger *debugger, Target *target, const char *repl_options)
Get a REPL with an existing target (or, failing that, a debugger to use), and (optional) extra argume...
bool SignExtend(uint32_t bit_pos)
unsigned long long ULongLong(unsigned long long fail_value=0) const
virtual lldb::ScriptedStopHookInterfaceSP CreateScriptedStopHookInterface()
"lldb/Core/SearchFilter.h" This is a SearchFilter that searches through all modules.
size_t GetNumSections(uint32_t depth) const
lldb::SectionSP GetSectionAtIndex(size_t idx) const
bool ResolveLoadAddress(uint32_t stop_id, lldb::addr_t load_addr, Address &so_addr, bool allow_section_end=false)
bool SetSectionLoadAddress(uint32_t stop_id, const lldb::SectionSP §ion_sp, lldb::addr_t load_addr, bool warn_multiple=false)
lldb::addr_t GetSectionLoadAddress(uint32_t stop_id, const lldb::SectionSP §ion_sp)
bool SetSectionUnloaded(uint32_t stop_id, const lldb::SectionSP §ion_sp, lldb::addr_t load_addr)
uint32_t GetLastStopID() const
void Dump(Stream &s, Target *target)
bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr, bool allow_section_end=false) const
lldb::addr_t GetSectionLoadAddress(const lldb::SectionSP §ion_sp) const
"lldb/Core/SourceLocationSpec.h" A source location specifier class.
Class that provides a registry of known stack frame recognizers.
const SymbolContext & GetSymbolContext(lldb::SymbolContextItem resolve_scope)
Provide a SymbolContext for this StackFrame's current pc value.
void Clear()
Clear the object state.
static Status FromErrorStringWithFormat(const char *format,...) __attribute__((format(printf
static Status FromErrorString(const char *str)
bool Fail() const
Test for error condition.
static Status static Status FromErrorStringWithFormatv(const char *format, Args &&...args)
static Status FromError(llvm::Error error)
Avoid using this in new code. Migrate APIs to llvm::Expected instead.
bool Success() const
Test for success condition.
const char * GetData() const
llvm::StringRef GetString() const
A stream class that can stream formatted output to a file.
void Format(const char *format, Args &&... args)
llvm::raw_ostream & AsRawOstream()
Returns a raw_ostream that forwards the data to this Stream object.
size_t Indent(llvm::StringRef s="")
Indent the current line in the stream.
size_t Printf(const char *format,...) __attribute__((format(printf
Output printf formatted output to the stream.
size_t PutCString(llvm::StringRef cstr)
Output a C string to the stream.
void SetIndentLevel(unsigned level)
Set the current indentation level.
void IndentLess(unsigned amount=2)
Decrement the current indentation level.
void IndentMore(unsigned amount=2)
Increment the current indentation level.
unsigned GetIndentLevel() const
Get the current indentation level.
void AddItem(const ObjectSP &item)
ObjectSP GetItemAtIndex(size_t idx) const
ObjectSP GetValueForKey(llvm::StringRef key) const
void ForEach(std::function< bool(llvm::StringRef key, Object *object)> const &callback) const
Dictionary * GetAsDictionary()
virtual bool IsValid() const
void Dump(lldb_private::Stream &s, bool pretty_print=true) const
std::shared_ptr< Object > ObjectSP
std::shared_ptr< Array > ArraySP
static ObjectSP ParseJSONFromFile(const FileSpec &file, Status &error)
A class that wraps a std::map of SummaryStatistics objects behind a mutex.
SummaryStatisticsSP GetSummaryStatisticsForProvider(lldb_private::TypeSummaryImpl &provider)
Get the SummaryStatistics object for a given provider name, or insert if statistics for that provider...
Defines a symbol context baton that can be handed other debug core functions.
lldb::TargetSP target_sp
The Target for a given query.
TargetExperimentalProperties()
lldb::TargetSP GetTargetAtIndex(uint32_t index) const
size_t GetNumTargets() const
uint32_t GetMaximumSizeOfStringSummary() const
FileSpecList GetDebugFileSearchPaths()
llvm::StringRef GetLaunchWorkingDirectory() const
bool GetDisplayRecognizedArguments() const
ImportStdModule GetImportStdModule() const
bool GetDisableSTDIO() const
bool GetMoveToNearestCode() const
~TargetProperties() override
void AppendExecutableSearchPaths(const FileSpec &)
void SetInheritTCC(bool b)
bool GetEnableSyntheticValue() const
void UpdateLaunchInfoFromProperties()
ProcessLaunchInfo m_launch_info
uint64_t GetExprAllocAlign() const
MemoryModuleLoadLevel GetMemoryModuleLoadLevel() const
llvm::StringRef GetArg0() const
uint32_t GetMaximumMemReadSize() const
void SetRunArguments(const Args &args)
FileSpec GetStandardErrorPath() const
bool GetEnableNotifyAboutFixIts() const
bool SetPreferDynamicValue(lldb::DynamicValueType d)
void SetDisplayRecognizedArguments(bool b)
std::optional< bool > GetExperimentalPropertyValue(size_t prop_idx, ExecutionContext *exe_ctx=nullptr) const
bool GetDisableASLR() const
bool GetUseFastStepping() const
const ProcessLaunchInfo & GetProcessLaunchInfo() const
Environment ComputeEnvironment() const
void Arg0ValueChangedCallback()
bool GetUserSpecifiedTrapHandlerNames(Args &args) const
uint64_t GetExprErrorLimit() const
bool GetEnableAutoImportClangModules() const
bool GetDebugUtilityExpression() const
void CheckJITObjectsDir()
bool GetSkipPrologue() const
DynamicClassInfoHelper GetDynamicClassInfoHelper() const
FileSpec GetStandardOutputPath() const
void InputPathValueChangedCallback()
void SetDisplayRuntimeSupportValues(bool b)
uint32_t GetMaximumNumberOfChildrenToDisplay() const
void SetRequireHardwareBreakpoints(bool b)
void SetDisableSTDIO(bool b)
bool GetAutoInstallMainExecutable() const
const char * GetDisassemblyFeatures() const
RealpathPrefixes GetSourceRealpathPrefixes() const
uint64_t GetNumberOfRetriesWithFixits() const
uint64_t GetExprAllocSize() const
llvm::StringRef GetExpressionPrefixContents()
PathMappingList & GetObjectPathMap() const
const char * GetDisassemblyFlavor() const
void SetPreloadSymbols(bool b)
FileSpec GetStandardInputPath() const
bool GetInheritTCC() const
void InheritTCCValueChangedCallback()
lldb::DynamicValueType GetPreferDynamicValue() const
void DisableSTDIOValueChangedCallback()
InlineStrategy GetInlineStrategy() const
Environment GetTargetEnvironment() const
bool GetDisplayRuntimeSupportValues() const
void SetDetachOnError(bool b)
void SetUserSpecifiedTrapHandlerNames(const Args &args)
bool GetUseHexImmediates() const
bool GetPreloadSymbols() const
uint32_t GetMaxZeroPaddingInFloatFormat() const
uint64_t GetExprAllocAddress() const
void DetachOnErrorValueChangedCallback()
LoadCWDlldbinitFile GetLoadCWDlldbinitFile() const
Environment GetInheritedEnvironment() const
void SetArg0(llvm::StringRef arg)
void EnvVarsValueChangedCallback()
bool GetInjectLocalVariables(ExecutionContext *exe_ctx) const
bool ShowHexVariableValuesWithLeadingZeroes() const
SourceLanguage GetLanguage() const
void OutputPathValueChangedCallback()
Environment GetEnvironment() const
void SetProcessLaunchInfo(const ProcessLaunchInfo &launch_info)
void RunArgsValueChangedCallback()
FileSpec GetSaveJITObjectsDir() const
void SetEnvironment(Environment env)
LoadScriptFromSymFile GetLoadScriptFromSymbolFile() const
const char * GetDisassemblyCPU() const
void SetStandardErrorPath(llvm::StringRef path)
bool GetRunArguments(Args &args) const
bool GetBreakpointsConsultPlatformAvoidList()
FileSpecList GetExecutableSearchPaths()
void SetDisableASLR(bool b)
ArchSpec GetDefaultArchitecture() const
Disassembler::HexImmediateStyle GetHexImmediateStyle() const
void SetUseDIL(ExecutionContext *exe_ctx, bool b)
std::unique_ptr< TargetExperimentalProperties > m_experimental_properties_up
FileSpecList GetClangModuleSearchPaths()
void SetStandardOutputPath(llvm::StringRef path)
void ErrorPathValueChangedCallback()
bool GetRequireHardwareBreakpoints() const
PathMappingList & GetSourcePathMap() const
bool GetAutoSourceMapRelative() const
bool GetUseDIL(ExecutionContext *exe_ctx) const
void SetDefaultArchitecture(const ArchSpec &arch)
void SetStandardInputPath(llvm::StringRef path)
TargetProperties(Target *target)
bool GetDisplayExpressionsInCrashlogs() const
void DisableASLRValueChangedCallback()
bool GetEnableAutoApplyFixIts() const
void SetDebugUtilityExpression(bool debug)
std::pair< uint32_t, bool > GetMaximumDepthOfChildrenToDisplay() const
Get the max depth value, augmented with a bool to indicate whether the depth is the default.
bool GetDetachOnError() const
void Reset(Target &target)
llvm::json::Value ToJSON(Target &target, const lldb_private::StatisticsOptions &options)
StatsDuration & GetCreateTime()
StatsSuccessFail & GetExpressionStats()
void SetLaunchOrAttachTime()
const ArchSpec & GetSpec() const
const Arch & operator=(const ArchSpec &spec)
Arch(const ArchSpec &spec)
void SetActionFromString(const std::string &strings)
void SetActionFromStrings(const std::vector< std::string > &strings)
StopHookResult HandleStop(ExecutionContext &exc_ctx, lldb::StreamSP output_sp) override
void GetSubclassDescription(Stream &s, lldb::DescriptionLevel level) const override
Status SetScriptCallback(std::string class_name, StructuredData::ObjectSP extra_args_sp)
StopHookResult HandleStop(ExecutionContext &exc_ctx, lldb::StreamSP output) override
void GetSubclassDescription(Stream &s, lldb::DescriptionLevel level) const override
void SetSpecifier(SymbolContextSpecifier *specifier)
std::unique_ptr< ThreadSpec > m_thread_spec_up
void SetThreadSpecifier(ThreadSpec *specifier)
StopHook(const StopHook &rhs)
bool ExecutionContextPasses(const ExecutionContext &exe_ctx)
void GetDescription(Stream &s, lldb::DescriptionLevel level) const
void Dump(Stream *s) const override
static llvm::StringRef GetFlavorString()
static ModuleList GetModuleListFromEvent(const Event *event_ptr)
~TargetEventData() override
static const TargetEventData * GetEventDataFromEvent(const Event *event_ptr)
TargetEventData(const lldb::TargetSP &target_sp)
lldb::TargetSP m_target_sp
static lldb::TargetSP GetTargetFromEvent(const Event *event_ptr)
void ModulesDidLoad(ModuleList &module_list)
lldb::ThreadSP CalculateThread() override
StopHookCollection m_stop_hooks
Module * GetExecutableModulePointer()
void Dump(Stream *s, lldb::DescriptionLevel description_level)
Dump a description of this object to a Stream.
bool m_suppress_stop_hooks
void DisableAllBreakpoints(bool internal_also=false)
lldb::WatchpointSP CreateWatchpoint(lldb::addr_t addr, size_t size, const CompilerType *type, uint32_t kind, Status &error)
void ApplyNameToBreakpoints(BreakpointName &bp_name)
StopHookSP CreateStopHook(StopHook::StopHookKind kind)
Add an empty stop hook to the Target's stop hook list, and returns a shared pointer to it in new_hook...
lldb::TraceSP GetTrace()
Get the Trace object containing processor trace information of this target.
PathMappingList & GetImageSearchPathList()
void FinalizeFileActions(ProcessLaunchInfo &info)
lldb::addr_t GetCallableLoadAddress(lldb::addr_t load_addr, AddressClass addr_class=AddressClass::eInvalid) const
Get load_addr as a callable code load address for this target.
lldb::addr_t GetOpcodeLoadAddress(lldb::addr_t load_addr, AddressClass addr_class=AddressClass::eInvalid) const
Get load_addr as an opcode for this target.
lldb::BreakpointSP CreateScriptedBreakpoint(const llvm::StringRef class_name, const FileSpecList *containingModules, const FileSpecList *containingSourceFiles, bool internal, bool request_hardware, StructuredData::ObjectSP extra_args_sp, Status *creation_error=nullptr)
static Target * GetTargetFromContexts(const ExecutionContext *exe_ctx_ptr, const SymbolContext *sc_ptr)
lldb::addr_t GetBreakableLoadAddress(lldb::addr_t addr)
void ClearDummySignals(Args &signal_names)
Clear the dummy signals in signal_names from the target, or all signals if signal_names is empty.
static void ImageSearchPathsChanged(const PathMappingList &path_list, void *baton)
llvm::Expected< lldb_private::Address > GetEntryPointAddress()
This method will return the address of the starting function for this binary, e.g.
bool IgnoreWatchpointByID(lldb::watch_id_t watch_id, uint32_t ignore_count)
lldb::BreakpointSP CreateFuncRegexBreakpoint(const FileSpecList *containingModules, const FileSpecList *containingSourceFiles, RegularExpression func_regexp, lldb::LanguageType requested_language, LazyBool skip_prologue, bool internal, bool request_hardware)
lldb::BreakpointSP GetBreakpointByID(lldb::break_id_t break_id)
std::shared_ptr< StopHook > StopHookSP
void SymbolsDidLoad(ModuleList &module_list)
bool ClearAllWatchpointHistoricValues()
void SetTrace(const lldb::TraceSP &trace_sp)
Set the Trace object containing processor trace information of this target.
BreakpointList & GetBreakpointList(bool internal=false)
CompilerType GetRegisterType(const std::string &name, const lldb_private::RegisterFlags &flags, uint32_t byte_size)
BreakpointNameList m_breakpoint_names
lldb_private::SummaryStatisticsCache & GetSummaryStatisticsCache()
lldb::addr_t GetSectionLoadAddress(const lldb::SectionSP §ion_sp)
llvm::StringRef GetABIName() const
Returns the name of the target's ABI plugin.
SourceManager & GetSourceManager()
lldb::SearchFilterSP GetSearchFilterForModuleList(const FileSpecList *containingModuleList)
StopHookSP GetStopHookByID(lldb::user_id_t uid)
llvm::StringMap< DummySignalValues > m_dummy_signals
These are used to set the signal state when you don't have a process and more usefully in the Dummy t...
lldb::ProcessSP m_process_sp
lldb::SearchFilterSP m_search_filter_sp
PersistentExpressionState * GetPersistentExpressionStateForLanguage(lldb::LanguageType language)
void UpdateSignalsFromDummy(lldb::UnixSignalsSP signals_sp, lldb::StreamSP warning_stream_sp)
Updates the signals in signals_sp using the stored dummy signals.
bool m_is_dummy_target
Used to not run stop hooks for expressions.
static bool UpdateSignalFromDummy(lldb::UnixSignalsSP signals_sp, const DummySignalElement &element)
PathMappingList m_image_search_paths
bool ModuleIsExcludedForUnconstrainedSearches(const FileSpec &module_spec)
Return whether this FileSpec corresponds to a module that should be considered for general searches.
lldb::StackFrameSP CalculateStackFrame() override
SectionLoadList & GetSectionLoadList()
lldb::addr_t GetPersistentSymbol(ConstString name)
void PrimeFromDummyTarget(Target &target)
static void SettingsTerminate()
bool EnableWatchpointByID(lldb::watch_id_t watch_id)
bool ResolveFileAddress(lldb::addr_t load_addr, Address &so_addr)
bool ClearAllWatchpointHitCounts()
size_t ReadMemoryFromFileCache(const Address &addr, void *dst, size_t dst_len, Status &error)
void ClearAllLoadedSections()
std::vector< lldb::TypeSystemSP > GetScratchTypeSystems(bool create_on_demand=true)
size_t ReadScalarIntegerFromMemory(const Address &addr, uint32_t byte_size, bool is_signed, Scalar &scalar, Status &error, bool force_live_memory=false)
void AddNameToBreakpoint(BreakpointID &id, llvm::StringRef name, Status &error)
void DumpSectionLoadList(Stream &s)
void DeleteCurrentProcess()
BreakpointList m_internal_breakpoint_list
void DisableAllowedBreakpoints()
bool SetSectionUnloaded(const lldb::SectionSP §ion_sp)
lldb::TargetSP CalculateTarget() override
const lldb::ProcessSP & GetProcessSP() const
void ClearModules(bool delete_locations)
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 bool ResetSignalFromDummy(lldb::UnixSignalsSP signals_sp, const DummySignalElement &element)
Architecture * GetArchitecturePlugin() const
llvm::json::Value ReportStatistics(const lldb_private::StatisticsOptions &options)
Get metrics associated with this target in JSON format.
FunctionCaller * GetFunctionCallerForLanguage(lldb::LanguageType language, const CompilerType &return_type, const Address &function_address, const ValueList &arg_value_list, const char *name, Status &error)
void EnableAllBreakpoints(bool internal_also=false)
Status Launch(ProcessLaunchInfo &launch_info, Stream *stream)
bool DisableBreakpointByID(lldb::break_id_t break_id)
lldb::BreakpointSP CreateBreakpointAtUserEntry(Status &error)
BreakpointName * FindBreakpointName(ConstString name, bool can_create, Status &error)
llvm::Expected< lldb::TraceSP > CreateTrace()
Create a Trace object for the current target using the using the default supported tracing technology...
lldb::TraceSP m_trace_sp
An optional lldb_private::Trace object containing processor trace information of this target.
bool RemoveAllWatchpoints(bool end_to_end=true)
bool ReadPointerFromMemory(const Address &addr, Status &error, Address &pointer_addr, bool force_live_memory=false)
void UndoCreateStopHook(lldb::user_id_t uid)
If you tried to create a stop hook, and that failed, call this to remove the stop hook,...
WatchpointList m_watchpoint_list
BreakpointList m_breakpoint_list
lldb::SourceManagerUP m_source_manager_up
virtual size_t ReadMemory(const Address &addr, void *dst, size_t dst_len, Status &error, bool force_live_memory=false, lldb::addr_t *load_addr_ptr=nullptr)
bool RemoveWatchpointByID(lldb::watch_id_t watch_id)
bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr, uint32_t stop_id=SectionLoadHistory::eStopIDNow, bool allow_section_end=false)
size_t ReadStringFromMemory(const Address &addr, char *dst, size_t max_bytes, Status &error, size_t type_width, bool force_live_memory=true)
Read a NULL terminated string from memory.
void DeleteBreakpointName(ConstString name)
void NotifyWillClearList(const ModuleList &module_list) override
bool SetArchitecture(const ArchSpec &arch_spec, bool set_platform=false, bool merge=true)
Set the architecture for this target.
void NotifyModuleAdded(const ModuleList &module_list, const lldb::ModuleSP &module_sp) override
Implementing of ModuleList::Notifier.
llvm::Expected< lldb::TypeSystemSP > GetScratchTypeSystemForLanguage(lldb::LanguageType language, bool create_on_demand=true)
void ConfigureBreakpointName(BreakpointName &bp_name, const BreakpointOptions &options, const BreakpointName::Permissions &permissions)
lldb_private::SummaryStatisticsSP GetSummaryStatisticsSPForProviderName(lldb_private::TypeSummaryImpl &summary_provider)
lldb::SearchFilterSP GetSearchFilterForModuleAndCUList(const FileSpecList *containingModules, const FileSpecList *containingSourceFiles)
lldb::ModuleSP GetExecutableModule()
Gets the module for the main executable.
bool SetStopHookActiveStateByID(lldb::user_id_t uid, bool active_state)
const lldb::ProcessSP & CreateProcess(lldb::ListenerSP listener_sp, llvm::StringRef plugin_name, const FileSpec *crash_file, bool can_connect)
void SetAllStopHooksActiveState(bool active_state)
lldb::ExpressionVariableSP GetPersistentVariable(ConstString name)
void NotifyModulesRemoved(lldb_private::ModuleList &module_list) override
size_t ReadCStringFromMemory(const Address &addr, std::string &out_str, Status &error, bool force_live_memory=false)
std::recursive_mutex m_mutex
An API mutex that is used by the lldb::SB* classes make the SB interface thread safe.
void ModulesDidUnload(ModuleList &module_list, bool delete_locations)
void CalculateExecutionContext(ExecutionContext &exe_ctx) override
Reconstruct the object's execution context into sc.
llvm::Expected< lldb::TraceSP > GetTraceOrCreate()
If a Trace object is present, this returns it, otherwise a new Trace is created with Trace::CreateTra...
void NotifyModuleUpdated(const ModuleList &module_list, const lldb::ModuleSP &old_module_sp, const lldb::ModuleSP &new_module_sp) override
SummaryStatisticsCache m_summary_statistics_cache
Status SerializeBreakpointsToFile(const FileSpec &file, const BreakpointIDList &bp_ids, bool append)
void DidExec()
Called as the last function in Process::DidExec().
void SaveScriptedLaunchInfo(lldb_private::ProcessInfo &process_info)
lldb::user_id_t m_stop_hook_next_id
void RemoveAllStopHooks()
static FileSpecList GetDefaultExecutableSearchPaths()
lldb::BreakpointSP CreateExceptionBreakpoint(enum lldb::LanguageType language, bool catch_bp, bool throw_bp, bool internal, Args *additional_args=nullptr, Status *additional_args_error=nullptr)
lldb::SearchFilterSP GetSearchFilterForModule(const FileSpec *containingModule)
llvm::StringMapEntry< DummySignalValues > DummySignalElement
std::recursive_mutex & GetAPIMutex()
static llvm::StringRef GetStaticBroadcasterClass()
static FileSpecList GetDefaultDebugFileSearchPaths()
void EnableAllowedBreakpoints()
llvm::Error SetLabel(llvm::StringRef label)
Set a label for a target.
uint32_t m_latest_stop_hook_id
@ eBroadcastBitModulesLoaded
@ eBroadcastBitSymbolsLoaded
@ eBroadcastBitModulesUnloaded
@ eBroadcastBitWatchpointChanged
@ eBroadcastBitBreakpointChanged
void RemoveAllowedBreakpoints()
bool DisableAllWatchpoints(bool end_to_end=true)
void ClearSectionLoadList()
lldb::addr_t GetReasonableReadSize(const Address &addr)
Return a recommended size for memory reads at addr, optimizing for cache usage.
lldb::PlatformSP m_platform_sp
The platform for this target.
llvm::Expected< std::unique_ptr< UtilityFunction > > CreateUtilityFunction(std::string expression, std::string name, lldb::LanguageType language, ExecutionContext &exe_ctx)
Creates and installs a UtilityFunction for the given language.
static TargetProperties & GetGlobalProperties()
Status Install(ProcessLaunchInfo *launch_info)
lldb::PlatformSP GetPlatform()
void NotifyModuleRemoved(const ModuleList &module_list, const lldb::ModuleSP &module_sp) override
lldb::BreakpointSP CreateAddressInModuleBreakpoint(lldb::addr_t file_addr, bool internal, const FileSpec &file_spec, bool request_hardware)
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)
void RemoveAllBreakpoints(bool internal_also=false)
lldb::BreakpointSP CreateSourceRegexBreakpoint(const FileSpecList *containingModules, const FileSpecList *source_file_list, const std::unordered_set< std::string > &function_names, RegularExpression source_regex, bool internal, bool request_hardware, LazyBool move_to_nearest_code)
static ArchSpec GetDefaultArchitecture()
void ResetBreakpointHitCounts()
Resets the hit count of all breakpoints.
const ModuleList & GetImages() const
Get accessor for the images for this process.
const ArchSpec & GetArchitecture() const
WatchpointList & GetWatchpointList()
bool EnableBreakpointByID(lldb::break_id_t break_id)
uint64_t ReadUnsignedIntegerFromMemory(const Address &addr, size_t integer_byte_size, uint64_t fail_value, Status &error, bool force_live_memory=false)
bool IgnoreAllWatchpoints(uint32_t ignore_count)
void AddBreakpoint(lldb::BreakpointSP breakpoint_sp, bool internal)
TypeSystemMap m_scratch_type_system_map
void AddBreakpointName(std::unique_ptr< BreakpointName > bp_name)
SectionLoadHistory m_section_load_history
void GetBreakpointNames(std::vector< std::string > &names)
Target(Debugger &debugger, const ArchSpec &target_arch, const lldb::PlatformSP &platform_sp, bool is_dummy_target)
Construct with optional file and arch.
size_t UnloadModuleSections(const lldb::ModuleSP &module_sp)
bool m_valid
This records the last natural stop at which we ran a stop-hook.
bool DisableWatchpointByID(lldb::watch_id_t watch_id)
void AddDummySignal(llvm::StringRef name, LazyBool pass, LazyBool print, LazyBool stop)
Add a signal to the Target's list of stored signals/actions.
lldb::WatchpointSP m_last_created_watchpoint
Status CreateBreakpointsFromFile(const FileSpec &file, BreakpointIDList &new_bps)
void SetREPL(lldb::LanguageType language, lldb::REPLSP repl_sp)
void SetExecutableModule(lldb::ModuleSP &module_sp, LoadDependentFiles load_dependent_files=eLoadDependentsDefault)
Set the main executable module.
lldb::StackFrameRecognizerManagerUP m_frame_recognizer_manager_up
Stores the frame recognizers of this target.
lldb::REPLSP GetREPL(Status &err, lldb::LanguageType language, const char *repl_options, bool can_create)
UserExpression * GetUserExpressionForLanguage(llvm::StringRef expr, llvm::StringRef prefix, SourceLanguage language, Expression::ResultType desired_type, const EvaluateExpressionOptions &options, ValueObject *ctx_obj, Status &error)
ModuleList m_images
The list of images for this process (shared libraries and anything dynamically loaded).
lldb::ProcessSP CalculateProcess() override
void PrintDummySignals(Stream &strm, Args &signals)
Print all the signals set in this target.
void SetPlatform(const lldb::PlatformSP &platform_sp)
bool SetSectionLoadAddress(const lldb::SectionSP §ion, lldb::addr_t load_addr, bool warn_multiple=false)
Status Attach(ProcessAttachInfo &attach_info, Stream *stream)
static void SetDefaultArchitecture(const ArchSpec &arch)
lldb::BreakpointSP m_last_created_breakpoint
void RemoveNameFromBreakpoint(lldb::BreakpointSP &bp_sp, ConstString name)
bool RemoveStopHookByID(lldb::user_id_t uid)
static void SettingsInitialize()
bool EnableAllWatchpoints(bool end_to_end=true)
std::recursive_mutex m_private_mutex
When the private state thread calls SB API's - usually because it is running OS plugin or Python Thre...
lldb::ExpressionResults EvaluateExpression(llvm::StringRef expression, ExecutionContextScope *exe_scope, lldb::ValueObjectSP &result_valobj_sp, const EvaluateExpressionOptions &options=EvaluateExpressionOptions(), std::string *fixed_expression=nullptr, ValueObject *ctx_obj=nullptr)
bool MergeArchitecture(const ArchSpec &arch_spec)
uint32_t GetSize(bool can_update=true)
lldb::ThreadSP GetThreadAtIndex(uint32_t idx, bool can_update=true)
static llvm::Expected< lldb::TraceSP > FindPluginForLiveProcess(llvm::StringRef plugin_name, Process &process)
Find a trace plug-in to trace a live process.
llvm::Expected< lldb::TypeSystemSP > GetTypeSystemForLanguage(lldb::LanguageType language, Module *module, bool can_create)
void ForEach(std::function< bool(lldb::TypeSystemSP)> const &callback)
void Dump(Stream &s) const
Encapsulates a one-time expression for use in lldb.
static lldb::ExpressionResults Evaluate(ExecutionContext &exe_ctx, const EvaluateExpressionOptions &options, llvm::StringRef expr_cstr, llvm::StringRef expr_prefix, lldb::ValueObjectSP &result_valobj_sp, std::string *fixed_expression=nullptr, ValueObject *ctx_obj=nullptr)
Evaluate one expression in the scratch context of the target passed in the exe_ctx and return its res...
lldb::watch_id_t Add(const lldb::WatchpointSP &wp_sp, bool notify)
Add a Watchpoint to the list.
void SetEnabledAll(bool enabled)
lldb::WatchpointSP FindByID(lldb::watch_id_t watchID) const
Returns a shared pointer to the watchpoint with id watchID, const version.
void GetListMutex(std::unique_lock< std::recursive_mutex > &lock)
Sets the passed in Locker to hold the Watchpoint List mutex.
WatchpointIterable Watchpoints() const
void RemoveAll(bool notify)
bool Remove(lldb::watch_id_t watchID, bool notify)
Removes the watchpoint given by watchID from this list.
const lldb::WatchpointSP FindByAddress(lldb::addr_t addr) const
Returns a shared pointer to the watchpoint at address addr - const version.
#define LLDB_WATCH_TYPE_WRITE
#define LLDB_INVALID_BREAK_ID
#define LLDB_INVALID_SIGNAL_NUMBER
#define LLDB_INVALID_INDEX32
#define LLDB_WATCH_TYPE_IS_VALID(type)
#define LLDB_BREAK_ID_IS_INTERNAL(bid)
#define LLDB_WATCH_TYPE_MODIFY
#define LLDB_WATCH_TYPE_READ
#define LLDB_INVALID_ADDRESS
@ SelectMostRelevantFrame
A class that represents a running process on the host machine.
@ eMemoryModuleLoadLevelPartial
@ eMemoryModuleLoadLevelComplete
@ eMemoryModuleLoadLevelMinimal
Log * GetLog(Cat mask)
Retrieve the Log object for the channel associated with the given log enum.
std::shared_ptr< SummaryStatistics > SummaryStatisticsSP
@ eLoadScriptFromSymFileTrue
@ eLoadScriptFromSymFileFalse
@ eLoadScriptFromSymFileWarn
@ eDynamicClassInfoHelperCopyRealizedClassList
@ eDynamicClassInfoHelperGetRealizedClassList
@ eDynamicClassInfoHelperAuto
@ eDynamicClassInfoHelperRealizedClassesStruct
OptionEnumValues GetDynamicValueTypes()
@ eImportStdModuleFallback
void LoadTypeSummariesForModule(lldb::ModuleSP module_sp)
Load type summaries embedded in the binary.
const char * StateAsCString(lldb::StateType state)
Converts a StateType to a C string.
llvm::ArrayRef< OptionEnumValueElement > OptionEnumValues
void LoadFormattersForModule(lldb::ModuleSP module_sp)
Load data formatters embedded in the binary.
@ eInlineBreakpointsNever
@ eInlineBreakpointsAlways
@ eInlineBreakpointsHeaders
std::shared_ptr< lldb_private::OptionValueProperties > OptionValuePropertiesSP
std::shared_ptr< lldb_private::Trace > TraceSP
std::shared_ptr< lldb_private::TypeSystem > TypeSystemSP
std::shared_ptr< lldb_private::ABI > ABISP
std::shared_ptr< lldb_private::StackFrame > StackFrameSP
std::shared_ptr< lldb_private::SearchFilter > SearchFilterSP
std::shared_ptr< lldb_private::BreakpointResolver > BreakpointResolverSP
DescriptionLevel
Description levels for "void GetDescription(Stream *, DescriptionLevel)" calls.
@ eDescriptionLevelVerbose
std::shared_ptr< lldb_private::Thread > ThreadSP
std::shared_ptr< lldb_private::ValueObject > ValueObjectSP
std::shared_ptr< lldb_private::ExpressionVariable > ExpressionVariableSP
std::shared_ptr< lldb_private::UnixSignals > UnixSignalsSP
std::shared_ptr< lldb_private::Platform > PlatformSP
StateType
Process and Thread States.
@ eStateConnected
Process is connected to remote debug services, but not launched or attached to anything yet.
@ eStateStopped
Process or thread is stopped and can be examined.
@ eStateAttaching
Process is currently trying to attach.
@ eStateExited
Process has exited and can't be examined.
std::shared_ptr< lldb_private::RegisterTypeBuilder > RegisterTypeBuilderSP
LanguageType
Programming language type.
@ eLanguageTypeMipsAssembler
Mips_Assembler.
@ eLanguageTypeUnknown
Unknown or invalid language value.
@ eLanguageTypeC
Non-standardized C, such as K&R.
std::shared_ptr< lldb_private::Stream > StreamSP
std::shared_ptr< lldb_private::Breakpoint > BreakpointSP
ExpressionResults
The results of expression evaluation.
std::shared_ptr< lldb_private::Process > ProcessSP
std::shared_ptr< lldb_private::BreakpointPrecondition > BreakpointPreconditionSP
std::shared_ptr< lldb_private::Event > EventSP
ReturnStatus
Command Return Status Types.
@ eReturnStatusSuccessContinuingResult
@ eReturnStatusSuccessContinuingNoResult
std::shared_ptr< lldb_private::Watchpoint > WatchpointSP
std::shared_ptr< lldb_private::Listener > ListenerSP
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
std::shared_ptr< lldb_private::Section > SectionSP
std::shared_ptr< lldb_private::Target > TargetSP
std::shared_ptr< lldb_private::Module > ModuleSP
std::shared_ptr< lldb_private::REPL > REPLSP
A SmallBitVector that represents a set of source languages (lldb::LanguageType).
llvm::SmallBitVector bitvector
std::optional< lldb::LanguageType > GetSingularLanguage()
If the set contains a single language only, return it.
const char * string_value
A type-erased pair of llvm::dwarf::SourceLanguageName and version.
lldb::LanguageType AsLanguageType() const
llvm::StringRef GetDescription() const
A mix in class that contains a generic user ID.
lldb::user_id_t GetID() const
Get accessor for the user ID.