Message ID | 1304801048-26036-1-git-send-email-weil@mail.berlios.de |
---|---|
State | Under Review |
Headers | show |
On 7 May 2011 21:44, Stefan Weil <weil@mail.berlios.de> wrote: > cppcheck report: > linux-user/signal.c:2057: error: Uninitialized variable: err > > cppcheck is correct. Setting err = 0 is a workaround to avoid > random results and the cppcheck warning. > > Function restore_fpu_state is currently unused, so I disabled the code. (This is in the SPARC-specific part of that file, to save other people having to dig through for the relevant ifdef; maybe we should split it up rather than having every target cpu have its own huge ifdef-guarded section...) I'm not sure there's much point in putting in the "err=0" change as well as ifdef'ing out the function, is there? The code is clearly broken and whoever fixes it will end up doing something similar then. Obviously it would be nicer to actually fix the code, since at the moment it means if your SPARC binary uses floating point in a signal handler it can trash registers. Luckily given where qemu takes guest signals it's quite hard to actually provoke visible problems with this. I'm surprised gcc doesn't complain about this. -- PMM
diff --git a/linux-user/signal.c b/linux-user/signal.c index ce033e9..4bda475 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -2027,6 +2027,8 @@ sigsegv: unlock_user(sf, sf_addr, sizeof(struct target_signal_frame)); force_sig(TARGET_SIGSEGV); } + +#if 0 /* TODO: function is unused */ static inline int restore_fpu_state(CPUState *env, qemu_siginfo_fpu_t *fpu) { @@ -2053,6 +2055,8 @@ restore_fpu_state(CPUState *env, qemu_siginfo_fpu_t *fpu) /* XXX: incorrect */ err = __copy_from_user(&env->fpr[0], &fpu->si_float_regs[0], (sizeof(unsigned long) * 32)); +#else + err = 0; #endif err |= __get_user(env->fsr, &fpu->si_fsr); #if 0 @@ -2065,7 +2069,7 @@ restore_fpu_state(CPUState *env, qemu_siginfo_fpu_t *fpu) #endif return err; } - +#endif static void setup_rt_frame(int sig, struct target_sigaction *ka, target_siginfo_t *info,
cppcheck report: linux-user/signal.c:2057: error: Uninitialized variable: err cppcheck is correct. Setting err = 0 is a workaround to avoid random results and the cppcheck warning. Function restore_fpu_state is currently unused, so I disabled the code. Signed-off-by: Stefan Weil <weil@mail.berlios.de> --- linux-user/signal.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)