* [Qemu-devel] [PATCH] target-mips: correct DERET instruction
@ 2015-07-14 10:08 Leon Alrae
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity Leon Alrae
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Leon Alrae @ 2015-07-14 10:08 UTC (permalink / raw)
To: qemu-devel; +Cc: aurelien
Fix Debug Mode flag clearing, and when DERET is placed between LL and SC
do not make SC fail.
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
---
target-mips/op_helper.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 2a9ddff..d461ad8 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -2154,10 +2154,9 @@ void helper_deret(CPUMIPSState *env)
debug_pre_eret(env);
set_pc(env, env->CP0_DEPC);
- env->hflags &= MIPS_HFLAG_DM;
+ env->hflags &= ~MIPS_HFLAG_DM;
compute_hflags(env);
debug_post_eret(env);
- env->lladdr = 1;
}
#endif /* !CONFIG_USER_ONLY */
--
2.1.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity
2015-07-14 10:08 [Qemu-devel] [PATCH] target-mips: correct DERET instruction Leon Alrae
@ 2015-07-14 10:08 ` Leon Alrae
2015-07-14 15:45 ` Aurelien Jarno
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix resource leak " Leon Alrae
2015-07-14 15:45 ` [Qemu-devel] [PATCH] target-mips: correct DERET instruction Aurelien Jarno
2 siblings, 1 reply; 8+ messages in thread
From: Leon Alrae @ 2015-07-14 10:08 UTC (permalink / raw)
To: qemu-devel; +Cc: aurelien
Make use of CMPOP in floating-point compare instructions.
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
---
target-mips/translate.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/target-mips/translate.c b/target-mips/translate.c
index 7302857..4a1ffdb 100644
--- a/target-mips/translate.c
+++ b/target-mips/translate.c
@@ -9552,6 +9552,7 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1,
gen_cmp_s(ctx, func-48, ft, fs, cc);
opn = condnames[func-48];
}
+ optype = CMPOP;
break;
case OPC_ADD_D:
check_cp1_registers(ctx, fs | ft | fd);
@@ -10036,6 +10037,7 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1,
gen_cmp_d(ctx, func-48, ft, fs, cc);
opn = condnames[func-48];
}
+ optype = CMPOP;
break;
case OPC_CVT_S_D:
check_cp1_registers(ctx, fs);
@@ -10461,6 +10463,7 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1,
gen_cmp_ps(ctx, func-48, ft, fs, cc);
opn = condnames[func-48];
}
+ optype = CMPOP;
break;
default:
MIPS_INVAL(opn);
--
2.1.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [Qemu-devel] [PATCH] target-mips: fix resource leak reported by Coverity
2015-07-14 10:08 [Qemu-devel] [PATCH] target-mips: correct DERET instruction Leon Alrae
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity Leon Alrae
@ 2015-07-14 10:08 ` Leon Alrae
2015-07-14 15:45 ` Aurelien Jarno
2015-07-14 15:45 ` [Qemu-devel] [PATCH] target-mips: correct DERET instruction Aurelien Jarno
2 siblings, 1 reply; 8+ messages in thread
From: Leon Alrae @ 2015-07-14 10:08 UTC (permalink / raw)
To: qemu-devel; +Cc: aurelien
UHI assert and link operations call lock_user_string() twice to obtain two
strings pointed by gpr[4] and gpr[5]. If the second lock_user_string()
fails, then the first one won't get freed. Fix this by introducing another
macro responsible for obtaining two strings and handling allocation
failure.
Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
---
target-mips/mips-semi.c | 23 +++++++++++++++++++----
1 file changed, 19 insertions(+), 4 deletions(-)
diff --git a/target-mips/mips-semi.c b/target-mips/mips-semi.c
index 1162c76..5050940 100644
--- a/target-mips/mips-semi.c
+++ b/target-mips/mips-semi.c
@@ -220,6 +220,23 @@ 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) { \
+ gpr[2] = -1; \
+ gpr[3] = EFAULT; \
+ goto uhi_done; \
+ } \
+ p2 = lock_user_string(addr2); \
+ if (!p2) { \
+ unlock_user(p, addr, 0); \
+ gpr[2] = -1; \
+ gpr[3] = EFAULT; \
+ goto uhi_done; \
+ } \
+ } while (0)
+
#define FREE_TARGET_STRING(p, gpr) \
do { \
unlock_user(p, gpr, 0); \
@@ -322,8 +339,7 @@ void helper_do_semihosting(CPUMIPSState *env)
FREE_TARGET_STRING(p, gpr[4]);
break;
case UHI_assert:
- GET_TARGET_STRING(p, gpr[4]);
- GET_TARGET_STRING(p2, gpr[5]);
+ 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]);
@@ -341,8 +357,7 @@ void helper_do_semihosting(CPUMIPSState *env)
break;
#ifndef _WIN32
case UHI_link:
- GET_TARGET_STRING(p, gpr[4]);
- GET_TARGET_STRING(p2, gpr[5]);
+ GET_TARGET_STRINGS_2(p, gpr[4], p2, gpr[5]);
gpr[2] = link(p, p2);
gpr[3] = errno_mips(errno);
FREE_TARGET_STRING(p2, gpr[5]);
--
2.1.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] target-mips: correct DERET instruction
2015-07-14 10:08 [Qemu-devel] [PATCH] target-mips: correct DERET instruction Leon Alrae
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity Leon Alrae
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix resource leak " Leon Alrae
@ 2015-07-14 15:45 ` Aurelien Jarno
2 siblings, 0 replies; 8+ messages in thread
From: Aurelien Jarno @ 2015-07-14 15:45 UTC (permalink / raw)
To: Leon Alrae; +Cc: qemu-devel
On 2015-07-14 11:08, Leon Alrae wrote:
> Fix Debug Mode flag clearing, and when DERET is placed between LL and SC
> do not make SC fail.
>
> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
> ---
> target-mips/op_helper.c | 3 +--
> 1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
> index 2a9ddff..d461ad8 100644
> --- a/target-mips/op_helper.c
> +++ b/target-mips/op_helper.c
> @@ -2154,10 +2154,9 @@ void helper_deret(CPUMIPSState *env)
> debug_pre_eret(env);
> set_pc(env, env->CP0_DEPC);
>
> - env->hflags &= MIPS_HFLAG_DM;
> + env->hflags &= ~MIPS_HFLAG_DM;
> compute_hflags(env);
> debug_post_eret(env);
> - env->lladdr = 1;
> }
> #endif /* !CONFIG_USER_ONLY */
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity Leon Alrae
@ 2015-07-14 15:45 ` Aurelien Jarno
2015-07-14 16:22 ` Leon Alrae
0 siblings, 1 reply; 8+ messages in thread
From: Aurelien Jarno @ 2015-07-14 15:45 UTC (permalink / raw)
To: Leon Alrae; +Cc: qemu-devel
On 2015-07-14 11:08, Leon Alrae wrote:
> Make use of CMPOP in floating-point compare instructions.
>
> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
> ---
> target-mips/translate.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/target-mips/translate.c b/target-mips/translate.c
> index 7302857..4a1ffdb 100644
> --- a/target-mips/translate.c
> +++ b/target-mips/translate.c
> @@ -9552,6 +9552,7 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1,
> gen_cmp_s(ctx, func-48, ft, fs, cc);
> opn = condnames[func-48];
> }
> + optype = CMPOP;
> break;
> case OPC_ADD_D:
> check_cp1_registers(ctx, fs | ft | fd);
> @@ -10036,6 +10037,7 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1,
> gen_cmp_d(ctx, func-48, ft, fs, cc);
> opn = condnames[func-48];
> }
> + optype = CMPOP;
> break;
> case OPC_CVT_S_D:
> check_cp1_registers(ctx, fs);
> @@ -10461,6 +10463,7 @@ static void gen_farith (DisasContext *ctx, enum fopcode op1,
> gen_cmp_ps(ctx, func-48, ft, fs, cc);
> opn = condnames[func-48];
> }
> + optype = CMPOP;
> break;
> default:
> MIPS_INVAL(opn);
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
By the way, is this debug code really useful? I think by looking at the
TCG code (-d in_asm,op), it's easy to determine if an instruction is
correctly disassembled or not.
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] target-mips: fix resource leak reported by Coverity
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix resource leak " Leon Alrae
@ 2015-07-14 15:45 ` Aurelien Jarno
0 siblings, 0 replies; 8+ messages in thread
From: Aurelien Jarno @ 2015-07-14 15:45 UTC (permalink / raw)
To: Leon Alrae; +Cc: qemu-devel
On 2015-07-14 11:08, Leon Alrae wrote:
> UHI assert and link operations call lock_user_string() twice to obtain two
> strings pointed by gpr[4] and gpr[5]. If the second lock_user_string()
> fails, then the first one won't get freed. Fix this by introducing another
> macro responsible for obtaining two strings and handling allocation
> failure.
>
> Signed-off-by: Leon Alrae <leon.alrae@imgtec.com>
> ---
> target-mips/mips-semi.c | 23 +++++++++++++++++++----
> 1 file changed, 19 insertions(+), 4 deletions(-)
>
> diff --git a/target-mips/mips-semi.c b/target-mips/mips-semi.c
> index 1162c76..5050940 100644
> --- a/target-mips/mips-semi.c
> +++ b/target-mips/mips-semi.c
> @@ -220,6 +220,23 @@ 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) { \
> + gpr[2] = -1; \
> + gpr[3] = EFAULT; \
> + goto uhi_done; \
> + } \
> + p2 = lock_user_string(addr2); \
> + if (!p2) { \
> + unlock_user(p, addr, 0); \
> + gpr[2] = -1; \
> + gpr[3] = EFAULT; \
> + goto uhi_done; \
> + } \
> + } while (0)
> +
> #define FREE_TARGET_STRING(p, gpr) \
> do { \
> unlock_user(p, gpr, 0); \
> @@ -322,8 +339,7 @@ void helper_do_semihosting(CPUMIPSState *env)
> FREE_TARGET_STRING(p, gpr[4]);
> break;
> case UHI_assert:
> - GET_TARGET_STRING(p, gpr[4]);
> - GET_TARGET_STRING(p2, gpr[5]);
> + 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]);
> @@ -341,8 +357,7 @@ void helper_do_semihosting(CPUMIPSState *env)
> break;
> #ifndef _WIN32
> case UHI_link:
> - GET_TARGET_STRING(p, gpr[4]);
> - GET_TARGET_STRING(p2, gpr[5]);
> + GET_TARGET_STRINGS_2(p, gpr[4], p2, gpr[5]);
> gpr[2] = link(p, p2);
> gpr[3] = errno_mips(errno);
> FREE_TARGET_STRING(p2, gpr[5]);
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity
2015-07-14 15:45 ` Aurelien Jarno
@ 2015-07-14 16:22 ` Leon Alrae
2015-07-14 16:26 ` Aurelien Jarno
0 siblings, 1 reply; 8+ messages in thread
From: Leon Alrae @ 2015-07-14 16:22 UTC (permalink / raw)
To: Aurelien Jarno; +Cc: qemu-devel
On 14/07/2015 16:45, Aurelien Jarno wrote:
> By the way, is this debug code really useful? I think by looking at the
> TCG code (-d in_asm,op), it's easy to determine if an instruction is
> correctly disassembled or not.
>
For me this debug code doesn't seem to be useful at all and it only clutters
translate.c :) In this patch I just wanted to make Coverity happy so I
followed the existing code but generally would vote for removal all of MIPS_DEBUG.
Leon
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity
2015-07-14 16:22 ` Leon Alrae
@ 2015-07-14 16:26 ` Aurelien Jarno
0 siblings, 0 replies; 8+ messages in thread
From: Aurelien Jarno @ 2015-07-14 16:26 UTC (permalink / raw)
To: Leon Alrae; +Cc: qemu-devel
On 2015-07-14 17:22, Leon Alrae wrote:
> On 14/07/2015 16:45, Aurelien Jarno wrote:
> > By the way, is this debug code really useful? I think by looking at the
> > TCG code (-d in_asm,op), it's easy to determine if an instruction is
> > correctly disassembled or not.
> >
>
> For me this debug code doesn't seem to be useful at all and it only clutters
> translate.c :) In this patch I just wanted to make Coverity happy so I
> followed the existing code but generally would vote for removal all of MIPS_DEBUG.
Ok, I'll work on a patch for 2.5. That said I think we should still
merge the patch for 2.4.
--
Aurelien Jarno GPG: 4096R/1DDD8C9B
aurelien@aurel32.net http://www.aurel32.net
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2015-07-14 16:26 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-14 10:08 [Qemu-devel] [PATCH] target-mips: correct DERET instruction Leon Alrae
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix logically dead code reported by Coverity Leon Alrae
2015-07-14 15:45 ` Aurelien Jarno
2015-07-14 16:22 ` Leon Alrae
2015-07-14 16:26 ` Aurelien Jarno
2015-07-14 10:08 ` [Qemu-devel] [PATCH] target-mips: fix resource leak " Leon Alrae
2015-07-14 15:45 ` Aurelien Jarno
2015-07-14 15:45 ` [Qemu-devel] [PATCH] target-mips: correct DERET instruction Aurelien Jarno
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).