As with gdb_cmd passing a plain string to a subprocess involves making sure the escaping is correct so the underlying shell doesn't get confused. Do the same as gdb_cmd and make the whole thing an array.
There are a few minor wrinkles with when args.binary is expected so add some comments for that. Suggested-by: Ilya Leoshkevich <[email protected]> Signed-off-by: Alex Bennée <[email protected]> --- tests/guest-debug/run-test.py | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/tests/guest-debug/run-test.py b/tests/guest-debug/run-test.py index e8b69f85cd1..d5ffaaa9ffc 100755 --- a/tests/guest-debug/run-test.py +++ b/tests/guest-debug/run-test.py @@ -79,27 +79,32 @@ def format_cmd(cmd): socket_name = os.path.join(socket_dir.name, "gdbstub.socket") # Launch QEMU with binary + qemu_cmd = [args.qemu] + if args.qargs: + qemu_cmd.extend(shlex.split(args.qargs)) + if "system" in args.qemu: - if args.no_suspend: - suspend = '' - else: - suspend = ' -S' - cmd = f'{args.qemu} {args.qargs} {args.binary}' \ - f'{suspend} -gdb unix:path={socket_name},server=on' + # for system mode we assume qargs has set-up for binary + qemu_cmd.append(args.binary) + if not args.no_suspend: + qemu_cmd.append("-S") + qemu_cmd.extend(["-gdb", f"unix:path={socket_name},server=on"]) # There is no guest program command-line in system mode. assert not args.pargs else: + qemu_cmd.append("-g") if args.no_suspend: - suspend = ',suspend=n' + qemu_cmd.append(f"{socket_name},suspend=n") else: - suspend = '' - cmd = f'{args.qemu} {args.qargs} -g {socket_name}{suspend}' \ - f' {args.binary}' + qemu_cmd.append(f"{socket_name}") + + # for user mode binary and args always go at the end + qemu_cmd.append(args.binary) if args.pargs: - cmd += f' {args.pargs}' + qemu_cmd.extend(shlex.split(args.pargs)) - log(output, "QEMU CMD: %s" % (cmd)) - inferior = subprocess.Popen(shlex.split(cmd)) + log(output, "QEMU CMD: %s" % (format_cmd(qemu_cmd))) + inferior = subprocess.Popen(qemu_cmd) # Now launch gdb with our test and collect the result gdb_cmd = [args.gdb, args.binary] -- 2.47.3
