diff --git a/libcxx/utils/run.py b/libcxx/utils/run.py --- a/libcxx/utils/run.py +++ b/libcxx/utils/run.py @@ -14,6 +14,7 @@ """ import argparse +import shlex import subprocess import sys @@ -23,6 +24,7 @@ parser.add_argument('--execdir', type=str, required=True) parser.add_argument('--codesign_identity', type=str, required=False, default=None) parser.add_argument('--env', type=str, nargs='*', required=False, default=dict()) + parser.add_argument('--wrapper-command', type=str, required=False, default=None) parser.add_argument("command", nargs=argparse.ONE_OR_MORE) args = parser.parse_args() commandLine = args.command @@ -38,6 +40,9 @@ # Extract environment variables into a dictionary env = {k : v for (k, v) in map(lambda s: s.split('=', 1), args.env)} + # Prepend the wrapper command to allow running under GDB/LLDB/valgrind/qemu-user/etc. + if args.wrapper_command: + commandLine = shlex.split(args.wrapper_command) + commandLine # Run the command line with the given environment in the execution directory. return subprocess.call(subprocess.list2cmdline(commandLine), cwd=args.execdir, env=env, shell=True) diff --git a/libcxx/utils/ssh.py b/libcxx/utils/ssh.py --- a/libcxx/utils/ssh.py +++ b/libcxx/utils/ssh.py @@ -45,6 +45,7 @@ parser.add_argument('--extra-scp-args', type=str, required=False) parser.add_argument('--codesign_identity', type=str, required=False, default=None) parser.add_argument('--env', type=str, nargs='*', required=False, default=dict()) + parser.add_argument('--wrapper-command', type=str, required=False, default=None) parser.add_argument("command", nargs=argparse.ONE_OR_MORE) args = parser.parse_args() commandLine = args.command @@ -104,6 +105,9 @@ # host by transforming the path of test-executables to their path in the # temporary directory on the remote host. commandLine = (pathOnRemote(x) if isTestExe(x) else x for x in commandLine) + # Prepend the wrapper command to allow running under GDB/LLDB/valgrind/qemu-user/etc. + if args.wrapper_command: + commandLine = shlex.split(args.wrapper_command) + list(commandLine) remoteCommands.append('cd {}'.format(tmp)) if args.env: remoteCommands.append('export {}'.format(' '.join(args.env)))