Message ID | 20241025141254.2141506-11-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
Series | softfloat: Set 2-NaN propagation rule in float_status, not at compile time | expand |
On 25/10/24 11:12, Peter Maydell wrote: > In cf_fpu_gdb_get_reg() and cf_fpu_gdb_set_reg() we use a temporary > float_status variable to pass to floatx80_to_float64() and > float64_to_floatx80(), but we don't initialize it, meaning that those > functions could access uninitialized data. Zero-init the structs. > > (We don't need to set a NaN-propagation rule here because we > don't use these with a 2-argument fpu operation.) > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > Spotted by code-inspection while I was doing the 2-NaN propagation > patches. > --- > target/m68k/helper.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/target/m68k/helper.c b/target/m68k/helper.c > index 9d3db8419de..9bfc6ae97c0 100644 > --- a/target/m68k/helper.c > +++ b/target/m68k/helper.c > @@ -36,7 +36,7 @@ static int cf_fpu_gdb_get_reg(CPUState *cs, GByteArray *mem_buf, int n) > CPUM68KState *env = &cpu->env; > > if (n < 8) { > - float_status s; > + float_status s = {}; > return gdb_get_reg64(mem_buf, floatx80_to_float64(env->fregs[n].d, &s)); While here, could be renamed as 'discard' like SPARC. Regardless: Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> > } > switch (n) { > @@ -56,7 +56,7 @@ static int cf_fpu_gdb_set_reg(CPUState *cs, uint8_t *mem_buf, int n) > CPUM68KState *env = &cpu->env; > > if (n < 8) { > - float_status s; > + float_status s = {}; > env->fregs[n].d = float64_to_floatx80(ldq_be_p(mem_buf), &s); > return 8; > }
On 10/25/24 15:12, Peter Maydell wrote: > In cf_fpu_gdb_get_reg() and cf_fpu_gdb_set_reg() we use a temporary > float_status variable to pass to floatx80_to_float64() and > float64_to_floatx80(), but we don't initialize it, meaning that those > functions could access uninitialized data. Zero-init the structs. > > (We don't need to set a NaN-propagation rule here because we > don't use these with a 2-argument fpu operation.) > > Signed-off-by: Peter Maydell<peter.maydell@linaro.org> > --- > Spotted by code-inspection while I was doing the 2-NaN propagation > patches. > --- > target/m68k/helper.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
diff --git a/target/m68k/helper.c b/target/m68k/helper.c index 9d3db8419de..9bfc6ae97c0 100644 --- a/target/m68k/helper.c +++ b/target/m68k/helper.c @@ -36,7 +36,7 @@ static int cf_fpu_gdb_get_reg(CPUState *cs, GByteArray *mem_buf, int n) CPUM68KState *env = &cpu->env; if (n < 8) { - float_status s; + float_status s = {}; return gdb_get_reg64(mem_buf, floatx80_to_float64(env->fregs[n].d, &s)); } switch (n) { @@ -56,7 +56,7 @@ static int cf_fpu_gdb_set_reg(CPUState *cs, uint8_t *mem_buf, int n) CPUM68KState *env = &cpu->env; if (n < 8) { - float_status s; + float_status s = {}; env->fregs[n].d = float64_to_floatx80(ldq_be_p(mem_buf), &s); return 8; }
In cf_fpu_gdb_get_reg() and cf_fpu_gdb_set_reg() we use a temporary float_status variable to pass to floatx80_to_float64() and float64_to_floatx80(), but we don't initialize it, meaning that those functions could access uninitialized data. Zero-init the structs. (We don't need to set a NaN-propagation rule here because we don't use these with a 2-argument fpu operation.) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- Spotted by code-inspection while I was doing the 2-NaN propagation patches. --- target/m68k/helper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)