aboutsummaryrefslogtreecommitdiff
path: root/source/Plugins/Platform/MacOSX/PlatformDarwin.h
blob: b280b35da65518511c193cb054e5f51a4a7ea54e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
//===-- PlatformDarwin.h ----------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#ifndef liblldb_PlatformDarwin_h_
#define liblldb_PlatformDarwin_h_

// C Includes
// C++ Includes
#include <string>

// Other libraries and framework includes
// Project includes
#include "lldb/Host/FileSpec.h"
#include "Plugins/Platform/POSIX/PlatformPOSIX.h"

class PlatformDarwin : public PlatformPOSIX
{
public:
    PlatformDarwin(bool is_host);

    ~PlatformDarwin() override;

    //------------------------------------------------------------
    // lldb_private::Platform functions
    //------------------------------------------------------------
    lldb_private::Error
    ResolveExecutable (const lldb_private::ModuleSpec &module_spec,
                       lldb::ModuleSP &module_sp,
                       const lldb_private::FileSpecList *module_search_paths_ptr) override;

    lldb_private::Error
    ResolveSymbolFile (lldb_private::Target &target,
                       const lldb_private::ModuleSpec &sym_spec,
                       lldb_private::FileSpec &sym_file) override;

    lldb_private::FileSpecList
    LocateExecutableScriptingResources (lldb_private::Target *target,
                                        lldb_private::Module &module,
                                        lldb_private::Stream* feedback_stream) override;

    lldb_private::Error
    GetSharedModule (const lldb_private::ModuleSpec &module_spec,
                     lldb_private::Process* process,
                     lldb::ModuleSP &module_sp,
                     const lldb_private::FileSpecList *module_search_paths_ptr,
                     lldb::ModuleSP *old_module_sp_ptr,
                     bool *did_create_ptr) override;

    size_t
    GetSoftwareBreakpointTrapOpcode (lldb_private::Target &target, 
                                     lldb_private::BreakpointSite *bp_site) override;

    bool
    GetProcessInfo (lldb::pid_t pid, 
                    lldb_private::ProcessInstanceInfo &proc_info) override;
    
    lldb::BreakpointSP
    SetThreadCreationBreakpoint (lldb_private::Target &target) override;

    uint32_t
    FindProcesses (const lldb_private::ProcessInstanceInfoMatch &match_info,
                   lldb_private::ProcessInstanceInfoList &process_infos) override;

    bool
    ModuleIsExcludedForUnconstrainedSearches(lldb_private::Target &target,
						 const lldb::ModuleSP &module_sp) override;

    bool
    ARMGetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
    
    bool 
    x86GetSupportedArchitectureAtIndex (uint32_t idx, lldb_private::ArchSpec &arch);
    
    int32_t
    GetResumeCountForLaunchInfo (lldb_private::ProcessLaunchInfo &launch_info) override;

    void
    CalculateTrapHandlerSymbolNames () override;
    
    bool
    GetOSVersion (uint32_t &major,
                  uint32_t &minor,
                  uint32_t &update,
                  lldb_private::Process *process = nullptr) override;

    bool
    SupportsModules () override { return true; }
    
    lldb_private::ConstString
    GetFullNameForDylib (lldb_private::ConstString basename) override;

    lldb_private::FileSpec
    LocateExecutable (const char *basename) override;

protected:
    void
    ReadLibdispatchOffsetsAddress (lldb_private::Process *process);

    void
    ReadLibdispatchOffsets (lldb_private::Process *process);

    virtual lldb_private::Error
    GetSharedModuleWithLocalCache (const lldb_private::ModuleSpec &module_spec,
                                   lldb::ModuleSP &module_sp,
                                   const lldb_private::FileSpecList *module_search_paths_ptr,
                                   lldb::ModuleSP *old_module_sp_ptr,
                                   bool *did_create_ptr);

    enum class SDKType {
        MacOSX = 0,
        iPhoneSimulator,
        iPhoneOS,
    };
    
    static bool
    SDKSupportsModules (SDKType sdk_type, uint32_t major, uint32_t minor, uint32_t micro);
    
    static bool
    SDKSupportsModules (SDKType desired_type, const lldb_private::FileSpec &sdk_path);
    
    struct SDKEnumeratorInfo {
        lldb_private::FileSpec  found_path;
        SDKType                 sdk_type;
    };
    
    static lldb_private::FileSpec::EnumerateDirectoryResult
    DirectoryEnumerator(void *baton,
                        lldb_private::FileSpec::FileType file_type,
                        const lldb_private::FileSpec &spec);
    
    static lldb_private::FileSpec
    FindSDKInXcodeForModules (SDKType sdk_type,
                              const lldb_private::FileSpec &sdks_spec);

    static lldb_private::FileSpec
    GetSDKDirectoryForModules (PlatformDarwin::SDKType sdk_type);

    void
    AddClangModuleCompilationOptionsForSDKType (lldb_private::Target *target, std::vector<std::string> &options, SDKType sdk_type);

    std::string                 m_developer_directory;

    const char *
    GetDeveloperDirectory();
    
private:
    DISALLOW_COPY_AND_ASSIGN (PlatformDarwin);
};

#endif // liblldb_PlatformDarwin_h_