xref: /llvm-project/lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1caea440aSMed Ismail Bennaniimport os, struct, signal
2caea440aSMed Ismail Bennani
3caea440aSMed Ismail Bennanifrom typing import Any, Dict
4caea440aSMed Ismail Bennani
5caea440aSMed Ismail Bennaniimport lldb
6caea440aSMed Ismail Bennanifrom lldb.plugins.scripted_process import ScriptedProcess
7caea440aSMed Ismail Bennanifrom lldb.plugins.scripted_process import ScriptedThread
8caea440aSMed Ismail Bennani
9*2238dcc3SJonas Devlieghere
10caea440aSMed Ismail Bennaniclass InvalidScriptedProcess(ScriptedProcess):
11bb4ccc66SMed Ismail Bennani    def __init__(self, exe_ctx: lldb.SBExecutionContext, args: lldb.SBStructuredData):
12bb4ccc66SMed Ismail Bennani        super().__init__(exe_ctx, args)
13d3e0f7e1SMed Ismail Bennani        self.threads[0] = InvalidScriptedThread(self, None)
14caea440aSMed Ismail Bennani
15*2238dcc3SJonas Devlieghere    def read_memory_at_address(
16*2238dcc3SJonas Devlieghere        self, addr: int, size: int, error: lldb.SBError
17*2238dcc3SJonas Devlieghere    ) -> lldb.SBData:
187e01924eSMed Ismail Bennani        error.SetErrorString("This is an invalid scripted process!")
197e01924eSMed Ismail Bennani        return lldb.SBData()
20caea440aSMed Ismail Bennani
21caea440aSMed Ismail Bennani    def get_loaded_images(self):
22caea440aSMed Ismail Bennani        return self.loaded_images
23caea440aSMed Ismail Bennani
24caea440aSMed Ismail Bennani    def get_process_id(self) -> int:
25caea440aSMed Ismail Bennani        return 666
26caea440aSMed Ismail Bennani
27caea440aSMed Ismail Bennani    def should_stop(self) -> bool:
28caea440aSMed Ismail Bennani        return True
29caea440aSMed Ismail Bennani
30caea440aSMed Ismail Bennani    def is_alive(self) -> bool:
31caea440aSMed Ismail Bennani        return True
32caea440aSMed Ismail Bennani
33caea440aSMed Ismail Bennani    def get_scripted_thread_plugin(self):
34caea440aSMed Ismail Bennani        return InvalidScriptedThread.__module__ + "." + InvalidScriptedThread.__name__
35caea440aSMed Ismail Bennani
36caea440aSMed Ismail Bennani
37caea440aSMed Ismail Bennaniclass InvalidScriptedThread(ScriptedThread):
38caea440aSMed Ismail Bennani    def __init__(self, process, args):
39caea440aSMed Ismail Bennani        super().__init__(process, args)
40caea440aSMed Ismail Bennani
41caea440aSMed Ismail Bennani    def get_thread_id(self) -> int:
42caea440aSMed Ismail Bennani        return 0x19
43caea440aSMed Ismail Bennani
44caea440aSMed Ismail Bennani    def get_name(self) -> str:
45caea440aSMed Ismail Bennani        return InvalidScriptedThread.__name__ + ".thread-1"
46caea440aSMed Ismail Bennani
47caea440aSMed Ismail Bennani    def get_state(self) -> int:
48caea440aSMed Ismail Bennani        return lldb.eStateInvalid
49caea440aSMed Ismail Bennani
50caea440aSMed Ismail Bennani    def get_stop_reason(self) -> Dict[str, Any]:
51*2238dcc3SJonas Devlieghere        return {"type": lldb.eStopReasonSignal, "data": {"signal": signal.SIGTRAP}}
52caea440aSMed Ismail Bennani
53caea440aSMed Ismail Bennani    def get_register_context(self) -> str:
54caea440aSMed Ismail Bennani        return None
55caea440aSMed Ismail Bennani
56*2238dcc3SJonas Devlieghere
57caea440aSMed Ismail Bennanidef __lldb_init_module(debugger, dict):
58*2238dcc3SJonas Devlieghere    if not "SKIP_SCRIPTED_PROCESS_LAUNCH" in os.environ:
59caea440aSMed Ismail Bennani        debugger.HandleCommand(
60*2238dcc3SJonas Devlieghere            "process launch -C %s.%s" % (__name__, InvalidScriptedProcess.__name__)
61*2238dcc3SJonas Devlieghere        )
62caea440aSMed Ismail Bennani    else:
63*2238dcc3SJonas Devlieghere        print(
64*2238dcc3SJonas Devlieghere            "Name of the class that will manage the scripted process: '%s.%s'"
65*2238dcc3SJonas Devlieghere            % (__name__, InvalidScriptedProcess.__name__)
66*2238dcc3SJonas Devlieghere        )
67