diff options
author | Adrian Prantl <aprantl@apple.com> | 2023-02-03 16:05:51 -0800 |
---|---|---|
committer | Adrian Prantl <aprantl@apple.com> | 2023-02-03 16:06:09 -0800 |
commit | 0981ff8968bdfbd59d6db388db5ad1708b84ef05 (patch) | |
tree | 00f1e8da35e8ca47f1664a0f53473f2006a8a60e /cross-project-tests | |
parent | 7fef8d69cc7e0623ff00835f1a71de94d54157ed (diff) | |
download | llvm-0981ff8968bdfbd59d6db388db5ad1708b84ef05.zip llvm-0981ff8968bdfbd59d6db388db5ad1708b84ef05.tar.gz llvm-0981ff8968bdfbd59d6db388db5ad1708b84ef05.tar.bz2 |
Upgrade llgdb script for Python 3 compatibility.
Diffstat (limited to 'cross-project-tests')
-rwxr-xr-x | cross-project-tests/debuginfo-tests/llgdb-tests/llgdb.py | 80 |
1 files changed, 33 insertions, 47 deletions
diff --git a/cross-project-tests/debuginfo-tests/llgdb-tests/llgdb.py b/cross-project-tests/debuginfo-tests/llgdb-tests/llgdb.py index 83b5ec6..a97a039 100755 --- a/cross-project-tests/debuginfo-tests/llgdb-tests/llgdb.py +++ b/cross-project-tests/debuginfo-tests/llgdb-tests/llgdb.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 """ A gdb-compatible frontend for lldb that implements just enough commands to run the tests in the debuginfo-tests repository with lldb. @@ -6,39 +6,24 @@ commands to run the tests in the debuginfo-tests repository with lldb. # ---------------------------------------------------------------------- # Auto-detect lldb python module. -import commands, platform, os, sys +import subprocess, platform, os, sys try: # Just try for LLDB in case PYTHONPATH is already correctly setup. import lldb except ImportError: - lldb_python_dirs = list() - # lldb is not in the PYTHONPATH, try some defaults for the current platform. - platform_system = platform.system() - if platform_system == 'Darwin': - # On Darwin, try the currently selected Xcode directory - xcode_dir = commands.getoutput("xcode-select --print-path") - if xcode_dir: - lldb_python_dirs.append(os.path.realpath(xcode_dir + -'/../SharedFrameworks/LLDB.framework/Resources/Python')) - lldb_python_dirs.append(xcode_dir + -'/Library/PrivateFrameworks/LLDB.framework/Resources/Python') - lldb_python_dirs.append( -'/System/Library/PrivateFrameworks/LLDB.framework/Resources/Python') - success = False - for lldb_python_dir in lldb_python_dirs: - if os.path.exists(lldb_python_dir): - if not (sys.path.__contains__(lldb_python_dir)): - sys.path.append(lldb_python_dir) - try: - import lldb - except ImportError: - pass - else: - print 'imported lldb from: "%s"' % (lldb_python_dir) - success = True - break - if not success: - print "error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly" + # Ask the command line driver for the path to the lldb module. Copy over + # the environment so that SDKROOT is propagated to xcrun. + command = ['xcrun', 'lldb', '-P'] if platform.system() == 'Darwin' else ['lldb', '-P'] + # Extend the PYTHONPATH if the path exists and isn't already there. + lldb_python_path = subprocess.check_output(command).decode("utf-8").strip() + if os.path.exists(lldb_python_path) and not sys.path.__contains__(lldb_python_path): + sys.path.append(lldb_python_path) + # Try importing LLDB again. + try: + import lldb + print('imported lldb from: "%s"'%lldb_python_path) + except ImportError: + print("error: couldn't locate the 'lldb' module, please set PYTHONPATH correctly") sys.exit(1) # ---------------------------------------------------------------------- @@ -49,7 +34,8 @@ parser.add_argument('--quiet', '-q', action="store_true", help='ignored') parser.add_argument('-batch', action="store_true", help='exit after processing comand line') parser.add_argument('-n', action="store_true", help='ignore .lldb file') -parser.add_argument('-x', dest='script', type=file, help='execute commands from file') +parser.add_argument('-x', dest='script', type=argparse.FileType('r'), + help='execute commands from file') parser.add_argument("target", help="the program to debug") args = parser.parse_args() @@ -72,11 +58,11 @@ arch = os.popen("file "+args.target).read().split()[-1] target = debugger.CreateTargetWithFileAndArch(args.target, arch) if not target: - print "Could not create target", args.target + print("Could not create target %s"% args.target) sys.exit(1) if not args.script: - print "Interactive mode is not implemented." + print("Interactive mode is not implemented.") sys.exit(1) import re @@ -86,7 +72,7 @@ for command in args.script: if not cmd: continue - print '> %s'% command[:-1] + print('> %s'% command[:-1]) try: if re.match('^r|(run)$', cmd[0]): @@ -94,27 +80,27 @@ for command in args.script: launchinfo = lldb.SBLaunchInfo([]) launchinfo.SetWorkingDirectory(os.getcwd()) process = target.Launch(launchinfo, error) - print error + print(error) if not process or error.fail: state = process.GetState() - print "State = %d" % state - print """ + print("State = %d" % state) + print(""" ERROR: Could not launch process. NOTE: There are several reasons why this may happen: * Root needs to run "DevToolsSecurity --enable". * Older versions of lldb cannot launch more than one process simultaneously. -""" +""") sys.exit(1) elif re.match('^b|(break)$', cmd[0]) and len(cmd) == 2: if re.match('[0-9]+', cmd[1]): # b line mainfile = target.FindFunctions('main')[0].compile_unit.file - print target.BreakpointCreateByLocation(mainfile, int(cmd[1])) + print(target.BreakpointCreateByLocation(mainfile, int(cmd[1]))) else: # b file:line file, line = cmd[1].split(':') - print target.BreakpointCreateByLocation(file, int(line)) + print(target.BreakpointCreateByLocation(file, int(line))) elif re.match('^ptype$', cmd[0]) and len(cmd) == 2: # GDB's ptype has multiple incarnations depending on its @@ -123,27 +109,27 @@ NOTE: There are several reasons why this may happen: # if that fails it looks for a type with that name. # Type lookup in LLDB would be "image lookup --type". for elem in target.FindFunctions(cmd[1]): - print elem.function.type + print(elem.function.type) continue - print target.FindFirstType(cmd[1]) + print(target.FindFirstType(cmd[1])) elif re.match('^po$', cmd[0]) and len(cmd) > 1: try: opts = lldb.SBExpressionOptions() opts.SetFetchDynamicValue(True) opts.SetCoerceResultToId(True) - print target.EvaluateExpression(' '.join(cmd[1:]), opts) + print(target.EvaluateExpression(' '.join(cmd[1:]), opts)) except: # FIXME: This is a fallback path for the lab.llvm.org # buildbot running OS X 10.7; it should be removed. thread = process.GetThreadAtIndex(0) frame = thread.GetFrameAtIndex(0) - print frame.EvaluateExpression(' '.join(cmd[1:])) + print(frame.EvaluateExpression(' '.join(cmd[1:]))) elif re.match('^p|(print)$', cmd[0]) and len(cmd) > 1: thread = process.GetThreadAtIndex(0) frame = thread.GetFrameAtIndex(0) - print frame.EvaluateExpression(' '.join(cmd[1:])) + print(frame.EvaluateExpression(' '.join(cmd[1:]))) elif re.match('^n|(next)$', cmd[0]): thread = process.GetThreadAtIndex(0) @@ -153,10 +139,10 @@ NOTE: There are several reasons why this may happen: sys.exit(0) else: - print debugger.HandleCommand(' '.join(cmd)) + print(debugger.HandleCommand(' '.join(cmd))) except SystemExit: raise except: - print 'Could not handle the command "%s"' % ' '.join(cmd) + print('Could not handle the command "%s"' % ' '.join(cmd)) |