blob: 9f39ccc254ea0d5b439f95e19f0c0b1338668caa [file] [log] [blame]
Stephen Wilsone6f9f662010-07-24 02:19:04 +00001//===-- 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"
Stephen Wilson84ffe702011-03-30 15:55:52 +000020#include "LinuxSignals.h"
Stephen Wilsone6f9f662010-07-24 02:19:04 +000021#include "ProcessMessage.h"
Johnny Chen30213ff2012-01-05 19:17:38 +000022#include "ProcessPOSIX.h"
Stephen Wilsone6f9f662010-07-24 02:19:04 +000023
24class ProcessMonitor;
25
26class ProcessLinux :
Johnny Chen30213ff2012-01-05 19:17:38 +000027 public ProcessPOSIX
Stephen Wilsone6f9f662010-07-24 02:19:04 +000028{
29public:
30 //------------------------------------------------------------------
31 // Static functions.
32 //------------------------------------------------------------------
Greg Clayton0c90ef42012-02-21 18:40:07 +000033 static lldb::ProcessSP
Stephen Wilsone6f9f662010-07-24 02:19:04 +000034 CreateInstance(lldb_private::Target& target,
Greg Clayton0c90ef42012-02-21 18:40:07 +000035 lldb_private::Listener &listener,
36 const lldb_private::FileSpec *);
Stephen Wilsone6f9f662010-07-24 02:19:04 +000037
38 static void
39 Initialize();
40
41 static void
42 Terminate();
43
Greg Clayton57abc5d2013-05-10 21:47:16 +000044 static lldb_private::ConstString
Stephen Wilsone6f9f662010-07-24 02:19:04 +000045 GetPluginNameStatic();
46
47 static const char *
48 GetPluginDescriptionStatic();
49
50 //------------------------------------------------------------------
51 // Constructors and destructors
52 //------------------------------------------------------------------
53 ProcessLinux(lldb_private::Target& target,
Ashok Thirumurthi4f01ff82013-07-17 16:06:12 +000054 lldb_private::Listener &listener,
55 lldb_private::FileSpec *core_file);
Stephen Wilsone6f9f662010-07-24 02:19:04 +000056
Ed Maste7dcb77d2013-08-30 13:11:30 +000057 virtual lldb_private::Error
58 DoDetach(bool keep_stopped);
59
Greg Claytonc3c0b0e2012-04-12 19:04:34 +000060 virtual bool
Andrew MacPherson6ef17b92014-03-25 21:40:04 +000061 DetachRequiresHalt() { return true; }
62
63 virtual bool
Johnny Chen30213ff2012-01-05 19:17:38 +000064 UpdateThreadList(lldb_private::ThreadList &old_thread_list, lldb_private::ThreadList &new_thread_list);
Michael Sartain9f822cd2013-07-31 23:27:46 +000065
Stephen Wilsone6f9f662010-07-24 02:19:04 +000066 //------------------------------------------------------------------
67 // PluginInterface protocol
68 //------------------------------------------------------------------
Greg Clayton57abc5d2013-05-10 21:47:16 +000069 virtual lldb_private::ConstString
Stephen Wilsone6f9f662010-07-24 02:19:04 +000070 GetPluginName();
71
Stephen Wilsone6f9f662010-07-24 02:19:04 +000072 virtual uint32_t
73 GetPluginVersion();
74
75 virtual void
76 GetPluginCommandHelp(const char *command, lldb_private::Stream *strm);
77
78 virtual lldb_private::Error
79 ExecutePluginCommand(lldb_private::Args &command,
80 lldb_private::Stream *strm);
81
82 virtual lldb_private::Log *
83 EnablePluginLogging(lldb_private::Stream *strm,
84 lldb_private::Args &command);
85
Matt Kopec841a5482013-05-17 22:21:08 +000086 //------------------------------------------------------------------
87 // Plug-in process overrides
88 //------------------------------------------------------------------
89 virtual lldb_private::UnixSignals &
90 GetUnixSignals ()
91 {
92 return m_linux_signals;
93 }
94
Ashok Thirumurthi4f01ff82013-07-17 16:06:12 +000095 virtual bool
96 CanDebug(lldb_private::Target &target, bool plugin_specified_by_name);
97
Andrew Kaylor93132f52013-05-28 23:04:25 +000098 //------------------------------------------------------------------
99 // ProcessPOSIX overrides
100 //------------------------------------------------------------------
101 virtual void
102 StopAllThreads(lldb::tid_t stop_tid);
103
Michael Sartain9f822cd2013-07-31 23:27:46 +0000104 virtual POSIXThread *
105 CreateNewPOSIXThread(lldb_private::Process &process, lldb::tid_t tid);
106
Stephen Wilsone6f9f662010-07-24 02:19:04 +0000107private:
Stephen Wilson84ffe702011-03-30 15:55:52 +0000108
109 /// Linux-specific signal set.
110 LinuxSignals m_linux_signals;
111
Ashok Thirumurthi4f01ff82013-07-17 16:06:12 +0000112 lldb_private::FileSpec *m_core_file;
113
Andrew Kaylor93132f52013-05-28 23:04:25 +0000114 // Flag to avoid recursion when stopping all threads.
115 bool m_stopping_threads;
Stephen Wilsone6f9f662010-07-24 02:19:04 +0000116};
117
Ed Masteea660072013-12-04 13:41:18 +0000118#endif // liblldb_ProcessLinux_H_