mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 15:53:54 -06:00
riscv: Add semihosting support
Adapt the arm semihosting support code for RISCV. This implementation is based on the standard for RISC-V semihosting version 0.2 as documented in https://github.com/riscv/riscv-semihosting-spec/releases/tag/0.2 Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-Id: <20210107170717.2098982-6-keithp@keithp.com> Message-Id: <20210108224256.2321-17-alex.bennee@linaro.org>
This commit is contained in:
parent
095f8c0293
commit
a10b9d93ec
13 changed files with 162 additions and 12 deletions
|
@ -24,6 +24,7 @@
|
|||
#include "exec/exec-all.h"
|
||||
#include "tcg/tcg-op.h"
|
||||
#include "trace.h"
|
||||
#include "hw/semihosting/common-semi.h"
|
||||
|
||||
int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch)
|
||||
{
|
||||
|
@ -847,6 +848,15 @@ void riscv_cpu_do_interrupt(CPUState *cs)
|
|||
target_ulong htval = 0;
|
||||
target_ulong mtval2 = 0;
|
||||
|
||||
if (cause == RISCV_EXCP_SEMIHOST) {
|
||||
if (env->priv >= PRV_S) {
|
||||
env->gpr[xA0] = do_common_semihosting(cs);
|
||||
env->pc += 4;
|
||||
return;
|
||||
}
|
||||
cause = RISCV_EXCP_BREAKPOINT;
|
||||
}
|
||||
|
||||
if (!async) {
|
||||
/* set tval to badaddr for traps with address information */
|
||||
switch (cause) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue