75#include "llvm/ADT/ScopeExit.h"
76#include "llvm/ADT/SetVector.h"
77#include "llvm/Support/ErrorExtras.h"
78#include "llvm/Support/ThreadPool.h"
90struct ExecutableInstaller {
93 : m_platform{platform}, m_module{module},
94 m_local_file{m_module->GetFileSpec()},
95 m_remote_file{m_module->GetRemoteInstallFileSpec()} {}
97 void setupRemoteFile()
const { m_module->SetPlatformFileSpec(m_remote_file); }
101 const FileSpec m_local_file;
102 const FileSpec m_remote_file;
105struct MainExecutableInstaller {
108 ProcessLaunchInfo &launch_info)
109 : m_platform{platform}, m_module{module},
110 m_local_file{m_module->GetFileSpec()},
112 getRemoteFileSpec(m_platform, target, m_module, m_local_file)},
113 m_launch_info{launch_info} {}
115 void setupRemoteFile()
const {
116 m_module->SetPlatformFileSpec(m_remote_file);
119 m_platform->SetFilePermissions(m_remote_file, 0700 );
124 const FileSpec m_local_file;
125 const FileSpec m_remote_file;
130 const FileSpec &local_file) {
131 FileSpec remote_file =
module->GetRemoteInstallFileSpec();
132 if (remote_file || !target->GetAutoInstallMainExecutable())
138 remote_file = platform->GetRemoteWorkingDirectory();
144 ProcessLaunchInfo &m_launch_info;
150template <
typename Installer>
152 if (!installer.m_local_file || !installer.m_remote_file)
155 Status error = installer.m_platform->Install(installer.m_local_file,
156 installer.m_remote_file);
160 installer.setupRemoteFile();
175 static constexpr llvm::StringLiteral class_name(
"lldb.target");
207 static_cast<void *
>(
this));
210 "Target::Target created with architecture {0} ({1})",
212 target_arch.
GetTriple().getTriple().c_str());
220 LLDB_LOG(log,
"{0} Target::~Target()",
static_cast<void *
>(
this));
232 if (breakpoint_sp->IsInternal())
246 elem.second->CopyIntoNewTarget(*
this);
247 if (new_override_up->Validate())
283 llvm::consumeError(
m_process_sp->FlushDelayedBreakpoints());
285 std::unique_lock<std::recursive_mutex> lock;
316 llvm::StringRef plugin_name,
323 listener_sp, crash_file, can_connect);
330 const char *repl_options,
bool can_create) {
338 language = *single_lang;
339 }
else if (repl_languages.
Empty()) {
341 "LLDB isn't configured with REPL support for any languages.");
345 "Multiple possible REPL languages. Please specify a language.");
350 REPLMap::iterator pos =
m_repl_map.find(language);
358 "Couldn't find an existing REPL for %s, and can't create a new one",
373 "Couldn't create a REPL for %s",
387 std::lock_guard<std::recursive_mutex> guard(
m_mutex);
394 const bool notify =
false;
418 return abi_sp->GetPluginName();
451 shared_lib_filter.
Append(main_module_sp->GetFileSpec());
452 llvm::SetVector<std::string, std::vector<std::string>,
453 std::unordered_set<std::string>>
462 if (!entryPointName.empty())
463 entryPointNamesSet.insert(entryPointName);
465 if (entryPointNamesSet.empty()) {
471 nullptr, entryPointNamesSet.takeVector(),
472 eFunctionNameTypeFull,
482 bp_sp->SetOneShot(
true);
489 const std::unordered_set<std::string> &function_names,
493 containingModules, source_file_spec_list));
497 nullptr, std::move(source_regex), function_names,
498 !
static_cast<bool>(move_to_nearest_code)));
504 const FileSpec &file, uint32_t line_no,
507 LazyBool skip_prologue,
bool internal,
511 std::optional<llvm::StringRef> removed_prefix_opt =
513 if (!removed_prefix_opt)
514 remapped_file = file;
518 switch (inline_strategy) {
539 compile_unit_list.
Append(remapped_file);
552 !
static_cast<bool>(move_to_nearest_code));
557 nullptr, offset, skip_prologue, location_spec, removed_prefix_opt));
584 std::make_shared<SearchFilterForUnconstrainedSearches>(
587 std::make_shared<BreakpointResolverAddress>(
nullptr, addr);
594 bool request_hardware) {
596 std::make_shared<SearchFilterForUnconstrainedSearches>(
599 std::make_shared<BreakpointResolverAddress>(
nullptr,
Address(file_addr),
607 const FileSpecList *containingSourceFiles,
const char *func_name,
608 FunctionNameType func_name_type_mask,
LanguageType language,
610 bool internal,
bool hardware) {
614 containingModules, containingSourceFiles));
623 offset, offset_is_insn_count, skip_prologue));
632 const std::vector<std::string> &func_names,
633 FunctionNameType func_name_type_mask,
635 LazyBool skip_prologue,
bool internal,
bool hardware) {
637 size_t num_names = func_names.size();
640 containingModules, containingSourceFiles));
648 new BreakpointResolverName(
nullptr, func_names, func_name_type_mask,
649 language, offset, skip_prologue));
658 const char *func_names[],
size_t num_names,
659 FunctionNameType func_name_type_mask,
661 LazyBool skip_prologue,
bool internal,
bool hardware) {
665 containingModules, containingSourceFiles));
677 nullptr, func_names, num_names, func_name_type_mask, language, offset,
679 resolver_sp->SetOffset(offset);
688 if (containingModule !=
nullptr) {
691 filter_sp = std::make_shared<SearchFilterByModule>(shared_from_this(),
696 std::make_shared<SearchFilterForUnconstrainedSearches>(
706 if (containingModules && containingModules->
GetSize() != 0) {
709 filter_sp = std::make_shared<SearchFilterByModuleList>(shared_from_this(),
714 std::make_shared<SearchFilterForUnconstrainedSearches>(
724 if (containingSourceFiles ==
nullptr || containingSourceFiles->
GetSize() == 0)
728 if (containingModules ==
nullptr) {
732 filter_sp = std::make_shared<SearchFilterByModuleListAndCU>(
733 shared_from_this(),
FileSpecList(), *containingSourceFiles);
735 filter_sp = std::make_shared<SearchFilterByModuleListAndCU>(
736 shared_from_this(), *containingModules, *containingSourceFiles);
745 bool internal,
bool hardware) {
747 containingModules, containingSourceFiles));
750 :
static_cast<bool>(skip_prologue);
752 nullptr, std::move(func_regex), requested_language, 0,
skip));
759 bool catch_bp,
bool throw_bp,
bool internal,
762 *
this, language, catch_bp, throw_bp, internal);
763 if (exc_bkpt_sp && additional_args) {
765 if (precondition_sp && additional_args) {
767 *
error = precondition_sp->ConfigurePrecondition(*additional_args);
769 precondition_sp->ConfigurePrecondition(*additional_args);
776 const llvm::StringRef class_name,
const FileSpecList *containingModules,
777 const FileSpecList *containingSourceFiles,
bool internal,
784 containingSourceFiles && containingSourceFiles->
GetSize() > 0;
785 bool has_modules = containingModules && containingModules->
GetSize() > 0;
787 if (has_files && has_modules) {
789 containingSourceFiles);
790 }
else if (has_files) {
793 }
else if (has_modules) {
796 filter_sp = std::make_shared<SearchFilterForUnconstrainedSearches>(
807 bool internal,
bool request_hardware,
808 bool resolve_indirect_symbols) {
810 if (filter_sp && resolver_sp) {
818 resolver_sp = overridden_sp;
821 bp_sp.reset(
new Breakpoint(*
this, filter_sp, resolver_sp, hardware,
822 resolve_indirect_symbols));
823 resolver_sp->SetBreakpoint(bp_sp);
841 LLDB_LOGF(log,
"Target::%s (internal = %s) => break_id = %s\n",
842 __FUNCTION__, bp_sp->IsInternal() ?
"yes" :
"no", s.
GetData());
845 bp_sp->ResolveBreakpoint();
876 bp_sp->AddName(name);
881 std::make_pair(bp_name->GetName(), std::move(bp_name)));
887 if (!
error.Success())
892 return iter->second.get();
897 "Breakpoint name \"{0}\" doesn't exist and can_create is false.", name);
902 .insert(std::make_pair(name, std::make_unique<BreakpointName>(name)))
903 .first->second.get();
910 const char *name_cstr = name.
AsCString(
nullptr);
913 bp_sp->RemoveName(name_cstr);
919 bp_sp->RemoveName(name.
AsCString(
nullptr));
931 llvm::Expected<std::vector<BreakpointSP>> expected_vector =
935 if (!expected_vector) {
937 llvm::toString(expected_vector.takeError()));
941 for (
auto bp_sp : *expected_vector)
948 names.push_back(bp_name_entry.first.GetString());
953llvm::Expected<lldb::user_id_t>
956 llvm::StringRef description) {
957 if (class_name.empty())
965 std::string(class_name), impl));
966 llvm::Error
error = new_override_up->Validate();
974 std::vector<lldb::user_id_t> &idxs) {
976 stream <<
"No overrides.\n";
980 auto begin = idxs.begin();
981 auto end = idxs.end();
982 bool empty = idxs.empty();
983 bool print_first =
true;
985 auto idx_pos = empty ? end : std::find(begin, end, elem.first);
986 if (empty || idx_pos != end) {
989 stream <<
"ID Description\n";
990 stream <<
"---- -----------\n";
993 stream.
Format(
"{0,4} {1}\n", elem.first, elem.second->GetDescription());
1005 std::optional<uint32_t> num_supported_hardware_watchpoints =
1010 if (!num_supported_hardware_watchpoints)
1013 if (*num_supported_hardware_watchpoints == 0) {
1015 "Target supports (%u) hardware watchpoint slots.\n",
1016 *num_supported_hardware_watchpoints);
1029 "Target::%s (addr = 0x%8.8" PRIx64
" size = %" PRIu64
1031 __FUNCTION__, addr, (uint64_t)size, kind);
1042 "cannot set a watchpoint with watch_size of 0");
1045 "invalid watch address: %" PRIu64, addr);
1061 const bool notify =
false;
1066 addr = abi->FixDataAddress(addr);
1080 std::unique_lock<std::recursive_mutex> lock;
1084 size_t old_size = matched_sp->GetByteSize();
1090 if (size == old_size && kind == old_type) {
1092 wp_sp->SetEnabled(
false, notify);
1101 wp_sp = std::make_shared<Watchpoint>(*
this, addr, size, type);
1102 wp_sp->SetWatchpointType(kind, notify);
1107 LLDB_LOGF(log,
"Target::%s (creation of watchpoint %s with id = %u)\n",
1108 __FUNCTION__,
error.Success() ?
"succeeded" :
"failed",
1123 LLDB_LOGF(log,
"Target::%s \n", __FUNCTION__);
1132 LLDB_LOGF(log,
"Target::%s (internal_also = %s)\n", __FUNCTION__,
1133 internal_also ?
"yes" :
"no");
1144 LLDB_LOGF(log,
"Target::%s (internal_also = %s)\n", __FUNCTION__,
1145 internal_also ?
"yes" :
"no");
1154 LLDB_LOGF(log,
"Target::%s", __FUNCTION__);
1161 LLDB_LOGF(log,
"Target::%s (internal_also = %s)\n", __FUNCTION__,
1162 internal_also ?
"yes" :
"no");
1171 LLDB_LOGF(log,
"Target::%s", __FUNCTION__);
1178 LLDB_LOGF(log,
"Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__,
1198 LLDB_LOGF(log,
"Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__,
1208 bp_sp->SetEnabled(
false);
1216 LLDB_LOGF(log,
"Target::%s (break_id = %i, internal = %s)\n", __FUNCTION__,
1227 bp_sp->SetEnabled(
true);
1247 std::string path(file.
GetPath());
1255 if (
error.Success()) {
1256 break_store_ptr = input_data_sp->GetAsArray();
1257 if (!break_store_ptr) {
1259 "Tried to append to invalid input file %s", path.c_str());
1265 if (!break_store_ptr) {
1266 break_store_sp = std::make_shared<StructuredData::Array>();
1267 break_store_ptr = break_store_sp.get();
1274 lldb::eFilePermissionsFileDefault);
1281 std::unique_lock<std::recursive_mutex> lock;
1287 size_t num_breakpoints = breakpoints.
GetSize();
1288 for (
size_t i = 0; i < num_breakpoints; i++) {
1293 break_store_ptr->
AddItem(bkpt_save_sp);
1297 std::unordered_set<lldb::break_id_t> processed_bkpts;
1298 const size_t count = bp_ids.
GetSize();
1299 for (
size_t i = 0; i < count; ++i) {
1305 std::pair<std::unordered_set<lldb::break_id_t>::iterator,
bool>
1306 insert_result = processed_bkpts.insert(bp_id);
1307 if (!insert_result.second)
1314 if (!bkpt_save_sp) {
1316 "Unable to serialize breakpoint %d", bp_id);
1319 break_store_ptr->
AddItem(bkpt_save_sp);
1324 break_store_ptr->
Dump(out_file,
false);
1331 std::vector<std::string> no_names;
1336 std::vector<std::string> &names,
1338 std::unique_lock<std::recursive_mutex> lock;
1344 if (!
error.Success()) {
1346 }
else if (!input_data_sp || !input_data_sp->IsValid()) {
1348 "Invalid JSON from input file: %s.", file.
GetPath().c_str());
1355 "Invalid breakpoint data from input file: %s.", file.
GetPath().c_str());
1359 size_t num_bkpts = bkpt_array->
GetSize();
1360 size_t num_names = names.size();
1362 for (
size_t i = 0; i < num_bkpts; i++) {
1368 "Invalid breakpoint data for element %zu from input file: %s.", i,
1379 shared_from_this(), bkpt_data_sp,
error);
1380 if (!
error.Success()) {
1382 "Error restoring breakpoint %zu from %s: %s.", i,
1398 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1427 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1454 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1480 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1486 wp_sp->ResetHitCount();
1494 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1500 wp_sp->ResetHistoricValues();
1509 LLDB_LOGF(log,
"Target::%s\n", __FUNCTION__);
1518 wp_sp->SetIgnoreCount(ignore_count);
1526 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1545 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1564 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1579 uint32_t ignore_count) {
1581 LLDB_LOGF(log,
"Target::%s (watch_id = %i)\n", __FUNCTION__, watch_id);
1588 wp_sp->SetIgnoreCount(ignore_count);
1595 std::lock_guard<std::recursive_mutex> lock(
m_images.GetMutex());
1607 return m_images.GetModuleAtIndex(0);
1634 if (executable_sp) {
1637 pid = proc->GetID();
1641 info->
uuid = executable_sp->GetUUID();
1643 info->
triple = executable_sp->GetArchitecture().GetTriple().getTriple();
1649 info->
uuid = executable_sp->GetUUID();
1655 executable_sp->GetFileSpec().GetPath().c_str());
1657 const bool notify =
true;
1663 if (!
m_arch.GetSpec().IsValid()) {
1664 m_arch = executable_sp->GetArchitecture();
1666 "Target::SetExecutableModule setting architecture to {0} ({1}) "
1667 "based on executable file",
1668 m_arch.GetSpec().GetArchitectureName(),
1669 m_arch.GetSpec().GetTriple().getTriple());
1672 ObjectFile *executable_objfile = executable_sp->GetObjectFile();
1673 bool load_dependents =
true;
1674 switch (load_dependent_files) {
1676 load_dependents = executable_sp->IsExecutable();
1679 load_dependents =
true;
1682 load_dependents =
false;
1686 if (executable_objfile && load_dependents) {
1689 std::mutex dependent_files_mutex;
1694 auto GetDependentModules = [&](
FileSpec dependent_file_spec) {
1695 FileSpec platform_dependent_file_spec;
1697 m_platform_sp->GetFileWithUUID(dependent_file_spec,
nullptr,
1698 platform_dependent_file_spec);
1700 platform_dependent_file_spec = dependent_file_spec;
1705 if (image_module_sp) {
1707 ObjectFile *objfile = image_module_sp->GetObjectFile();
1713 std::lock_guard<std::mutex> guard(dependent_files_mutex);
1714 dependent_files_copy = dependent_files;
1719 const size_t previous_dependent_files =
1720 dependent_files_copy.
GetSize();
1725 std::lock_guard<std::mutex> guard(dependent_files_mutex);
1726 for (
size_t i = previous_dependent_files;
1727 i < dependent_files_copy.
GetSize(); ++i)
1738 for (uint32_t i = 0; i < dependent_files.
GetSize(); i++) {
1744 std::lock_guard<std::mutex> guard(dependent_files_mutex);
1745 for (; i < dependent_files.
GetSize(); i++)
1746 task_group.async(GetDependentModules,
1759 bool missing_local_arch = !
m_arch.GetSpec().IsValid();
1760 bool replace_local_arch =
true;
1761 bool compatible_local_arch =
false;
1770 if (!platform_sp || !platform_sp->IsCompatibleArchitecture(
1774 GetDebugger().GetPlatformList().GetOrCreate(other, {},
1776 arch_platform_sp->SetLocateModuleCallback(
1777 platform_sp->GetLocateModuleCallback());
1780 other = platform_arch;
1786 if (!missing_local_arch) {
1787 if (merge &&
m_arch.GetSpec().IsCompatibleMatch(arch_spec)) {
1790 if (
m_arch.GetSpec().IsCompatibleMatch(other)) {
1791 compatible_local_arch =
true;
1794 replace_local_arch =
false;
1799 if (compatible_local_arch || missing_local_arch) {
1803 if (replace_local_arch)
1806 "Target::SetArchitecture merging compatible arch; arch "
1808 m_arch.GetSpec().GetArchitectureName(),
1809 m_arch.GetSpec().GetTriple().getTriple());
1817 "Target::SetArchitecture changing architecture to %s (%s) from %s (%s)",
1819 arch_spec.
GetTriple().getTriple().c_str(),
1820 m_arch.GetSpec().GetArchitectureName(),
1821 m_arch.GetSpec().GetTriple().getTriple().c_str());
1828 if (executable_sp) {
1830 "Target::SetArchitecture Trying to select executable file "
1831 "architecture %s (%s)",
1833 arch_spec.
GetTriple().getTriple().c_str());
1834 ModuleSpec module_spec(executable_sp->GetFileSpec(), other);
1835 module_spec.
SetTarget(shared_from_this());
1839 if (!
error.Fail() && executable_sp) {
1850 if (
m_arch.GetSpec().IsCompatibleMatch(arch_spec)) {
1855 "Target::MergeArchitecture target has arch %s, merging with "
1857 m_arch.GetSpec().GetTriple().getTriple().c_str(),
1858 arch_spec.
GetTriple().getTriple().c_str());
1879 my_module_list.
Append(module_sp);
1889 my_module_list.
Append(module_sp);
1902 old_module_sp, new_module_sp);
1914 const size_t num_images = module_list.
GetSize();
1916 std::list<Status> errors;
1918 for (
const auto &err : errors)
1921 for (
size_t idx = 0; idx < num_images; ++idx) {
1933 std::make_shared<TargetEventData>(shared_from_this(), module_list);
1942 runtime->SymbolsDidLoad(module_list);
1949 std::make_shared<TargetEventData>(shared_from_this(), module_list);
1958 std::make_shared<TargetEventData>(shared_from_this(), module_list);
1972 const bool should_flush_type_systems =
1974 auto *object_file =
module.GetObjectFile();
1979 auto type = object_file->GetType();
1983 return module.FileHasChanged() &&
1984 (type == ObjectFile::eTypeObjectFile ||
1985 type == ObjectFile::eTypeExecutable ||
1986 type == ObjectFile::eTypeSharedLibrary);
1989 if (should_flush_type_systems)
1997 const FileSpec &module_file_spec) {
2002 size_t num_modules = matchingModules.
GetSize();
2006 if (num_modules > 0) {
2007 for (
size_t i = 0; i < num_modules; i++) {
2022 return m_platform_sp->ModuleIsExcludedForUnconstrainedSearches(*
this,
2034 if (section_sp->IsEncrypted()) {
2038 ModuleSP module_sp(section_sp->GetModule());
2040 ObjectFile *objfile = section_sp->GetModule()->GetObjectFile();
2043 section_sp.get(), addr.
GetOffset(), dst, dst_len);
2048 "error reading data from section %s",
2049 section_sp->GetName().GetCString());
2056 "address doesn't contain a section that points to a "
2057 "section in a object file");
2065 bool *did_read_live_memory) {
2067 if (did_read_live_memory)
2068 *did_read_live_memory =
false;
2081 size_t bytes_read = 0;
2088 if (section_load_list.
IsEmpty()) {
2094 m_images.ResolveFileAddress(file_addr, resolved_addr);
2107 resolved_addr = fixed_addr;
2112 std::unique_ptr<uint8_t[]> file_cache_read_buffer;
2113 size_t file_cache_bytes_read = 0;
2119 auto permissions =
Flags(section_sp->GetPermissions());
2120 bool is_readonly = !permissions.Test(ePermissionsWritable) &&
2121 permissions.Test(ePermissionsReadable);
2123 file_cache_bytes_read =
2125 if (file_cache_bytes_read == dst_len)
2126 return file_cache_bytes_read;
2127 else if (file_cache_bytes_read > 0) {
2128 file_cache_read_buffer =
2129 std::make_unique<uint8_t[]>(file_cache_bytes_read);
2130 std::memcpy(file_cache_read_buffer.get(), dst, file_cache_bytes_read);
2142 if (addr_module_sp && addr_module_sp->GetFileSpec())
2144 "{0:F}[{1:x+}] can't be resolved, {0:F} is not currently loaded",
2148 "0x%" PRIx64
" can't be resolved", resolved_addr.
GetFileAddress());
2151 if (bytes_read != dst_len) {
2152 if (
error.Success()) {
2153 if (bytes_read == 0)
2155 "read memory from 0x%" PRIx64
" failed", load_addr);
2158 "only %" PRIu64
" of %" PRIu64
2159 " bytes were read from memory at 0x%" PRIx64,
2160 (uint64_t)bytes_read, (uint64_t)dst_len, load_addr);
2165 *load_addr_ptr = load_addr;
2166 if (did_read_live_memory)
2167 *did_read_live_memory =
true;
2173 if (file_cache_read_buffer && file_cache_bytes_read > 0) {
2176 std::memcpy(dst, file_cache_read_buffer.get(), file_cache_bytes_read);
2177 return file_cache_bytes_read;
2199 out_str.append(buf, length);
2202 if (length ==
sizeof(buf) - 1)
2203 curr_addr += length;
2208 return out_str.size();
2212 size_t dst_max_len,
Status &result_error,
2213 bool force_live_memory) {
2214 size_t total_cstr_len = 0;
2215 if (dst && dst_max_len) {
2216 result_error.
Clear();
2218 memset(dst, 0, dst_max_len);
2225 const size_t cache_line_size = 512;
2227 size_t bytes_left = dst_max_len - 1;
2228 char *curr_dst = dst;
2230 while (bytes_left > 0) {
2231 addr_t cache_line_bytes_left =
2232 cache_line_size - (curr_addr % cache_line_size);
2234 std::min<addr_t>(bytes_left, cache_line_bytes_left);
2236 size_t bytes_read =
ReadMemory(address, curr_dst, bytes_to_read,
error,
2239 if (bytes_read == 0) {
2240 result_error = std::move(
error);
2241 dst[total_cstr_len] =
'\0';
2244 const size_t len = strlen(curr_dst);
2246 total_cstr_len += len;
2248 if (len < bytes_to_read)
2251 curr_dst += bytes_read;
2252 curr_addr += bytes_read;
2253 bytes_left -= bytes_read;
2260 result_error.
Clear();
2262 return total_cstr_len;
2270 return cache_line_size - (load_addr % cache_line_size);
2280 size_t type_width,
bool force_live_memory) {
2281 if (!dst || !max_bytes || !type_width || max_bytes < type_width)
2284 size_t total_bytes_read = 0;
2288 memset(dst, 0, max_bytes);
2289 size_t bytes_left = max_bytes - type_width;
2291 const char terminator[4] = {
'\0',
'\0',
'\0',
'\0'};
2292 assert(
sizeof(terminator) >= type_width &&
"Attempting to validate a "
2293 "string with more than 4 bytes "
2297 char *curr_dst = dst;
2300 while (bytes_left > 0 &&
error.Success()) {
2304 ReadMemory(address, curr_dst, bytes_to_read,
error, force_live_memory);
2306 if (bytes_read == 0)
2311 size_t aligned_start = total_bytes_read - total_bytes_read % type_width;
2312 for (
size_t i = aligned_start;
2313 i + type_width <= total_bytes_read + bytes_read; i += type_width)
2314 if (::memcmp(&dst[i], terminator, type_width) == 0) {
2319 total_bytes_read += bytes_read;
2320 curr_dst += bytes_read;
2321 address.
Slide(bytes_read);
2322 bytes_left -= bytes_read;
2324 return total_bytes_read;
2328 bool is_signed,
Scalar &scalar,
2330 bool force_live_memory) {
2333 if (byte_size <=
sizeof(uval)) {
2336 if (bytes_read == byte_size) {
2338 m_arch.GetSpec().GetAddressByteSize());
2341 scalar = data.
GetMaxU32(&offset, byte_size);
2343 scalar = data.
GetMaxU64(&offset, byte_size);
2353 "byte size of %u is too large for integer scalar type", byte_size);
2359 size_t integer_byte_size,
2361 bool force_live_memory) {
2370 size_t integer_byte_size,
2372 bool force_live_memory) {
2382 bool force_live_memory) {
2385 false, scalar,
error, force_live_memory)) {
2389 if (section_load_list.
IsEmpty()) {
2392 m_images.ResolveFileAddress(pointer_vm_addr, pointer_addr);
2403 pointer_addr.
SetOffset(pointer_vm_addr);
2411 bool notify,
Status *error_ptr) {
2418 module_spec.
SetTarget(shared_from_this());
2420 if (std::optional<FileSpec> remapped_obj_file =
2431 module_sp =
m_images.FindFirstModule(module_spec);
2434 llvm::SmallVector<ModuleSP, 1>
2437 bool did_create_module =
false;
2447 module_spec, module_sp, symbol_file_spec, &did_create_module);
2477 transformed_spec.
SetTarget(shared_from_this());
2479 &old_modules, &did_create_module);
2496 &old_modules, &did_create_module);
2504 module_spec,
m_process_sp.get(), module_sp, &old_modules,
2505 &did_create_module);
2516 ObjectFile *objfile = module_sp->GetObjectFile();
2532 "debug info files aren't valid target "
2533 "modules, please specify an executable");
2540 "stub libraries aren't valid target "
2541 "modules, please specify an executable");
2546 "unsupported file type, please specify an executable");
2565 m_images.FindModules(module_spec_copy, found_modules);
2567 old_modules.push_back(found_module);
2574 if (symbol_file_spec)
2575 module_sp->SetSymbolFileFileSpec(symbol_file_spec);
2577 llvm::SmallVector<ModuleSP, 1> replaced_modules;
2578 for (
ModuleSP &old_module_sp : old_modules) {
2579 if (
m_images.GetIndexForModule(old_module_sp.get()) !=
2581 if (replaced_modules.empty())
2582 m_images.ReplaceModule(old_module_sp, module_sp);
2586 replaced_modules.push_back(std::move(old_module_sp));
2590 if (replaced_modules.size() > 1) {
2603 auto dump = [&message](
Module &dump_module) ->
void {
2604 UUID dump_uuid = dump_module.GetUUID();
2608 message <<
" (uuid ";
2611 dump_uuid.
Dump(message);
2613 message <<
"not specified";
2618 message <<
"New module ";
2621 << llvm::formatv(
" simultaneously replaced {0} old modules: ",
2622 replaced_modules.size());
2623 for (
ModuleSP &replaced_module_sp : replaced_modules)
2624 dump(*replaced_module_sp);
2630 if (replaced_modules.empty())
2631 m_images.Append(module_sp, notify);
2633 for (
ModuleSP &old_module_sp : replaced_modules) {
2634 auto old_module_wp = old_module_sp->weak_from_this();
2635 old_module_sp.reset();
2643 *error_ptr = std::move(
error);
2672llvm::Expected<lldb::TypeSystemSP>
2674 bool create_on_demand) {
2676 return llvm::createStringError(
"invalid target");
2689 if (languages_for_expressions.
Empty())
2690 return llvm::createStringError(
2691 "No expression support for any languages");
2702 uint32_t byte_size) {
2709std::vector<lldb::TypeSystemSP>
2717 std::vector<lldb::TypeSystemSP> scratch_type_systems;
2722 for (
auto bit : languages_for_expressions.
bitvector.set_bits()) {
2724 auto type_system_or_err =
2726 if (!type_system_or_err)
2729 "Language '{1}' has expression support but no scratch type "
2730 "system available: {0}",
2733 if (
auto ts = *type_system_or_err)
2734 scratch_type_systems.push_back(ts);
2737 std::sort(scratch_type_systems.begin(), scratch_type_systems.end());
2738 scratch_type_systems.erase(llvm::unique(scratch_type_systems),
2739 scratch_type_systems.end());
2740 return scratch_type_systems;
2747 if (
auto err = type_system_or_err.takeError()) {
2750 "Unable to get persistent expression state for language {1}: {0}",
2755 if (
auto ts = *type_system_or_err)
2756 return ts->GetPersistentExpressionState();
2759 "Unable to get persistent expression state for language {}:",
2765 llvm::StringRef expr, llvm::StringRef prefix,
SourceLanguage language,
2769 auto type_system_or_err =
2771 if (
auto err = type_system_or_err.takeError()) {
2773 "Could not find type system for language %s: %s",
2775 llvm::toString(std::move(err)).c_str());
2779 auto ts = *type_system_or_err;
2782 "Type system for language %s is no longer live",
2787 auto *user_expr = ts->GetUserExpression(expr, prefix, language, desired_type,
2791 "Could not create an expression for language %s",
2802 if (
auto err = type_system_or_err.takeError()) {
2804 "Could not find type system for language %s: %s",
2806 llvm::toString(std::move(err)).c_str());
2809 auto ts = *type_system_or_err;
2812 "Type system for language %s is no longer live",
2816 auto *persistent_fn = ts->GetFunctionCaller(return_type, function_address,
2817 arg_value_list, name);
2820 "Could not create an expression for language %s",
2823 return persistent_fn;
2826llvm::Expected<std::unique_ptr<UtilityFunction>>
2831 if (!type_system_or_err)
2832 return type_system_or_err.takeError();
2833 auto ts = *type_system_or_err;
2835 return llvm::createStringError(
2836 llvm::StringRef(
"Type system for language ") +
2838 llvm::StringRef(
" is no longer live"));
2839 std::unique_ptr<UtilityFunction> utility_fn =
2840 ts->CreateUtilityFunction(std::move(expression), std::move(name));
2842 return llvm::createStringError(
2843 llvm::StringRef(
"Could not create an expression for language") +
2847 if (!utility_fn->Install(diagnostics, exe_ctx))
2849 "Could not install utility function:");
2851 return std::move(utility_fn);
2872 "setting target's default architecture to {0} ({1})",
2879 if (llvm::to_integer(label, n))
2880 return llvm::createStringError(
"cannot use integer as target label");
2884 if (target_sp && target_sp->GetLabel() == label) {
2885 return llvm::createStringErrorV(
2886 "Cannot use label '{0}' since it's set in target #{1}.", label, i);
2891 return llvm::Error::success();
2900 Target *target =
nullptr;
2901 if (sc_ptr !=
nullptr)
2903 if (target ==
nullptr && exe_ctx_ptr)
2913 result_valobj_sp.reset();
2918 m_stats.GetExpressionStats().NotifyFailure();
2919 return execution_results;
2925 llvm::scope_exit on_exit([
this, old_suppress_value]() {
2943 if (expr[0] ==
'$') {
2944 auto type_system_or_err =
2946 if (
auto err = type_system_or_err.takeError()) {
2948 "Unable to get scratch type system");
2950 auto ts = *type_system_or_err;
2953 "Scratch type system is no longer live: {0}");
2956 ts->GetPersistentExpressionState()->GetVariable(expr);
2959 if (persistent_var_sp) {
2960 result_valobj_sp = persistent_var_sp->GetValueObject();
2967 if (
ThreadSP thread_sp = exe_ctx.GetThreadSP()) {
2968 if (thread_sp->IsAnyProviderActive()) {
2976 result_valobj_sp, fixed_expression, ctx_obj);
2980 m_stats.GetExpressionStats().NotifySuccess();
2982 m_stats.GetExpressionStats().NotifyFailure();
2983 return execution_results;
2989 [name, &variable_sp](
TypeSystemSP type_system) ->
bool {
2990 auto ts = type_system.get();
2994 ts->GetPersistentExpressionState()) {
2995 variable_sp = persistent_state->GetVariable(name);
3010 auto ts = type_system.get();
3015 ts->GetPersistentExpressionState()) {
3016 address = persistent_state->LookupSymbol(name);
3029 const bool has_primary_executable = exe_module && exe_module->
GetObjectFile();
3030 if (has_primary_executable) {
3037 const size_t num_images = modules.
GetSize();
3038 for (
size_t idx = 0; idx < num_images; ++idx) {
3040 if (!module_sp || !module_sp->GetObjectFile())
3043 Address entry_addr = module_sp->GetObjectFile()->GetEntryPointAddress();
3049 if (!has_primary_executable)
3050 return llvm::createStringError(
3051 "No primary executable found and could not find entry point address in "
3052 "any executable module");
3054 return llvm::createStringError(
3055 "Could not find entry point address for primary executable module \"" +
3063 ? arch_plugin->GetCallableLoadAddress(load_addr, addr_class)
3070 return arch_plugin ? arch_plugin->GetOpcodeLoadAddress(load_addr, addr_class)
3076 return arch_plugin ? arch_plugin->GetBreakableLoadAddress(addr, *
this) : addr;
3079llvm::Expected<lldb::DisassemblerSP>
3081 const char *flavor_string) {
3083 bool force_live_memory =
true;
3086 const size_t bytes_read =
3088 force_live_memory, &load_addr);
3091 return llvm::createStringError(
3092 error.AsCString(
"Target::ReadInstructions failed to read memory at %s"),
3096 if (!flavor_string || flavor_string[0] ==
'\0') {
3101 if (arch == llvm::Triple::x86 || arch == llvm::Triple::x86_64)
3129 stop_hook_sp.reset(
new StopHookCoded(shared_from_this(), new_uid));
3136 return stop_hook_sp;
3148 return (num_removed != 0);
3156 StopHookCollection::iterator specified_hook_iter;
3159 found_hook = (*specified_hook_iter).second;
3164 bool active_state) {
3165 StopHookCollection::iterator specified_hook_iter;
3170 (*specified_hook_iter).second->SetIsActive(active_state);
3175 StopHookCollection::iterator pos, end =
m_stop_hooks.end();
3177 (*pos).second->SetIsActive(active_state);
3186const std::vector<Target::StopHookSP>
3191 std::vector<StopHookSP> stop_hooks;
3193 stop_hooks.push_back(hook);
3211 auto is_active = [at_initial_stop](
StopHookSP hook) {
3212 bool should_run_now = (!at_initial_stop || hook->GetRunAtInitialStop());
3213 return hook->IsActive() && should_run_now;
3217 std::vector<StopHookSP> active_hooks;
3221 if (is_active(hook))
3222 active_hooks.push_back(hook);
3226 std::vector<HookSP> active_unified_hooks;
3227 for (
auto &[_, hook] :
m_hooks) {
3229 (!at_initial_stop || hook->GetRunAtInitialStop()))
3230 active_unified_hooks.push_back(hook);
3233 if (active_hooks.empty() && active_unified_hooks.empty())
3242 uint32_t last_natural_stop =
m_process_sp->GetModIDRef().GetLastNaturalStopID();
3246 std::vector<ExecutionContext> exc_ctx_with_reasons;
3249 size_t num_threads = cur_threadlist.
GetSize();
3250 for (
size_t i = 0; i < num_threads; i++) {
3252 if (cur_thread_sp->ThreadStoppedForAReason()) {
3254 exc_ctx_with_reasons.emplace_back(
m_process_sp.get(), cur_thread_sp.get(),
3255 cur_frame_sp.get());
3264 size_t num_exe_ctx = exc_ctx_with_reasons.size();
3265 if (num_exe_ctx == 0) {
3266 if (at_initial_stop && num_threads > 0) {
3268 exc_ctx_with_reasons.emplace_back(
3270 thread_to_use_sp->GetStackFrameAtIndex(0).get());
3280 llvm::scope_exit on_exit([output_sp] { output_sp->Flush(); });
3282 size_t num_hooks_with_output = llvm::count_if(
3283 active_hooks, [](
auto h) {
return !h->GetSuppressOutput(); });
3284 num_hooks_with_output += llvm::count_if(
3285 active_unified_hooks, [](
auto h) {
return !h->GetSuppressOutput(); });
3286 bool print_hook_header = (num_hooks_with_output > 1);
3287 bool print_thread_header = (num_exe_ctx > 1);
3288 bool should_stop =
false;
3289 bool requested_continue =
false;
3296 for (
auto cur_hook_sp : active_hooks) {
3297 bool any_thread_matched =
false;
3298 for (
auto exc_ctx : exc_ctx_with_reasons) {
3299 if (!cur_hook_sp->ExecutionContextPasses(exc_ctx))
3302 bool suppress_output = cur_hook_sp->GetSuppressOutput();
3303 if (print_hook_header && !any_thread_matched && !suppress_output) {
3307 output_sp->Printf(
"\n- Hook %" PRIu64
" (%s)\n", cur_hook_sp->GetID(),
3310 output_sp->Printf(
"\n- Hook %" PRIu64
"\n", cur_hook_sp->GetID());
3311 any_thread_matched =
true;
3314 if (print_thread_header && !suppress_output)
3315 output_sp->Printf(
"-- Thread %d\n",
3316 exc_ctx.GetThreadPtr()->GetIndexID());
3318 auto result = cur_hook_sp->HandleStop(exc_ctx, output_sp);
3321 if (cur_hook_sp->GetAutoContinue())
3322 requested_continue =
true;
3327 requested_continue =
true;
3336 output_sp->Printf(
"\nAborting stop hooks, hook %" PRIu64
3337 " set the program running.\n"
3338 " Consider using '-G true' to make "
3339 "stop hooks auto-continue.\n",
3340 cur_hook_sp->GetID());
3350 for (
auto cur_hook_sp : active_unified_hooks) {
3351 bool any_thread_matched =
false;
3352 for (
auto exc_ctx : exc_ctx_with_reasons) {
3353 if (!cur_hook_sp->ExecutionContextPasses(exc_ctx))
3356 bool suppress_output = cur_hook_sp->GetSuppressOutput();
3357 if (print_hook_header && !any_thread_matched && !suppress_output) {
3361 output_sp->Printf(
"\n- Hook %" PRIu64
" (%s)\n", cur_hook_sp->GetID(),
3364 output_sp->Printf(
"\n- Hook %" PRIu64
"\n", cur_hook_sp->GetID());
3365 any_thread_matched =
true;
3368 if (print_thread_header && !suppress_output)
3369 output_sp->Printf(
"-- Thread %d\n",
3370 exc_ctx.GetThreadPtr()->GetIndexID());
3372 auto result = cur_hook_sp->HandleStop(exc_ctx, output_sp);
3375 if (cur_hook_sp->GetAutoContinue())
3376 requested_continue =
true;
3381 requested_continue =
true;
3386 output_sp->Printf(
"\nAborting stop hooks, hook %" PRIu64
3387 " set the program running.\n"
3388 " Consider using '-G true' to make "
3389 "stop hooks auto-continue.\n",
3390 cur_hook_sp->GetID());
3398 if (requested_continue && !should_stop) {
3401 if (
error.Success()) {
3402 LLDB_LOG(log,
"Resuming from RunStopHooks");
3405 LLDB_LOG(log,
"Resuming from RunStopHooks failed: {0}",
error);
3418 return *g_settings_ptr;
3424 if (!platform_sp || !platform_sp->IsRemote() || !platform_sp->IsConnected())
3434 MainExecutableInstaller installer{platform_sp, module_sp,
3435 shared_from_this(), *launch_info};
3438 ExecutableInstaller installer{platform_sp, module_sp};
3450 uint32_t stop_id,
bool allow_section_end) {
3457 return m_images.ResolveFileAddress(file_addr, resolved_addr);
3461 addr_t new_section_load_addr,
3462 bool warn_multiple) {
3463 const addr_t old_section_load_addr =
3466 if (old_section_load_addr != new_section_load_addr) {
3467 uint32_t stop_id = 0;
3470 stop_id = process_sp->GetStopID();
3474 stop_id, section_sp, new_section_load_addr, warn_multiple))
3481 size_t section_unload_count = 0;
3482 size_t num_modules = module_list.
GetSize();
3483 for (
size_t i = 0; i < num_modules; ++i) {
3484 section_unload_count +=
3487 return section_unload_count;
3491 uint32_t stop_id = 0;
3494 stop_id = process_sp->GetStopID();
3497 SectionList *sections = module_sp->GetSectionList();
3498 size_t section_unload_count = 0;
3501 for (uint32_t i = 0; i < num_sections; ++i) {
3506 return section_unload_count;
3510 uint32_t stop_id = 0;
3513 stop_id = process_sp->GetStopID();
3521 uint32_t stop_id = 0;
3524 stop_id = process_sp->GetStopID();
3555 m_stats.SetLaunchOrAttachTime();
3559 LLDB_LOGF(log,
"Target::%s() called for %s", __FUNCTION__,
3571 state = process_sp->GetState();
3573 "Target::%s the process exists, and its current state is %s",
3576 LLDB_LOGF(log,
"Target::%s the process instance doesn't currently exist.",
3589 const bool synchronous_execution =
3597 if (launch_info.
GetFlags().
Test(eLaunchFlagLaunchInTTY))
3599 "can't launch in tty when launching through a remote connection");
3617 LLDB_LOGF(log,
"Target::%s asking the platform to debug the process",
3631 "Target::%s the platform doesn't know how to debug a "
3632 "process, getting a process plugin to do this for us.",
3651 if (!
error.Success())
3657 bool rebroadcast_first_stop =
3658 !synchronous_execution &&
3664 state =
m_process_sp->WaitForProcessToStop(std::nullopt, &first_stop_event_sp,
3665 rebroadcast_first_stop,
3669 if (rebroadcast_first_stop) {
3672 assert(first_stop_event_sp);
3681 if (launch_info.
GetFlags().
Test(eLaunchFlagStopAtEntry))
3683 if (synchronous_execution)
3690 if (!
error.Success()) {
3692 "process resume at entry point failed: %s",
error.AsCString());
3696 bool with_shell = !!launch_info.
GetShell();
3698 const char *exit_desc =
m_process_sp->GetExitDescription();
3700 if (exit_desc && exit_desc[0])
3701 desc =
" (" + std::string(exit_desc) +
')';
3704 "process exited with status %i%s\n"
3705 "'r' and 'run' are aliases that default to launching through a "
3707 "Try launching without going through a shell by using "
3708 "'process launch'.",
3709 exit_status, desc.c_str());
3712 "process exited with status %i%s", exit_status, desc.c_str());
3716 "initial process state wasn't stopped: %s",
StateAsCString(state));
3728 return llvm::createStringError(llvm::inconvertibleErrorCode(),
3729 "A process is required for tracing");
3731 return llvm::createStringError(llvm::inconvertibleErrorCode(),
3732 "A trace already exists for the target");
3734 llvm::Expected<TraceSupportedResponse> trace_type =
3737 return llvm::createStringError(
3738 llvm::inconvertibleErrorCode(),
"Tracing is not supported. %s",
3739 llvm::toString(trace_type.takeError()).c_str());
3740 if (llvm::Expected<TraceSP> trace_sp =
3744 return llvm::createStringError(
3745 llvm::inconvertibleErrorCode(),
3746 "Couldn't create a Trace object for the process. %s",
3747 llvm::toString(trace_sp.takeError()).c_str());
3758 Progress attach_progress(
"Waiting to attach to process");
3759 m_stats.SetLaunchOrAttachTime();
3763 state = process_sp->GetState();
3776 if (old_exec_module_sp)
3778 old_exec_module_sp->GetPlatformFileSpec().GetFilename());
3782 "no process specified, create a target with a file, or "
3783 "specify the --pid or --name");
3787 const auto platform_sp =
3790 const bool async = attach_info.
GetAsync();
3808 plugin_name,
nullptr,
false);
3811 "failed to create process using plugin '{0}'",
3812 plugin_name.empty() ?
"<empty>" : plugin_name);
3816 if (hijack_listener_sp)
3817 process_sp->HijackProcessEvents(hijack_listener_sp);
3818 error = process_sp->Attach(attach_info);
3821 if (
error.Success() && process_sp) {
3823 process_sp->RestoreProcessEvents();
3826 state = process_sp->WaitForProcessToStop(
3829 process_sp->RestoreProcessEvents();
3836 const char *exit_desc = process_sp->GetExitDescription();
3841 "process did not stop (no such process or permission problem?)");
3842 process_sp->Destroy(
false);
3852 return llvm::createStringError(
"invalid frame provider descriptor");
3854 llvm::StringRef name = descriptor.
GetName();
3856 return llvm::createStringError(
3857 "frame provider descriptor has no class name");
3860 std::unique_lock<std::recursive_mutex> guard(
3864 uint32_t descriptor_hash = descriptor.
GetHash();
3866 if (entry.second.GetHash() == descriptor_hash)
3868 llvm::formatv(
"frame provider idx={0} with the same class name and "
3869 "arguments is already registered",
3870 entry.second.GetID())
3876 new_descriptor.
SetID(descriptor_id);
3881 return descriptor_id;
3886 bool removed =
false;
3888 std::lock_guard<std::recursive_mutex> guard(
3900 std::lock_guard<std::recursive_mutex> guard(
3909const llvm::MapVector<uint32_t, ScriptedFrameProviderDescriptor> &
3911 std::lock_guard<std::recursive_mutex> guard(
3920 for (
ThreadSP thread_sp : process_sp->Threads()) {
3922 thread_sp->ClearScriptedFrameProvider();
3925 auto data_sp = std::make_shared<Thread::ThreadEventData>(thread_sp);
3937 const bool default_to_use_pty =
3941 "have platform={0}, platform_sp->IsHost()={1}, default_to_use_pty={2}",
3943 platform_sp ? (platform_sp->IsHost() ?
"true" :
"false") :
"n/a",
3944 default_to_use_pty);
3951 LLDB_LOG(log,
"at least one of stdin/stdout/stderr was not set, evaluating "
3952 "default handling");
3961 LLDB_LOG(log,
"eLaunchFlagDisableSTDIO set, adding suppression action "
3962 "for stdin, stdout and stderr");
3982 LLDB_LOG(log,
"target stdin='{0}', target stdout='{1}', stderr='{2}'",
3983 in_file_spec, out_file_spec, err_file_spec);
3987 LLDB_LOG(log,
"appended stdin open file action for {0}", in_file_spec);
3990 if (out_file_spec) {
3992 LLDB_LOG(log,
"appended stdout open file action for {0}",
3996 if (err_file_spec) {
3998 LLDB_LOG(log,
"appended stderr open file action for {0}",
4002 if (default_to_use_pty) {
4005 ::getenv(
"LLDB_LAUNCH_FLAG_USE_PIPES")) {
4006 llvm::Error Err = info.SetUpPipeRedirection();
4008 "SetUpPipeRedirection failed: {0}");
4013 "SetUpPtyRedirection failed: {0}");
4033 elem.notify = notify;
4043 = signals_sp->GetSignalNumberFromName(elem.first().str().c_str());
4048 signals_sp->SetShouldSuppress(signo,
false);
4050 signals_sp->SetShouldSuppress(signo,
true);
4053 signals_sp->SetShouldNotify(signo,
true);
4055 signals_sp->SetShouldNotify(signo,
false);
4058 signals_sp->SetShouldStop(signo,
true);
4060 signals_sp->SetShouldStop(signo,
false);
4069 = signals_sp->GetSignalNumberFromName(elem.first().str().c_str());
4075 signals_sp->ResetSignal(signo, do_stop, do_notify, do_pass);
4086 warning_stream_sp->Printf(
"Target signal '%s' not found in process\n",
4087 elem.first().str().c_str());
4100 signals_sp = process_sp->GetUnixSignals();
4103 const char *signal_name = entry.c_str();
4117 strm.
Printf(
"NAME PASS STOP NOTIFY\n");
4118 strm.
Printf(
"=========== ======= ======= =======\n");
4120 auto str_for_lazy = [] (
LazyBool lazy) ->
const char * {
4126 llvm_unreachable(
"Fully covered switch above!");
4130 bool print_it =
false;
4131 for (
size_t idx = 0; idx < num_args; idx++) {
4138 strm.
Printf(
"%-11s ", elem.first().str().c_str());
4139 strm.
Printf(
"%s %s %s\n", str_for_lazy(elem.second.pass),
4140 str_for_lazy(elem.second.stop),
4141 str_for_lazy(elem.second.notify));
4172 bool will_run =
true;
4196 s.
Indent(
"State: enabled\n");
4198 s.
Indent(
"State: disabled\n");
4201 s.
Indent(
"AutoContinue on\n");
4231 uint32_t num_commands =
m_commands.GetSize();
4232 for (uint32_t i = 0; i < num_commands; i++) {
4244 const std::vector<std::string> &strings) {
4245 for (
auto string : strings)
4252 assert(exc_ctx.
GetTargetPtr() &&
"Can't call PerformAction on a context "
4289 GetTarget()->GetDebugger().GetScriptInterpreter();
4290 if (!script_interp) {
4298 "ScriptedStopHook::%s () - ERROR: %s", __FUNCTION__,
4299 "Script interpreter couldn't create Scripted Stop Hook Interface");
4313 if (!object_sp || !object_sp->IsValid()) {
4315 "ScriptedStopHook::%s () - ERROR: %s", __FUNCTION__,
4316 "Failed to create valid script object");
4326 assert(exc_ctx.
GetTargetPtr() &&
"Can't call HandleStop on a context "
4332 lldb::StreamSP stream = std::make_shared<lldb_private::StreamString>();
4333 auto should_stop_or_err =
m_interface_sp->HandleStop(exc_ctx, stream);
4334 output_sp->PutCString(
4336 if (!should_stop_or_err) {
4338 "scripted stop hook HandleStop failed: {0}");
4361 if (!object_sp || !object_sp->IsValid())
4365 if (!as_dict || !as_dict->
IsValid())
4368 uint32_t num_keys = as_dict->
GetSize();
4375 auto print_one_element = [&s](llvm::StringRef key,
4378 s.
Format(
"{0} : {1}\n", key, object->GetStringValue());
4382 as_dict->
ForEach(print_one_element);
4414 bool will_run =
true;
4435 std::string fires_on;
4439 if (!fires_on.empty())
4441 fires_on +=
"unload";
4444 if (!fires_on.empty())
4448 if (!fires_on.empty()) {
4450 s.
Printf(
"Triggers: %s\n", fires_on.c_str());
4463 s.
Indent(
"AutoContinue on\n");
4499 s.
Indent(
"Commands: \n");
4501 for (uint32_t i = 0; i <
m_commands.GetSize(); i++) {
4518 const std::vector<std::string> &strings) {
4519 for (
const auto &
string : strings)
4534 Debugger &debugger = target_sp->GetDebugger();
4537 if (target_sp->GetProcessSP())
4538 exe_ctx.
SetContext(target_sp->GetProcessSP());
4565 assert(exc_ctx.
GetTargetPtr() &&
"Can't call HandleStop on a context "
4600 GetTarget()->GetDebugger().GetScriptInterpreter();
4607 "ScriptedHook::%s () - ERROR: %s", __FUNCTION__,
4608 "Script interpreter couldn't create Scripted Hook Interface");
4619 if (!object_sp || !object_sp->IsValid())
4621 "ScriptedHook::%s () - ERROR: %s", __FUNCTION__,
4622 "Failed to create valid script object");
4629 "hook class implements none of the expected methods "
4630 "(handle_module_loaded, handle_module_unloaded, handle_stop)");
4632 if (methods.handle_module_loaded)
4634 if (methods.handle_module_unloaded)
4636 if (methods.handle_stop)
4646 StreamSP stream = std::make_shared<StreamString>();
4655 StreamSP stream = std::make_shared<StreamString>();
4663 assert(exc_ctx.
GetTargetPtr() &&
"Can't call HandleStop on a context "
4669 lldb::StreamSP stream = std::make_shared<lldb_private::StreamString>();
4670 auto should_stop_or_err =
m_interface_sp->HandleStop(exc_ctx, stream);
4672 if (!should_stop_or_err)
4695 if (object_sp && object_sp->IsValid()) {
4701 auto print_one_element = [&s](llvm::StringRef key,
4704 s.
Format(
"{0} : {1}\n", key, object->GetStringValue());
4708 as_dict->
ForEach(print_one_element);
4728 hook_sp.reset(
new HookScripted(shared_from_this(), new_uid));
4743 size_t num_removed =
m_hooks.erase(uid);
4744 return (num_removed != 0);
4750 auto iter =
m_hooks.find(uid);
4753 return iter->second;
4760 std::advance(iter, index);
4761 return iter->second;
4765 auto iter =
m_hooks.find(uid);
4768 iter->second->SetIsEnabled(enabled);
4773 for (
auto &[_, hook] :
m_hooks)
4774 hook->SetIsEnabled(enabled);
4785 std::vector<HookSP> active_hooks;
4786 for (
auto &[_, hook_sp] :
m_hooks) {
4787 if (hook_sp->IsEnabled() && hook_sp->FiresOn(trigger))
4788 active_hooks.push_back(hook_sp);
4791 if (active_hooks.empty())
4796 for (
auto &hook_sp : active_hooks) {
4798 hook_sp->HandleModuleLoaded(output_sp);
4800 hook_sp->HandleModuleUnloaded(output_sp);
4809 "no-dynamic-values",
4810 "Don't calculate the dynamic type of values",
4815 "Calculate the dynamic type of values "
4816 "even if you have to run the target.",
4821 "Calculate the dynamic type of values, but don't run the target.",
4833 "Never look for inline breakpoint locations (fastest). This setting "
4834 "should only be used if you know that no inlining occurs in your"
4840 "Only check for inline breakpoint locations when setting breakpoints "
4841 "in header files, but not when setting breakpoint in implementation "
4842 "source files (default).",
4847 "Always look for inline breakpoint locations when setting file and "
4848 "line breakpoints (slower but most accurate).",
4862 "Disassembler default (currently att).",
4867 "Intel disassembler flavor.",
4872 "AT&T disassembler flavor.",
4880 "Never import the 'std' C++ module in the expression parser.",
4885 "Retry evaluating expressions with an imported 'std' C++ module if they"
4886 " failed to parse without the module. This allows evaluating more "
4887 "complex expressions involving C++ standard library types."
4892 "Always import the 'std' C++ module. This allows evaluating more "
4893 "complex expressions involving C++ standard library types. This feature"
4898static constexpr OptionEnumValueElement
4903 "Automatically determine the most appropriate method for the "
4907 "Prefer using the realized classes struct."},
4909 "Prefer using the CopyRealizedClassList API."},
4911 "Prefer using the GetRealizedClassList API."},
4918 "C-style (0xffff).",
4923 "Asm-style (0ffffh).",
4931 "Load debug scripts inside symbol files",
4936 "Do not load debug scripts inside symbol files.",
4941 "Warn about debug scripts inside symbol files but do not load them.",
4946 "Load debug scripts inside trusted symbol files, and warn about "
4947 "scripts from untrusted symbol files.",
4955 "Load .lldbinit files from current directory",
4960 "Do not load .lldbinit files from current directory",
4965 "Warn about loading .lldbinit files from current directory",
4973 "Load minimal information when loading modules from memory. Currently "
4974 "this setting loads sections only.",
4979 "Load partial information when loading modules from memory. Currently "
4980 "this setting loads sections and function bounds.",
4985 "Load complete information when loading modules from memory. Currently "
4986 "this setting loads sections and all symbols.",
4990#define LLDB_PROPERTIES_target
4991#include "TargetProperties.inc"
4994#define LLDB_PROPERTIES_target
4995#include "TargetPropertiesEnum.inc"
5000 :
public Cloneable<TargetOptionValueProperties, OptionValueProperties> {
5011 Target *target = exe_ctx->GetTargetPtr();
5016 if (
this != target_properties)
5025#define LLDB_PROPERTIES_target_experimental
5026#include "TargetProperties.inc"
5029#define LLDB_PROPERTIES_target_experimental
5030#include "TargetPropertiesEnum.inc"
5034 :
public Cloneable<TargetExperimentalOptionValueProperties,
5035 OptionValueProperties> {
5072 m_collection_sp->SetValueChangedCallback(ePropertyDetachOnError, [
this] {
5085 std::make_unique<TargetExperimentalProperties>();
5088 "Experimental settings - setting these won't produce "
5089 "errors if the setting is not present.",
5092 m_collection_sp = std::make_shared<TargetOptionValueProperties>(
"target");
5095 std::make_unique<TargetExperimentalProperties>();
5098 "Experimental settings - setting these won't produce "
5099 "errors if the setting is not present.",
5102 "process",
"Settings specific to processes.",
true,
5129 exp_property->
GetValue()->GetAsProperties();
5132 return std::nullopt;
5145 exp_property->
GetValue()->GetAsProperties();
5157 exp_property->
GetValue()->GetAsProperties();
5163 const uint32_t idx = ePropertyDefaultArch;
5168 const uint32_t idx = ePropertyDefaultArch;
5173 const uint32_t idx = ePropertyMoveToNearestCode;
5175 idx, g_target_properties[idx].default_uint_value != 0);
5179 const uint32_t idx = ePropertyPreferDynamic;
5182 g_target_properties[idx].default_uint_value));
5186 const uint32_t idx = ePropertyPreferDynamic;
5192 "Interrupted checking preload symbols")) {
5195 const uint32_t idx = ePropertyPreloadSymbols;
5197 idx, g_target_properties[idx].default_uint_value != 0);
5201 const uint32_t idx = ePropertyPreloadSymbols;
5206 const uint32_t idx = ePropertyDisableASLR;
5208 idx, g_target_properties[idx].default_uint_value != 0);
5212 const uint32_t idx = ePropertyDisableASLR;
5217 const uint32_t idx = ePropertyInheritTCC;
5219 idx, g_target_properties[idx].default_uint_value != 0);
5223 const uint32_t idx = ePropertyInheritTCC;
5228 const uint32_t idx = ePropertyDetachOnError;
5230 idx, g_target_properties[idx].default_uint_value != 0);
5234 const uint32_t idx = ePropertyDetachOnError;
5239 const uint32_t idx = ePropertyDisableSTDIO;
5241 idx, g_target_properties[idx].default_uint_value != 0);
5245 const uint32_t idx = ePropertyDisableSTDIO;
5249 const uint32_t idx = ePropertyLaunchWorkingDir;
5251 idx, g_target_properties[idx].default_cstr_value);
5255 const uint32_t idx = ePropertyParallelModuleLoad;
5257 idx, g_target_properties[idx].default_uint_value != 0);
5261 const uint32_t idx = ePropertyDisassemblyFlavor;
5262 const char *return_value;
5267 g_target_properties[idx].default_uint_value));
5270 return return_value;
5274 const uint32_t idx = ePropertyDisassemblyCPU;
5276 idx, g_target_properties[idx].default_cstr_value);
5277 return str.empty() ? nullptr : str.data();
5281 const uint32_t idx = ePropertyDisassemblyFeatures;
5283 idx, g_target_properties[idx].default_cstr_value);
5284 return str.empty() ? nullptr : str.data();
5288 const uint32_t idx = ePropertyInlineStrategy;
5291 static_cast<InlineStrategy>(g_target_properties[idx].default_uint_value));
5297 const uint32_t idx = ePropertySourceRealpathPrefixes;
5302 const uint32_t idx = ePropertyArg0;
5304 idx, g_target_properties[idx].default_cstr_value);
5308 const uint32_t idx = ePropertyArg0;
5314 const uint32_t idx = ePropertyRunArgs;
5319 const uint32_t idx = ePropertyRunArgs;
5329 ePropertyInheritEnv,
5330 g_target_properties[ePropertyInheritEnv].default_uint_value != 0)) {
5331 if (
auto platform_sp =
m_target->GetPlatform()) {
5332 Environment platform_env = platform_sp->GetEnvironment();
5333 for (
const auto &KV : platform_env)
5334 env[KV.first()] = KV.second;
5338 Args property_unset_env;
5340 property_unset_env);
5341 for (
const auto &var : property_unset_env)
5342 env.erase(var.ref());
5345 m_collection_sp->GetPropertyAtIndexAsArgs(ePropertyEnvVars, property_env);
5347 env[KV.first()] = KV.second;
5363 ePropertyInheritEnv,
5364 g_target_properties[ePropertyInheritEnv].default_uint_value != 0))
5368 if (platform_sp ==
nullptr)
5371 Environment platform_environment = platform_sp->GetEnvironment();
5372 for (
const auto &KV : platform_environment)
5373 environment[KV.first()] = KV.second;
5375 Args property_unset_environment;
5377 property_unset_environment);
5378 for (
const auto &var : property_unset_environment)
5379 environment.erase(var.ref());
5385 Args property_environment;
5387 property_environment);
5389 for (
const auto &KV :
Environment(property_environment))
5390 environment[KV.first()] = KV.second;
5397 const uint32_t idx = ePropertyEnvVars;
5402 const uint32_t idx = ePropertySkipPrologue;
5404 idx, g_target_properties[idx].default_uint_value != 0);
5408 const uint32_t idx = ePropertySourceMap;
5411 assert(option_value);
5416 const uint32_t idx = ePropertyObjectMap;
5419 assert(option_value);
5424 const uint32_t idx = ePropertyAutoSourceMapRelative;
5426 idx, g_target_properties[idx].default_uint_value != 0);
5430 const uint32_t idx = ePropertyExecutableSearchPaths;
5433 assert(option_value);
5438 const uint32_t idx = ePropertyExecutableSearchPaths;
5443 const uint32_t idx = ePropertyDebugFileSearchPaths;
5448 const uint32_t idx = ePropertyClangModuleSearchPaths;
5453 const uint32_t idx = ePropertyAutoImportClangModules;
5455 idx, g_target_properties[idx].default_uint_value != 0);
5459 const uint32_t idx = ePropertyImportStdModule;
5462 g_target_properties[idx].default_uint_value));
5466 const uint32_t idx = ePropertyDynamicClassInfoHelper;
5469 g_target_properties[idx].default_uint_value));
5473 const uint32_t idx = ePropertyAutoApplyFixIts;
5475 idx, g_target_properties[idx].default_uint_value != 0);
5479 const uint32_t idx = ePropertyRetriesWithFixIts;
5481 idx, g_target_properties[idx].default_uint_value);
5485 const uint32_t idx = ePropertyNotifyAboutFixIts;
5487 idx, g_target_properties[idx].default_uint_value != 0);
5491 const uint32_t idx = ePropertySaveObjectsDir;
5501 bool exists = instance.
Exists(new_dir);
5502 bool is_directory = instance.
IsDirectory(new_dir);
5503 std::string path = new_dir.
GetPath(
true);
5504 bool writable = llvm::sys::fs::can_write(path);
5505 if (exists && is_directory && writable)
5513 llvm::raw_string_ostream os(buffer);
5514 os <<
"JIT object dir '" << path <<
"' ";
5516 os <<
"does not exist";
5517 else if (!is_directory)
5518 os <<
"is not a directory";
5520 os <<
"is not writable";
5522 std::optional<lldb::user_id_t> debugger_id;
5524 debugger_id =
m_target->GetDebugger().GetID();
5529 const uint32_t idx = ePropertyEnableSynthetic;
5531 idx, g_target_properties[idx].default_uint_value != 0);
5535 const uint32_t idx = ePropertyShowHexVariableValuesWithLeadingZeroes;
5537 idx, g_target_properties[idx].default_uint_value != 0);
5541 const uint32_t idx = ePropertyMaxZeroPaddingInFloatFormat;
5543 idx, g_target_properties[idx].default_uint_value);
5547 const uint32_t idx = ePropertyMaxChildrenCount;
5549 idx, g_target_properties[idx].default_uint_value);
5552std::pair<uint32_t, bool>
5554 const uint32_t idx = ePropertyMaxChildrenDepth;
5555 auto *option_value =
5557 bool is_default = !option_value->OptionWasSet();
5558 return {option_value->GetCurrentValue(), is_default};
5562 const uint32_t idx = ePropertyMaxSummaryLength;
5564 idx, g_target_properties[idx].default_uint_value);
5568 const uint32_t idx = ePropertyMaxMemReadSize;
5570 idx, g_target_properties[idx].default_uint_value);
5574 const uint32_t idx = ePropertyInputPath;
5579 const uint32_t idx = ePropertyInputPath;
5584 const uint32_t idx = ePropertyOutputPath;
5589 const uint32_t idx = ePropertyOutputPath;
5594 const uint32_t idx = ePropertyErrorPath;
5599 const uint32_t idx = ePropertyErrorPath;
5604 const uint32_t idx = ePropertyLanguage;
5609 const uint32_t idx = ePropertyExprPrefix;
5615 return llvm::StringRef(
5616 reinterpret_cast<const char *
>(data_sp->GetBytes()),
5617 data_sp->GetByteSize());
5623 const uint32_t idx = ePropertyExprErrorLimit;
5625 idx, g_target_properties[idx].default_uint_value);
5629 const uint32_t idx = ePropertyExprAllocAddress;
5631 idx, g_target_properties[idx].default_uint_value);
5635 const uint32_t idx = ePropertyExprAllocSize;
5637 idx, g_target_properties[idx].default_uint_value);
5641 const uint32_t idx = ePropertyExprAllocAlign;
5643 idx, g_target_properties[idx].default_uint_value);
5647 const uint32_t idx = ePropertyBreakpointUseAvoidList;
5649 idx, g_target_properties[idx].default_uint_value != 0);
5653 const uint32_t idx = ePropertyUseHexImmediates;
5655 idx, g_target_properties[idx].default_uint_value != 0);
5659 const uint32_t idx = ePropertyUseFastStepping;
5661 idx, g_target_properties[idx].default_uint_value != 0);
5665 const uint32_t idx = ePropertyDisplayExpressionsInCrashlogs;
5667 idx, g_target_properties[idx].default_uint_value != 0);
5671 const uint32_t idx = ePropertyLoadScriptFromSymbolFile;
5674 g_target_properties[idx].default_uint_value));
5679 const uint32_t idx = ePropertyLoadScriptFromSymbolFile;
5684 const uint32_t idx = ePropertyLoadCWDlldbinitFile;
5687 g_target_properties[idx].default_uint_value));
5691 const uint32_t idx = ePropertyHexImmediateStyle;
5694 g_target_properties[idx].default_uint_value));
5698 const uint32_t idx = ePropertyMemoryModuleLoadLevel;
5701 g_target_properties[idx].default_uint_value));
5705 const uint32_t idx = ePropertyTrapHandlerNames;
5710 const uint32_t idx = ePropertyTrapHandlerNames;
5715 const uint32_t idx = ePropertyDisplayRuntimeSupportValues;
5717 idx, g_target_properties[idx].default_uint_value != 0);
5721 const uint32_t idx = ePropertyDisplayRuntimeSupportValues;
5726 const uint32_t idx = ePropertyDisplayRecognizedArguments;
5728 idx, g_target_properties[idx].default_uint_value != 0);
5732 const uint32_t idx = ePropertyDisplayRecognizedArguments;
5748 if (input_file_action) {
5753 if (output_file_action) {
5758 if (error_file_action) {
5764 launch_info.
GetFlags().
Test(lldb::eLaunchFlagInheritTCCFromParent));
5769 const uint32_t idx = ePropertyRequireHardwareBreakpoints;
5771 idx, g_target_properties[idx].default_uint_value != 0);
5775 const uint32_t idx = ePropertyRequireHardwareBreakpoints;
5780 const uint32_t idx = ePropertyAutoInstallMainExecutable;
5782 idx, g_target_properties[idx].default_uint_value != 0);
5816 m_launch_info.GetFlags().Set(lldb::eLaunchFlagDetachOnError);
5818 m_launch_info.GetFlags().Clear(lldb::eLaunchFlagDetachOnError);
5825 m_launch_info.GetFlags().Clear(lldb::eLaunchFlagDisableASLR);
5830 m_launch_info.GetFlags().Set(lldb::eLaunchFlagInheritTCCFromParent);
5832 m_launch_info.GetFlags().Clear(lldb::eLaunchFlagInheritTCCFromParent);
5837 m_launch_info.GetFlags().Set(lldb::eLaunchFlagDisableSTDIO);
5839 m_launch_info.GetFlags().Clear(lldb::eLaunchFlagDisableSTDIO);
5843 const uint32_t idx = ePropertyDebugUtilityExpression;
5845 idx, g_target_properties[idx].default_uint_value != 0);
5849 const uint32_t idx = ePropertyDebugUtilityExpression;
5854 const uint32_t idx = ePropertyCheckValueObjectOwnership;
5856 idx, g_target_properties[idx].default_uint_value != 0);
5860 const uint32_t idx = ePropertyCheckValueObjectOwnership;
5864std::optional<LoadScriptFromSymFile>
5866 llvm::StringRef module_name)
const {
5867 auto *dict =
m_collection_sp->GetPropertyAtIndexAsOptionValueDictionary(
5868 ePropertyAutoLoadScriptsForModules);
5870 return std::nullopt;
5874 return std::nullopt;
5881 auto *dict =
m_collection_sp->GetPropertyAtIndexAsOptionValueDictionary(
5882 ePropertyAutoLoadScriptsForModules);
5886 dict->SetValueForKey(module_name,
5887 std::make_shared<OptionValueEnumeration>(
5908 return "Target::TargetEventData";
5945 return created_target_sp;
5971 return m_stats.ToJSON(*
this, options);
5989 lldb::BreakpointEventType eventKind) {
5991 std::shared_ptr<Breakpoint::BreakpointEventData> data_sp =
5992 std::make_shared<Breakpoint::BreakpointEventData>(
5993 eventKind, bp.shared_from_this());
6009 if (
auto platform_fspecs_or_err =
6011 fspecs.
Append(*platform_fspecs_or_err);
6014 platform_fspecs_or_err.takeError(),
6015 "Skipping safe auto-load: {0}");
6020 for (
const auto &fspec :
6035 if (option_name.empty())
6036 return llvm::createStringError(
"can't set an option with an empty name");
6041 return llvm::createStringErrorV(
"trying to override existing option '{0}' "
6042 "of type '{1}' with a boolean value",
6043 option_name, existing_sp->GetType());
6047 return llvm::Error::success();
6051 llvm::StringRef option_name)
const {
6054 if (!opts.
HasKey(option_name))
6055 return llvm::createStringErrorV(
"option '{0}' does not exist", option_name);
6059 return llvm::createStringErrorV(
"failed to get option '{0}' as boolean",
6081 "c++-ignore-context-qualifiers";
6094 return llvm::cantFail(
static void dump(const StructuredData::Array &array, Stream &s)
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 void skip(TSLexer *lexer)
static double elapsed(const StatsTimepoint &start, const StatsTimepoint &end)
static Status installExecutable(const Installer &installer)
constexpr llvm::StringLiteral s_cpp_ignore_context_qualifiers_option
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 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 std::atomic< lldb::user_id_t > g_target_unique_id
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.
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.
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 GetListMutex(std::unique_lock< std::recursive_mutex > &lock)
Sets the passed in Locker to hold the Breakpoint List mutex.
void ResetHitCounts()
Resets the hit count of all breakpoints.
size_t GetSize() const
Returns the number of elements in this breakpoint list.
lldb::BreakpointSP GetBreakpointAtIndex(size_t i) const
Returns a shared pointer to the breakpoint with index i.
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/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)
bool EventTypeHasListeners(uint32_t event_type)
Broadcaster(lldb::BroadcasterManagerSP manager_sp, std::string name)
Construct with a broadcaster with a name.
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.
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.
const char * AsCString(const char *value_if_empty) const
Get the string value as a C string.
A subclass of DataBuffer that stores a data buffer on the heap.
lldb::offset_t GetByteSize() const override
Get the number of bytes in the data buffer.
static const FileSpecList & GetDefaultSafeAutoLoadPaths()
void SetAsyncExecution(bool async)
CommandInterpreter & GetCommandInterpreter()
lldb::StreamUP GetAsyncErrorStream()
TargetList & GetTargetList()
Get accessor for the target list.
static void ReportWarning(std::string message, std::optional< lldb::user_id_t > debugger_id=std::nullopt, std::once_flag *once=nullptr)
Report warning events.
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()
llvm::Error GetAsError(lldb::ExpressionResults result, llvm::Twine message={}) const
Returns an ExpressionError with arg as error code.
static lldb::DisassemblerSP DisassembleBytes(const ArchSpec &arch, const char *plugin_name, const char *flavor, const char *cpu, const char *features, const Address &start, const void *bytes, size_t length, uint32_t max_num_instructions, bool data_from_file)
A class that measures elapsed time in an exception safe way.
EvaluateExpressionOptions()
bool GetCppIgnoreContextQualifiers() const
void SetCppIgnoreContextQualifiers(bool value)
const StructuredData::Dictionary & GetLanguageOptions() const
llvm::Expected< bool > GetBooleanLanguageOption(llvm::StringRef option_name) const
Get the language-plugin specific boolean option called option_name.
void SetTryAllThreads(bool try_others=true)
void SetStopOthers(bool stop_others=true)
llvm::Error SetBooleanLanguageOption(llvm::StringRef option_name, bool value)
Set language-plugin specific option called option_name to the specified boolean value.
StructuredData::DictionarySP m_language_options_sp
Dictionary mapping names of language-plugin specific options to values.
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.
void SetContext(const lldb::TargetSP &target_sp, bool get_process)
Target * GetTargetPtr() const
Returns a pointer to the target object.
Thread & GetThreadRef() const
Returns a reference to the thread object.
Represents a file descriptor action to be performed during process launch.
const FileSpec & GetFileSpec() const
Get the file specification for open actions.
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.
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)
Returns the internal LLDB name for the specified language.
static LanguageSet GetLanguagesSupportingTypeSystemsForExpressions()
virtual llvm::StringRef GetUserEntryPointName() const
static std::set< lldb::LanguageType > GetSupportedLanguages()
static lldb::ListenerSP MakeListener(const char *name)
A collection class for Module objects.
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.
static Status GetSharedModule(const ModuleSpec &module_spec, lldb::ModuleSP &module_sp, llvm::SmallVectorImpl< lldb::ModuleSP > *old_modules, bool *did_create_ptr, bool invoke_locate_callback=true)
static bool RemoveSharedModuleIfOrphaned(const lldb::ModuleWP module_ptr)
void PreloadSymbols(bool parallelize) const
For each module in this ModuleList, preload its symbols.
bool AppendIfNeeded(const lldb::ModuleSP &new_module, bool notify=true)
Append a module to the module list, if it is not already there.
void FindModules(const ModuleSpec &module_spec, ModuleList &matching_module_list) const
Finds modules whose file specification matches module_spec.
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 LoadScriptingResourcesInTarget(Target *target, std::list< Status > &errors, bool continue_on_error=true)
size_t GetSize() const
Gets the size of the module list.
void ForEach(std::function< IterationAction(const lldb::ModuleSP &module_sp)> const &callback) const
Applies 'callback' to each module in this ModuleList.
void SetTarget(lldb::TargetSP target)
Set the target to be used when resolving a module.
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.
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)
static PolicyStack & Get()
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
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()
A Progress indicator helper class.
lldb::OptionValuePropertiesSP m_collection_sp
T GetPropertyAtIndexAs(uint32_t idx, T default_value, const ExecutionContext *exe_ctx=nullptr) const
static llvm::StringRef GetExperimentalSettingsName()
bool SetPropertyAtIndex(uint32_t idx, T t, const ExecutionContext *exe_ctx=nullptr) const
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
long long SLongLong(long long fail_value=0) const
virtual lldb::ScriptedHookInterfaceSP CreateScriptedHookInterface()
virtual lldb::ScriptedStopHookInterfaceSP CreateScriptedStopHookInterface()
size_t GetNumSections(uint32_t depth) const
lldb::SectionSP GetSectionAtIndex(size_t idx) 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.
virtual 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)
Forwards the arguments to llvm::formatv and writes to the stream.
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.
IndentScope MakeIndentScope(unsigned indent_amount=2)
Create an indentation scope that restores the original indent level when the object goes out of scope...
void IndentLess(unsigned amount=2)
Decrement the current indentation level.
void IndentMore(unsigned amount=2)
Increment the current indentation level.
void SetObjectSP(const StructuredData::ObjectSP &obj)
void AddItem(const ObjectSP &item)
ObjectSP GetItemAtIndex(size_t idx) const
bool GetValueForKeyAsBoolean(llvm::StringRef key, bool &result) const
ObjectSP GetValueForKey(llvm::StringRef key) const
bool HasKey(llvm::StringRef key) const
void ForEach(std::function< bool(llvm::StringRef key, Object *object)> const &callback) const
virtual bool IsValid() const
void Dump(lldb_private::Stream &s, bool pretty_print=true) const
A class which can hold structured data.
std::shared_ptr< Dictionary > DictionarySP
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.
bool SymbolContextMatches(const SymbolContext &sc)
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
bool GetCheckValueObjectOwnership() const
uint64_t GetExprAllocAlign() const
MemoryModuleLoadLevel GetMemoryModuleLoadLevel() const
llvm::StringRef GetArg0() const
uint32_t GetMaximumMemReadSize() const
void SetRunArguments(const Args &args)
FileSpec GetStandardErrorPath() const
void SetLoadScriptFromSymbolFile(LoadScriptFromSymFile load_style)
Set the target-wide target.load-script-from-symbol-file setting.
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
void SetAutoLoadScriptsForModule(llvm::StringRef module_name, LoadScriptFromSymFile load_style)
Set the LoadScriptFromSymFile for a module called module_name (excluding file extension).
RealpathPrefixes GetSourceRealpathPrefixes() const
void SetCheckValueObjectOwnership(bool check)
uint64_t GetNumberOfRetriesWithFixits() const
uint64_t GetExprAllocSize() const
std::optional< LoadScriptFromSymFile > GetAutoLoadScriptsForModule(llvm::StringRef module_name) 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
bool GetParallelModuleLoad() 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
std::unique_ptr< Architecture > m_plugin_up
const Arch & operator=(const ArchSpec &spec)
Arch(const ArchSpec &spec)
void GetDescription(Stream &s, lldb::DescriptionLevel level) const override
void SetActionFromString(const std::string &string)
Populate the command list by splitting a single string on newlines.
void SetActionFromStrings(const std::vector< std::string > &strings)
Populate the command list from a vector of individual command strings.
void HandleModuleLoaded(lldb::StreamSP output) override
StringList & GetCommands()
Return the list of commands that this hook runs.
StopHook::StopHookResult HandleStop(ExecutionContext &exe_ctx, lldb::StreamSP output) override
Called when the process stops.
void HandleModuleUnloaded(lldb::StreamSP output) override
StructuredDataImpl m_extra_args
void HandleModuleLoaded(lldb::StreamSP output) override
StopHook::StopHookResult HandleStop(ExecutionContext &exe_ctx, lldb::StreamSP output) override
Called when the process stops.
Status SetScriptCallback(std::string class_name, StructuredData::ObjectSP extra_args_sp)
void GetDescription(Stream &s, lldb::DescriptionLevel level) const override
lldb::ScriptedHookInterfaceSP m_interface_sp
void HandleModuleUnloaded(lldb::StreamSP output) override
ThreadSpec * GetThreadSpecifier()
lldb::SymbolContextSpecifierSP m_sc_specifier_sp
bool ExecutionContextPasses(const ExecutionContext &exe_ctx)
Check if the execution context passes the specifier and thread spec filters.
void GetFilterDescription(Stream &s, lldb::DescriptionLevel level) const
Print the filter portion of the description (AutoContinue, Specifier, ThreadSpec).
lldb::TargetSP & GetTarget()
SymbolContextSpecifier * GetSCSpecifier()
lldb::TargetSP m_target_sp
virtual void GetDescription(Stream &s, lldb::DescriptionLevel level) const
void SetSCSpecifier(SymbolContextSpecifier *specifier)
Set the symbol context specifier. The hook takes ownership.
void SetThreadSpecifier(ThreadSpec *specifier)
Set the thread specifier. The hook takes ownership.
std::unique_ptr< ThreadSpec > m_thread_spec_up
StringList & GetCommands()
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
StructuredDataImpl m_extra_args
This holds the dictionary of keys & values that can be used to parametrize any given callback's behav...
lldb::ScriptedStopHookInterfaceSP m_interface_sp
SymbolContextSpecifier * GetSpecifier()
void SetSpecifier(SymbolContextSpecifier *specifier)
std::unique_ptr< ThreadSpec > m_thread_spec_up
void SetThreadSpecifier(ThreadSpec *specifier)
ThreadSpec * GetThreadSpecifier()
lldb::TargetSP m_target_sp
StopHook(const StopHook &rhs)
bool ExecutionContextPasses(const ExecutionContext &exe_ctx)
lldb::TargetSP & GetTarget()
lldb::SymbolContextSpecifierSP m_specifier_sp
virtual void GetSubclassDescription(Stream &s, lldb::DescriptionLevel level) const =0
void GetDescription(Stream &s, lldb::DescriptionLevel level) const
void Dump(Stream *s) const override
static llvm::StringRef GetFlavorString()
static lldb::TargetSP GetCreatedTargetFromEvent(const Event *event_ptr)
static ModuleList GetModuleListFromEvent(const Event *event_ptr)
~TargetEventData() override
static const TargetEventData * GetEventDataFromEvent(const Event *event_ptr)
lldb::TargetSP m_created_target_sp
TargetEventData(const lldb::TargetSP &target_sp)
lldb::TargetSP m_target_sp
static lldb::TargetSP GetTargetFromEvent(const Event *event_ptr)
void ModulesDidLoad(ModuleList &module_list)
This call may preload module symbols, and may do so in parallel depending on the following target set...
void DescribeBreakpointOverrides(Stream &stream, std::vector< lldb::user_id_t > &idxs)
Describe the breakpoint overrides.
lldb::ThreadSP CalculateThread() override
llvm::Expected< uint32_t > AddScriptedFrameProviderDescriptor(const ScriptedFrameProviderDescriptor &descriptor)
Add or update a scripted frame provider descriptor for this target.
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)
bool RemoveHookByID(lldb::user_id_t uid)
lldb::WatchpointSP CreateWatchpoint(lldb::addr_t addr, size_t size, const CompilerType *type, uint32_t kind, Status &error)
void ApplyNameToBreakpoints(BreakpointName &bp_name)
lldb::user_id_t m_hook_next_id
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::BreakpointResolverSP CheckBreakpointOverrides(lldb::BreakpointResolverSP original_sp)
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()
const std::vector< StopHookSP > GetStopHooks(bool internal=false) const
void SetTrace(const lldb::TraceSP &trace_sp)
Set the Trace object containing processor trace information of this target.
BreakpointList & GetBreakpointList(bool internal=false)
uint32_t m_next_frame_provider_id
CompilerType GetRegisterType(const std::string &name, const lldb_private::RegisterFlags &flags, uint32_t byte_size)
BreakpointNameList m_breakpoint_names
lldb_private::SummaryStatisticsCache & GetSummaryStatisticsCache()
const llvm::MapVector< uint32_t, ScriptedFrameProviderDescriptor > & GetScriptedFrameProviderDescriptors() const
Get all scripted frame provider descriptors for this target.
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::user_id_t AddBreakpointResolverOverride(BreakpointResolverOverrideUP override_up)
Add a breakpoint override resolver. This version can't fail.
lldb::ProcessSP m_process_sp
Debugger & GetDebugger() const
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)
bool RemoveScriptedFrameProviderDescriptor(uint32_t id)
Remove a scripted frame provider descriptor by id.
lldb::RegisterTypeBuilderSP m_register_type_builder_sp
static void SettingsTerminate()
bool EnableWatchpointByID(lldb::watch_id_t watch_id)
HookSP CreateHook(Hook::HookKind kind)
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
int64_t ReadSignedIntegerFromMemory(const Address &addr, size_t integer_byte_size, int64_t fail_value, Status &error, bool force_live_memory=false)
void DisableAllowedBreakpoints()
bool SetHookEnabledStateByID(lldb::user_id_t uid, bool enabled)
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)
llvm::MapVector< uint32_t, ScriptedFrameProviderDescriptor > m_frame_provider_descriptors
Map of scripted frame provider descriptors for this target.
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
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.
HookSP GetHookByID(lldb::user_id_t uid)
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)
std::vector< StopHookSP > m_internal_stop_hooks
lldb::ExpressionVariableSP GetPersistentVariable(ConstString name)
void NotifyModulesRemoved(lldb_private::ModuleList &module_list) override
StopHookSP CreateStopHook(StopHook::StopHookKind kind, bool internal=false)
Add an empty stop hook to the Target's stop hook list, and returns a shared pointer to the new hook.
size_t ReadCStringFromMemory(const Address &addr, std::string &out_str, Status &error, bool force_live_memory=false)
void SetAllHooksEnabledState(bool enabled)
std::recursive_mutex m_mutex
An API mutex that is used by the lldb::SB* classes make the SB interface thread safe.
std::recursive_mutex m_frame_provider_descriptors_mutex
lldb::user_id_t m_target_unique_id
The globally unique ID assigned to this target.
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::DisassemblerSP > ReadInstructions(const Address &start_addr, uint32_t count, const char *flavor_string=nullptr)
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)
void NotifyBreakpointChanged(Breakpoint &bp, lldb::BreakpointEventType event_kind)
Sends a breakpoint notification event.
lldb::SearchFilterSP GetSearchFilterForModule(const FileSpec *containingModule)
llvm::StringMapEntry< DummySignalValues > DummySignalElement
std::recursive_mutex & GetAPIMutex()
static llvm::StringRef GetStaticBroadcasterClass()
static FileSpecList GetDefaultDebugFileSearchPaths()
void EnableAllowedBreakpoints()
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 *did_read_live_memory=nullptr)
llvm::Error SetLabel(llvm::StringRef label)
Set a label for a target.
uint32_t m_latest_stop_hook_id
void RunModuleHooks(bool is_load)
std::map< lldb::user_id_t, BreakpointResolverOverrideUP > m_breakpoint_overrides
void RemoveAllowedBreakpoints()
bool DisableAllWatchpoints(bool end_to_end=true)
bool RunStopHooks(bool at_initial_stop=false)
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.
void UndoCreateHook(lldb::user_id_t uid)
Removes the most recently created hook.
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.
FileSpecList GetSafeAutoLoadPaths() const
Get the list of paths that LLDB will consider automatically loading scripting resources from.
static TargetProperties & GetGlobalProperties()
Status Install(ProcessLaunchInfo *launch_info)
HookSP GetHookAtIndex(size_t index)
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.
std::unique_ptr< BreakpointResolverOverride > BreakpointResolverOverrideUP
const ModuleList & GetImages() const
Get accessor for the images for this process.
const ArchSpec & GetArchitecture() const
WatchpointList & GetWatchpointList()
@ eBroadcastBitModulesLoaded
@ eBroadcastBitSymbolsLoaded
@ eBroadcastBitModulesUnloaded
@ eBroadcastBitWatchpointChanged
@ eBroadcastBitBreakpointChanged
@ eBroadcastBitNewTargetCreated
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)
void InvalidateThreadFrameProviders()
Invalidate all potentially cached frame providers for all threads and trigger a stack changed event f...
bool IgnoreAllWatchpoints(uint32_t ignore_count)
void AddBreakpoint(lldb::BreakpointSP breakpoint_sp, bool internal)
std::string m_target_session_name
The target session name for this target, used to name debugging sessions in DAP.
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)
bool IsDummyTarget() const
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.
void ClearScriptedFrameProviderDescriptors()
Clear all scripted frame provider descriptors for this target.
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)
std::shared_ptr< Hook > HookSP
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)
@ eBroadcastBitStackChanged
static llvm::Expected< lldb::TraceSP > FindPluginForLiveProcess(llvm::StringRef plugin_name, Process &process)
Find a trace plug-in to trace a live process.
Represents UUID's of various sizes.
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...
void GetListMutex(std::unique_lock< std::recursive_mutex > &lock)
Sets the passed in Locker to hold the Watchpoint List mutex.
uint8_t * GetBytes()
Get a pointer to the data.
#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
#define LLDB_INVALID_PROCESS_ID
#define LLDB_INVALID_INDEX64
@ 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
@ eLoadScriptFromSymFileTrusted
@ eLoadScriptFromSymFileFalse
@ eLoadScriptFromSymFileWarn
static uint32_t bit(const uint32_t val, const uint32_t msbit)
@ 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.
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
@ eStructuredDataTypeBoolean
std::shared_ptr< lldb_private::Module > ModuleSP
std::shared_ptr< lldb_private::OptionValue > OptionValueSP
std::shared_ptr< lldb_private::EventData > EventDataSP
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.
Describes what view of the process a thread should see and what operations it is allowed to perform.
@ Private
Parent (unwinder) frames, private state, private run lock.
This struct contains the metadata needed to instantiate a frame provider and optional filters to cont...
llvm::StringRef GetName() const
Get the name of this descriptor (the scripted class name).
uint32_t GetHash() const
Get the content-based hash from ScriptedMetadata.
void SetID(uint32_t id)
Set the monotonically increasing ID for this descriptor.
bool IsValid() const
Check if this descriptor has valid metadata for script-based providers.
A type-erased pair of llvm::dwarf::SourceLanguageName and version.
lldb::LanguageType AsLanguageType() const
llvm::StringRef GetDescription() const
static TestingProperties & GetGlobalTestingProperties()
UserID(lldb::user_id_t uid=LLDB_INVALID_UID)
Construct with optional user ID.
lldb::user_id_t GetID() const
Get accessor for the user ID.
std::string triple
The triple of this executable module.
bool is_start_entry
If true, this entry was emitted at the beginning of an event (eg., before the executable is set).
UUID uuid
The same as the executable-module's UUID.
lldb::pid_t pid
PID of the process owned by this target.
Helper RAII class for collecting telemetry.
void DispatchOnExit(llvm::unique_function< void(Info *info)> final_callback)
void DispatchNow(llvm::unique_function< void(Info *info)> populate_fields_cb)