mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
target-mips: add Unified Hosting Interface (UHI) support
Add UHI semihosting support for MIPS. QEMU run with "-semihosting" option will alter the behaviour of SDBBP 1 instruction -- UHI operation will be called instead of generating a debug exception. Also tweak Malta's pseudo-bootloader. On CPU reset the $4 register is set to -1 if semihosting arguments are passed to indicate that the UHI operations should be used to obtain input arguments. Signed-off-by: Leon Alrae <leon.alrae@imgtec.com> Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
parent
ff33476772
commit
3b3c1694cf
6 changed files with 408 additions and 26 deletions
|
@ -53,6 +53,7 @@
|
|||
#include "qemu/error-report.h"
|
||||
#include "hw/empty_slot.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "exec/semihost.h"
|
||||
|
||||
//#define DEBUG_BOARD_INIT
|
||||
|
||||
|
@ -634,7 +635,13 @@ static void write_bootloader (CPUMIPSState *env, uint8_t *base,
|
|||
|
||||
/* Second part of the bootloader */
|
||||
p = (uint32_t *) (base + 0x580);
|
||||
stl_p(p++, 0x24040002); /* addiu a0, zero, 2 */
|
||||
|
||||
if (semihosting_get_argc()) {
|
||||
/* Preserve a0 content as arguments have been passed */
|
||||
stl_p(p++, 0x00000000); /* nop */
|
||||
} else {
|
||||
stl_p(p++, 0x24040002); /* addiu a0, zero, 2 */
|
||||
}
|
||||
stl_p(p++, 0x3c1d0000 | (((ENVP_ADDR - 64) >> 16) & 0xffff)); /* lui sp, high(ENVP_ADDR) */
|
||||
stl_p(p++, 0x37bd0000 | ((ENVP_ADDR - 64) & 0xffff)); /* ori sp, sp, low(ENVP_ADDR) */
|
||||
stl_p(p++, 0x3c050000 | ((ENVP_ADDR >> 16) & 0xffff)); /* lui a1, high(ENVP_ADDR) */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue