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