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>
This commit is contained in:
parent
ea4210600d
commit
412411b352
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user