* [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
* 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 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
* [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: 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: 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
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).