Author: David Schneider <david.schnei...@picle.org> Branch: Changeset: r56562:4d98b5ae36f8 Date: 2012-08-03 14:41 +0200 http://bitbucket.org/pypy/pypy/changeset/4d98b5ae36f8/
Log: (stepahn, bivab) check for objdump and gobjdump (for OSX, as provided by port and homebrew binutils package) and raise an error neither is available diff --git a/pypy/jit/backend/x86/tool/test/test_viewcode.py b/pypy/jit/backend/x86/tool/test/test_viewcode.py --- a/pypy/jit/backend/x86/tool/test/test_viewcode.py +++ b/pypy/jit/backend/x86/tool/test/test_viewcode.py @@ -1,5 +1,10 @@ from cStringIO import StringIO from pypy.jit.backend.x86.tool.viewcode import format_code_dump_with_labels +from pypy.jit.backend.x86.tool.viewcode import find_objdump +import os +import py +import tempfile +from pypy.tool.udir import udir def test_format_code_dump_with_labels(): lines = StringIO(""" @@ -53,3 +58,16 @@ lines = format_code_dump_with_labels(0xAA00, lines, label_list=None) out = ''.join(lines) assert out.strip() == input + +def test_find_objdump(): + old = os.environ['PATH'] + os.environ['PATH'] = '' + py.test.raises(find_objdump) + + # + path = udir.join('objdump') + print >>path, 'hello world' + os.environ['PATH'] = path.dirname + assert find_objdump() == 'objdump' + # + os.environ['PATH'] = old diff --git a/pypy/jit/backend/x86/tool/viewcode.py b/pypy/jit/backend/x86/tool/viewcode.py --- a/pypy/jit/backend/x86/tool/viewcode.py +++ b/pypy/jit/backend/x86/tool/viewcode.py @@ -8,9 +8,9 @@ ./viewcode.py log # also includes a pygame viewer """ -import autopath import new import operator +import os import py import re import sys @@ -36,6 +36,17 @@ if sys.platform == "win32": pass # lots more in Psyco +def find_objdump(): + exe = ('objdump', 'gobjdump') + path = os.environ['PATH'].split(os.pathsep) + for e in exe: + for p in path: + path_to = os.path.join(p, e) + if not os.path.exists(path_to): + continue + return e + raise AssertionError('(g)objdump was not found in PATH') + def machine_code_dump(data, originaddr, backend_name, label_list=None): objdump_backend_option = { 'x86': 'i386', @@ -43,7 +54,8 @@ 'x86_64': 'x86-64', 'i386': 'i386', } - objdump = ('objdump -M %(backend)s -b binary -m i386 ' + cmd = find_objdump() + objdump = ('%(command)s -M %(backend)s -b binary -m i386 ' '--disassembler-options=intel-mnemonics ' '--adjust-vma=%(origin)d -D %(file)s') # @@ -51,6 +63,7 @@ f.write(data) f.close() p = subprocess.Popen(objdump % { + 'command': cmd, 'file': tmpfile, 'origin': originaddr, 'backend': objdump_backend_option[backend_name], _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit