1 from pygdbmi
.gdbcontroller
import GdbController
4 launch_args
= ['qemu-system-ppc64',
5 '-machine', 'powernv9',
10 def __init__(self
, kernel
):
11 args
= launch_args
+ ['-kernel', kernel
]
12 self
.qemu_popen
= subprocess
.Popen(args
,
13 stdout
=subprocess
.PIPE
,
14 stdin
=subprocess
.PIPE
)
15 self
.gdb
= GdbController(gdb_path
='powerpc64-linux-gnu-gdb')
18 return self
.gdb
.write('-target-select remote localhost:1234')
20 def break_address(self
, addr
):
21 cmd
= '-break-insert *0x{:x}'.format(addr
)
22 return self
.gdb
.write(cmd
)
24 def get_registers(self
):
25 return self
.gdb
.write('-data-list-register-values x')
27 def get_register(self
, num
):
28 return self
.gdb
.write('-data-list-register-values x {}'.format(num
))
31 return self
.gdb
.write('-exec-next-instruction')
33 def gdb_continue(self
):
34 return self
.gdb
.write('-exec-continue')
38 self
.qemu_popen
.kill()
41 if __name__
== '__main__':
42 q
= QemuController("qemu_test/kernel.bin")
44 q
.break_address(0x20000000)
46 print(q
.get_register(1))
48 print(q
.get_register(1))