124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- TargetList.h --------------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_TargetList_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_TargetList_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Broadcaster.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Host/Mutex.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Target.h"
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass TargetList : public Broadcaster
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    friend class Debugger;
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Constructor
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// The constructor for the target list is private. Clients can
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// get ahold of of the one and only target list through the
3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// lldb_private::Debugger::GetSharedInstance().GetTargetList().
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @see static TargetList& lldb_private::Debugger::GetTargetList().
3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
375a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    TargetList(Debugger &debugger);
3824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Broadcaster event bits definitions.
4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
4424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    enum
4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        eBroadcastBitInterrupt = (1 << 0)
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    };
4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
505a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    // These two functions fill out the Broadcaster interface:
515a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
525a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    static ConstString &GetStaticBroadcasterClass ();
535a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
545a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    virtual ConstString &GetBroadcasterClass() const
555a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    {
565a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham        return GetStaticBroadcasterClass();
575a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    }
585a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham
595a15e6927b5b3234fb3e688717297ba6b5dd6ad7Jim Ingham    virtual ~TargetList();
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Create a new Target.
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Clients must use this function to create a Target. This allows
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// a global list of targets to be maintained in a central location
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// so signal handlers and other global functions can use it to
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// locate an appropriate target to deliver asynchronous information
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// to.
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
703e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// @param[in] debugger
713e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     The debugger to associate this target with
723e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] file_spec
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The main executable file for a debug target. This value
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     can be NULL and the file can be set later using:
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Target::SetExecutableModule (ModuleSP&)
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
783e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// @param[in] triple_cstr
793e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     A target triple string to be used for the target. This can
803e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     be NULL if the triple is not known or when attaching to a
813e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     process.
823e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///
833e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// @param[in] get_dependent_modules
843e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     Track down the dependent modules for an executable and
853e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     load those into the module list.
863e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///
873e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// @param[in] platform_options
883e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     A pointer to the platform options to use when creating this
893e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     target. If this value is NULL, then the currently selected
903e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     platform will be used.
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
923e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// @param[out] target_sp
933e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     A shared pointer to a target that will be filled in if
943e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     this call is successful.
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
973e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///     An error object that indicates success or failure
983e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    //------------------------------------------------------------------
993e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    Error
1003e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    CreateTarget (Debugger &debugger,
101ed0a0fbd021e44727469d6fa20cc337c58bd04c3Greg Clayton                  const char *user_exe_path,
1023e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton                  const char *triple_cstr,
1033e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton                  bool get_dependent_modules,
1043e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton                  const OptionGroupPlatform *platform_options,
1053e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton                  lldb::TargetSP &target_sp);
1063e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton
1073e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    //------------------------------------------------------------------
1083e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// Create a new Target.
1093e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    ///
1103e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// Same as the function above, but used when you already know the
1113e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton    /// platform you will be using
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Error
11463094e0bb161580564954dee512955c1c79d3476Greg Clayton    CreateTarget (Debugger &debugger,
115ed0a0fbd021e44727469d6fa20cc337c58bd04c3Greg Clayton                  const char *user_exe_path,
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  const ArchSpec& arch,
1173e8c25f62f92145b6fb699b379cbfe72b1245d4aGreg Clayton                  bool get_dependent_modules,
118b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton                  lldb::PlatformSP &platform_sp,
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                  lldb::TargetSP &target_sp);
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Delete a Target object from the list.
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// When clients are done with the Target objets, this function
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// should be called to release the memory associated with a target
12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// object.
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] target_sp
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The shared pointer to a target.
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     Returns \b true if the target was successfully removed from
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     from this target list, \b false otherwise. The client will
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     be left with the last remaining shared pointer to the target
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     in \a target_sp which can then be properly released.
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DeleteTarget (lldb::TargetSP &target_sp);
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumTargets () const;
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::TargetSP
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTargetAtIndex (uint32_t index) const;
145f92ddcc2fda5ca564acc37d2fecd4b577dfc2bdeJim Ingham
146f92ddcc2fda5ca564acc37d2fecd4b577dfc2bdeJim Ingham    uint32_t
147f92ddcc2fda5ca564acc37d2fecd4b577dfc2bdeJim Ingham    GetIndexOfTarget (lldb::TargetSP target_sp) const;
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find the target that contains has an executable whose path
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// matches \a exe_file_spec, and whose architecture matches
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// \a arch_ptr if arch_ptr is not NULL.
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] exe_file_spec
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A file spec containing a basename, or a full path (directory
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     and basename). If \a exe_file_spec contains only a filename
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     (empty GetDirectory() value) then matching will be done
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     solely based on the filenames and directories won't be
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     compared. If \a exe_file_spec contains a filename and a
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     directory, then both must match.
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] exe_arch_ptr
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     If not NULL then the architecture also needs to match, else
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     the architectures will be compared.
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A shared pointer to a target object. The returned shared
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     pointer will contain NULL if no target objects have a
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     executable whose full or partial path matches
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     with a matching process ID.
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::TargetSP
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindTargetWithExecutableAndArchitecture (const FileSpec &exe_file_spec,
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                             const ArchSpec *exe_arch_ptr = NULL) const;
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find the target that contains a process with process ID \a
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// pid.
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] pid
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The process ID to search our target list for.
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     A shared pointer to a target object. The returned shared
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     pointer will contain NULL if no target objects own a process
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     with a matching process ID.
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::TargetSP
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindTargetWithProcessID (lldb::pid_t pid) const;
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::TargetSP
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    FindTargetWithProcess (lldb_private::Process *process) const;
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::TargetSP
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTargetSP (Target *target) const;
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Send an async interrupt to one or all processes.
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// Find the target that contains the process with process ID \a
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// pid and send a LLDB_EVENT_ASYNC_INTERRUPT event to the process's
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// event queue.
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @param[in] pid
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The process ID to search our target list for, if \a pid is
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     LLDB_INVALID_PROCESS_ID, then the interrupt will be sent to
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     all processes.
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    /// @return
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ///     The number of async interrupts sent.
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SendAsyncInterrupt (lldb::pid_t pid = LLDB_INVALID_PROCESS_ID);
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SignalIfRunning (lldb::pid_t pid, int signo);
21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
219c833295baeec641086f536e78050388af36784f8Jim Ingham    SetSelectedTarget (Target *target);
22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::TargetSP
222c833295baeec641086f536e78050388af36784f8Jim Ingham    GetSelectedTarget ();
22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    typedef std::vector<lldb::TargetSP> collection;
22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
22824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Member variables.
22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
23024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    collection m_target_list;
23124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    mutable Mutex m_target_list_mutex;
232c833295baeec641086f536e78050388af36784f8Jim Ingham    uint32_t m_selected_target_idx;
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (TargetList);
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_TargetList_h_
240