1//===-- PlatformDarwin.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_PlatformDarwin_h_
11#define liblldb_PlatformDarwin_h_
12
13// C Includes
14// C++ Includes
15// Other libraries and framework includes
16// Project includes
17#include "lldb/Target/Platform.h"
18
19class PlatformDarwin : public lldb_private::Platform
20{
21public:
22    PlatformDarwin (bool is_host);
23
24    virtual
25    ~PlatformDarwin();
26
27    //------------------------------------------------------------
28    // lldb_private::Platform functions
29    //------------------------------------------------------------
30    virtual lldb_private::Error
31    ResolveExecutable (const lldb_private::FileSpec &exe_file,
32                       const lldb_private::ArchSpec &arch,
33                       lldb::ModuleSP &module_sp,
34                       const lldb_private::FileSpecList *module_search_paths_ptr);
35
36    virtual lldb_private::Error
37    ResolveSymbolFile (lldb_private::Target &target,
38                       const lldb_private::ModuleSpec &sym_spec,
39                       lldb_private::FileSpec &sym_file);
40
41    lldb_private::FileSpecList
42    LocateExecutableScriptingResources (lldb_private::Target *target,
43                                        lldb_private::Module &module);
44
45    virtual lldb_private::Error
46    GetSharedModule (const lldb_private::ModuleSpec &module_spec,
47                     lldb::ModuleSP &module_sp,
48                     const lldb_private::FileSpecList *module_search_paths_ptr,
49                     lldb::ModuleSP *old_module_sp_ptr,
50                     bool *did_create_ptr);
51
52    virtual size_t
53    GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target,
54                                     lldb_private::BreakpointSite *bp_site);
55
56    virtual bool
57    GetRemoteOSVersion ();
58
59    virtual bool
60    GetRemoteOSBuildString (std::string &s);
61
62    virtual bool
63    GetRemoteOSKernelDescription (std::string &s);
64
65    // Remote Platform subclasses need to override this function
66    virtual lldb_private::ArchSpec
67    GetRemoteSystemArchitecture ();
68
69    virtual bool
70    IsConnected () const;
71
72    virtual lldb_private::Error
73    ConnectRemote (lldb_private::Args& args);
74
75    virtual lldb_private::Error
76    DisconnectRemote ();
77
78    virtual const char *
79    GetHostname ();
80
81    virtual const char *
82    GetUserName (uint32_t uid);
83
84    virtual const char *
85    GetGroupName (uint32_t gid);
86
87    virtual bool
88    GetProcessInfo (lldb::pid_t pid,
89                    lldb_private::ProcessInstanceInfo &proc_info);
90
91    virtual lldb::BreakpointSP
92    SetThreadCreationBreakpoint (lldb_private::Target &target);
93
94    virtual uint32_t
95    FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
96                   lldb_private::ProcessInstanceInfoList &process_infos);
97
98    virtual lldb_private::Error
99    LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
100
101    virtual lldb::ProcessSP
102    Attach (lldb_private::ProcessAttachInfo &attach_info,
103            lldb_private::Debugger &debugger,
104            lldb_private::Target *target,       // Can be NULL, if NULL create a new target, else use existing one
105            lldb_private::Listener &listener,
106            lldb_private::Error &error);
107
108    virtual bool
109    ModuleIsExcludedForNonModuleSpecificSearches (lldb_private::Target &target, const lldb::ModuleSP &module_sp);
110
111    virtual size_t
112    GetEnvironment (lldb_private::StringList &environment);
113
114    bool
115    ARMGetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
116
117    bool
118    x86GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
119
120protected:
121    lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote darwin OS
122    std::string m_developer_directory;
123
124    const char *
125    GetDeveloperDirectory();
126
127private:
128    DISALLOW_COPY_AND_ASSIGN (PlatformDarwin);
129
130};
131
132#endif  // liblldb_PlatformDarwin_h_
133