target/loongarch/arch_dump.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
Variable env->cf[i] is defined as bool type, it cannot be used with left
shifting operation. There is existing api read_fcc(), it can be used when
dumping fp registers into coredump note segment.
Resolves: Coverity CID 1561133
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
---
target/loongarch/arch_dump.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/target/loongarch/arch_dump.c b/target/loongarch/arch_dump.c
index 4986db970e..d9e1120333 100644
--- a/target/loongarch/arch_dump.c
+++ b/target/loongarch/arch_dump.c
@@ -97,11 +97,7 @@ static int loongarch_write_elf64_fprpreg(WriteCoreDumpFunction f,
loongarch_note_init(¬e, s, "CORE", 5, NT_PRFPREG, sizeof(note.fpu));
note.fpu.fcsr = cpu_to_dump64(s, env->fcsr0);
-
- for (i = 0; i < 8; i++) {
- note.fpu.fcc |= env->cf[i] << (8 * i);
- }
- note.fpu.fcc = cpu_to_dump64(s, note.fpu.fcc);
+ note.fpu.fcc = cpu_to_dump64(s, read_fcc(env));
for (i = 0; i < 32; ++i) {
note.fpu.fpr[i] = cpu_to_dump64(s, env->fpr[i].vreg.UD[0]);
base-commit: 28ae3179fc52d2e4d870b635c4a412aab99759e7
--
2.39.3
On 9/13/24 18:43, Bibo Mao wrote: > Variable env->cf[i] is defined as bool type, it cannot be used with left > shifting operation. Not true; it promotes to 'int'. But that isn't wide enough for the value that you're trying to construct. There is existing api read_fcc(), it can be used when > dumping fp registers into coredump note segment. > > Resolves: Coverity CID 1561133 > Signed-off-by: Bibo Mao <maobibo@loongson.cn> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~ > --- > target/loongarch/arch_dump.c | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/target/loongarch/arch_dump.c b/target/loongarch/arch_dump.c > index 4986db970e..d9e1120333 100644 > --- a/target/loongarch/arch_dump.c > +++ b/target/loongarch/arch_dump.c > @@ -97,11 +97,7 @@ static int loongarch_write_elf64_fprpreg(WriteCoreDumpFunction f, > > loongarch_note_init(¬e, s, "CORE", 5, NT_PRFPREG, sizeof(note.fpu)); > note.fpu.fcsr = cpu_to_dump64(s, env->fcsr0); > - > - for (i = 0; i < 8; i++) { > - note.fpu.fcc |= env->cf[i] << (8 * i); > - } > - note.fpu.fcc = cpu_to_dump64(s, note.fpu.fcc); > + note.fpu.fcc = cpu_to_dump64(s, read_fcc(env)); > > for (i = 0; i < 32; ++i) { > note.fpu.fpr[i] = cpu_to_dump64(s, env->fpr[i].vreg.UD[0]); > > base-commit: 28ae3179fc52d2e4d870b635c4a412aab99759e7
On 2024/9/14 上午10:58, Richard Henderson wrote: > On 9/13/24 18:43, Bibo Mao wrote: >> Variable env->cf[i] is defined as bool type, it cannot be used with left >> shifting operation. > > Not true; it promotes to 'int'. But that isn't wide enough for the > value that you're trying to construct. yeap, you are right. Variable with 'bool' type can be used with left shifting and treated as 'int' type. I will refresh patch in the next version. Regards Bibo Mao > > There is existing api read_fcc(), it can be used when >> dumping fp registers into coredump note segment. >> >> Resolves: Coverity CID 1561133 >> Signed-off-by: Bibo Mao <maobibo@loongson.cn> > > Reviewed-by: Richard Henderson <richard.henderson@linaro.org> > > r~ > >> --- >> target/loongarch/arch_dump.c | 6 +----- >> 1 file changed, 1 insertion(+), 5 deletions(-) >> >> diff --git a/target/loongarch/arch_dump.c b/target/loongarch/arch_dump.c >> index 4986db970e..d9e1120333 100644 >> --- a/target/loongarch/arch_dump.c >> +++ b/target/loongarch/arch_dump.c >> @@ -97,11 +97,7 @@ static int >> loongarch_write_elf64_fprpreg(WriteCoreDumpFunction f, >> loongarch_note_init(¬e, s, "CORE", 5, NT_PRFPREG, >> sizeof(note.fpu)); >> note.fpu.fcsr = cpu_to_dump64(s, env->fcsr0); >> - >> - for (i = 0; i < 8; i++) { >> - note.fpu.fcc |= env->cf[i] << (8 * i); >> - } >> - note.fpu.fcc = cpu_to_dump64(s, note.fpu.fcc); >> + note.fpu.fcc = cpu_to_dump64(s, read_fcc(env)); >> for (i = 0; i < 32; ++i) { >> note.fpu.fpr[i] = cpu_to_dump64(s, env->fpr[i].vreg.UD[0]); >> >> base-commit: 28ae3179fc52d2e4d870b635c4a412aab99759e7 >
© 2016 - 2024 Red Hat, Inc.