1257752Semaste//===-- PlatformPOSIX.h -----------------------------------------*- C++ -*-===//
2257752Semaste//
3257752Semaste//                     The LLVM Compiler Infrastructure
4257752Semaste//
5257752Semaste// This file is distributed under the University of Illinois Open Source
6257752Semaste// License. See LICENSE.TXT for details.
7257752Semaste//
8257752Semaste//===----------------------------------------------------------------------===//
9257752Semaste
10257752Semaste#ifndef liblldb_PlatformPOSIX_h_
11257752Semaste#define liblldb_PlatformPOSIX_h_
12257752Semaste
13257752Semaste// C Includes
14257752Semaste// C++ Includes
15257752Semaste
16257752Semaste#include <memory>
17257752Semaste
18257752Semaste// Other libraries and framework includes
19257752Semaste// Project includes
20257752Semaste#include "lldb/Interpreter/Options.h"
21257752Semaste#include "lldb/Target/Platform.h"
22257752Semaste
23257752Semasteclass PlatformPOSIX : public lldb_private::Platform
24257752Semaste{
25257752Semastepublic:
26257752Semaste    PlatformPOSIX (bool is_host);
27257752Semaste
28257752Semaste    virtual
29257752Semaste    ~PlatformPOSIX();
30257752Semaste
31257752Semaste    //------------------------------------------------------------
32257752Semaste    // lldb_private::Platform functions
33257752Semaste    //------------------------------------------------------------
34257752Semaste    virtual lldb_private::OptionGroupOptions*
35257752Semaste    GetConnectionOptions (lldb_private::CommandInterpreter& interpreter);
36257752Semaste
37257752Semaste    virtual lldb_private::Error
38257752Semaste    PutFile (const lldb_private::FileSpec& source,
39257752Semaste             const lldb_private::FileSpec& destination,
40257752Semaste             uint32_t uid = UINT32_MAX,
41257752Semaste             uint32_t gid = UINT32_MAX);
42257752Semaste
43257752Semaste    virtual lldb::user_id_t
44257752Semaste    OpenFile (const lldb_private::FileSpec& file_spec,
45257752Semaste              uint32_t flags,
46263367Semaste              uint32_t mode,
47257752Semaste              lldb_private::Error &error);
48257752Semaste
49257752Semaste    virtual bool
50257752Semaste    CloseFile (lldb::user_id_t fd,
51257752Semaste               lldb_private::Error &error);
52257752Semaste
53257752Semaste    virtual uint64_t
54257752Semaste    ReadFile (lldb::user_id_t fd,
55257752Semaste              uint64_t offset,
56257752Semaste              void *dst,
57257752Semaste              uint64_t dst_len,
58257752Semaste              lldb_private::Error &error);
59257752Semaste
60257752Semaste    virtual uint64_t
61257752Semaste    WriteFile (lldb::user_id_t fd,
62257752Semaste               uint64_t offset,
63257752Semaste               const void* src,
64257752Semaste               uint64_t src_len,
65257752Semaste               lldb_private::Error &error);
66257752Semaste
67257752Semaste    virtual lldb::user_id_t
68257752Semaste    GetFileSize (const lldb_private::FileSpec& file_spec);
69257752Semaste
70257752Semaste    virtual lldb_private::Error
71263367Semaste    CreateSymlink(const char *src, const char *dst);
72263367Semaste
73263367Semaste    virtual lldb_private::Error
74257752Semaste    GetFile (const lldb_private::FileSpec& source,
75257752Semaste             const lldb_private::FileSpec& destination);
76257752Semaste
77263367Semaste    virtual lldb_private::ConstString
78263367Semaste    GetRemoteWorkingDirectory();
79263367Semaste
80263367Semaste    virtual bool
81263367Semaste    SetRemoteWorkingDirectory(const lldb_private::ConstString &path);
82263367Semaste
83257752Semaste    virtual lldb_private::Error
84257752Semaste    RunShellCommand (const char *command,           // Shouldn't be NULL
85257752Semaste                     const char *working_dir,       // Pass NULL to use the current working directory
86257752Semaste                     int *status_ptr,               // Pass NULL if you don't want the process exit status
87257752Semaste                     int *signo_ptr,                // Pass NULL if you don't want the signal that caused the process to exit
88257752Semaste                     std::string *command_output,   // Pass NULL if you don't want the command output
89257752Semaste                     uint32_t timeout_sec);         // Timeout in seconds to wait for shell program to finish
90257752Semaste
91263367Semaste    virtual lldb_private::Error
92263367Semaste    MakeDirectory (const char *path, uint32_t mode);
93257752Semaste
94263367Semaste    virtual lldb_private::Error
95263367Semaste    GetFilePermissions (const char *path, uint32_t &file_permissions);
96263367Semaste
97263367Semaste    virtual lldb_private::Error
98263367Semaste    SetFilePermissions (const char *path, uint32_t file_permissions);
99263367Semaste
100257752Semaste    virtual bool
101257752Semaste    GetFileExists (const lldb_private::FileSpec& file_spec);
102257752Semaste
103263367Semaste    virtual lldb_private::Error
104263367Semaste    Unlink (const char *path);
105257752Semaste
106257752Semaste    virtual std::string
107257752Semaste    GetPlatformSpecificConnectionInformation();
108257752Semaste
109257752Semaste    virtual bool
110257752Semaste    CalculateMD5 (const lldb_private::FileSpec& file_spec,
111257752Semaste                  uint64_t &low,
112257752Semaste                  uint64_t &high);
113257752Semaste
114269024Semaste    virtual void
115269024Semaste    CalculateTrapHandlerSymbolNames ();
116269024Semaste
117257752Semasteprotected:
118269024Semaste    std::unique_ptr<lldb_private::OptionGroupOptions> m_options;
119257752Semaste
120257752Semaste    lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote POSIX-compliant OS
121257752Semaste
122257752Semasteprivate:
123257752Semaste    DISALLOW_COPY_AND_ASSIGN (PlatformPOSIX);
124257752Semaste
125257752Semaste};
126257752Semaste
127257752Semaste#endif  // liblldb_PlatformPOSIX_h_
128