#!/usr/bin/env python3 # Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. import lldb # type: ignore[import] # load into lldb instance with: # command script import tools/lldb/deploy_debugger.py target = lldb.debugger.GetSelectedTarget() bp = target.BreakpointCreateByRegex("__deploy_register_code") bp.SetScriptCallbackBody( """\ process = frame.thread.GetProcess() target = process.target symbol_addr = frame.module.FindSymbol("__deploy_module_info").GetStartAddress() info_addr = symbol_addr.GetLoadAddress(target) e = lldb.SBError() ptr_size = 8 str_addr = process.ReadPointerFromMemory(info_addr, e) file_addr = process.ReadPointerFromMemory(info_addr + ptr_size, e) file_size = process.ReadPointerFromMemory(info_addr + 2*ptr_size, e) load_bias = process.ReadPointerFromMemory(info_addr + 3*ptr_size, e) name = process.ReadCStringFromMemory(str_addr, 512, e) r = process.ReadMemory(file_addr, file_size, e) from tempfile import NamedTemporaryFile from pathlib import Path stem = Path(name).stem with NamedTemporaryFile(prefix=stem, suffix='.so', delete=False) as tf: tf.write(r) print("torch_deploy registering debug inforation for ", tf.name) cmd1 = f"target modules add {tf.name}" # print(cmd1) lldb.debugger.HandleCommand(cmd1) cmd2 = f"target modules load -f {tf.name} -s {hex(load_bias)}" # print(cmd2) lldb.debugger.HandleCommand(cmd2) return False """ )