add means to get pc and other qemu registers
[soc.git] / src / soc / simulator / gas.py
1 import tempfile
2 import subprocess
3 import struct
4
5
6 def get_assembled_instruction(instruction, bigendian=False):
7 if bigendian:
8 endian_fmt = "elf64-big"
9 obj_fmt = "-be"
10 else:
11 endian_fmt = "elf64-little"
12 obj_fmt = "-le"
13 with tempfile.NamedTemporaryFile(suffix=".o") as outfile:
14 args = ["powerpc64-linux-gnu-as",
15 obj_fmt,
16 "-o",
17 outfile.name]
18 p = subprocess.Popen(args, stdin=subprocess.PIPE)
19 p.communicate(instruction.encode('utf-8'))
20 assert(p.wait() == 0)
21
22 with tempfile.NamedTemporaryFile(suffix=".bin") as binfile:
23 args = ["powerpc64-linux-gnu-objcopy",
24 "-I", endian_fmt,
25 "-O", "binary",
26 outfile.name,
27 binfile.name]
28 subprocess.check_output(args)
29 binary = struct.unpack('>i', binfile.read(4))[0]
30 return binary