Home | History | Annotate | Download | only in Linux
      1 //===-- ProcessLinux.h ------------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef liblldb_ProcessLinux_H_
     11 #define liblldb_ProcessLinux_H_
     12 
     13 // C Includes
     14 
     15 // C++ Includes
     16 #include <queue>
     17 
     18 // Other libraries and framework includes
     19 #include "lldb/Target/Process.h"
     20 #include "LinuxSignals.h"
     21 #include "ProcessMessage.h"
     22 #include "ProcessPOSIX.h"
     23 
     24 class ProcessMonitor;
     25 
     26 class ProcessLinux :
     27     public ProcessPOSIX
     28 {
     29 public:
     30     //------------------------------------------------------------------
     31     // Static functions.
     32     //------------------------------------------------------------------
     33     static lldb::ProcessSP
     34     CreateInstance(lldb_private::Target& target,
     35                    lldb_private::Listener &listener,
     36                    const lldb_private::FileSpec *);
     37 
     38     static void
     39     Initialize();
     40 
     41     static void
     42     Terminate();
     43 
     44     static lldb_private::ConstString
     45     GetPluginNameStatic();
     46 
     47     static const char *
     48     GetPluginDescriptionStatic();
     49 
     50     //------------------------------------------------------------------
     51     // Constructors and destructors
     52     //------------------------------------------------------------------
     53     ProcessLinux(lldb_private::Target& target,
     54                  lldb_private::Listener &listener,
     55                  lldb_private::FileSpec *core_file);
     56 
     57     virtual bool
     58     UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list);
     59 
     60     //------------------------------------------------------------------
     61     // PluginInterface protocol
     62     //------------------------------------------------------------------
     63     virtual lldb_private::ConstString
     64     GetPluginName();
     65 
     66     virtual uint32_t
     67     GetPluginVersion();
     68 
     69     virtual void
     70     GetPluginCommandHelp(const char *command, lldb_private::Stream *strm);
     71 
     72     virtual lldb_private::Error
     73     ExecutePluginCommand(lldb_private::Args &command,
     74                          lldb_private::Stream *strm);
     75 
     76     virtual lldb_private::Log *
     77     EnablePluginLogging(lldb_private::Stream *strm,
     78                         lldb_private::Args &command);
     79 
     80     //------------------------------------------------------------------
     81     // Plug-in process overrides
     82     //------------------------------------------------------------------
     83     virtual lldb_private::UnixSignals &
     84     GetUnixSignals ()
     85     {
     86         return m_linux_signals;
     87     }
     88 
     89     virtual bool
     90     CanDebug(lldb_private::Target &target, bool plugin_specified_by_name);
     91 
     92     //------------------------------------------------------------------
     93     // ProcessPOSIX overrides
     94     //------------------------------------------------------------------
     95     virtual void
     96     StopAllThreads(lldb::tid_t stop_tid);
     97 
     98     virtual POSIXThread *
     99     CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);
    100 
    101 private:
    102 
    103     /// Linux-specific signal set.
    104     LinuxSignals m_linux_signals;
    105 
    106     lldb_private::FileSpec *m_core_file;
    107 
    108     // Flag to avoid recursion when stopping all threads.
    109     bool m_stopping_threads;
    110 };
    111 
    112 #endif  // liblldb_MacOSXProcess_H_
    113