diff options
| author | Med Ismail Bennani <medismail.bennani@gmail.com> | 2021-12-01 18:56:29 -0800 |
|---|---|---|
| committer | Med Ismail Bennani <medismail.bennani@gmail.com> | 2021-12-06 16:11:59 -0800 |
| commit | caea440a11e47bf86b0e43feb28a9287e4fbe3f8 (patch) | |
| tree | b21ee6f95800aea549f5cd7029ffba3a999d5766 /lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py | |
| parent | 6fef466779cafea30b82780c481896de187596c6 (diff) | |
[lldb/plugins] Add arm64(e) support to ScriptedProcess
This patch adds support for arm64(e) targets to ScriptedProcess, by
providing the `DynamicRegisterInfo` to the base `lldb.ScriptedThread` class.
This allows create and debugging ScriptedProcess on Apple Silicon
hardware as well as Apple mobile devices.
It also replace the C++ asserts on `ScriptedThread::GetDynamicRegisterInfo`
by some error logging, re-enables `TestScriptedProcess` for arm64
Darwin platforms and adds a new invalid Scripted Thread test.
rdar://85892451
Differential Revision: https://reviews.llvm.org/D114923
Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
Diffstat (limited to 'lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py')
| -rw-r--r-- | lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py b/lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py new file mode 100644 index 000000000000..7dfc55bc30c5 --- /dev/null +++ b/lldb/test/API/functionalities/scripted_process/invalid_scripted_process.py @@ -0,0 +1,84 @@ +import os,struct, signal + +from typing import Any, Dict + +import lldb +from lldb.plugins.scripted_process import ScriptedProcess +from lldb.plugins.scripted_process import ScriptedThread + +class InvalidScriptedProcess(ScriptedProcess): + def __init__(self, target: lldb.SBTarget, args : lldb.SBStructuredData): + super().__init__(target, args) + + def get_memory_region_containing_address(self, addr: int) -> lldb.SBMemoryRegionInfo: + return None + + def get_thread_with_id(self, tid: int): + return {} + + def get_registers_for_thread(self, tid: int): + return {} + + def read_memory_at_address(self, addr: int, size: int) -> lldb.SBData: + return None + + def get_loaded_images(self): + return self.loaded_images + + def get_process_id(self) -> int: + return 666 + + def should_stop(self) -> bool: + return True + + def is_alive(self) -> bool: + return True + + def get_scripted_thread_plugin(self): + return InvalidScriptedThread.__module__ + "." + InvalidScriptedThread.__name__ + + +class InvalidScriptedThread(ScriptedThread): + def __init__(self, process, args): + super().__init__(process, args) + + def get_thread_id(self) -> int: + return 0x19 + + def get_name(self) -> str: + return InvalidScriptedThread.__name__ + ".thread-1" + + def get_state(self) -> int: + return lldb.eStateInvalid + + def get_stop_reason(self) -> Dict[str, Any]: + return { "type": lldb.eStopReasonSignal, "data": { + "signal": signal.SIGINT + } } + + def get_stackframes(self): + class ScriptedStackFrame: + def __init__(idx, cfa, pc, symbol_ctx): + self.idx = idx + self.cfa = cfa + self.pc = pc + self.symbol_ctx = symbol_ctx + + + symbol_ctx = lldb.SBSymbolContext() + frame_zero = ScriptedStackFrame(0, 0x42424242, 0x5000000, symbol_ctx) + self.frames.append(frame_zero) + + return self.frame_zero[0:0] + + def get_register_context(self) -> str: + return None + +def __lldb_init_module(debugger, dict): + if not 'SKIP_SCRIPTED_PROCESS_LAUNCH' in os.environ: + debugger.HandleCommand( + "process launch -C %s.%s" % (__name__, + InvalidScriptedProcess.__name__)) + else: + print("Name of the class that will manage the scripted process: '%s.%s'" + % (__name__, InvalidScriptedProcess.__name__))
\ No newline at end of file |
