xref: /llvm-project/lldb/examples/python/templates/scripted_platform.py (revision 59f4267c8e0625c6583327be2db1608930f2d796)
16bff2d51SMed Ismail Bennanifrom abc import ABCMeta, abstractmethod
26bff2d51SMed Ismail Bennani
36bff2d51SMed Ismail Bennaniimport lldb
46bff2d51SMed Ismail Bennani
56bff2d51SMed Ismail Bennani
66bff2d51SMed Ismail Bennaniclass ScriptedPlatform(metaclass=ABCMeta):
76bff2d51SMed Ismail Bennani
86bff2d51SMed Ismail Bennani    """
96bff2d51SMed Ismail Bennani    The base class for a scripted platform.
106bff2d51SMed Ismail Bennani
116bff2d51SMed Ismail Bennani    Most of the base class methods are `@abstractmethod` that need to be
126bff2d51SMed Ismail Bennani    overwritten by the inheriting class.
136bff2d51SMed Ismail Bennani    """
146bff2d51SMed Ismail Bennani
156bff2d51SMed Ismail Bennani    processes = None
166bff2d51SMed Ismail Bennani
176bff2d51SMed Ismail Bennani    @abstractmethod
186bff2d51SMed Ismail Bennani    def __init__(self, exe_ctx, args):
196bff2d51SMed Ismail Bennani        """Construct a scripted platform.
206bff2d51SMed Ismail Bennani
216bff2d51SMed Ismail Bennani        Args:
226bff2d51SMed Ismail Bennani            exe_ctx (lldb.SBExecutionContext): The execution context for the scripted platform
236bff2d51SMed Ismail Bennani            args (lldb.SBStructuredData): A Dictionary holding arbitrary
246bff2d51SMed Ismail Bennani                key/value pairs used by the scripted platform.
256bff2d51SMed Ismail Bennani        """
266bff2d51SMed Ismail Bennani        processes = []
276bff2d51SMed Ismail Bennani
286bff2d51SMed Ismail Bennani    @abstractmethod
296bff2d51SMed Ismail Bennani    def list_processes(self):
306bff2d51SMed Ismail Bennani        """Get a list of processes that are running or that can be attached to on the platform.
316bff2d51SMed Ismail Bennani
32*59f4267cSMed Ismail Bennani        .. code-block:: python
33*59f4267cSMed Ismail Bennani
346bff2d51SMed Ismail Bennani            processes = {
356bff2d51SMed Ismail Bennani                420: {
366bff2d51SMed Ismail Bennani                        name: a.out,
376bff2d51SMed Ismail Bennani                        arch: aarch64,
386bff2d51SMed Ismail Bennani                        pid: 420,
396bff2d51SMed Ismail Bennani                        parent_pid: 42 (optional),
406bff2d51SMed Ismail Bennani                        uid: 0 (optional),
416bff2d51SMed Ismail Bennani                        gid: 0 (optional),
426bff2d51SMed Ismail Bennani                },
436bff2d51SMed Ismail Bennani            }
446bff2d51SMed Ismail Bennani
456bff2d51SMed Ismail Bennani        Returns:
466bff2d51SMed Ismail Bennani            Dict: The processes represented as a dictionary, with at least the
476bff2d51SMed Ismail Bennani                process ID, name, architecture. Optionally, the user can also
486bff2d51SMed Ismail Bennani                provide the parent process ID and the user and group IDs.
496bff2d51SMed Ismail Bennani                The dictionary can be empty.
506bff2d51SMed Ismail Bennani        """
516bff2d51SMed Ismail Bennani        pass
526bff2d51SMed Ismail Bennani
536bff2d51SMed Ismail Bennani    def get_process_info(self, pid):
546bff2d51SMed Ismail Bennani        """Get the dictionary describing the process.
556bff2d51SMed Ismail Bennani
566bff2d51SMed Ismail Bennani        Returns:
576bff2d51SMed Ismail Bennani            Dict: The dictionary of process info that matched process ID.
586bff2d51SMed Ismail Bennani            None if the process doesn't exists
596bff2d51SMed Ismail Bennani        """
606bff2d51SMed Ismail Bennani        pass
616bff2d51SMed Ismail Bennani
626bff2d51SMed Ismail Bennani    @abstractmethod
636bff2d51SMed Ismail Bennani    def attach_to_process(self, attach_info):
646bff2d51SMed Ismail Bennani        """Attach to a process.
656bff2d51SMed Ismail Bennani
666bff2d51SMed Ismail Bennani        Args:
676bff2d51SMed Ismail Bennani            attach_info (lldb.SBAttachInfo): The information related to attach to a process.
686bff2d51SMed Ismail Bennani
696bff2d51SMed Ismail Bennani        Returns:
706bff2d51SMed Ismail Bennani            lldb.SBError: A status object notifying if the attach succeeded.
716bff2d51SMed Ismail Bennani        """
726bff2d51SMed Ismail Bennani        pass
736bff2d51SMed Ismail Bennani
746bff2d51SMed Ismail Bennani    @abstractmethod
756bff2d51SMed Ismail Bennani    def launch_process(self, launch_info):
766bff2d51SMed Ismail Bennani        """Launch a process.
776bff2d51SMed Ismail Bennani
786bff2d51SMed Ismail Bennani        Args:
796bff2d51SMed Ismail Bennani            launch_info (lldb.SBLaunchInfo): The information related to the process launch.
806bff2d51SMed Ismail Bennani
816bff2d51SMed Ismail Bennani        Returns:
826bff2d51SMed Ismail Bennani            lldb.SBError: A status object notifying if the launch succeeded.
836bff2d51SMed Ismail Bennani        """
846bff2d51SMed Ismail Bennani        pass
856bff2d51SMed Ismail Bennani
866bff2d51SMed Ismail Bennani    @abstractmethod
876bff2d51SMed Ismail Bennani    def kill_process(self, pid):
886bff2d51SMed Ismail Bennani        """Kill a process.
896bff2d51SMed Ismail Bennani
906bff2d51SMed Ismail Bennani        Args:
916bff2d51SMed Ismail Bennani            pid (int): Process ID for the process to be killed.
926bff2d51SMed Ismail Bennani
936bff2d51SMed Ismail Bennani        Returns:
946bff2d51SMed Ismail Bennani            lldb.SBError: A status object notifying if the shutdown succeeded.
956bff2d51SMed Ismail Bennani        """
966bff2d51SMed Ismail Bennani        pass
97