1//===-- PlatformRemoteiOS.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_PlatformRemoteiOS_h_
11#define liblldb_PlatformRemoteiOS_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16#include "lldb/Host/FileSpec.h"
17
18// Project includes
19#include "PlatformDarwin.h"
20
21class PlatformRemoteiOS : public PlatformDarwin
22{
23public:
24
25    //------------------------------------------------------------
26    // Class Functions
27    //------------------------------------------------------------
28    static lldb_private::Platform*
29    CreateInstance (bool force, const lldb_private::ArchSpec *arch);
30
31    static void
32    Initialize ();
33
34    static void
35    Terminate ();
36
37    static lldb_private::ConstString
38    GetPluginNameStatic ();
39
40    static const char *
41    GetDescriptionStatic();
42
43    //------------------------------------------------------------
44    // Class Methods
45    //------------------------------------------------------------
46    PlatformRemoteiOS ();
47
48    virtual
49    ~PlatformRemoteiOS();
50
51    //------------------------------------------------------------
52    // lldb_private::PluginInterface functions
53    //------------------------------------------------------------
54    virtual lldb_private::ConstString
55    GetPluginName()
56    {
57        return GetPluginNameStatic();
58    }
59
60    virtual uint32_t
61    GetPluginVersion()
62    {
63        return 1;
64    }
65
66    //------------------------------------------------------------
67    // lldb_private::Platform functions
68    //------------------------------------------------------------
69    virtual lldb_private::Error
70    ResolveExecutable (const lldb_private::FileSpec &exe_file,
71                       const lldb_private::ArchSpec &arch,
72                       lldb::ModuleSP &module_sp,
73                       const lldb_private::FileSpecList *module_search_paths_ptr);
74
75    virtual const char *
76    GetDescription ()
77    {
78        return GetDescriptionStatic();
79    }
80
81    virtual void
82    GetStatus (lldb_private::Stream &strm);
83
84    virtual lldb_private::Error
85    GetSymbolFile (const lldb_private::FileSpec &platform_file,
86                   const lldb_private::UUID *uuid_ptr,
87                   lldb_private::FileSpec &local_file);
88
89    virtual lldb_private::Error
90    GetSharedModule (const lldb_private::ModuleSpec &module_spec,
91                     lldb::ModuleSP &module_sp,
92                     const lldb_private::FileSpecList *module_search_paths_ptr,
93                     lldb::ModuleSP *old_module_sp_ptr,
94                     bool *did_create_ptr);
95
96    virtual uint32_t
97    FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
98                   lldb_private::ProcessInstanceInfoList &process_infos);
99
100    virtual bool
101    GetProcessInfo (lldb::pid_t pid,
102                    lldb_private::ProcessInstanceInfo &proc_info);
103
104    virtual bool
105    GetSupportedArchitectureAtIndex (uint32_t idx,
106                                     lldb_private::ArchSpec &arch);
107
108protected:
109    struct SDKDirectoryInfo
110    {
111        SDKDirectoryInfo (const lldb_private::FileSpec &sdk_dir_spec);
112        lldb_private::FileSpec directory;
113        lldb_private::ConstString build;
114        uint32_t version_major;
115        uint32_t version_minor;
116        uint32_t version_update;
117        bool user_cached;
118    };
119    typedef std::vector<SDKDirectoryInfo> SDKDirectoryInfoCollection;
120    SDKDirectoryInfoCollection m_sdk_directory_infos;
121    std::string m_device_support_directory;
122    std::string m_device_support_directory_for_os_version;
123    std::string m_build_update;
124    uint32_t m_last_module_sdk_idx;
125
126    bool
127    UpdateSDKDirectoryInfosInNeeded();
128
129    const char *
130    GetDeviceSupportDirectory();
131
132    const char *
133    GetDeviceSupportDirectoryForOSVersion();
134
135    const SDKDirectoryInfo *
136    GetSDKDirectoryForLatestOSVersion ();
137
138    const SDKDirectoryInfo *
139    GetSDKDirectoryForCurrentOSVersion ();
140
141    static lldb_private::FileSpec::EnumerateDirectoryResult
142    GetContainedFilesIntoVectorOfStringsCallback (void *baton,
143                                                  lldb_private::FileSpec::FileType file_type,
144                                                  const lldb_private::FileSpec &file_spec);
145
146    uint32_t
147    FindFileInAllSDKs (const char *platform_file_path,
148                       lldb_private::FileSpecList &file_list);
149
150    bool
151    GetFileInSDK (const char *platform_file_path,
152                  uint32_t sdk_idx,
153                  lldb_private::FileSpec &local_file);
154
155    bool
156    GetFileInSDKRoot (const char *platform_file_path,
157                      const char *sdkroot_path,
158                      bool symbols_dirs_only,
159                      lldb_private::FileSpec &local_file);
160
161    uint32_t
162    FindFileInAllSDKs (const lldb_private::FileSpec &platform_file,
163                       lldb_private::FileSpecList &file_list);
164
165private:
166    DISALLOW_COPY_AND_ASSIGN (PlatformRemoteiOS);
167
168};
169
170#endif  // liblldb_PlatformRemoteiOS_h_
171