blob: ed0ecbbddbf8149dea1ff295098f40201b90b247 [file] [log] [blame]
Yi Kong83283012023-12-13 12:57:00 +09001//===-- Target.h ------------------------------------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLDB_TARGET_TARGET_H
10#define LLDB_TARGET_TARGET_H
11
12#include <list>
13#include <map>
14#include <memory>
15#include <string>
16#include <vector>
17
18#include "lldb/Breakpoint/BreakpointList.h"
19#include "lldb/Breakpoint/BreakpointName.h"
20#include "lldb/Breakpoint/WatchpointList.h"
21#include "lldb/Core/Architecture.h"
22#include "lldb/Core/Disassembler.h"
23#include "lldb/Core/ModuleList.h"
24#include "lldb/Core/StructuredDataImpl.h"
25#include "lldb/Core/UserSettingsController.h"
26#include "lldb/Expression/Expression.h"
27#include "lldb/Host/ProcessLaunchInfo.h"
28#include "lldb/Symbol/TypeSystem.h"
29#include "lldb/Target/ExecutionContextScope.h"
30#include "lldb/Target/PathMappingList.h"
31#include "lldb/Target/SectionLoadHistory.h"
32#include "lldb/Target/Statistics.h"
33#include "lldb/Target/ThreadSpec.h"
34#include "lldb/Utility/ArchSpec.h"
35#include "lldb/Utility/Broadcaster.h"
36#include "lldb/Utility/LLDBAssert.h"
37#include "lldb/Utility/Timeout.h"
38#include "lldb/lldb-public.h"
39
40namespace lldb_private {
41
42OptionEnumValues GetDynamicValueTypes();
43
44enum InlineStrategy {
45 eInlineBreakpointsNever = 0,
46 eInlineBreakpointsHeaders,
47 eInlineBreakpointsAlways
48};
49
50enum LoadScriptFromSymFile {
51 eLoadScriptFromSymFileTrue,
52 eLoadScriptFromSymFileFalse,
53 eLoadScriptFromSymFileWarn
54};
55
56enum LoadCWDlldbinitFile {
57 eLoadCWDlldbinitTrue,
58 eLoadCWDlldbinitFalse,
59 eLoadCWDlldbinitWarn
60};
61
62enum ImportStdModule {
63 eImportStdModuleFalse,
64 eImportStdModuleFallback,
65 eImportStdModuleTrue,
66};
67
68enum DynamicClassInfoHelper {
69 eDynamicClassInfoHelperAuto,
70 eDynamicClassInfoHelperRealizedClassesStruct,
71 eDynamicClassInfoHelperCopyRealizedClassList,
72 eDynamicClassInfoHelperGetRealizedClassList,
73};
74
75class TargetExperimentalProperties : public Properties {
76public:
77 TargetExperimentalProperties();
78};
79
80class TargetProperties : public Properties {
81public:
82 TargetProperties(Target *target);
83
84 ~TargetProperties() override;
85
86 ArchSpec GetDefaultArchitecture() const;
87
88 void SetDefaultArchitecture(const ArchSpec &arch);
89
90 bool GetMoveToNearestCode() const;
91
92 lldb::DynamicValueType GetPreferDynamicValue() const;
93
94 bool SetPreferDynamicValue(lldb::DynamicValueType d);
95
96 bool GetPreloadSymbols() const;
97
98 void SetPreloadSymbols(bool b);
99
100 bool GetDisableASLR() const;
101
102 void SetDisableASLR(bool b);
103
104 bool GetInheritTCC() const;
105
106 void SetInheritTCC(bool b);
107
108 bool GetDetachOnError() const;
109
110 void SetDetachOnError(bool b);
111
112 bool GetDisableSTDIO() const;
113
114 void SetDisableSTDIO(bool b);
115
116 const char *GetDisassemblyFlavor() const;
117
118 InlineStrategy GetInlineStrategy() const;
119
120 llvm::StringRef GetArg0() const;
121
122 void SetArg0(llvm::StringRef arg);
123
124 bool GetRunArguments(Args &args) const;
125
126 void SetRunArguments(const Args &args);
127
128 // Get the whole environment including the platform inherited environment and
129 // the target specific environment, excluding the unset environment variables.
130 Environment GetEnvironment() const;
131 // Get the platform inherited environment, excluding the unset environment
132 // variables.
133 Environment GetInheritedEnvironment() const;
134 // Get the target specific environment only, without the platform inherited
135 // environment.
136 Environment GetTargetEnvironment() const;
137 // Set the target specific environment.
138 void SetEnvironment(Environment env);
139
140 bool GetSkipPrologue() const;
141
142 PathMappingList &GetSourcePathMap() const;
143
144 bool GetAutoSourceMapRelative() const;
145
146 FileSpecList GetExecutableSearchPaths();
147
148 void AppendExecutableSearchPaths(const FileSpec &);
149
150 FileSpecList GetDebugFileSearchPaths();
151
152 FileSpecList GetClangModuleSearchPaths();
153
154 bool GetEnableAutoImportClangModules() const;
155
156 ImportStdModule GetImportStdModule() const;
157
158 DynamicClassInfoHelper GetDynamicClassInfoHelper() const;
159
160 bool GetEnableAutoApplyFixIts() const;
161
162 uint64_t GetNumberOfRetriesWithFixits() const;
163
164 bool GetEnableNotifyAboutFixIts() const;
165
166 FileSpec GetSaveJITObjectsDir() const;
167
168 bool GetEnableSyntheticValue() const;
169
170 uint32_t GetMaxZeroPaddingInFloatFormat() const;
171
172 uint32_t GetMaximumNumberOfChildrenToDisplay() const;
173
174 /// Get the max depth value, augmented with a bool to indicate whether the
175 /// depth is the default.
176 ///
177 /// When the user has customized the max depth, the bool will be false.
178 ///
179 /// \returns the max depth, and true if the max depth is the system default,
180 /// otherwise false.
181 std::pair<uint32_t, bool> GetMaximumDepthOfChildrenToDisplay() const;
182
183 uint32_t GetMaximumSizeOfStringSummary() const;
184
185 uint32_t GetMaximumMemReadSize() const;
186
187 FileSpec GetStandardInputPath() const;
188 FileSpec GetStandardErrorPath() const;
189 FileSpec GetStandardOutputPath() const;
190
191 void SetStandardInputPath(llvm::StringRef path);
192 void SetStandardOutputPath(llvm::StringRef path);
193 void SetStandardErrorPath(llvm::StringRef path);
194
195 void SetStandardInputPath(const char *path) = delete;
196 void SetStandardOutputPath(const char *path) = delete;
197 void SetStandardErrorPath(const char *path) = delete;
198
199 bool GetBreakpointsConsultPlatformAvoidList();
200
201 lldb::LanguageType GetLanguage() const;
202
203 llvm::StringRef GetExpressionPrefixContents();
204
205 uint64_t GetExprErrorLimit() const;
206
207 uint64_t GetExprAllocAddress() const;
208
209 uint64_t GetExprAllocSize() const;
210
211 uint64_t GetExprAllocAlign() const;
212
213 bool GetUseHexImmediates() const;
214
215 bool GetUseFastStepping() const;
216
217 bool GetDisplayExpressionsInCrashlogs() const;
218
219 LoadScriptFromSymFile GetLoadScriptFromSymbolFile() const;
220
221 LoadCWDlldbinitFile GetLoadCWDlldbinitFile() const;
222
223 Disassembler::HexImmediateStyle GetHexImmediateStyle() const;
224
225 MemoryModuleLoadLevel GetMemoryModuleLoadLevel() const;
226
227 bool GetUserSpecifiedTrapHandlerNames(Args &args) const;
228
229 void SetUserSpecifiedTrapHandlerNames(const Args &args);
230
231 bool GetDisplayRuntimeSupportValues() const;
232
233 void SetDisplayRuntimeSupportValues(bool b);
234
235 bool GetDisplayRecognizedArguments() const;
236
237 void SetDisplayRecognizedArguments(bool b);
238
239 const ProcessLaunchInfo &GetProcessLaunchInfo() const;
240
241 void SetProcessLaunchInfo(const ProcessLaunchInfo &launch_info);
242
243 bool GetInjectLocalVariables(ExecutionContext *exe_ctx) const;
244
245 void SetInjectLocalVariables(ExecutionContext *exe_ctx, bool b);
246
247 void SetRequireHardwareBreakpoints(bool b);
248
249 bool GetRequireHardwareBreakpoints() const;
250
251 bool GetAutoInstallMainExecutable() const;
252
253 void UpdateLaunchInfoFromProperties();
254
255 void SetDebugUtilityExpression(bool debug);
256
257 bool GetDebugUtilityExpression() const;
258
259private:
260 // Callbacks for m_launch_info.
261 void Arg0ValueChangedCallback();
262 void RunArgsValueChangedCallback();
263 void EnvVarsValueChangedCallback();
264 void InputPathValueChangedCallback();
265 void OutputPathValueChangedCallback();
266 void ErrorPathValueChangedCallback();
267 void DetachOnErrorValueChangedCallback();
268 void DisableASLRValueChangedCallback();
269 void InheritTCCValueChangedCallback();
270 void DisableSTDIOValueChangedCallback();
271
272 // Settings checker for target.jit-save-objects-dir:
273 void CheckJITObjectsDir();
274
275 Environment ComputeEnvironment() const;
276
277 // Member variables.
278 ProcessLaunchInfo m_launch_info;
279 std::unique_ptr<TargetExperimentalProperties> m_experimental_properties_up;
280 Target *m_target;
281};
282
283class EvaluateExpressionOptions {
284public:
285// MSVC has a bug here that reports C4268: 'const' static/global data
286// initialized with compiler generated default constructor fills the object
287// with zeros. Confirmed that MSVC is *not* zero-initializing, it's just a
288// bogus warning.
289#if defined(_MSC_VER)
290#pragma warning(push)
291#pragma warning(disable : 4268)
292#endif
293 static constexpr std::chrono::milliseconds default_timeout{500};
294#if defined(_MSC_VER)
295#pragma warning(pop)
296#endif
297
298 static constexpr ExecutionPolicy default_execution_policy =
299 eExecutionPolicyOnlyWhenNeeded;
300
301 EvaluateExpressionOptions() = default;
302
303 ExecutionPolicy GetExecutionPolicy() const { return m_execution_policy; }
304
305 void SetExecutionPolicy(ExecutionPolicy policy = eExecutionPolicyAlways) {
306 m_execution_policy = policy;
307 }
308
309 lldb::LanguageType GetLanguage() const { return m_language; }
310
311 void SetLanguage(lldb::LanguageType language) { m_language = language; }
312
313 bool DoesCoerceToId() const { return m_coerce_to_id; }
314
315 const char *GetPrefix() const {
316 return (m_prefix.empty() ? nullptr : m_prefix.c_str());
317 }
318
319 void SetPrefix(const char *prefix) {
320 if (prefix && prefix[0])
321 m_prefix = prefix;
322 else
323 m_prefix.clear();
324 }
325
326 void SetCoerceToId(bool coerce = true) { m_coerce_to_id = coerce; }
327
328 bool DoesUnwindOnError() const { return m_unwind_on_error; }
329
330 void SetUnwindOnError(bool unwind = false) { m_unwind_on_error = unwind; }
331
332 bool DoesIgnoreBreakpoints() const { return m_ignore_breakpoints; }
333
334 void SetIgnoreBreakpoints(bool ignore = false) {
335 m_ignore_breakpoints = ignore;
336 }
337
338 bool DoesKeepInMemory() const { return m_keep_in_memory; }
339
340 void SetKeepInMemory(bool keep = true) { m_keep_in_memory = keep; }
341
342 lldb::DynamicValueType GetUseDynamic() const { return m_use_dynamic; }
343
344 void
345 SetUseDynamic(lldb::DynamicValueType dynamic = lldb::eDynamicCanRunTarget) {
346 m_use_dynamic = dynamic;
347 }
348
349 const Timeout<std::micro> &GetTimeout() const { return m_timeout; }
350
351 void SetTimeout(const Timeout<std::micro> &timeout) { m_timeout = timeout; }
352
353 const Timeout<std::micro> &GetOneThreadTimeout() const {
354 return m_one_thread_timeout;
355 }
356
357 void SetOneThreadTimeout(const Timeout<std::micro> &timeout) {
358 m_one_thread_timeout = timeout;
359 }
360
361 bool GetTryAllThreads() const { return m_try_others; }
362
363 void SetTryAllThreads(bool try_others = true) { m_try_others = try_others; }
364
365 bool GetStopOthers() const { return m_stop_others; }
366
367 void SetStopOthers(bool stop_others = true) { m_stop_others = stop_others; }
368
369 bool GetDebug() const { return m_debug; }
370
371 void SetDebug(bool b) {
372 m_debug = b;
373 if (m_debug)
374 m_generate_debug_info = true;
375 }
376
377 bool GetGenerateDebugInfo() const { return m_generate_debug_info; }
378
379 void SetGenerateDebugInfo(bool b) { m_generate_debug_info = b; }
380
381 bool GetColorizeErrors() const { return m_ansi_color_errors; }
382
383 void SetColorizeErrors(bool b) { m_ansi_color_errors = b; }
384
385 bool GetTrapExceptions() const { return m_trap_exceptions; }
386
387 void SetTrapExceptions(bool b) { m_trap_exceptions = b; }
388
389 bool GetREPLEnabled() const { return m_repl; }
390
391 void SetREPLEnabled(bool b) { m_repl = b; }
392
393 void SetCancelCallback(lldb::ExpressionCancelCallback callback, void *baton) {
394 m_cancel_callback_baton = baton;
395 m_cancel_callback = callback;
396 }
397
398 bool InvokeCancelCallback(lldb::ExpressionEvaluationPhase phase) const {
399 return ((m_cancel_callback != nullptr)
400 ? m_cancel_callback(phase, m_cancel_callback_baton)
401 : false);
402 }
403
404 // Allows the expression contents to be remapped to point to the specified
405 // file and line using #line directives.
406 void SetPoundLine(const char *path, uint32_t line) const {
407 if (path && path[0]) {
408 m_pound_line_file = path;
409 m_pound_line_line = line;
410 } else {
411 m_pound_line_file.clear();
412 m_pound_line_line = 0;
413 }
414 }
415
416 const char *GetPoundLineFilePath() const {
417 return (m_pound_line_file.empty() ? nullptr : m_pound_line_file.c_str());
418 }
419
420 uint32_t GetPoundLineLine() const { return m_pound_line_line; }
421
422 void SetSuppressPersistentResult(bool b) { m_suppress_persistent_result = b; }
423
424 bool GetSuppressPersistentResult() const {
425 return m_suppress_persistent_result;
426 }
427
428 void SetAutoApplyFixIts(bool b) { m_auto_apply_fixits = b; }
429
430 bool GetAutoApplyFixIts() const { return m_auto_apply_fixits; }
431
432 void SetRetriesWithFixIts(uint64_t number_of_retries) {
433 m_retries_with_fixits = number_of_retries;
434 }
435
436 uint64_t GetRetriesWithFixIts() const { return m_retries_with_fixits; }
437
438 bool IsForUtilityExpr() const { return m_running_utility_expression; }
439
440 void SetIsForUtilityExpr(bool b) { m_running_utility_expression = b; }
441
442private:
443 ExecutionPolicy m_execution_policy = default_execution_policy;
444 lldb::LanguageType m_language = lldb::eLanguageTypeUnknown;
445 std::string m_prefix;
446 bool m_coerce_to_id = false;
447 bool m_unwind_on_error = true;
448 bool m_ignore_breakpoints = false;
449 bool m_keep_in_memory = false;
450 bool m_try_others = true;
451 bool m_stop_others = true;
452 bool m_debug = false;
453 bool m_trap_exceptions = true;
454 bool m_repl = false;
455 bool m_generate_debug_info = false;
456 bool m_ansi_color_errors = false;
457 bool m_suppress_persistent_result = false;
458 bool m_auto_apply_fixits = true;
459 uint64_t m_retries_with_fixits = 1;
460 /// True if the executed code should be treated as utility code that is only
461 /// used by LLDB internally.
462 bool m_running_utility_expression = false;
463
464 lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
465 Timeout<std::micro> m_timeout = default_timeout;
466 Timeout<std::micro> m_one_thread_timeout = std::nullopt;
467 lldb::ExpressionCancelCallback m_cancel_callback = nullptr;
468 void *m_cancel_callback_baton = nullptr;
469 // If m_pound_line_file is not empty and m_pound_line_line is non-zero, use
470 // #line %u "%s" before the expression content to remap where the source
471 // originates
472 mutable std::string m_pound_line_file;
473 mutable uint32_t m_pound_line_line = 0;
474};
475
476// Target
477class Target : public std::enable_shared_from_this<Target>,
478 public TargetProperties,
479 public Broadcaster,
480 public ExecutionContextScope,
481 public ModuleList::Notifier {
482public:
483 friend class TargetList;
484 friend class Debugger;
485
486 /// Broadcaster event bits definitions.
487 enum {
488 eBroadcastBitBreakpointChanged = (1 << 0),
489 eBroadcastBitModulesLoaded = (1 << 1),
490 eBroadcastBitModulesUnloaded = (1 << 2),
491 eBroadcastBitWatchpointChanged = (1 << 3),
492 eBroadcastBitSymbolsLoaded = (1 << 4),
493 eBroadcastBitSymbolsChanged = (1 << 5),
494 };
495
496 // These two functions fill out the Broadcaster interface:
497
498 static ConstString &GetStaticBroadcasterClass();
499
500 ConstString &GetBroadcasterClass() const override {
501 return GetStaticBroadcasterClass();
502 }
503
504 // This event data class is for use by the TargetList to broadcast new target
505 // notifications.
506 class TargetEventData : public EventData {
507 public:
508 TargetEventData(const lldb::TargetSP &target_sp);
509
510 TargetEventData(const lldb::TargetSP &target_sp,
511 const ModuleList &module_list);
512
513 ~TargetEventData() override;
514
515 static llvm::StringRef GetFlavorString();
516
517 llvm::StringRef GetFlavor() const override {
518 return TargetEventData::GetFlavorString();
519 }
520
521 void Dump(Stream *s) const override;
522
523 static const TargetEventData *GetEventDataFromEvent(const Event *event_ptr);
524
525 static lldb::TargetSP GetTargetFromEvent(const Event *event_ptr);
526
527 static ModuleList GetModuleListFromEvent(const Event *event_ptr);
528
529 const lldb::TargetSP &GetTarget() const { return m_target_sp; }
530
531 const ModuleList &GetModuleList() const { return m_module_list; }
532
533 private:
534 lldb::TargetSP m_target_sp;
535 ModuleList m_module_list;
536
537 TargetEventData(const TargetEventData &) = delete;
538 const TargetEventData &operator=(const TargetEventData &) = delete;
539 };
540
541 ~Target() override;
542
543 static void SettingsInitialize();
544
545 static void SettingsTerminate();
546
547 static FileSpecList GetDefaultExecutableSearchPaths();
548
549 static FileSpecList GetDefaultDebugFileSearchPaths();
550
551 static ArchSpec GetDefaultArchitecture();
552
553 static void SetDefaultArchitecture(const ArchSpec &arch);
554
555 bool IsDummyTarget() const { return m_is_dummy_target; }
556
557 const std::string &GetLabel() const { return m_label; }
558
559 /// Set a label for a target.
560 ///
561 /// The label cannot be used by another target or be only integral.
562 ///
563 /// \return
564 /// The label for this target or an error if the label didn't match the
565 /// requirements.
566 llvm::Error SetLabel(llvm::StringRef label);
567
568 /// Find a binary on the system and return its Module,
569 /// or return an existing Module that is already in the Target.
570 ///
571 /// Given a ModuleSpec, find a binary satisifying that specification,
572 /// or identify a matching Module already present in the Target,
573 /// and return a shared pointer to it.
574 ///
575 /// \param[in] module_spec
576 /// The criteria that must be matched for the binary being loaded.
577 /// e.g. UUID, architecture, file path.
578 ///
579 /// \param[in] notify
580 /// If notify is true, and the Module is new to this Target,
581 /// Target::ModulesDidLoad will be called.
582 /// If notify is false, it is assumed that the caller is adding
583 /// multiple Modules and will call ModulesDidLoad with the
584 /// full list at the end.
585 /// ModulesDidLoad must be called when a Module/Modules have
586 /// been added to the target, one way or the other.
587 ///
588 /// \param[out] error_ptr
589 /// Optional argument, pointing to a Status object to fill in
590 /// with any results / messages while attempting to find/load
591 /// this binary. Many callers will be internal functions that
592 /// will handle / summarize the failures in a custom way and
593 /// don't use these messages.
594 ///
595 /// \return
596 /// An empty ModuleSP will be returned if no matching file
597 /// was found. If error_ptr was non-nullptr, an error message
598 /// will likely be provided.
599 lldb::ModuleSP GetOrCreateModule(const ModuleSpec &module_spec, bool notify,
600 Status *error_ptr = nullptr);
601
602 // Settings accessors
603
604 static TargetProperties &GetGlobalProperties();
605
606 std::recursive_mutex &GetAPIMutex();
607
608 void DeleteCurrentProcess();
609
610 void CleanupProcess();
611
612 /// Dump a description of this object to a Stream.
613 ///
614 /// Dump a description of the contents of this object to the
615 /// supplied stream \a s. The dumped content will be only what has
616 /// been loaded or parsed up to this point at which this function
617 /// is called, so this is a good way to see what has been parsed
618 /// in a target.
619 ///
620 /// \param[in] s
621 /// The stream to which to dump the object description.
622 void Dump(Stream *s, lldb::DescriptionLevel description_level);
623
624 // If listener_sp is null, the listener of the owning Debugger object will be
625 // used.
626 const lldb::ProcessSP &CreateProcess(lldb::ListenerSP listener_sp,
627 llvm::StringRef plugin_name,
628 const FileSpec *crash_file,
629 bool can_connect);
630
631 const lldb::ProcessSP &GetProcessSP() const;
632
633 bool IsValid() { return m_valid; }
634
635 void Destroy();
636
637 Status Launch(ProcessLaunchInfo &launch_info,
638 Stream *stream); // Optional stream to receive first stop info
639
640 Status Attach(ProcessAttachInfo &attach_info,
641 Stream *stream); // Optional stream to receive first stop info
642
643 // This part handles the breakpoints.
644
645 BreakpointList &GetBreakpointList(bool internal = false);
646
647 const BreakpointList &GetBreakpointList(bool internal = false) const;
648
649 lldb::BreakpointSP GetLastCreatedBreakpoint() {
650 return m_last_created_breakpoint;
651 }
652
653 lldb::BreakpointSP GetBreakpointByID(lldb::break_id_t break_id);
654
655 // Use this to create a file and line breakpoint to a given module or all
656 // module it is nullptr
657 lldb::BreakpointSP CreateBreakpoint(const FileSpecList *containingModules,
658 const FileSpec &file, uint32_t line_no,
659 uint32_t column, lldb::addr_t offset,
660 LazyBool check_inlines,
661 LazyBool skip_prologue, bool internal,
662 bool request_hardware,
663 LazyBool move_to_nearest_code);
664
665 // Use this to create breakpoint that matches regex against the source lines
666 // in files given in source_file_list: If function_names is non-empty, also
667 // filter by function after the matches are made.
668 lldb::BreakpointSP CreateSourceRegexBreakpoint(
669 const FileSpecList *containingModules,
670 const FileSpecList *source_file_list,
671 const std::unordered_set<std::string> &function_names,
672 RegularExpression source_regex, bool internal, bool request_hardware,
673 LazyBool move_to_nearest_code);
674
675 // Use this to create a breakpoint from a load address
676 lldb::BreakpointSP CreateBreakpoint(lldb::addr_t load_addr, bool internal,
677 bool request_hardware);
678
679 // Use this to create a breakpoint from a load address and a module file spec
680 lldb::BreakpointSP CreateAddressInModuleBreakpoint(lldb::addr_t file_addr,
681 bool internal,
682 const FileSpec *file_spec,
683 bool request_hardware);
684
685 // Use this to create Address breakpoints:
686 lldb::BreakpointSP CreateBreakpoint(const Address &addr, bool internal,
687 bool request_hardware);
688
689 // Use this to create a function breakpoint by regexp in
690 // containingModule/containingSourceFiles, or all modules if it is nullptr
691 // When "skip_prologue is set to eLazyBoolCalculate, we use the current
692 // target setting, else we use the values passed in
693 lldb::BreakpointSP CreateFuncRegexBreakpoint(
694 const FileSpecList *containingModules,
695 const FileSpecList *containingSourceFiles, RegularExpression func_regexp,
696 lldb::LanguageType requested_language, LazyBool skip_prologue,
697 bool internal, bool request_hardware);
698
699 // Use this to create a function breakpoint by name in containingModule, or
700 // all modules if it is nullptr When "skip_prologue is set to
701 // eLazyBoolCalculate, we use the current target setting, else we use the
702 // values passed in. func_name_type_mask is or'ed values from the
703 // FunctionNameType enum.
704 lldb::BreakpointSP CreateBreakpoint(
705 const FileSpecList *containingModules,
706 const FileSpecList *containingSourceFiles, const char *func_name,
707 lldb::FunctionNameType func_name_type_mask, lldb::LanguageType language,
708 lldb::addr_t offset, LazyBool skip_prologue, bool internal,
709 bool request_hardware);
710
711 lldb::BreakpointSP
712 CreateExceptionBreakpoint(enum lldb::LanguageType language, bool catch_bp,
713 bool throw_bp, bool internal,
714 Args *additional_args = nullptr,
715 Status *additional_args_error = nullptr);
716
717 lldb::BreakpointSP CreateScriptedBreakpoint(
718 const llvm::StringRef class_name, const FileSpecList *containingModules,
719 const FileSpecList *containingSourceFiles, bool internal,
720 bool request_hardware, StructuredData::ObjectSP extra_args_sp,
721 Status *creation_error = nullptr);
722
723 // This is the same as the func_name breakpoint except that you can specify a
724 // vector of names. This is cheaper than a regular expression breakpoint in
725 // the case where you just want to set a breakpoint on a set of names you
726 // already know. func_name_type_mask is or'ed values from the
727 // FunctionNameType enum.
728 lldb::BreakpointSP CreateBreakpoint(
729 const FileSpecList *containingModules,
730 const FileSpecList *containingSourceFiles, const char *func_names[],
731 size_t num_names, lldb::FunctionNameType func_name_type_mask,
732 lldb::LanguageType language, lldb::addr_t offset, LazyBool skip_prologue,
733 bool internal, bool request_hardware);
734
735 lldb::BreakpointSP
736 CreateBreakpoint(const FileSpecList *containingModules,
737 const FileSpecList *containingSourceFiles,
738 const std::vector<std::string> &func_names,
739 lldb::FunctionNameType func_name_type_mask,
740 lldb::LanguageType language, lldb::addr_t m_offset,
741 LazyBool skip_prologue, bool internal,
742 bool request_hardware);
743
744 // Use this to create a general breakpoint:
745 lldb::BreakpointSP CreateBreakpoint(lldb::SearchFilterSP &filter_sp,
746 lldb::BreakpointResolverSP &resolver_sp,
747 bool internal, bool request_hardware,
748 bool resolve_indirect_symbols);
749
750 // Use this to create a watchpoint:
751 lldb::WatchpointSP CreateWatchpoint(lldb::addr_t addr, size_t size,
752 const CompilerType *type, uint32_t kind,
753 Status &error);
754
755 lldb::WatchpointSP GetLastCreatedWatchpoint() {
756 return m_last_created_watchpoint;
757 }
758
759 WatchpointList &GetWatchpointList() { return m_watchpoint_list; }
760
761 // Manages breakpoint names:
762 void AddNameToBreakpoint(BreakpointID &id, const char *name, Status &error);
763
764 void AddNameToBreakpoint(lldb::BreakpointSP &bp_sp, const char *name,
765 Status &error);
766
767 void RemoveNameFromBreakpoint(lldb::BreakpointSP &bp_sp, ConstString name);
768
769 BreakpointName *FindBreakpointName(ConstString name, bool can_create,
770 Status &error);
771
772 void DeleteBreakpointName(ConstString name);
773
774 void ConfigureBreakpointName(BreakpointName &bp_name,
775 const BreakpointOptions &options,
776 const BreakpointName::Permissions &permissions);
777 void ApplyNameToBreakpoints(BreakpointName &bp_name);
778
779 void AddBreakpointName(std::unique_ptr<BreakpointName> bp_name);
780
781 void GetBreakpointNames(std::vector<std::string> &names);
782
783 // This call removes ALL breakpoints regardless of permission.
784 void RemoveAllBreakpoints(bool internal_also = false);
785
786 // This removes all the breakpoints, but obeys the ePermDelete on them.
787 void RemoveAllowedBreakpoints();
788
789 void DisableAllBreakpoints(bool internal_also = false);
790
791 void DisableAllowedBreakpoints();
792
793 void EnableAllBreakpoints(bool internal_also = false);
794
795 void EnableAllowedBreakpoints();
796
797 bool DisableBreakpointByID(lldb::break_id_t break_id);
798
799 bool EnableBreakpointByID(lldb::break_id_t break_id);
800
801 bool RemoveBreakpointByID(lldb::break_id_t break_id);
802
803 /// Resets the hit count of all breakpoints.
804 void ResetBreakpointHitCounts();
805
806 // The flag 'end_to_end', default to true, signifies that the operation is
807 // performed end to end, for both the debugger and the debuggee.
808
809 bool RemoveAllWatchpoints(bool end_to_end = true);
810
811 bool DisableAllWatchpoints(bool end_to_end = true);
812
813 bool EnableAllWatchpoints(bool end_to_end = true);
814
815 bool ClearAllWatchpointHitCounts();
816
817 bool ClearAllWatchpointHistoricValues();
818
819 bool IgnoreAllWatchpoints(uint32_t ignore_count);
820
821 bool DisableWatchpointByID(lldb::watch_id_t watch_id);
822
823 bool EnableWatchpointByID(lldb::watch_id_t watch_id);
824
825 bool RemoveWatchpointByID(lldb::watch_id_t watch_id);
826
827 bool IgnoreWatchpointByID(lldb::watch_id_t watch_id, uint32_t ignore_count);
828
829 Status SerializeBreakpointsToFile(const FileSpec &file,
830 const BreakpointIDList &bp_ids,
831 bool append);
832
833 Status CreateBreakpointsFromFile(const FileSpec &file,
834 BreakpointIDList &new_bps);
835
836 Status CreateBreakpointsFromFile(const FileSpec &file,
837 std::vector<std::string> &names,
838 BreakpointIDList &new_bps);
839
840 /// Get \a load_addr as a callable code load address for this target
841 ///
842 /// Take \a load_addr and potentially add any address bits that are
843 /// needed to make the address callable. For ARM this can set bit
844 /// zero (if it already isn't) if \a load_addr is a thumb function.
845 /// If \a addr_class is set to AddressClass::eInvalid, then the address
846 /// adjustment will always happen. If it is set to an address class
847 /// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
848 /// returned.
849 lldb::addr_t GetCallableLoadAddress(
850 lldb::addr_t load_addr,
851 AddressClass addr_class = AddressClass::eInvalid) const;
852
853 /// Get \a load_addr as an opcode for this target.
854 ///
855 /// Take \a load_addr and potentially strip any address bits that are
856 /// needed to make the address point to an opcode. For ARM this can
857 /// clear bit zero (if it already isn't) if \a load_addr is a
858 /// thumb function and load_addr is in code.
859 /// If \a addr_class is set to AddressClass::eInvalid, then the address
860 /// adjustment will always happen. If it is set to an address class
861 /// that doesn't have code in it, LLDB_INVALID_ADDRESS will be
862 /// returned.
863 lldb::addr_t
864 GetOpcodeLoadAddress(lldb::addr_t load_addr,
865 AddressClass addr_class = AddressClass::eInvalid) const;
866
867 // Get load_addr as breakable load address for this target. Take a addr and
868 // check if for any reason there is a better address than this to put a
869 // breakpoint on. If there is then return that address. For MIPS, if
870 // instruction at addr is a delay slot instruction then this method will find
871 // the address of its previous instruction and return that address.
872 lldb::addr_t GetBreakableLoadAddress(lldb::addr_t addr);
873
874 void ModulesDidLoad(ModuleList &module_list);
875
876 void ModulesDidUnload(ModuleList &module_list, bool delete_locations);
877
878 void SymbolsDidLoad(ModuleList &module_list);
879
880 void ClearModules(bool delete_locations);
881
882 /// Called as the last function in Process::DidExec().
883 ///
884 /// Process::DidExec() will clear a lot of state in the process,
885 /// then try to reload a dynamic loader plugin to discover what
886 /// binaries are currently available and then this function should
887 /// be called to allow the target to do any cleanup after everything
888 /// has been figured out. It can remove breakpoints that no longer
889 /// make sense as the exec might have changed the target
890 /// architecture, and unloaded some modules that might get deleted.
891 void DidExec();
892
893 /// Gets the module for the main executable.
894 ///
895 /// Each process has a notion of a main executable that is the file
896 /// that will be executed or attached to. Executable files can have
897 /// dependent modules that are discovered from the object files, or
898 /// discovered at runtime as things are dynamically loaded.
899 ///
900 /// \return
901 /// The shared pointer to the executable module which can
902 /// contains a nullptr Module object if no executable has been
903 /// set.
904 ///
905 /// \see DynamicLoader
906 /// \see ObjectFile::GetDependentModules (FileSpecList&)
907 /// \see Process::SetExecutableModule(lldb::ModuleSP&)
908 lldb::ModuleSP GetExecutableModule();
909
910 Module *GetExecutableModulePointer();
911
912 /// Set the main executable module.
913 ///
914 /// Each process has a notion of a main executable that is the file
915 /// that will be executed or attached to. Executable files can have
916 /// dependent modules that are discovered from the object files, or
917 /// discovered at runtime as things are dynamically loaded.
918 ///
919 /// Setting the executable causes any of the current dependent
920 /// image information to be cleared and replaced with the static
921 /// dependent image information found by calling
922 /// ObjectFile::GetDependentModules (FileSpecList&) on the main
923 /// executable and any modules on which it depends. Calling
924 /// Process::GetImages() will return the newly found images that
925 /// were obtained from all of the object files.
926 ///
927 /// \param[in] module_sp
928 /// A shared pointer reference to the module that will become
929 /// the main executable for this process.
930 ///
931 /// \param[in] load_dependent_files
932 /// If \b true then ask the object files to track down any
933 /// known dependent files.
934 ///
935 /// \see ObjectFile::GetDependentModules (FileSpecList&)
936 /// \see Process::GetImages()
937 void SetExecutableModule(
938 lldb::ModuleSP &module_sp,
939 LoadDependentFiles load_dependent_files = eLoadDependentsDefault);
940
941 bool LoadScriptingResources(std::list<Status> &errors,
942 Stream &feedback_stream,
943 bool continue_on_error = true) {
944 return m_images.LoadScriptingResourcesInTarget(
945 this, errors, feedback_stream, continue_on_error);
946 }
947
948 /// Get accessor for the images for this process.
949 ///
950 /// Each process has a notion of a main executable that is the file
951 /// that will be executed or attached to. Executable files can have
952 /// dependent modules that are discovered from the object files, or
953 /// discovered at runtime as things are dynamically loaded. After
954 /// a main executable has been set, the images will contain a list
955 /// of all the files that the executable depends upon as far as the
956 /// object files know. These images will usually contain valid file
957 /// virtual addresses only. When the process is launched or attached
958 /// to, the DynamicLoader plug-in will discover where these images
959 /// were loaded in memory and will resolve the load virtual
960 /// addresses is each image, and also in images that are loaded by
961 /// code.
962 ///
963 /// \return
964 /// A list of Module objects in a module list.
965 const ModuleList &GetImages() const { return m_images; }
966
967 ModuleList &GetImages() { return m_images; }
968
969 /// Return whether this FileSpec corresponds to a module that should be
970 /// considered for general searches.
971 ///
972 /// This API will be consulted by the SearchFilterForUnconstrainedSearches
973 /// and any module that returns \b true will not be searched. Note the
974 /// SearchFilterForUnconstrainedSearches is the search filter that
975 /// gets used in the CreateBreakpoint calls when no modules is provided.
976 ///
977 /// The target call at present just consults the Platform's call of the
978 /// same name.
979 ///
980 /// \param[in] module_spec
981 /// Path to the module.
982 ///
983 /// \return \b true if the module should be excluded, \b false otherwise.
984 bool ModuleIsExcludedForUnconstrainedSearches(const FileSpec &module_spec);
985
986 /// Return whether this module should be considered for general searches.
987 ///
988 /// This API will be consulted by the SearchFilterForUnconstrainedSearches
989 /// and any module that returns \b true will not be searched. Note the
990 /// SearchFilterForUnconstrainedSearches is the search filter that
991 /// gets used in the CreateBreakpoint calls when no modules is provided.
992 ///
993 /// The target call at present just consults the Platform's call of the
994 /// same name.
995 ///
996 /// FIXME: When we get time we should add a way for the user to set modules
997 /// that they
998 /// don't want searched, in addition to or instead of the platform ones.
999 ///
1000 /// \param[in] module_sp
1001 /// A shared pointer reference to the module that checked.
1002 ///
1003 /// \return \b true if the module should be excluded, \b false otherwise.
1004 bool
1005 ModuleIsExcludedForUnconstrainedSearches(const lldb::ModuleSP &module_sp);
1006
1007 const ArchSpec &GetArchitecture() const { return m_arch.GetSpec(); }
1008
1009 /// Returns the name of the target's ABI plugin.
1010 llvm::StringRef GetABIName() const;
1011
1012 /// Set the architecture for this target.
1013 ///
1014 /// If the current target has no Images read in, then this just sets the
1015 /// architecture, which will be used to select the architecture of the
1016 /// ExecutableModule when that is set. If the current target has an
1017 /// ExecutableModule, then calling SetArchitecture with a different
1018 /// architecture from the currently selected one will reset the
1019 /// ExecutableModule to that slice of the file backing the ExecutableModule.
1020 /// If the file backing the ExecutableModule does not contain a fork of this
1021 /// architecture, then this code will return false, and the architecture
1022 /// won't be changed. If the input arch_spec is the same as the already set
1023 /// architecture, this is a no-op.
1024 ///
1025 /// \param[in] arch_spec
1026 /// The new architecture.
1027 ///
1028 /// \param[in] set_platform
1029 /// If \b true, then the platform will be adjusted if the currently
1030 /// selected platform is not compatible with the architecture being set.
1031 /// If \b false, then just the architecture will be set even if the
1032 /// currently selected platform isn't compatible (in case it might be
1033 /// manually set following this function call).
1034 ///
1035 /// \param[in] merged
1036 /// If true, arch_spec is merged with the current
1037 /// architecture. Otherwise it's replaced.
1038 ///
1039 /// \return
1040 /// \b true if the architecture was successfully set, \b false otherwise.
1041 bool SetArchitecture(const ArchSpec &arch_spec, bool set_platform = false,
1042 bool merge = true);
1043
1044 bool MergeArchitecture(const ArchSpec &arch_spec);
1045
1046 Architecture *GetArchitecturePlugin() const { return m_arch.GetPlugin(); }
1047
1048 Debugger &GetDebugger() { return m_debugger; }
1049
1050 size_t ReadMemoryFromFileCache(const Address &addr, void *dst, size_t dst_len,
1051 Status &error);
1052
1053 // Reading memory through the target allows us to skip going to the process
1054 // for reading memory if possible and it allows us to try and read from any
1055 // constant sections in our object files on disk. If you always want live
1056 // program memory, read straight from the process. If you possibly want to
1057 // read from const sections in object files, read from the target. This
1058 // version of ReadMemory will try and read memory from the process if the
1059 // process is alive. The order is:
1060 // 1 - if (force_live_memory == false) and the address falls in a read-only
1061 // section, then read from the file cache
1062 // 2 - if there is a process, then read from memory
1063 // 3 - if there is no process, then read from the file cache
1064 size_t ReadMemory(const Address &addr, void *dst, size_t dst_len,
1065 Status &error, bool force_live_memory = false,
1066 lldb::addr_t *load_addr_ptr = nullptr);
1067
1068 size_t ReadCStringFromMemory(const Address &addr, std::string &out_str,
1069 Status &error, bool force_live_memory = false);
1070
1071 size_t ReadCStringFromMemory(const Address &addr, char *dst,
1072 size_t dst_max_len, Status &result_error,
1073 bool force_live_memory = false);
1074
1075 /// Read a NULL terminated string from memory
1076 ///
1077 /// This function will read a cache page at a time until a NULL string
1078 /// terminator is found. It will stop reading if an aligned sequence of NULL
1079 /// termination \a type_width bytes is not found before reading \a
1080 /// cstr_max_len bytes. The results are always guaranteed to be NULL
1081 /// terminated, and that no more than (max_bytes - type_width) bytes will be
1082 /// read.
1083 ///
1084 /// \param[in] addr
1085 /// The address to start the memory read.
1086 ///
1087 /// \param[in] dst
1088 /// A character buffer containing at least max_bytes.
1089 ///
1090 /// \param[in] max_bytes
1091 /// The maximum number of bytes to read.
1092 ///
1093 /// \param[in] error
1094 /// The error status of the read operation.
1095 ///
1096 /// \param[in] type_width
1097 /// The size of the null terminator (1 to 4 bytes per
1098 /// character). Defaults to 1.
1099 ///
1100 /// \return
1101 /// The error status or the number of bytes prior to the null terminator.
1102 size_t ReadStringFromMemory(const Address &addr, char *dst, size_t max_bytes,
1103 Status &error, size_t type_width,
1104 bool force_live_memory = true);
1105
1106 size_t ReadScalarIntegerFromMemory(const Address &addr, uint32_t byte_size,
1107 bool is_signed, Scalar &scalar,
1108 Status &error,
1109 bool force_live_memory = false);
1110
1111 uint64_t ReadUnsignedIntegerFromMemory(const Address &addr,
1112 size_t integer_byte_size,
1113 uint64_t fail_value, Status &error,
1114 bool force_live_memory = false);
1115
1116 bool ReadPointerFromMemory(const Address &addr, Status &error,
1117 Address &pointer_addr,
1118 bool force_live_memory = false);
1119
1120 SectionLoadList &GetSectionLoadList() {
1121 return m_section_load_history.GetCurrentSectionLoadList();
1122 }
1123
1124 static Target *GetTargetFromContexts(const ExecutionContext *exe_ctx_ptr,
1125 const SymbolContext *sc_ptr);
1126
1127 // lldb::ExecutionContextScope pure virtual functions
1128 lldb::TargetSP CalculateTarget() override;
1129
1130 lldb::ProcessSP CalculateProcess() override;
1131
1132 lldb::ThreadSP CalculateThread() override;
1133
1134 lldb::StackFrameSP CalculateStackFrame() override;
1135
1136 void CalculateExecutionContext(ExecutionContext &exe_ctx) override;
1137
1138 PathMappingList &GetImageSearchPathList();
1139
1140 llvm::Expected<lldb::TypeSystemSP>
1141 GetScratchTypeSystemForLanguage(lldb::LanguageType language,
1142 bool create_on_demand = true);
1143
1144 std::vector<lldb::TypeSystemSP>
1145 GetScratchTypeSystems(bool create_on_demand = true);
1146
1147 PersistentExpressionState *
1148 GetPersistentExpressionStateForLanguage(lldb::LanguageType language);
1149
1150 // Creates a UserExpression for the given language, the rest of the
1151 // parameters have the same meaning as for the UserExpression constructor.
1152 // Returns a new-ed object which the caller owns.
1153
1154 UserExpression *
1155 GetUserExpressionForLanguage(llvm::StringRef expr, llvm::StringRef prefix,
1156 lldb::LanguageType language,
1157 Expression::ResultType desired_type,
1158 const EvaluateExpressionOptions &options,
1159 ValueObject *ctx_obj, Status &error);
1160
1161 // Creates a FunctionCaller for the given language, the rest of the
1162 // parameters have the same meaning as for the FunctionCaller constructor.
1163 // Since a FunctionCaller can't be
1164 // IR Interpreted, it makes no sense to call this with an
1165 // ExecutionContextScope that lacks
1166 // a Process.
1167 // Returns a new-ed object which the caller owns.
1168
1169 FunctionCaller *GetFunctionCallerForLanguage(lldb::LanguageType language,
1170 const CompilerType &return_type,
1171 const Address &function_address,
1172 const ValueList &arg_value_list,
1173 const char *name, Status &error);
1174
1175 /// Creates and installs a UtilityFunction for the given language.
1176 llvm::Expected<std::unique_ptr<UtilityFunction>>
1177 CreateUtilityFunction(std::string expression, std::string name,
1178 lldb::LanguageType language, ExecutionContext &exe_ctx);
1179
1180 // Install any files through the platform that need be to installed prior to
1181 // launching or attaching.
1182 Status Install(ProcessLaunchInfo *launch_info);
1183
1184 bool ResolveFileAddress(lldb::addr_t load_addr, Address &so_addr);
1185
1186 bool ResolveLoadAddress(lldb::addr_t load_addr, Address &so_addr,
1187 uint32_t stop_id = SectionLoadHistory::eStopIDNow);
1188
1189 bool SetSectionLoadAddress(const lldb::SectionSP &section,
1190 lldb::addr_t load_addr,
1191 bool warn_multiple = false);
1192
1193 size_t UnloadModuleSections(const lldb::ModuleSP &module_sp);
1194
1195 size_t UnloadModuleSections(const ModuleList &module_list);
1196
1197 bool SetSectionUnloaded(const lldb::SectionSP &section_sp);
1198
1199 bool SetSectionUnloaded(const lldb::SectionSP &section_sp,
1200 lldb::addr_t load_addr);
1201
1202 void ClearAllLoadedSections();
1203
1204 /// Set the \a Trace object containing processor trace information of this
1205 /// target.
1206 ///
1207 /// \param[in] trace_sp
1208 /// The trace object.
1209 void SetTrace(const lldb::TraceSP &trace_sp);
1210
1211 /// Get the \a Trace object containing processor trace information of this
1212 /// target.
1213 ///
1214 /// \return
1215 /// The trace object. It might be undefined.
1216 lldb::TraceSP GetTrace();
1217
1218 /// Create a \a Trace object for the current target using the using the
1219 /// default supported tracing technology for this process.
1220 ///
1221 /// \return
1222 /// The new \a Trace or an \a llvm::Error if a \a Trace already exists or
1223 /// the trace couldn't be created.
1224 llvm::Expected<lldb::TraceSP> CreateTrace();
1225
1226 /// If a \a Trace object is present, this returns it, otherwise a new Trace is
1227 /// created with \a Trace::CreateTrace.
1228 llvm::Expected<lldb::TraceSP> GetTraceOrCreate();
1229
1230 // Since expressions results can persist beyond the lifetime of a process,
1231 // and the const expression results are available after a process is gone, we
1232 // provide a way for expressions to be evaluated from the Target itself. If
1233 // an expression is going to be run, then it should have a frame filled in in
1234 // the execution context.
1235 lldb::ExpressionResults EvaluateExpression(
1236 llvm::StringRef expression, ExecutionContextScope *exe_scope,
1237 lldb::ValueObjectSP &result_valobj_sp,
1238 const EvaluateExpressionOptions &options = EvaluateExpressionOptions(),
1239 std::string *fixed_expression = nullptr, ValueObject *ctx_obj = nullptr);
1240
1241 lldb::ExpressionVariableSP GetPersistentVariable(ConstString name);
1242
1243 lldb::addr_t GetPersistentSymbol(ConstString name);
1244
1245 /// This method will return the address of the starting function for
1246 /// this binary, e.g. main() or its equivalent. This can be used as
1247 /// an address of a function that is not called once a binary has
1248 /// started running - e.g. as a return address for inferior function
1249 /// calls that are unambiguous completion of the function call, not
1250 /// called during the course of the inferior function code running.
1251 ///
1252 /// If no entry point can be found, an invalid address is returned.
1253 ///
1254 /// \param [out] err
1255 /// This object will be set to failure if no entry address could
1256 /// be found, and may contain a helpful error message.
1257 //
1258 /// \return
1259 /// Returns the entry address for this program, or an error
1260 /// if none can be found.
1261 llvm::Expected<lldb_private::Address> GetEntryPointAddress();
1262
1263 CompilerType GetRegisterType(const std::string &name,
1264 const lldb_private::RegisterFlags &flags,
1265 uint32_t byte_size);
1266
1267 // Target Stop Hooks
1268 class StopHook : public UserID {
1269 public:
1270 StopHook(const StopHook &rhs);
1271 virtual ~StopHook() = default;
1272
1273 enum class StopHookKind : uint32_t { CommandBased = 0, ScriptBased };
1274 enum class StopHookResult : uint32_t {
1275 KeepStopped = 0,
1276 RequestContinue,
1277 AlreadyContinued
1278 };
1279
1280 lldb::TargetSP &GetTarget() { return m_target_sp; }
1281
1282 // Set the specifier. The stop hook will own the specifier, and is
1283 // responsible for deleting it when we're done.
1284 void SetSpecifier(SymbolContextSpecifier *specifier);
1285
1286 SymbolContextSpecifier *GetSpecifier() { return m_specifier_sp.get(); }
1287
1288 bool ExecutionContextPasses(const ExecutionContext &exe_ctx);
1289
1290 // Called on stop, this gets passed the ExecutionContext for each "stop
1291 // with a reason" thread. It should add to the stream whatever text it
1292 // wants to show the user, and return False to indicate it wants the target
1293 // not to stop.
1294 virtual StopHookResult HandleStop(ExecutionContext &exe_ctx,
1295 lldb::StreamSP output) = 0;
1296
1297 // Set the Thread Specifier. The stop hook will own the thread specifier,
1298 // and is responsible for deleting it when we're done.
1299 void SetThreadSpecifier(ThreadSpec *specifier);
1300
1301 ThreadSpec *GetThreadSpecifier() { return m_thread_spec_up.get(); }
1302
1303 bool IsActive() { return m_active; }
1304
1305 void SetIsActive(bool is_active) { m_active = is_active; }
1306
1307 void SetAutoContinue(bool auto_continue) {
1308 m_auto_continue = auto_continue;
1309 }
1310
1311 bool GetAutoContinue() const { return m_auto_continue; }
1312
1313 void GetDescription(Stream &s, lldb::DescriptionLevel level) const;
1314 virtual void GetSubclassDescription(Stream &s,
1315 lldb::DescriptionLevel level) const = 0;
1316
1317 protected:
1318 lldb::TargetSP m_target_sp;
1319 lldb::SymbolContextSpecifierSP m_specifier_sp;
1320 std::unique_ptr<ThreadSpec> m_thread_spec_up;
1321 bool m_active = true;
1322 bool m_auto_continue = false;
1323
1324 StopHook(lldb::TargetSP target_sp, lldb::user_id_t uid);
1325 };
1326
1327 class StopHookCommandLine : public StopHook {
1328 public:
1329 ~StopHookCommandLine() override = default;
1330
1331 StringList &GetCommands() { return m_commands; }
1332 void SetActionFromString(const std::string &strings);
1333 void SetActionFromStrings(const std::vector<std::string> &strings);
1334
1335 StopHookResult HandleStop(ExecutionContext &exc_ctx,
1336 lldb::StreamSP output_sp) override;
1337 void GetSubclassDescription(Stream &s,
1338 lldb::DescriptionLevel level) const override;
1339
1340 private:
1341 StringList m_commands;
1342 // Use CreateStopHook to make a new empty stop hook. The GetCommandPointer
1343 // and fill it with commands, and SetSpecifier to set the specifier shared
1344 // pointer (can be null, that will match anything.)
1345 StopHookCommandLine(lldb::TargetSP target_sp, lldb::user_id_t uid)
1346 : StopHook(target_sp, uid) {}
1347 friend class Target;
1348 };
1349
1350 class StopHookScripted : public StopHook {
1351 public:
1352 ~StopHookScripted() override = default;
1353 StopHookResult HandleStop(ExecutionContext &exc_ctx,
1354 lldb::StreamSP output) override;
1355
1356 Status SetScriptCallback(std::string class_name,
1357 StructuredData::ObjectSP extra_args_sp);
1358
1359 void GetSubclassDescription(Stream &s,
1360 lldb::DescriptionLevel level) const override;
1361
1362 private:
1363 std::string m_class_name;
1364 /// This holds the dictionary of keys & values that can be used to
1365 /// parametrize any given callback's behavior.
1366 StructuredDataImpl m_extra_args;
1367 /// This holds the python callback object.
1368 StructuredData::GenericSP m_implementation_sp;
1369
1370 /// Use CreateStopHook to make a new empty stop hook. The GetCommandPointer
1371 /// and fill it with commands, and SetSpecifier to set the specifier shared
1372 /// pointer (can be null, that will match anything.)
1373 StopHookScripted(lldb::TargetSP target_sp, lldb::user_id_t uid)
1374 : StopHook(target_sp, uid) {}
1375 friend class Target;
1376 };
1377
1378 typedef std::shared_ptr<StopHook> StopHookSP;
1379
1380 /// Add an empty stop hook to the Target's stop hook list, and returns a
1381 /// shared pointer to it in new_hook. Returns the id of the new hook.
1382 StopHookSP CreateStopHook(StopHook::StopHookKind kind);
1383
1384 /// If you tried to create a stop hook, and that failed, call this to
1385 /// remove the stop hook, as it will also reset the stop hook counter.
1386 void UndoCreateStopHook(lldb::user_id_t uid);
1387
1388 // Runs the stop hooks that have been registered for this target.
1389 // Returns true if the stop hooks cause the target to resume.
1390 bool RunStopHooks();
1391
1392 size_t GetStopHookSize();
1393
1394 bool SetSuppresStopHooks(bool suppress) {
1395 bool old_value = m_suppress_stop_hooks;
1396 m_suppress_stop_hooks = suppress;
1397 return old_value;
1398 }
1399
1400 bool GetSuppressStopHooks() { return m_suppress_stop_hooks; }
1401
1402 bool RemoveStopHookByID(lldb::user_id_t uid);
1403
1404 void RemoveAllStopHooks();
1405
1406 StopHookSP GetStopHookByID(lldb::user_id_t uid);
1407
1408 bool SetStopHookActiveStateByID(lldb::user_id_t uid, bool active_state);
1409
1410 void SetAllStopHooksActiveState(bool active_state);
1411
1412 size_t GetNumStopHooks() const { return m_stop_hooks.size(); }
1413
1414 StopHookSP GetStopHookAtIndex(size_t index) {
1415 if (index >= GetNumStopHooks())
1416 return StopHookSP();
1417 StopHookCollection::iterator pos = m_stop_hooks.begin();
1418
1419 while (index > 0) {
1420 pos++;
1421 index--;
1422 }
1423 return (*pos).second;
1424 }
1425
1426 lldb::PlatformSP GetPlatform() { return m_platform_sp; }
1427
1428 void SetPlatform(const lldb::PlatformSP &platform_sp) {
1429 m_platform_sp = platform_sp;
1430 }
1431
1432 SourceManager &GetSourceManager();
1433
1434 // Methods.
1435 lldb::SearchFilterSP
1436 GetSearchFilterForModule(const FileSpec *containingModule);
1437
1438 lldb::SearchFilterSP
1439 GetSearchFilterForModuleList(const FileSpecList *containingModuleList);
1440
1441 lldb::SearchFilterSP
1442 GetSearchFilterForModuleAndCUList(const FileSpecList *containingModules,
1443 const FileSpecList *containingSourceFiles);
1444
1445 lldb::REPLSP GetREPL(Status &err, lldb::LanguageType language,
1446 const char *repl_options, bool can_create);
1447
1448 void SetREPL(lldb::LanguageType language, lldb::REPLSP repl_sp);
1449
1450 StackFrameRecognizerManager &GetFrameRecognizerManager() {
1451 return *m_frame_recognizer_manager_up;
1452 }
1453
1454 void SaveScriptedLaunchInfo(lldb_private::ProcessInfo &process_info);
1455
1456 /// Add a signal for the target. This will get copied over to the process
1457 /// if the signal exists on that target. Only the values with Yes and No are
1458 /// set, Calculate values will be ignored.
1459protected:
1460 struct DummySignalValues {
1461 LazyBool pass = eLazyBoolCalculate;
1462 LazyBool notify = eLazyBoolCalculate;
1463 LazyBool stop = eLazyBoolCalculate;
1464 DummySignalValues(LazyBool pass, LazyBool notify, LazyBool stop)
1465 : pass(pass), notify(notify), stop(stop) {}
1466 DummySignalValues() = default;
1467 };
1468 using DummySignalElement = llvm::StringMapEntry<DummySignalValues>;
1469 static bool UpdateSignalFromDummy(lldb::UnixSignalsSP signals_sp,
1470 const DummySignalElement &element);
1471 static bool ResetSignalFromDummy(lldb::UnixSignalsSP signals_sp,
1472 const DummySignalElement &element);
1473
1474public:
1475 /// Add a signal to the Target's list of stored signals/actions. These
1476 /// values will get copied into any processes launched from
1477 /// this target.
1478 void AddDummySignal(llvm::StringRef name, LazyBool pass, LazyBool print,
1479 LazyBool stop);
1480 /// Updates the signals in signals_sp using the stored dummy signals.
1481 /// If warning_stream_sp is not null, if any stored signals are not found in
1482 /// the current process, a warning will be emitted here.
1483 void UpdateSignalsFromDummy(lldb::UnixSignalsSP signals_sp,
1484 lldb::StreamSP warning_stream_sp);
1485 /// Clear the dummy signals in signal_names from the target, or all signals
1486 /// if signal_names is empty. Also remove the behaviors they set from the
1487 /// process's signals if it exists.
1488 void ClearDummySignals(Args &signal_names);
1489 /// Print all the signals set in this target.
1490 void PrintDummySignals(Stream &strm, Args &signals);
1491
1492protected:
1493 /// Implementing of ModuleList::Notifier.
1494
1495 void NotifyModuleAdded(const ModuleList &module_list,
1496 const lldb::ModuleSP &module_sp) override;
1497
1498 void NotifyModuleRemoved(const ModuleList &module_list,
1499 const lldb::ModuleSP &module_sp) override;
1500
1501 void NotifyModuleUpdated(const ModuleList &module_list,
1502 const lldb::ModuleSP &old_module_sp,
1503 const lldb::ModuleSP &new_module_sp) override;
1504
1505 void NotifyWillClearList(const ModuleList &module_list) override;
1506
1507 void NotifyModulesRemoved(lldb_private::ModuleList &module_list) override;
1508
1509 class Arch {
1510 public:
1511 explicit Arch(const ArchSpec &spec);
1512 const Arch &operator=(const ArchSpec &spec);
1513
1514 const ArchSpec &GetSpec() const { return m_spec; }
1515 Architecture *GetPlugin() const { return m_plugin_up.get(); }
1516
1517 private:
1518 ArchSpec m_spec;
1519 std::unique_ptr<Architecture> m_plugin_up;
1520 };
1521
1522 // Member variables.
1523 Debugger &m_debugger;
1524 lldb::PlatformSP m_platform_sp; ///< The platform for this target.
1525 std::recursive_mutex m_mutex; ///< An API mutex that is used by the lldb::SB*
1526 /// classes make the SB interface thread safe
1527 /// When the private state thread calls SB API's - usually because it is
1528 /// running OS plugin or Python ThreadPlan code - it should not block on the
1529 /// API mutex that is held by the code that kicked off the sequence of events
1530 /// that led us to run the code. We hand out this mutex instead when we
1531 /// detect that code is running on the private state thread.
1532 std::recursive_mutex m_private_mutex;
1533 Arch m_arch;
1534 std::string m_label;
1535 ModuleList m_images; ///< The list of images for this process (shared
1536 /// libraries and anything dynamically loaded).
1537 SectionLoadHistory m_section_load_history;
1538 BreakpointList m_breakpoint_list;
1539 BreakpointList m_internal_breakpoint_list;
1540 using BreakpointNameList =
1541 std::map<ConstString, std::unique_ptr<BreakpointName>>;
1542 BreakpointNameList m_breakpoint_names;
1543
1544 lldb::BreakpointSP m_last_created_breakpoint;
1545 WatchpointList m_watchpoint_list;
1546 lldb::WatchpointSP m_last_created_watchpoint;
1547 // We want to tightly control the process destruction process so we can
1548 // correctly tear down everything that we need to, so the only class that
1549 // knows about the process lifespan is this target class.
1550 lldb::ProcessSP m_process_sp;
1551 lldb::SearchFilterSP m_search_filter_sp;
1552 PathMappingList m_image_search_paths;
1553 TypeSystemMap m_scratch_type_system_map;
1554
1555 typedef std::map<lldb::LanguageType, lldb::REPLSP> REPLMap;
1556 REPLMap m_repl_map;
1557
1558 lldb::SourceManagerUP m_source_manager_up;
1559
1560 typedef std::map<lldb::user_id_t, StopHookSP> StopHookCollection;
1561 StopHookCollection m_stop_hooks;
1562 lldb::user_id_t m_stop_hook_next_id;
1563 uint32_t m_latest_stop_hook_id; /// This records the last natural stop at
1564 /// which we ran a stop-hook.
1565 bool m_valid;
1566 bool m_suppress_stop_hooks; /// Used to not run stop hooks for expressions
1567 bool m_is_dummy_target;
1568 unsigned m_next_persistent_variable_index = 0;
1569 /// An optional \a lldb_private::Trace object containing processor trace
1570 /// information of this target.
1571 lldb::TraceSP m_trace_sp;
1572 /// Stores the frame recognizers of this target.
1573 lldb::StackFrameRecognizerManagerUP m_frame_recognizer_manager_up;
1574 /// These are used to set the signal state when you don't have a process and
1575 /// more usefully in the Dummy target where you can't know exactly what
1576 /// signals you will have.
1577 llvm::StringMap<DummySignalValues> m_dummy_signals;
1578
1579 static void ImageSearchPathsChanged(const PathMappingList &path_list,
1580 void *baton);
1581
1582 // Utilities for `statistics` command.
1583private:
1584 // Target metrics storage.
1585 TargetStats m_stats;
1586
1587public:
1588 /// Get metrics associated with this target in JSON format.
1589 ///
1590 /// Target metrics help measure timings and information that is contained in
1591 /// a target. These are designed to help measure performance of a debug
1592 /// session as well as represent the current state of the target, like
1593 /// information on the currently modules, currently set breakpoints and more.
1594 ///
1595 /// \return
1596 /// Returns a JSON value that contains all target metrics.
1597 llvm::json::Value ReportStatistics();
1598
1599 TargetStats &GetStatistics() { return m_stats; }
1600
1601private:
1602 /// Construct with optional file and arch.
1603 ///
1604 /// This member is private. Clients must use
1605 /// TargetList::CreateTarget(const FileSpec*, const ArchSpec*)
1606 /// so all targets can be tracked from the central target list.
1607 ///
1608 /// \see TargetList::CreateTarget(const FileSpec*, const ArchSpec*)
1609 Target(Debugger &debugger, const ArchSpec &target_arch,
1610 const lldb::PlatformSP &platform_sp, bool is_dummy_target);
1611
1612 // Helper function.
1613 bool ProcessIsValid();
1614
1615 // Copy breakpoints, stop hooks and so forth from the dummy target:
1616 void PrimeFromDummyTarget(Target &target);
1617
1618 void AddBreakpoint(lldb::BreakpointSP breakpoint_sp, bool internal);
1619
1620 void FinalizeFileActions(ProcessLaunchInfo &info);
1621
1622 /// Return a recommended size for memory reads at \a addr, optimizing for
1623 /// cache usage.
1624 lldb::addr_t GetReasonableReadSize(const Address &addr);
1625
1626 Target(const Target &) = delete;
1627 const Target &operator=(const Target &) = delete;
1628};
1629
1630} // namespace lldb_private
1631
1632#endif // LLDB_TARGET_TARGET_H