xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Platform/MacOSX/PlatformRemoteDarwinDevice.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1 //===-- PlatformRemoteDarwinDevice.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_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEDARWINDEVICE_H
10 #define LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEDARWINDEVICE_H
11 
12 #include "PlatformDarwinDevice.h"
13 #include "lldb/Host/FileSystem.h"
14 #include "lldb/Utility/ConstString.h"
15 #include "lldb/Utility/FileSpec.h"
16 #include "lldb/Utility/Status.h"
17 #include "lldb/Utility/XcodeSDK.h"
18 #include "lldb/lldb-forward.h"
19 #include "llvm/ADT/SmallVector.h"
20 #include "llvm/ADT/StringRef.h"
21 #include "llvm/Support/FileSystem.h"
22 #include "llvm/Support/VersionTuple.h"
23 
24 #include <mutex>
25 #include <string>
26 #include <vector>
27 
28 namespace lldb_private {
29 class FileSpecList;
30 class ModuleSpec;
31 class Process;
32 class Stream;
33 class Target;
34 class UUID;
35 
36 class PlatformRemoteDarwinDevice : public PlatformDarwinDevice {
37 public:
38   PlatformRemoteDarwinDevice();
39 
40   ~PlatformRemoteDarwinDevice() override;
41 
42   // Platform functions
43   Status
44   ResolveExecutable(const ModuleSpec &module_spec, lldb::ModuleSP &module_sp,
45                     const FileSpecList *module_search_paths_ptr) override;
46 
47   void GetStatus(Stream &strm) override;
48 
49   virtual Status GetSymbolFile(const FileSpec &platform_file,
50                                const UUID *uuid_ptr, FileSpec &local_file);
51 
52   Status GetSharedModule(const ModuleSpec &module_spec, Process *process,
53                          lldb::ModuleSP &module_sp,
54                          const FileSpecList *module_search_paths_ptr,
55                          llvm::SmallVectorImpl<lldb::ModuleSP> *old_modules,
56                          bool *did_create_ptr) override;
57 
58   void
AddClangModuleCompilationOptions(Target * target,std::vector<std::string> & options)59   AddClangModuleCompilationOptions(Target *target,
60                                    std::vector<std::string> &options) override {
61     return PlatformDarwin::AddClangModuleCompilationOptionsForSDKType(
62         target, options, XcodeSDK::Type::iPhoneOS);
63   }
64 
65 protected:
66   std::string m_build_update;
67   uint32_t m_last_module_sdk_idx = UINT32_MAX;
68   uint32_t m_connected_module_sdk_idx = UINT32_MAX;
69 
70   bool GetFileInSDK(const char *platform_file_path, uint32_t sdk_idx,
71                     FileSpec &local_file);
72 
73   uint32_t GetConnectedSDKIndex();
74 
75   // Get index of SDK in SDKDirectoryInfoCollection by its pointer and return
76   // UINT32_MAX if that SDK not found.
77   uint32_t GetSDKIndexBySDKDirectoryInfo(const SDKDirectoryInfo *sdk_info);
78 
79 private:
80   PlatformRemoteDarwinDevice(const PlatformRemoteDarwinDevice &) = delete;
81   const PlatformRemoteDarwinDevice &
82   operator=(const PlatformRemoteDarwinDevice &) = delete;
83 };
84 
85 } // namespace lldb_private
86 
87 #endif // LLDB_SOURCE_PLUGINS_PLATFORM_MACOSX_PLATFORMREMOTEDARWINDEVICE_H
88