Open risc¶
Qemu¶
When booting with qemu, the loading of a raw binary goes wrong as of qemu
version 2.11. Instead of loading a raw binary, an uboot image can be created
with ppci.utils.uboot_image.write_uboot_image()
.
$ qemu-system-or1k -kernel baremetal.uimage -M or1k-sim -serial stdio -m 16M
The memory is mapped as follows:
(qemu) info mtree
address-space: memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000000ffffff (prio 0, ram): openrisc.ram
0000000090000000-0000000090000007 (prio 0, i/o): serial
0000000092000000-0000000092000053 (prio 0, i/o): open_eth.regs
0000000092000400-00000000920007ff (prio 0, i/o): open_eth.desc
address-space: I/O
0000000000000000-000000000000ffff (prio 0, i/o): io
address-space: cpu-memory
0000000000000000-ffffffffffffffff (prio 0, i/o): system
0000000000000000-0000000000ffffff (prio 0, ram): openrisc.ram
0000000090000000-0000000090000007 (prio 0, i/o): serial
0000000092000000-0000000092000053 (prio 0, i/o): open_eth.regs
0000000092000400-00000000920007ff (prio 0, i/o): open_eth.desc
To get a lot of debug output, the trace option of qemu can be used:
-D trace.txt -d in_asm,exec,int,op_opt,cpu
Module¶
Open risk architecture target.
-
class
ppci.arch.or1k.
Or1kArch
(options=None)¶ Open risc architecture.
ABI: r0 -> zero r1 -> stack pointer r2 -> frame pointer r3 -> parameter 0 r4 -> parameter 1 r5 -> parameter 2 r6 -> parameter 3 r7 -> parameter 4 r8 -> parameter 6 r9 -> link address (return address for functions) r11 -> return value
-
determine_arg_locations
(arg_types)¶ Given a set of argument types, determine location for argument
-
determine_rv_location
(ret_type)¶ Determine the location of a return value of a function given the type of return value
-
gen_call
(frame, label, args, rv)¶ Generate instructions for a function call.
-
gen_epilogue
(frame)¶ Return epilogue sequence for a frame.
-
gen_function_enter
(args)¶ Generate code to extract arguments from the proper locations
The default implementation tries to use registers and move instructions.
Parameters: args – an iterable of virtual registers in which the arguments must be placed.
-
gen_prologue
(frame)¶ Generate the prologue instruction sequence
-
litpool
(frame)¶ Generate instructions for literals
-
move
(dst, src)¶ Generate a move from src to dst
-