aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Target/TargetList.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Target/TargetList.h')
-rw-r--r--include/lldb/Target/TargetList.h429
1 files changed, 198 insertions, 231 deletions
diff --git a/include/lldb/Target/TargetList.h b/include/lldb/Target/TargetList.h
index d96d2f1b0e7a..81b81dba7757 100644
--- a/include/lldb/Target/TargetList.h
+++ b/include/lldb/Target/TargetList.h
@@ -22,244 +22,211 @@
namespace lldb_private {
-class TargetList : public Broadcaster
-{
+class TargetList : public Broadcaster {
private:
- friend class Debugger;
-
- //------------------------------------------------------------------
- /// Constructor
- ///
- /// The constructor for the target list is private. Clients can
- /// get ahold of of the one and only target list through the
- /// lldb_private::Debugger::GetSharedInstance().GetTargetList().
- ///
- /// @see static TargetList& lldb_private::Debugger::GetTargetList().
- //------------------------------------------------------------------
- TargetList(Debugger &debugger);
+ friend class Debugger;
+
+ //------------------------------------------------------------------
+ /// Constructor
+ ///
+ /// The constructor for the target list is private. Clients can
+ /// get ahold of of the one and only target list through the
+ /// lldb_private::Debugger::GetSharedInstance().GetTargetList().
+ ///
+ /// @see static TargetList& lldb_private::Debugger::GetTargetList().
+ //------------------------------------------------------------------
+ TargetList(Debugger &debugger);
public:
- //------------------------------------------------------------------
- /// Broadcaster event bits definitions.
- //------------------------------------------------------------------
- enum
- {
- eBroadcastBitInterrupt = (1 << 0)
- };
-
-
- // These two functions fill out the Broadcaster interface:
-
- static ConstString &GetStaticBroadcasterClass ();
-
- ConstString &GetBroadcasterClass() const override
- {
- return GetStaticBroadcasterClass();
- }
-
- ~TargetList() override;
-
- //------------------------------------------------------------------
- /// Create a new Target.
- ///
- /// Clients must use this function to create a Target. This allows
- /// a global list of targets to be maintained in a central location
- /// so signal handlers and other global functions can use it to
- /// locate an appropriate target to deliver asynchronous information
- /// to.
- ///
- /// @param[in] debugger
- /// The debugger to associate this target with
- ///
- /// @param[in] file_spec
- /// The main executable file for a debug target. This value
- /// can be nullptr and the file can be set later using:
- /// Target::SetExecutableModule (ModuleSP&)
- ///
- /// @param[in] triple_cstr
- /// A target triple string to be used for the target. This can
- /// be nullptr if the triple is not known or when attaching to a
- /// process.
- ///
- /// @param[in] get_dependent_modules
- /// Track down the dependent modules for an executable and
- /// load those into the module list.
- ///
- /// @param[in] platform_options
- /// A pointer to the platform options to use when creating this
- /// target. If this value is nullptr, then the currently selected
- /// platform will be used.
- ///
- /// @param[out] target_sp
- /// A shared pointer to a target that will be filled in if
- /// this call is successful.
- ///
- /// @return
- /// An error object that indicates success or failure
- //------------------------------------------------------------------
- Error
- CreateTarget (Debugger &debugger,
- const char *user_exe_path,
- const char *triple_cstr,
- bool get_dependent_modules,
- const OptionGroupPlatform *platform_options,
- lldb::TargetSP &target_sp);
-
- //------------------------------------------------------------------
- /// Create a new Target.
- ///
- /// Same as the function above, but used when you already know the
- /// platform you will be using
- //------------------------------------------------------------------
- Error
- CreateTarget (Debugger &debugger,
- const char *user_exe_path,
- const ArchSpec& arch,
- bool get_dependent_modules,
- lldb::PlatformSP &platform_sp,
- lldb::TargetSP &target_sp);
-
- //------------------------------------------------------------------
- /// Delete a Target object from the list.
- ///
- /// When clients are done with the Target objects, this function
- /// should be called to release the memory associated with a target
- /// object.
- ///
- /// @param[in] target_sp
- /// The shared pointer to a target.
- ///
- /// @return
- /// Returns \b true if the target was successfully removed from
- /// from this target list, \b false otherwise. The client will
- /// be left with the last remaining shared pointer to the target
- /// in \a target_sp which can then be properly released.
- //------------------------------------------------------------------
- bool
- DeleteTarget (lldb::TargetSP &target_sp);
-
- int
- GetNumTargets () const;
-
- lldb::TargetSP
- GetTargetAtIndex (uint32_t index) const;
-
- uint32_t
- GetIndexOfTarget (lldb::TargetSP target_sp) const;
-
- //------------------------------------------------------------------
- /// Find the target that contains has an executable whose path
- /// matches \a exe_file_spec, and whose architecture matches
- /// \a arch_ptr if arch_ptr is not nullptr.
- ///
- /// @param[in] exe_file_spec
- /// A file spec containing a basename, or a full path (directory
- /// and basename). If \a exe_file_spec contains only a filename
- /// (empty GetDirectory() value) then matching will be done
- /// solely based on the filenames and directories won't be
- /// compared. If \a exe_file_spec contains a filename and a
- /// directory, then both must match.
- ///
- /// @param[in] exe_arch_ptr
- /// If not nullptr then the architecture also needs to match, else
- /// the architectures will be compared.
- ///
- /// @return
- /// A shared pointer to a target object. The returned shared
- /// pointer will contain nullptr if no target objects have a
- /// executable whose full or partial path matches
- /// with a matching process ID.
- //------------------------------------------------------------------
- lldb::TargetSP
- FindTargetWithExecutableAndArchitecture(const FileSpec &exe_file_spec,
- const ArchSpec *exe_arch_ptr = nullptr) const;
-
- //------------------------------------------------------------------
- /// Find the target that contains a process with process ID \a
- /// pid.
- ///
- /// @param[in] pid
- /// The process ID to search our target list for.
- ///
- /// @return
- /// A shared pointer to a target object. The returned shared
- /// pointer will contain nullptr if no target objects own a process
- /// with a matching process ID.
- //------------------------------------------------------------------
- lldb::TargetSP
- FindTargetWithProcessID (lldb::pid_t pid) const;
-
- lldb::TargetSP
- FindTargetWithProcess (lldb_private::Process *process) const;
-
- lldb::TargetSP
- GetTargetSP (Target *target) const;
-
- //------------------------------------------------------------------
- /// Send an async interrupt to one or all processes.
- ///
- /// Find the target that contains the process with process ID \a
- /// pid and send a LLDB_EVENT_ASYNC_INTERRUPT event to the process's
- /// event queue.
- ///
- /// @param[in] pid
- /// The process ID to search our target list for, if \a pid is
- /// LLDB_INVALID_PROCESS_ID, then the interrupt will be sent to
- /// all processes.
- ///
- /// @return
- /// The number of async interrupts sent.
- //------------------------------------------------------------------
- uint32_t
- SendAsyncInterrupt (lldb::pid_t pid = LLDB_INVALID_PROCESS_ID);
-
- uint32_t
- SignalIfRunning (lldb::pid_t pid, int signo);
-
- uint32_t
- SetSelectedTarget (Target *target);
-
- lldb::TargetSP
- GetSelectedTarget ();
+ //------------------------------------------------------------------
+ /// Broadcaster event bits definitions.
+ //------------------------------------------------------------------
+ enum { eBroadcastBitInterrupt = (1 << 0) };
+
+ // These two functions fill out the Broadcaster interface:
+
+ static ConstString &GetStaticBroadcasterClass();
+
+ ConstString &GetBroadcasterClass() const override {
+ return GetStaticBroadcasterClass();
+ }
+
+ ~TargetList() override;
+
+ //------------------------------------------------------------------
+ /// Create a new Target.
+ ///
+ /// Clients must use this function to create a Target. This allows
+ /// a global list of targets to be maintained in a central location
+ /// so signal handlers and other global functions can use it to
+ /// locate an appropriate target to deliver asynchronous information
+ /// to.
+ ///
+ /// @param[in] debugger
+ /// The debugger to associate this target with
+ ///
+ /// @param[in] file_spec
+ /// The main executable file for a debug target. This value
+ /// can be nullptr and the file can be set later using:
+ /// Target::SetExecutableModule (ModuleSP&)
+ ///
+ /// @param[in] triple_cstr
+ /// A target triple string to be used for the target. This can
+ /// be nullptr if the triple is not known or when attaching to a
+ /// process.
+ ///
+ /// @param[in] get_dependent_modules
+ /// Track down the dependent modules for an executable and
+ /// load those into the module list.
+ ///
+ /// @param[in] platform_options
+ /// A pointer to the platform options to use when creating this
+ /// target. If this value is nullptr, then the currently selected
+ /// platform will be used.
+ ///
+ /// @param[out] target_sp
+ /// A shared pointer to a target that will be filled in if
+ /// this call is successful.
+ ///
+ /// @return
+ /// An error object that indicates success or failure
+ //------------------------------------------------------------------
+ Error CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path,
+ llvm::StringRef triple_str, bool get_dependent_modules,
+ const OptionGroupPlatform *platform_options,
+ lldb::TargetSP &target_sp);
+
+ //------------------------------------------------------------------
+ /// Create a new Target.
+ ///
+ /// Same as the function above, but used when you already know the
+ /// platform you will be using
+ //------------------------------------------------------------------
+ Error CreateTarget(Debugger &debugger, llvm::StringRef user_exe_path,
+ const ArchSpec &arch, bool get_dependent_modules,
+ lldb::PlatformSP &platform_sp, lldb::TargetSP &target_sp);
+
+ //------------------------------------------------------------------
+ /// Delete a Target object from the list.
+ ///
+ /// When clients are done with the Target objects, this function
+ /// should be called to release the memory associated with a target
+ /// object.
+ ///
+ /// @param[in] target_sp
+ /// The shared pointer to a target.
+ ///
+ /// @return
+ /// Returns \b true if the target was successfully removed from
+ /// from this target list, \b false otherwise. The client will
+ /// be left with the last remaining shared pointer to the target
+ /// in \a target_sp which can then be properly released.
+ //------------------------------------------------------------------
+ bool DeleteTarget(lldb::TargetSP &target_sp);
+
+ int GetNumTargets() const;
+
+ lldb::TargetSP GetTargetAtIndex(uint32_t index) const;
+
+ uint32_t GetIndexOfTarget(lldb::TargetSP target_sp) const;
+
+ //------------------------------------------------------------------
+ /// Find the target that contains has an executable whose path
+ /// matches \a exe_file_spec, and whose architecture matches
+ /// \a arch_ptr if arch_ptr is not nullptr.
+ ///
+ /// @param[in] exe_file_spec
+ /// A file spec containing a basename, or a full path (directory
+ /// and basename). If \a exe_file_spec contains only a filename
+ /// (empty GetDirectory() value) then matching will be done
+ /// solely based on the filenames and directories won't be
+ /// compared. If \a exe_file_spec contains a filename and a
+ /// directory, then both must match.
+ ///
+ /// @param[in] exe_arch_ptr
+ /// If not nullptr then the architecture also needs to match, else
+ /// the architectures will be compared.
+ ///
+ /// @return
+ /// A shared pointer to a target object. The returned shared
+ /// pointer will contain nullptr if no target objects have a
+ /// executable whose full or partial path matches
+ /// with a matching process ID.
+ //------------------------------------------------------------------
+ lldb::TargetSP FindTargetWithExecutableAndArchitecture(
+ const FileSpec &exe_file_spec,
+ const ArchSpec *exe_arch_ptr = nullptr) const;
+
+ //------------------------------------------------------------------
+ /// Find the target that contains a process with process ID \a
+ /// pid.
+ ///
+ /// @param[in] pid
+ /// The process ID to search our target list for.
+ ///
+ /// @return
+ /// A shared pointer to a target object. The returned shared
+ /// pointer will contain nullptr if no target objects own a process
+ /// with a matching process ID.
+ //------------------------------------------------------------------
+ lldb::TargetSP FindTargetWithProcessID(lldb::pid_t pid) const;
+
+ lldb::TargetSP FindTargetWithProcess(lldb_private::Process *process) const;
+
+ lldb::TargetSP GetTargetSP(Target *target) const;
+
+ //------------------------------------------------------------------
+ /// Send an async interrupt to one or all processes.
+ ///
+ /// Find the target that contains the process with process ID \a
+ /// pid and send a LLDB_EVENT_ASYNC_INTERRUPT event to the process's
+ /// event queue.
+ ///
+ /// @param[in] pid
+ /// The process ID to search our target list for, if \a pid is
+ /// LLDB_INVALID_PROCESS_ID, then the interrupt will be sent to
+ /// all processes.
+ ///
+ /// @return
+ /// The number of async interrupts sent.
+ //------------------------------------------------------------------
+ uint32_t SendAsyncInterrupt(lldb::pid_t pid = LLDB_INVALID_PROCESS_ID);
+
+ uint32_t SignalIfRunning(lldb::pid_t pid, int signo);
+
+ uint32_t SetSelectedTarget(Target *target);
+
+ lldb::TargetSP GetSelectedTarget();
protected:
- typedef std::vector<lldb::TargetSP> collection;
- //------------------------------------------------------------------
- // Member variables.
- //------------------------------------------------------------------
- collection m_target_list;
- lldb::TargetSP m_dummy_target_sp;
- mutable std::recursive_mutex m_target_list_mutex;
- uint32_t m_selected_target_idx;
+ typedef std::vector<lldb::TargetSP> collection;
+ //------------------------------------------------------------------
+ // Member variables.
+ //------------------------------------------------------------------
+ collection m_target_list;
+ lldb::TargetSP m_dummy_target_sp;
+ mutable std::recursive_mutex m_target_list_mutex;
+ uint32_t m_selected_target_idx;
private:
- lldb::TargetSP
- GetDummyTarget (lldb_private::Debugger &debugger);
-
- Error
- CreateDummyTarget (Debugger &debugger,
- const char *specified_arch_name,
- lldb::TargetSP &target_sp);
-
- Error
- CreateTargetInternal (Debugger &debugger,
- const char *user_exe_path,
- const char *triple_cstr,
- bool get_dependent_files,
- const OptionGroupPlatform *platform_options,
- lldb::TargetSP &target_sp,
- bool is_dummy_target);
-
- Error
- CreateTargetInternal (Debugger &debugger,
- const char *user_exe_path,
- const ArchSpec& arch,
- bool get_dependent_modules,
- lldb::PlatformSP &platform_sp,
- lldb::TargetSP &target_sp,
- bool is_dummy_target);
-
- DISALLOW_COPY_AND_ASSIGN (TargetList);
+ lldb::TargetSP GetDummyTarget(lldb_private::Debugger &debugger);
+
+ Error CreateDummyTarget(Debugger &debugger,
+ llvm::StringRef specified_arch_name,
+ lldb::TargetSP &target_sp);
+
+ Error CreateTargetInternal(Debugger &debugger, llvm::StringRef user_exe_path,
+ llvm::StringRef triple_str,
+ bool get_dependent_files,
+ const OptionGroupPlatform *platform_options,
+ lldb::TargetSP &target_sp, bool is_dummy_target);
+
+ Error CreateTargetInternal(Debugger &debugger, llvm::StringRef user_exe_path,
+ const ArchSpec &arch, bool get_dependent_modules,
+ lldb::PlatformSP &platform_sp,
+ lldb::TargetSP &target_sp, bool is_dummy_target);
+
+ DISALLOW_COPY_AND_ASSIGN(TargetList);
};
} // namespace lldb_private