[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] target/mips/helper: Also display exception names in user-mod
From: |
Philippe Mathieu-Daudé |
Subject: |
Re: [PATCH] target/mips/helper: Also display exception names in user-mode |
Date: |
Thu, 19 Nov 2020 15:45:54 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.4.0 |
On 11/19/20 2:18 PM, Philippe Mathieu-Daudé wrote:
> Currently MIPS exceptions are displayed as string in system-mode
> emulation, but as number in user-mode.
> Unify by extracting the current system-mode code as excp_name()
> and use that in user-mode.
>
> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> ---
> target/mips/helper.c | 23 +++++++++++++----------
> 1 file changed, 13 insertions(+), 10 deletions(-)
>
> diff --git a/target/mips/helper.c b/target/mips/helper.c
> index 063b65c0528..f566bd6da50 100644
> --- a/target/mips/helper.c
> +++ b/target/mips/helper.c
> @@ -978,6 +978,7 @@ hwaddr cpu_mips_translate_address(CPUMIPSState *env,
> target_ulong address,
> return physical;
> }
> }
> +#endif
>
> static const char * const excp_names[EXCP_LAST + 1] = {
> [EXCP_RESET] = "reset",
> @@ -1018,7 +1019,14 @@ static const char * const excp_names[EXCP_LAST + 1] = {
> [EXCP_MSADIS] = "MSA disabled",
> [EXCP_MSAFPE] = "MSA floating point",
> };
> -#endif
> +
> +static const char *excp_name(int32_t exception)
> +{
> + if (exception < 0 || exception > EXCP_LAST) {
> + return "unknown";
> + }
> + return excp_names[exception];
> +}
>
> target_ulong exception_resume_pc(CPUMIPSState *env)
> {
> @@ -1091,19 +1099,14 @@ void mips_cpu_do_interrupt(CPUState *cs)
> bool update_badinstr = 0;
> target_ulong offset;
> int cause = -1;
> - const char *name;
>
> if (qemu_loglevel_mask(CPU_LOG_INT)
> && cs->exception_index != EXCP_EXT_INTERRUPT) {
> if (cs->exception_index < 0 || cs->exception_index > EXCP_LAST) {
I clearly failed to fix the cherry-pick conflict =)
> - name = "unknown";
> - } else {
> - name = excp_names[cs->exception_index];
> - }
> -
> qemu_log("%s enter: PC " TARGET_FMT_lx " EPC " TARGET_FMT_lx
> " %s exception\n",
> - __func__, env->active_tc.PC, env->CP0_EPC, name);
> + __func__, env->active_tc.PC, env->CP0_EPC,
> + excp_name(cs->exception_index));
> }
> if (cs->exception_index == EXCP_EXT_INTERRUPT &&
> (env->hflags & MIPS_HFLAG_DM)) {
> @@ -1490,8 +1493,8 @@ void QEMU_NORETURN do_raise_exception_err(CPUMIPSState
> *env,
> {
> CPUState *cs = env_cpu(env);
>
> - qemu_log_mask(CPU_LOG_INT, "%s: %d %d\n",
> - __func__, exception, error_code);
> + qemu_log_mask(CPU_LOG_INT, "%s: %d (%s) %d\n",
> + __func__, exception, excp_name(exception), error_code);
> cs->exception_index = exception;
> env->error_code = error_code;
>
>