xref: /freebsd/contrib/llvm-project/lldb/include/lldb/API/SBPlatform.h (revision 5f757f3ff9144b609b3c433dfd370cc6bdc191ad)
1 //===-- SBPlatform.h --------------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_API_SBPLATFORM_H
10 #define LLDB_API_SBPLATFORM_H
11 
12 #include "lldb/API/SBDefines.h"
13 #include "lldb/API/SBProcess.h"
14 #include "lldb/API/SBProcessInfoList.h"
15 
16 #include <functional>
17 
18 struct PlatformConnectOptions;
19 struct PlatformShellCommand;
20 class ProcessInstanceInfoMatch;
21 
22 namespace lldb {
23 
24 class SBAttachInfo;
25 class SBLaunchInfo;
26 
27 class LLDB_API SBPlatformConnectOptions {
28 public:
29   SBPlatformConnectOptions(const char *url);
30 
31   SBPlatformConnectOptions(const SBPlatformConnectOptions &rhs);
32 
33   ~SBPlatformConnectOptions();
34 
35   SBPlatformConnectOptions &operator=(const SBPlatformConnectOptions &rhs);
36 
37   const char *GetURL();
38 
39   void SetURL(const char *url);
40 
41   bool GetRsyncEnabled();
42 
43   void EnableRsync(const char *options, const char *remote_path_prefix,
44                    bool omit_remote_hostname);
45 
46   void DisableRsync();
47 
48   const char *GetLocalCacheDirectory();
49 
50   void SetLocalCacheDirectory(const char *path);
51 
52 protected:
53   PlatformConnectOptions *m_opaque_ptr;
54 };
55 
56 class LLDB_API SBPlatformShellCommand {
57 public:
58   SBPlatformShellCommand(const char *shell, const char *shell_command);
59   SBPlatformShellCommand(const char *shell_command);
60 
61   SBPlatformShellCommand(const SBPlatformShellCommand &rhs);
62 
63   SBPlatformShellCommand &operator=(const SBPlatformShellCommand &rhs);
64 
65   ~SBPlatformShellCommand();
66 
67   void Clear();
68 
69   const char *GetShell();
70 
71   void SetShell(const char *shell);
72 
73   const char *GetCommand();
74 
75   void SetCommand(const char *shell_command);
76 
77   const char *GetWorkingDirectory();
78 
79   void SetWorkingDirectory(const char *path);
80 
81   uint32_t GetTimeoutSeconds();
82 
83   void SetTimeoutSeconds(uint32_t sec);
84 
85   int GetSignal();
86 
87   int GetStatus();
88 
89   const char *GetOutput();
90 
91 protected:
92   friend class SBPlatform;
93 
94   PlatformShellCommand *m_opaque_ptr;
95 };
96 
97 class LLDB_API SBPlatform {
98 public:
99   SBPlatform();
100 
101   SBPlatform(const char *platform_name);
102 
103   SBPlatform(const SBPlatform &rhs);
104 
105   SBPlatform &operator=(const SBPlatform &rhs);
106 
107   ~SBPlatform();
108 
109   static SBPlatform GetHostPlatform();
110 
111   explicit operator bool() const;
112 
113   bool IsValid() const;
114 
115   void Clear();
116 
117   const char *GetWorkingDirectory();
118 
119   bool SetWorkingDirectory(const char *path);
120 
121   const char *GetName();
122 
123   SBError ConnectRemote(SBPlatformConnectOptions &connect_options);
124 
125   void DisconnectRemote();
126 
127   bool IsConnected();
128 
129   // The following functions will work if the platform is connected
130   const char *GetTriple();
131 
132   const char *GetHostname();
133 
134   const char *GetOSBuild();
135 
136   const char *GetOSDescription();
137 
138   uint32_t GetOSMajorVersion();
139 
140   uint32_t GetOSMinorVersion();
141 
142   uint32_t GetOSUpdateVersion();
143 
144   void SetSDKRoot(const char *sysroot);
145 
146   SBError Put(SBFileSpec &src, SBFileSpec &dst);
147 
148   SBError Get(SBFileSpec &src, SBFileSpec &dst);
149 
150   SBError Install(SBFileSpec &src, SBFileSpec &dst);
151 
152   SBError Run(SBPlatformShellCommand &shell_command);
153 
154   SBError Launch(SBLaunchInfo &launch_info);
155 
156   SBProcess Attach(SBAttachInfo &attach_info, const SBDebugger &debugger,
157                    SBTarget &target, SBError &error);
158 
159   SBProcessInfoList GetAllProcesses(SBError &error);
160 
161   SBError Kill(const lldb::pid_t pid);
162 
163   SBError
164   MakeDirectory(const char *path,
165                 uint32_t file_permissions = eFilePermissionsDirectoryDefault);
166 
167   uint32_t GetFilePermissions(const char *path);
168 
169   SBError SetFilePermissions(const char *path, uint32_t file_permissions);
170 
171   SBUnixSignals GetUnixSignals() const;
172 
173   /// Return the environment variables of the remote platform connection
174   /// process.
175   ///
176   /// \return
177   ///     An lldb::SBEnvironment object which is a copy of the platform's
178   ///     environment.
179   SBEnvironment GetEnvironment();
180 
181   /// Set a callback as an implementation for locating module in order to
182   /// implement own module cache system. For example, to leverage distributed
183   /// build system, to bypass pulling files from remote platform, or to search
184   /// symbol files from symbol servers. The target will call this callback to
185   /// get a module file and a symbol file, and it will fallback to the LLDB
186   /// implementation when this callback failed or returned non-existent file.
187   /// This callback can set either module_file_spec or symbol_file_spec, or both
188   /// module_file_spec and symbol_file_spec. The callback will be cleared if
189   /// nullptr or None is set.
190   SBError SetLocateModuleCallback(lldb::SBPlatformLocateModuleCallback callback,
191                                   void *callback_baton);
192 
193 protected:
194   friend class SBDebugger;
195   friend class SBTarget;
196 
197   lldb::PlatformSP GetSP() const;
198 
199   void SetSP(const lldb::PlatformSP &platform_sp);
200 
201   SBError ExecuteConnected(
202       const std::function<lldb_private::Status(const lldb::PlatformSP &)>
203           &func);
204 
205   lldb::PlatformSP m_opaque_sp;
206 };
207 
208 } // namespace lldb
209 
210 #endif // LLDB_API_SBPLATFORM_H
211