|
@@ -221,18 +221,6 @@ static int copy_argn_to_target(CPUMIPSState *env, int arg_num,
|
|
} \
|
|
} \
|
|
} while (0)
|
|
} 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) \
|
|
#define FREE_TARGET_STRING(p, gpr) \
|
|
do { \
|
|
do { \
|
|
unlock_user(p, gpr, 0); \
|
|
unlock_user(p, gpr, 0); \
|
|
@@ -243,7 +231,7 @@ void mips_semihosting(CPUMIPSState *env)
|
|
CPUState *cs = env_cpu(env);
|
|
CPUState *cs = env_cpu(env);
|
|
target_ulong *gpr = env->active_tc.gpr;
|
|
target_ulong *gpr = env->active_tc.gpr;
|
|
const UHIOp op = gpr[25];
|
|
const UHIOp op = gpr[25];
|
|
- char *p, *p2;
|
|
|
|
|
|
+ char *p;
|
|
|
|
|
|
switch (op) {
|
|
switch (op) {
|
|
case UHI_exit:
|
|
case UHI_exit:
|
|
@@ -355,14 +343,23 @@ void mips_semihosting(CPUMIPSState *env)
|
|
break;
|
|
break;
|
|
|
|
|
|
case UHI_assert:
|
|
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:
|
|
default:
|
|
error_report("Unknown UHI operation %d", op);
|
|
error_report("Unknown UHI operation %d", op);
|
|
abort();
|
|
abort();
|