diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2022-06-28 16:46:58 +0530 |
---|---|---|
committer | Philippe Mathieu-Daudé <f4bug@amsat.org> | 2022-07-12 22:32:08 +0200 |
commit | 412411b352d4b9226e5a506fdb6cadd17b83ba4a (patch) | |
tree | ceae81a82bbbbcfc50c5ffeaa3f74749cf7dec56 /target | |
parent | ea4210600db3c5721f90d46d9ad9ece120010041 (diff) | |
download | qemu-412411b352d4b9226e5a506fdb6cadd17b83ba4a.zip qemu-412411b352d4b9226e5a506fdb6cadd17b83ba4a.tar.gz qemu-412411b352d4b9226e5a506fdb6cadd17b83ba4a.tar.bz2 |
target/mips: Use error_report for UHI_assert
Always log the assert locally. Do not report_fault, but
instead include the fact of the fault in the assertion.
Don't bother freeing allocated strings before the abort().
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Message-Id: <20220628111701.677216-6-richard.henderson@linaro.org>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Diffstat (limited to 'target')
-rw-r--r-- | target/mips/tcg/sysemu/mips-semi.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/target/mips/tcg/sysemu/mips-semi.c b/target/mips/tcg/sysemu/mips-semi.c index ad11a46..ae4b884 100644 --- a/target/mips/tcg/sysemu/mips-semi.c +++ b/target/mips/tcg/sysemu/mips-semi.c @@ -221,18 +221,6 @@ static int copy_argn_to_target(CPUMIPSState *env, int arg_num, } \ } while (0) -#define GET_TARGET_STRINGS_2(p, addr, p2, addr2) \ - do { \ - p = lock_user_string(addr); \ - if (!p) { \ - report_fault(env); \ - } \ - p2 = lock_user_string(addr2); \ - if (!p2) { \ - report_fault(env); \ - } \ - } while (0) - #define FREE_TARGET_STRING(p, gpr) \ do { \ unlock_user(p, gpr, 0); \ @@ -243,7 +231,7 @@ void mips_semihosting(CPUMIPSState *env) CPUState *cs = env_cpu(env); target_ulong *gpr = env->active_tc.gpr; const UHIOp op = gpr[25]; - char *p, *p2; + char *p; switch (op) { case UHI_exit: @@ -355,14 +343,23 @@ void mips_semihosting(CPUMIPSState *env) break; case UHI_assert: - GET_TARGET_STRINGS_2(p, gpr[4], p2, gpr[5]); - printf("assertion '"); - printf("\"%s\"", p); - printf("': file \"%s\", line %d\n", p2, (int)gpr[6]); - FREE_TARGET_STRING(p2, gpr[5]); - FREE_TARGET_STRING(p, gpr[4]); - abort(); - break; + { + const char *msg, *file; + + msg = lock_user_string(gpr[4]); + if (!msg) { + msg = "<EFAULT>"; + } + file = lock_user_string(gpr[5]); + if (!file) { + file = "<EFAULT>"; + } + + error_report("UHI assertion \"%s\": file \"%s\", line %d", + msg, file, (int)gpr[6]); + abort(); + } + default: error_report("Unknown UHI operation %d", op); abort(); |