xref: /aosp_15_r20/external/pytorch/tools/lldb/deploy_debugger.py (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Workerimport lldb  # type: ignore[import]
2*da0073e9SAndroid Build Coastguard Worker
3*da0073e9SAndroid Build Coastguard Worker
4*da0073e9SAndroid Build Coastguard Worker# load into lldb instance with:
5*da0073e9SAndroid Build Coastguard Worker#   command script import tools/lldb/deploy_debugger.py
6*da0073e9SAndroid Build Coastguard Worker
7*da0073e9SAndroid Build Coastguard Workertarget = lldb.debugger.GetSelectedTarget()
8*da0073e9SAndroid Build Coastguard Workerbp = target.BreakpointCreateByRegex("__deploy_register_code")
9*da0073e9SAndroid Build Coastguard Workerbp.SetScriptCallbackBody(
10*da0073e9SAndroid Build Coastguard Worker    """\
11*da0073e9SAndroid Build Coastguard Workerprocess = frame.thread.GetProcess()
12*da0073e9SAndroid Build Coastguard Workertarget = process.target
13*da0073e9SAndroid Build Coastguard Workersymbol_addr = frame.module.FindSymbol("__deploy_module_info").GetStartAddress()
14*da0073e9SAndroid Build Coastguard Workerinfo_addr = symbol_addr.GetLoadAddress(target)
15*da0073e9SAndroid Build Coastguard Workere = lldb.SBError()
16*da0073e9SAndroid Build Coastguard Workerptr_size = 8
17*da0073e9SAndroid Build Coastguard Workerstr_addr = process.ReadPointerFromMemory(info_addr, e)
18*da0073e9SAndroid Build Coastguard Workerfile_addr = process.ReadPointerFromMemory(info_addr + ptr_size, e)
19*da0073e9SAndroid Build Coastguard Workerfile_size = process.ReadPointerFromMemory(info_addr + 2*ptr_size, e)
20*da0073e9SAndroid Build Coastguard Workerload_bias = process.ReadPointerFromMemory(info_addr + 3*ptr_size, e)
21*da0073e9SAndroid Build Coastguard Workername = process.ReadCStringFromMemory(str_addr, 512, e)
22*da0073e9SAndroid Build Coastguard Workerr = process.ReadMemory(file_addr, file_size, e)
23*da0073e9SAndroid Build Coastguard Workerfrom tempfile import NamedTemporaryFile
24*da0073e9SAndroid Build Coastguard Workerfrom pathlib import Path
25*da0073e9SAndroid Build Coastguard Workerstem = Path(name).stem
26*da0073e9SAndroid Build Coastguard Workerwith NamedTemporaryFile(prefix=stem, suffix='.so', delete=False) as tf:
27*da0073e9SAndroid Build Coastguard Worker    tf.write(r)
28*da0073e9SAndroid Build Coastguard Worker    print("torch_deploy registering debug inforation for ", tf.name)
29*da0073e9SAndroid Build Coastguard Worker    cmd1 = f"target modules add {tf.name}"
30*da0073e9SAndroid Build Coastguard Worker    # print(cmd1)
31*da0073e9SAndroid Build Coastguard Worker    lldb.debugger.HandleCommand(cmd1)
32*da0073e9SAndroid Build Coastguard Worker    cmd2 = f"target modules load -f {tf.name} -s {hex(load_bias)}"
33*da0073e9SAndroid Build Coastguard Worker    # print(cmd2)
34*da0073e9SAndroid Build Coastguard Worker    lldb.debugger.HandleCommand(cmd2)
35*da0073e9SAndroid Build Coastguard Worker
36*da0073e9SAndroid Build Coastguard Workerreturn False
37*da0073e9SAndroid Build Coastguard Worker"""
38*da0073e9SAndroid Build Coastguard Worker)
39