1e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//===-- PlatformLinux.h -----------------------------------------*- C++ -*-===//
2e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//
3e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//                     The LLVM Compiler Infrastructure
4e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//
5e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// This file is distributed under the University of Illinois Open Source
6e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// License. See LICENSE.TXT for details.
7e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//
8e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton//===----------------------------------------------------------------------===//
9e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
10e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#ifndef liblldb_PlatformLinux_h_
11e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#define liblldb_PlatformLinux_h_
12e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
13e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// C Includes
14e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// C++ Includes
15e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// Other libraries and framework includes
16e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton// Project includes
17e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#include "lldb/Target/Platform.h"
18e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
19e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Claytonnamespace lldb_private {
20e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
21e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    class PlatformLinux : public Platform
22e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    {
23e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    public:
24e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
25e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        static void
26e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        Initialize ();
27e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
28e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        static void
29e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        Terminate ();
30e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
3148a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton        PlatformLinux (bool is_host);
32e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
33e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        virtual
34e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        ~PlatformLinux();
35e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
36e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        //------------------------------------------------------------
37e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        // lldb_private::PluginInterface functions
38e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        //------------------------------------------------------------
393600d497832c398ffafcba1935389125e15683a3Stephen Wilson        static Platform *
40b1db658333cdebca31a128be95e926d80c3c7796Greg Clayton        CreateInstance (bool force, const lldb_private::ArchSpec *arch);
413600d497832c398ffafcba1935389125e15683a3Stephen Wilson
420e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        static lldb_private::ConstString
430e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        GetPluginNameStatic (bool is_host);
4448a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton
4548a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton        static const char *
460e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        GetPluginDescriptionStatic (bool is_host);
473600d497832c398ffafcba1935389125e15683a3Stephen Wilson
480e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        virtual lldb_private::ConstString
490e191607adcb0ea8ebd06c278be648a7f5c0097fGreg Clayton        GetPluginName();
50e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
51e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        virtual uint32_t
52e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        GetPluginVersion()
53e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        {
54e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton            return 1;
55e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        }
56e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
57e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        //------------------------------------------------------------
58e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        // lldb_private::Platform functions
59e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        //------------------------------------------------------------
60e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        virtual Error
61e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        ResolveExecutable (const FileSpec &exe_file,
62e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton                           const ArchSpec &arch,
63a605c64524e6bb1e43de4ca0ea95967a596f08ddGreg Clayton                           lldb::ModuleSP &module_sp,
64a605c64524e6bb1e43de4ca0ea95967a596f08ddGreg Clayton                           const FileSpecList *module_search_paths_ptr);
65e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
663600d497832c398ffafcba1935389125e15683a3Stephen Wilson        virtual const char *
673600d497832c398ffafcba1935389125e15683a3Stephen Wilson        GetDescription ()
683600d497832c398ffafcba1935389125e15683a3Stephen Wilson        {
6948a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton            return GetPluginDescriptionStatic(IsHost());
703600d497832c398ffafcba1935389125e15683a3Stephen Wilson        }
713600d497832c398ffafcba1935389125e15683a3Stephen Wilson
723600d497832c398ffafcba1935389125e15683a3Stephen Wilson        virtual void
733600d497832c398ffafcba1935389125e15683a3Stephen Wilson        GetStatus (Stream &strm);
743600d497832c398ffafcba1935389125e15683a3Stephen Wilson
75e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        virtual Error
76f4aad907d1d186d6410575bb5d99fb76910c1fe9Stephen Wilson        GetFile (const FileSpec &platform_file,
77f4aad907d1d186d6410575bb5d99fb76910c1fe9Stephen Wilson                 const UUID* uuid, FileSpec &local_file);
78e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
79e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        virtual bool
800b0e3fc7fc077a79293f6780fc63afa4ab787e83Johnny Chen        GetProcessInfo (lldb::pid_t pid, ProcessInstanceInfo &proc_info);
81e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
82e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        virtual bool
83e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        GetSupportedArchitectureAtIndex (uint32_t idx, ArchSpec &arch);
84e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
853600d497832c398ffafcba1935389125e15683a3Stephen Wilson        virtual size_t
863600d497832c398ffafcba1935389125e15683a3Stephen Wilson        GetSoftwareBreakpointTrapOpcode (Target &target,
873600d497832c398ffafcba1935389125e15683a3Stephen Wilson                                         BreakpointSite *bp_site);
883600d497832c398ffafcba1935389125e15683a3Stephen Wilson
8948a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton        virtual lldb_private::Error
9048a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton        LaunchProcess (lldb_private::ProcessLaunchInfo &launch_info);
9148a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton
920b0e3fc7fc077a79293f6780fc63afa4ab787e83Johnny Chen        virtual lldb::ProcessSP
930a66c059da5a4d91aa81c2bbe5512a96e0817c34Peter Collingbourne        Attach(ProcessAttachInfo &attach_info, Debugger &debugger,
940a66c059da5a4d91aa81c2bbe5512a96e0817c34Peter Collingbourne               Target *target, Listener &listener, Error &error);
950b0e3fc7fc077a79293f6780fc63afa4ab787e83Johnny Chen
967e9964783acae183c23a7ea470cedd64472eb233Johnny Chen        // Linux processes can not be launched by spawning and attaching.
97df2ac386095d5bc1953fb1216852d452d40d5c72Greg Clayton        virtual bool
98df2ac386095d5bc1953fb1216852d452d40d5c72Greg Clayton        CanDebugProcess ()
99df2ac386095d5bc1953fb1216852d452d40d5c72Greg Clayton        {
100df2ac386095d5bc1953fb1216852d452d40d5c72Greg Clayton            return false;
101df2ac386095d5bc1953fb1216852d452d40d5c72Greg Clayton        }
102df2ac386095d5bc1953fb1216852d452d40d5c72Greg Clayton
103e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    protected:
10448a202dd3ac1fb4ee6709074448dc4d221fa020cGreg Clayton        lldb::PlatformSP m_remote_platform_sp; // Allow multiple ways to connect to a remote darwin OS
105e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
106e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    private:
107e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton        DISALLOW_COPY_AND_ASSIGN (PlatformLinux);
108e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton    };
109e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton} // namespace lldb_private
110e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton
111e4b9c1fb338ee1ada72e6a3c198afb342d68c5c1Greg Clayton#endif  // liblldb_PlatformLinux_h_
112