@@ -164,7 +164,6 @@ FIELD(CR_TLBMISC, EE, 24, 1)
/* Exceptions */
#define EXCP_BREAK 0x1000
-#define EXCP_SEMIHOST 0x1001
#define EXCP_RESET 0
#define EXCP_PRESET 1
#define EXCP_IRQ 2
@@ -269,8 +268,6 @@ G_NORETURN void nios2_cpu_do_unaligned_access(CPUState *cpu, vaddr addr,
G_NORETURN void nios2_cpu_loop_exit_advance(CPUNios2State *env,
uintptr_t retaddr);
-void do_nios2_semihosting(CPUNios2State *env);
-
#define CPU_RESOLVING_TYPE TYPE_NIOS2_CPU
#define cpu_gen_code cpu_nios2_gen_code
@@ -29,4 +29,5 @@ DEF_HELPER_3(wrprs, void, env, i32, i32)
DEF_HELPER_2(mmu_write_tlbacc, void, env, i32)
DEF_HELPER_2(mmu_write_tlbmisc, void, env, i32)
DEF_HELPER_2(mmu_write_pteaddr, void, env, i32)
+DEF_HELPER_1(semihosting, void, env)
#endif
@@ -173,9 +173,6 @@ void nios2_cpu_do_interrupt(CPUState *cs)
case EXCP_BREAK:
name = "BREAK insn";
break;
- case EXCP_SEMIHOST:
- name = "SEMIHOST insn";
- break;
}
if (name) {
qemu_log("%s at pc=0x%08x\n", name, env->pc);
@@ -250,10 +247,6 @@ void nios2_cpu_do_interrupt(CPUState *cs)
do_exception(cpu, cpu->exception_addr, 0, true);
break;
- case EXCP_SEMIHOST:
- do_nios2_semihosting(env);
- break;
-
default:
cpu_abort(cs, "unhandled exception type=%d\n", cs->exception_index);
}
@@ -32,6 +32,7 @@
#include "semihosting/softmmu-uaccess.h"
#endif
#include "qemu/log.h"
+#include "exec/helper-proto.h"
#define HOSTED_EXIT 0
#define HOSTED_INIT_SIM 1
@@ -91,7 +92,7 @@ static void nios2_semi_u64_cb(CPUState *cs, uint64_t ret, int err)
} \
} while (0)
-void do_nios2_semihosting(CPUNios2State *env)
+void HELPER(semihosting)(CPUNios2State *env)
{
CPUState *cs = env_cpu(env);
int nr;
@@ -819,7 +819,7 @@ static void gen_break(DisasContext *dc, uint32_t code, uint32_t flags)
/* The semihosting instruction is "break 1". */
R_TYPE(instr, code);
if (semihosting_enabled() && instr.imm5 == 1) {
- t_gen_helper_raise_exception(dc, EXCP_SEMIHOST);
+ gen_helper_semihosting(cpu_env);
return;
}
#endif
There's no need to raise an exception; just call the helper function directly. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> --- target/nios2/cpu.h | 3 --- target/nios2/helper.h | 1 + target/nios2/helper.c | 7 ------- target/nios2/nios2-semi.c | 3 ++- target/nios2/translate.c | 2 +- 5 files changed, 4 insertions(+), 12 deletions(-)