There's no need to raise an exception; just call the helper function directly.
Signed-off-by: Richard Henderson <richard.hender...@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(-) diff --git a/target/nios2/cpu.h b/target/nios2/cpu.h index f85581ee56..75a111a25e 100644 --- a/target/nios2/cpu.h +++ b/target/nios2/cpu.h @@ -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 diff --git a/target/nios2/helper.h b/target/nios2/helper.h index 1648d76ade..51ec2b35a0 100644 --- a/target/nios2/helper.h +++ b/target/nios2/helper.h @@ -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 diff --git a/target/nios2/helper.c b/target/nios2/helper.c index bb3b09e5a7..491cbd486f 100644 --- a/target/nios2/helper.c +++ b/target/nios2/helper.c @@ -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); } diff --git a/target/nios2/nios2-semi.c b/target/nios2/nios2-semi.c index 3dad72d1f6..9648030d37 100644 --- a/target/nios2/nios2-semi.c +++ b/target/nios2/nios2-semi.c @@ -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; diff --git a/target/nios2/translate.c b/target/nios2/translate.c index 3a037a68cc..f245fd7d0a 100644 --- a/target/nios2/translate.c +++ b/target/nios2/translate.c @@ -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 -- 2.34.1