jit/backend/x86/test/test_runner.py::TestX86::()::test_compile_asmlen
self = <rpython.jit.backend.x86.test.test_runner.TestX86 object at 0x00007fd20a5834e8>
def test_compile_asmlen(self):
if not isinstance(self.cpu, AbstractLLCPU):
py.test.skip("pointless test on non-asm")
from rpython.jit.backend.tool.viewcode import machine_code_dump, ObjdumpNotFound
import ctypes
targettoken = TargetToken()
ops = """
[i2]
i0 = same_as_i(i2) # but forced to be in a register
label(i0, descr=targettoken)
i1 = int_add(i0, i0)
guard_true(i1, descr=faildescr) [i1]
jump(i1, descr=targettoken)
"""
faildescr = BasicFailDescr(2)
loop = parse(ops, self.cpu, namespace=locals())
bridge_ops = """
[i0]
jump(i0, descr=targettoken)
"""
bridge = parse(bridge_ops, self.cpu, namespace=locals())
looptoken = JitCellToken()
self.cpu.assembler.set_debug(False)
info = self.cpu.compile_loop(loop.inputargs, loop.operations, looptoken)
bridge_info = self.cpu.compile_bridge(faildescr, bridge.inputargs,
bridge.operations,
looptoken)
self.cpu.assembler.set_debug(True) # always on untranslated
assert info.asmlen != 0
cpuname = autodetect()
# XXX we have to check the precise assembler, otherwise
# we don't quite know if borders are correct
def checkops(mc, ops_regexp):
import re
words = []
print('----- checkops -----')
for line in mc:
print(line.rstrip())
t = line.split("\t")
if len(t) <= 2:
continue
w = t[2].split()
if len(w) == 0:
if '<UNDEFINED>' in line:
w = ['UNDEFINED']
else:
continue
words.append(w[0] + ';')
print('[[%s]]' % (w[0],))
text = ' '.join(words)
assert re.compile(ops_regexp).match(text)
data = ctypes.string_at(info.asmaddr, info.asmlen)
try:
> mc = list(machine_code_dump(data, info.asmaddr, cpuname))
jit/backend/test/runner_test.py:4675:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
data = 'H\x8b\x8d \x01\x00\x00\x0f\x1f\x00H\x01\xc9H\x85\xc9\x0f\x84T\x00\x00\x00\xe9\xef\xff\xff\xff\x0f\x0bffff.\x0f\x1f\x84\x00\x00\x00\x00\x00'
originaddr = 481131760246, backend_name = 'x86-64', label_list = None
def machine_code_dump(data, originaddr, backend_name, label_list=None):
objdump_machine_option = {
'x86': 'i386',
'x86-without-sse2': 'i386',
'x86_32': 'i386',
'x86_64': 'i386:x86-64',
'x86-64': 'i386:x86-64',
'i386': 'i386',
'arm': 'arm',
'arm_32': 'arm',
'aarch64': 'aarch64',
'ppc' : 'powerpc:common64',
'ppc-64' : 'powerpc:common64',
'riscv64': 'riscv:rv64',
's390x': 's390:64-bit',
}
machine_endianness = {
# default value: 'little'
'ppc' : sys.byteorder, # i.e. same as the running machine...
'ppc-64' : sys.byteorder, # i.e. same as the running machine...
's390x' : sys.byteorder, # i.e. same as the running machine...
}
cmd = find_objdump()
objdump = ('%(command)s -b binary -m %(machine)s '
'--endian=%(endianness)s '
'--disassembler-options=intel-mnemonics '
'--adjust-vma=%(origin)d -D %(file)s')
#
f = open(tmpfile, 'wb')
f.write(data)
f.close()
p = subprocess.Popen(objdump % {
'command': cmd,
'file': tmpfile,
'origin': originaddr,
'machine': objdump_machine_option[backend_name],
'endianness': machine_endianness.get(backend_name, 'little'),
}, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = p.communicate()
assert not p.returncode, ('Encountered an error running objdump: %s' %
> stderr)
E AssertionError: Encountered an error running objdump: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump: error: unknown argument '-b'
jit/backend/tool/viewcode.py:82: AssertionError
---------- Captured stderr setup ----------
[c58dde89faec080] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00000 +0 48894D40488945484889555048895D584889756048897D684C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA00000008F45188F45084889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C4B8000000C3
[c58dde89fbd1800] jit-backend-dump}
[c58dde89fca7c00] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00090 +0 48894D40488945484889555048895D584889756048897D684C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA000000049BB483DA40000600000498B1B49C743F80000000049C7030000000048895D288F45188F45084889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C4B8000000C3
[c58dde89fccc000] jit-backend-dump}
[c58dde89fe65300] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00130 +0 48894D40488945484889555048895D584889756048897D684C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA0000000F20F1185A8000000F20F118DB0000000F20F1195B8000000F20F119DC0000000F20F11A5C8000000F20F11ADD0000000F20F11B5D8000000F20F11BDE0000000F2440F1185E8000000F2440F118DF0000000F2440F1195F8000000F2440F119D00010000F2440F11A508010000F2440F11AD10010000F2440F11B518010000488B7424104889EF4883EC0849BB483DA40000600000498B0B48894D28498B5BF849C743F80000000049C7030000000049BB4022EE0E0100000041FFD34889C5488B4D2848C745280000000049BB483DA4000060000049890B49895BF84883C40848C7451800000000488B4D40488B4548488B5550488B5D58488B7560488B7D684C8B45704C8B4D784C8B95800000004C8BA5880000004C8BAD900000004C8BB5980000004C8BBDA0000000F20F1085A8000000F20F108DB0000000F20F1095B8000000F20F109DC0000000F20F10A5C8000000F20F10ADD0000000F20F10B5D8000000F20F10BDE0000000F2440F1085E8000000F2440F108DF0000000F2440F1095F8000000F2440F109D00010000F2440F10A508010000F2440F10AD10010000F2440F10B518010000C3
[c58dde89ffb8480] jit-backend-dump}
[c58dde8a000a580] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00330 +0 48894D40488945484889555048895D584889756048897D684C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA0000000F20F1185A8000000F20F118DB0000000F20F1195B8000000F20F119DC0000000F20F11A5C8000000F20F11ADD0000000F20F11B5D8000000F20F11BDE0000000F2440F1185E8000000F2440F118DF0000000F2440F1195F8000000F2440F119D00010000F2440F11A508010000F2440F11AD10010000F2440F11B5180100008F45188F45084889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C4B8000000C3
[c58dde8a0033580] jit-backend-dump}
[c58dde8a019fd80] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00440 +0 48894D40488945484889555048895D584889756048897D684C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA0000000F20F1185A8000000F20F118DB0000000F20F1195B8000000F20F119DC0000000F20F11A5C8000000F20F11ADD0000000F20F11B5D8000000F20F11BDE0000000F2440F1185E8000000F2440F118DF0000000F2440F1195F8000000F2440F119D00010000F2440F11A508010000F2440F11AD10010000F2440F11B51801000049BB483DA40000600000498B1B49C743F80000000049C7030000000048895D288F45188F45084889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C4B8000000C3
[c58dde8a01cd600] jit-backend-dump}
[c58dde8a0240000] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00560 +0 49BB483DA40000600000498B0349C743F80000000049C703000000004889452848C74508000000004889E84C8BBC24880000004C8BB424800000004C8B6C24784C8B642470488B5C2468488B6C24604881C4B8000000C3
[c58dde8a0311380] jit-backend-dump}
[c58dde8a0375d00] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b005c0 +0 48895D584C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA00000004883EC08FFD04883C40848C7451800000000488B4D40488B5550488B5D58488B7560488B7D684C8B45704C8B4D784C8B95800000004C8BA5880000004C8BAD900000004C8BB5980000004C8BBDA0000000C3
[c58dde8a0391c80] jit-backend-dump}
[c58dde8a03b6a80] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00650 +0 4C8945704C894D784C8995800000004883EC08FFD04883C40848C7451800000000488B4D40488B5550488B7560488B7D684C8B45704C8B4D784C8B9580000000C3
[c58dde8a03cf300] jit-backend-dump}
[c58dde8a04be500] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b006a0 +0 48895D584C8945704C894D784C8995800000004C89A5880000004C89AD900000004C89B5980000004C89BDA0000000F20F1185A8000000F20F118DB0000000F20F1195B8000000F20F119DC0000000F20F11A5C8000000F20F11ADD0000000F20F11B5D8000000F20F11BDE0000000F2440F1185E8000000F2440F118DF0000000F2440F1195F8000000F2440F119D00010000F2440F11A508010000F2440F11AD10010000F2440F11B5180100004883EC08FFD04883C40848C7451800000000488B4D40488B5550488B5D58488B7560488B7D684C8B45704C8B4D784C8B95800000004C8BA5880000004C8BAD900000004C8BB5980000004C8BBDA0000000F20F1085A8000000F20F108DB0000000F20F1095B8000000F20F109DC0000000F20F10A5C8000000F20F10ADD0000000F20F10B5D8000000F20F10BDE0000000F2440F1085E8000000F2440F108DF0000000F2440F1095F8000000F2440F109D00010000F2440F10A508010000F2440F10AD10010000F2440F10B518010000C3
[c58dde8a04f5f80] jit-backend-dump}
[c58dde8a064d580] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00830 +0 4C8945704C894D784C899580000000F20F1185A8000000F20F118DB0000000F20F1195B8000000F20F119DC0000000F20F11A5C8000000F20F11ADD0000000F20F11B5D8000000F20F11BDE0000000F2440F1185E8000000F2440F118DF0000000F2440F1195F8000000F2440F119D00010000F2440F11A508010000F2440F11AD10010000F2440F11B5180100004883EC08FFD04883C40848C7451800000000488B4D40488B5550488B7560488B7D684C8B45704C8B4D784C8B9580000000F20F1085A8000000F20F108DB0000000F20F1095B8000000F20F109DC0000000F20F10A5C8000000F20F10ADD0000000F20F10B5D8000000F20F10BDE0000000F2440F1085E8000000F2440F108DF0000000F2440F1095F8000000F2440F109D00010000F2440F10A508010000F2440F10AD10010000F2440F10B518010000C3
[c58dde8a067df00] jit-backend-dump}
---------- Captured stderr call ----------
[c58dde8a0bc8900] {jit-mem-looptoken-alloc
allocating Loop # -1
[c58dde8a0bfa200] jit-mem-looptoken-alloc}
[c58dde8a287fc00] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00a30 +0 000000000000000000000000000000004881ECB800000048896C24604889B424B00000004889FD48895C24684C896424704C896C24784C89B424800000004C89BC2488000000488B8D200100000F1F004801C94885C90F8400000000E9EFFFFFFF0F0B666666662E0F1F840000000000FF358AFFFFFF49BB200AB0057000000041534D8D9BE0F5FFFF41FFE3
[c58dde8a2b12500] jit-backend-dump}
[c58dde8a2bfcb00] {jit-backend-addr
Loop -1 () has address 0x7005b00a76 to 0x7005b00aa0 (bootstrap 0x7005b00a40)
gc table: 0x7005b00a30
function: 0x7005b00a40
resops: 0x7005b00a76
failures: 0x7005b00aa0
end: 0x7005b00abc
[c58dde8a2c0fc00] jit-backend-addr}
[c58dde8a2c13680] {jit-regalloc-stats
Loop -1 () has address 0x7005b00a76 to 0x7005b00aa0 (bootstrap 0x7005b00a40)
assembler size: 112
number ops: 5
preamble num moves calls: 0
preamble num moves jump: 0
preamble num moves spills: 0
preamble num moves spills to existing: 0
preamble num register reloads: 0
num moves calls: 0
num moves jump: 0
num moves spills: 0
num moves spills to existing: 0
num moves register reloads: 0
[c58dde8a2c32300] jit-regalloc-stats}
[c58dde8a2c62200] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00a88 +0 14000000
[c58dde8a2c8fd00] jit-backend-dump}
[c58dde8a2c98700] {jit-mem-looptoken-alloc
allocating Bridge # 1 of Loop # -1
[c58dde8a2c9fe80] jit-mem-looptoken-alloc}
[c58dde8a3051580] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00ae0 +0 48817D38FFFFFF000F8C1200000049BB800AB0057000000041FFE30F0B0F1F0048C7442408FFFFFF0049BBD00AB005700000004C895D184D8D9B60F6FFFF41FFD3E9C8FFFFFF
[c58dde8a36aca80] jit-backend-dump}
[c58dde8a375dc80] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00ae4 +0 1D000000
[c58dde8a377f980] jit-backend-dump}
[c58dde8a379bb00] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00b05 +0 1D000000
[c58dde8a37b5a80] jit-backend-dump}
[c58dde8a37b9700] {jit-backend-addr
bridge out of Guard 0x7fd201b88ad8 has address 0x7005b00ae0 to 0x7005b00b00
gc table: 0x7005b00ae0
jump target: 0x7005b00ae0
resops: 0x7005b00aee
failures: 0x7005b00b00
end: 0x7005b00b26
[c58dde8a37c6080] jit-backend-addr}
[c58dde8a37c9580] {jit-regalloc-stats
bridge out of Guard 0x7fd201b88ad8 has address 0x7005b00ae0 to 0x7005b00b00
assembler size: 70
number ops: 1
preamble num moves calls: 0
preamble num moves jump: 0
preamble num moves spills: 0
preamble num moves spills to existing: 0
preamble num register reloads: 0
num moves calls: 0
num moves jump: 0
num moves spills: 0
num moves spills to existing: 0
num moves register reloads: 0
[c58dde8a37e5680] jit-regalloc-stats}
[c58dde8a3a3e600] {jit-backend-dump
BACKEND x86_64
SYS_EXECUTABLE ??
CODE_DUMP @7005b00a88 +0 54000000
[c58dde8a3a81400] jit-backend-dump}
builder: rpython-macos-x86-64 build #276
test: jit/backend/x86/test/test_runner/py/TestX86/()/test_compile_asmlen