137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//===-- OperatingSystem.h ----------------------------------------------*- C++ -*-===//
237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//
337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//                     The LLVM Compiler Infrastructure
437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//
537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton// This file is distributed under the University of Illinois Open Source
637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton// License. See LICENSE.TXT for details.
737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//
837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//===----------------------------------------------------------------------===//
937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
1037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton#ifndef liblldb_OperatingSystem_h_
1137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton#define liblldb_OperatingSystem_h_
1237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
1337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton// C Includes
1437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton// C++ Includes
1537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton// Other libraries and framework includes
1637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
1737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton#include "lldb/lldb-private.h"
1837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton#include "lldb/Core/PluginInterface.h"
1937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
2037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Claytonnamespace lldb_private {
2137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
2237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//----------------------------------------------------------------------
2337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// @class OperatingSystem OperatingSystem.h "lldb/Target/OperatingSystem.h"
2437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// @brief A plug-in interface definition class for halted OS helpers.
2537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton///
2637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// Halted OS plug-ins can be used by any process to locate and create
2737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// OS objects, like threads, during the lifetime of a debug session.
2837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// This is commonly used when attaching to an operating system that is
2937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// halted, such as when debugging over JTAG or connecting to low level
3037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton/// kernel debug services.
3137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton//----------------------------------------------------------------------
3237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
3337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Claytonclass OperatingSystem :
3437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    public PluginInterface
3537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
3637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton{
3737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Claytonpublic:
3837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
3937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    /// Find a halted OS plugin for a given process.
4037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///
4137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    /// Scans the installed OperatingSystem plug-ins and tries to find
4237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    /// an instance that matches the current target triple and
4337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    /// executable.
4437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///
4537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    /// @param[in] process
4637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///     The process for which to try and locate a halted OS
4737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///     plug-in instance.
4837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///
4937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    /// @param[in] plugin_name
5037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///     An optional name of a specific halted OS plug-in that
5137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ///     should be used. If NULL, pick the best plug-in.
5237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
5337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    static OperatingSystem*
5437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    FindPlugin (Process *process, const char *plugin_name);
5537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
5637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
5737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    // Class Methods
5837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
5937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    OperatingSystem (Process *process);
6037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
6137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    virtual
6237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ~OperatingSystem();
6337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
6437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
6537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    // Plug-in Methods
6637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
67ae932359b80098532f3c3766fa9e6527352fbb67Greg Clayton    virtual bool
684e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor    UpdateThreadList (ThreadList &old_thread_list,
694e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor                      ThreadList &real_thread_list,
704e75e3533bddc7cf7264c6c7f7b4d812d4466e96Andrew Kaylor                      ThreadList &new_thread_list) = 0;
7137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
7237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    virtual void
7337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    ThreadWasSelected (Thread *thread) = 0;
7437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
7537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    virtual lldb::RegisterContextSP
7691a9f2127fa8b8e90f6ea1676d11f97f44ce22ddGreg Clayton    CreateRegisterContextForThread (Thread *thread, lldb::addr_t reg_data_addr) = 0;
7737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
7837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    virtual lldb::StopInfoSP
7937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    CreateThreadStopReason (Thread *thread) = 0;
8037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
8152ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton    virtual lldb::ThreadSP
8252ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton    CreateThread (lldb::tid_t tid, lldb::addr_t context)
8352ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton    {
8452ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton        return lldb::ThreadSP();
8552ebc0aab1fdecb634801deceeddd71a14c2148cGreg Clayton    }
86a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton
87a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton    virtual bool
88a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton    IsOperatingSystemPluginThread (const lldb::ThreadSP &thread_sp);
89a46013bde54626b68cd2013b108f73a205f4b29aGreg Clayton
9037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Claytonprotected:
9137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
9237f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    // Member variables.
9337f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    //------------------------------------------------------------------
9437f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    Process* m_process; ///< The process that this dynamic loader plug-in is tracking.
9537f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Claytonprivate:
9637f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton    DISALLOW_COPY_AND_ASSIGN (OperatingSystem);
9737f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton};
9837f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
9937f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton} // namespace lldb_private
10037f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton
10137f962e785be99dc4f0c5e9d02416992ff03bbd0Greg Clayton#endif // #ifndef liblldb_OperatingSystem_h_
102