From: Stefan Markovic <smarko...@wavecomp.com> Fix passing argument for nanoMIPS bare metal related to the semihosting regime.
Reviewed-by: Philippe Mathieu-Daudé <f4...@amsat.org> Reviewed-by: Aleksandar Markovic <amarko...@wavecomp.com> Signed-off-by: Yongbok Kim <yongbok....@mips.com> Signed-off-by: Aleksandar Markovic <amarko...@wavecomp.com> Signed-off-by: Stefan Markovic <smarko...@wavecomp.com> --- hw/mips/mips_malta.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c index f261dd6..40041d5 100644 --- a/hw/mips/mips_malta.c +++ b/hw/mips/mips_malta.c @@ -630,8 +630,14 @@ static void write_bootloader_nanomips(uint8_t *base, int64_t run_addr, /* nop */ /* to_here: */ - stw_p(p++, 0x0080); stw_p(p++, 0x0002); + if (semihosting_get_argc()) { + /* Preserve a0 content as arguments have been passed */ + stw_p(p++, 0x8000); stw_p(p++, 0xc000); + /* nop */ + } else { + stw_p(p++, 0x0080); stw_p(p++, 0x0002); /* li a0,2 */ + } stw_p(p++, 0xe3a0 | NM_HI1(ENVP_ADDR - 64)); -- 2.7.4