From: Adrian Freihofer <[email protected]> Start lldb-server in the target background, record its PID, and wait for the listener before the generated MULTI pre-launch task returns. This ensures a client can connect only after lldb-server is accepting connections and preserves timeout cleanup.
Move reusable TCP listener checks and bounded wait generation into DebuggerCrossConfig to make it reusable for GDB as well. Signed-off-by: Adrian Freihofer <[email protected]> --- scripts/lib/devtool/ide_plugins/__init__.py | 26 ++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/scripts/lib/devtool/ide_plugins/__init__.py b/scripts/lib/devtool/ide_plugins/__init__.py index d50ba7bc65..deb6050907 100644 --- a/scripts/lib/devtool/ide_plugins/__init__.py +++ b/scripts/lib/devtool/ide_plugins/__init__.py @@ -97,6 +97,20 @@ class DebuggerCrossConfig: modes.append(DebuggerServerModes.ATTACH) return modes + def _target_tcp_port_check_cmd(self): + hex_port = "%04X" % self.debug_server_port + return "grep -q :%s /proc/net/tcp /proc/net/tcp6 2>/dev/null" % hex_port + + def _target_wait_for_tcp_port_cmd(self, pid_var=None): + cleanup = "" + if pid_var: + cleanup = "kill \\$_%s 2>/dev/null; " % pid_var + return ( + "_w=0; while ! %s; do _w=\\$((_w+1)); [ \\$_w -lt 100 ] || { " + "%secho %s did not start on port %s >&2; exit 1; }; sleep 0.1; done;" + % (self._target_tcp_port_check_cmd(), cleanup, self.DEBUG_SERVER_NAME, + self.debug_server_port)) + def initialize(self): """Called after construction to generate any required config files.""" pass @@ -197,6 +211,7 @@ class LldbServerConfig(DebuggerCrossConfig): The ATTACH mode is not supported because lldb-server platform does not take a PID argument; attaching is done client-side via 'process attach'. """ + DEBUG_SERVER_NAME = "lldb-server" def __init__(self, image_recipe, modified_recipe, binary, default_mode=DebuggerServerModes.MULTI): @@ -224,18 +239,17 @@ class LldbServerConfig(DebuggerCrossConfig): cmd = "cd /tmp && %s platform --one-shot --server --listen *:%s" % ( lldb_server, self.debug_server_port) elif mode == DebuggerServerModes.MULTI: - hex_port = "%04X" % self.debug_server_port pid_file = self._lldb_server_pid_file(mode) tmp_dir = self._lldb_server_tmp_dir(mode) log_file = self._lldb_server_log_file(mode) - cmd = "grep -q :%s /proc/net/tcp /proc/net/tcp6 2>/dev/null && exit 0; " % hex_port + cmd = self._target_tcp_port_check_cmd() + " && exit 0; " cmd += "mkdir -p %s; " % tmp_dir cmd += "cd %s; " % tmp_dir - cmd += "%s platform --server --listen *:%s > %s 2>&1 & " % ( + cmd += "%s platform --server --listen *:%s > %s 2>&1 & _lldb_server_pid=\\$!; " % ( lldb_server, self.debug_server_port, log_file) - cmd += "echo \\$! > %s; " % pid_file - cmd += "_w=0; while ! grep -q :%s /proc/net/tcp /proc/net/tcp6 2>/dev/null; " % hex_port - cmd += "do _w=\\$((_w+1)); [ \\$_w -lt 100 ] || { echo lldb-server did not start on port %s >&2; exit 1; }; sleep 0.1; done;" % self.debug_server_port + cmd += "echo \\$_lldb_server_pid > %s; " % pid_file + cmd += self._target_wait_for_tcp_port_cmd( + "lldb_server_pid") else: raise DevtoolError( "lldb-server does not support mode %s " -- 2.55.0
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#243070): https://lists.openembedded.org/g/openembedded-core/message/243070 Mute This Topic: https://lists.openembedded.org/mt/120667693/21656 Group Owner: [email protected] Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
