mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-10 02:54:58 -06:00
target/mips: Use an exception for semihosting
Within do_interrupt, we hold the iothread lock, which is required for Chardev access for the console, and for the round trip for use_gdb_syscalls(). Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
a638af09b6
commit
8ec7e3c53d
10 changed files with 19 additions and 21 deletions
|
@ -20,10 +20,10 @@
|
|||
#include "qemu/osdep.h"
|
||||
#include "cpu.h"
|
||||
#include "qemu/log.h"
|
||||
#include "exec/helper-proto.h"
|
||||
#include "semihosting/softmmu-uaccess.h"
|
||||
#include "semihosting/semihost.h"
|
||||
#include "semihosting/console.h"
|
||||
#include "internal.h"
|
||||
|
||||
typedef enum UHIOp {
|
||||
UHI_exit = 1,
|
||||
|
@ -238,7 +238,7 @@ static int copy_argn_to_target(CPUMIPSState *env, int arg_num,
|
|||
unlock_user(p, gpr, 0); \
|
||||
} while (0)
|
||||
|
||||
void helper_do_semihosting(CPUMIPSState *env)
|
||||
void mips_semihosting(CPUMIPSState *env)
|
||||
{
|
||||
target_ulong *gpr = env->active_tc.gpr;
|
||||
const UHIOp op = gpr[25];
|
||||
|
|
|
@ -1053,6 +1053,10 @@ void mips_cpu_do_interrupt(CPUState *cs)
|
|||
}
|
||||
offset = 0x180;
|
||||
switch (cs->exception_index) {
|
||||
case EXCP_SEMIHOST:
|
||||
cs->exception_index = EXCP_NONE;
|
||||
mips_semihosting(env);
|
||||
return;
|
||||
case EXCP_DSS:
|
||||
env->CP0_Debug |= 1 << CP0DB_DSS;
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue