* [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings @ 2011-06-16 16:37 Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 1/8] linuxload: id_change was a write only variable Peter Maydell ` (7 more replies) 0 siblings, 8 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches This is a collection of patches which fix the gcc 4.6 compile warnings in the linux-user code. Mostly they're from Juan's earlier patchset, in some cases with some minor tweaks by me as per review comments on that patchset. The last three I fixed in a different way so those are new patches. Sorry for producing yet another gcc 4.6 related patchset, but splitting out the linux-user patches to go through Riku's queue seems like a good way of moving these forward. (For those keeping score on the gcc 4.6 warning front the other fixes needed are: * two target-alpha fixes both acked by Richard Henderson: http://patchwork.ozlabs.org/patch/100463/ http://patchwork.ozlabs.org/patch/100456/ * lsi53c895a.c fix: in the trivial-patches pullreq * target-i386/kvm.c: being fixed by Jan Kiszka * exec.c patch http://patchwork.ozlabs.org/patch/98384/ ) Juan Quintela (5): linuxload: id_change was a write only variable syscall: really return ret code linux-user: syscall should use sanitized arg1 flatload: end_code was only used in a debug message flatload: memp was a write-only variable Peter Maydell (3): linux-user: Bump do_syscall() up to 8 syscall arguments linux-user/signal.c: Remove only-ever-set variable fpu_save_addr linux-user/signal.c: Remove unused fenab linux-user/flatload.c | 8 ++------ linux-user/linuxload.c | 25 +------------------------ linux-user/main.c | 37 ++++++++++++++++++++++++------------- linux-user/qemu.h | 3 ++- linux-user/signal.c | 17 ++++++++++------- linux-user/syscall.c | 20 +++++++++++--------- 6 files changed, 50 insertions(+), 60 deletions(-) ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 1/8] linuxload: id_change was a write only variable 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 2/8] syscall: really return ret code Peter Maydell ` (6 subsequent siblings) 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches From: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/linuxload.c | 25 +------------------------ 1 files changed, 1 insertions(+), 24 deletions(-) diff --git a/linux-user/linuxload.c b/linux-user/linuxload.c index ac8c486..62ebc7e 100644 --- a/linux-user/linuxload.c +++ b/linux-user/linuxload.c @@ -26,22 +26,6 @@ abi_long memcpy_to_target(abi_ulong dest, const void *src, return 0; } -static int in_group_p(gid_t g) -{ - /* return TRUE if we're in the specified group, FALSE otherwise */ - int ngroup; - int i; - gid_t grouplist[NGROUPS]; - - ngroup = getgroups(NGROUPS, grouplist); - for(i = 0; i < ngroup; i++) { - if(grouplist[i] == g) { - return 1; - } - } - return 0; -} - static int count(char ** vec) { int i; @@ -57,7 +41,7 @@ static int prepare_binprm(struct linux_binprm *bprm) { struct stat st; int mode; - int retval, id_change; + int retval; if(fstat(bprm->fd, &st) < 0) { return(-errno); @@ -73,14 +57,10 @@ static int prepare_binprm(struct linux_binprm *bprm) bprm->e_uid = geteuid(); bprm->e_gid = getegid(); - id_change = 0; /* Set-uid? */ if(mode & S_ISUID) { bprm->e_uid = st.st_uid; - if(bprm->e_uid != geteuid()) { - id_change = 1; - } } /* Set-gid? */ @@ -91,9 +71,6 @@ static int prepare_binprm(struct linux_binprm *bprm) */ if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) { bprm->e_gid = st.st_gid; - if (!in_group_p(bprm->e_gid)) { - id_change = 1; - } } retval = read(bprm->fd, bprm->buf, BPRM_BUF_SIZE); -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 2/8] syscall: really return ret code 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 1/8] linuxload: id_change was a write only variable Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 3/8] linux-user: syscall should use sanitized arg1 Peter Maydell ` (5 subsequent siblings) 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches From: Juan Quintela <quintela@redhat.com> We assign ret with the error code, but then return 0 unconditionally. Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/syscall.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 5cb27c7..f3d03b0 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -3751,10 +3751,10 @@ static abi_long do_get_thread_area(CPUX86State *env, abi_ulong ptr) #ifndef TARGET_ABI32 static abi_long do_arch_prctl(CPUX86State *env, int code, abi_ulong addr) { - abi_long ret; + abi_long ret = 0; abi_ulong val; int idx; - + switch(code) { case TARGET_ARCH_SET_GS: case TARGET_ARCH_SET_FS: @@ -3773,13 +3773,13 @@ static abi_long do_arch_prctl(CPUX86State *env, int code, abi_ulong addr) idx = R_FS; val = env->segs[idx].base; if (put_user(val, addr, abi_ulong)) - return -TARGET_EFAULT; + ret = -TARGET_EFAULT; break; default: ret = -TARGET_EINVAL; break; } - return 0; + return ret; } #endif -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 3/8] linux-user: syscall should use sanitized arg1 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 1/8] linuxload: id_change was a write only variable Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 2/8] syscall: really return ret code Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 4/8] flatload: end_code was only used in a debug message Peter Maydell ` (4 subsequent siblings) 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches From: Juan Quintela <quintela@redhat.com> Looking at the other architectures, we should be using "how" not "arg1". Signed-off-by: Juan Quintela <quintela@redhat.com> [peter.maydell@linaro.org: remove unnecessary initialisation of how] Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/syscall.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index f3d03b0..2635b75 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -7058,7 +7058,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, case TARGET_NR_osf_sigprocmask: { abi_ulong mask; - int how = arg1; + int how; sigset_t set, oldset; switch(arg1) { @@ -7077,7 +7077,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, } mask = arg2; target_to_host_old_sigset(&set, &mask); - sigprocmask(arg1, &set, &oldset); + sigprocmask(how, &set, &oldset); host_to_target_old_sigset(&mask, &oldset); ret = mask; } -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 4/8] flatload: end_code was only used in a debug message 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell ` (2 preceding siblings ...) 2011-06-16 16:37 ` [Qemu-devel] [PATCH 3/8] linux-user: syscall should use sanitized arg1 Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 5/8] flatload: memp was a write-only variable Peter Maydell ` (3 subsequent siblings) 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches From: Juan Quintela <quintela@redhat.com> Just unfold its definition in only use. Signed-off-by: Juan Quintela <quintela@redhat.com> [peter.maydell@linaro.org: fixed typo in the debug code, added parentheses to fix precedence issue] Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/flatload.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/linux-user/flatload.c b/linux-user/flatload.c index cd7af7c..6fb78f5 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -384,7 +384,7 @@ static int load_flat_file(struct linux_binprm * bprm, abi_ulong reloc = 0, rp; int i, rev, relocs = 0; abi_ulong fpos; - abi_ulong start_code, end_code; + abi_ulong start_code; abi_ulong indx_len; hdr = ((struct flat_hdr *) bprm->buf); /* exec-header */ @@ -552,11 +552,10 @@ static int load_flat_file(struct linux_binprm * bprm, /* The main program needs a little extra setup in the task structure */ start_code = textpos + sizeof (struct flat_hdr); - end_code = textpos + text_len; DBG_FLT("%s %s: TEXT=%x-%x DATA=%x-%x BSS=%x-%x\n", id ? "Lib" : "Load", bprm->filename, - (int) start_code, (int) end_code, + (int) start_code, (int) (textpos + text_len), (int) datapos, (int) (datapos + data_len), (int) (datapos + data_len), -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 5/8] flatload: memp was a write-only variable 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell ` (3 preceding siblings ...) 2011-06-16 16:37 ` [Qemu-devel] [PATCH 4/8] flatload: end_code was only used in a debug message Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 6/8] linux-user: Bump do_syscall() up to 8 syscall arguments Peter Maydell ` (2 subsequent siblings) 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches From: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/flatload.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-) diff --git a/linux-user/flatload.c b/linux-user/flatload.c index 6fb78f5..1062da3 100644 --- a/linux-user/flatload.c +++ b/linux-user/flatload.c @@ -379,7 +379,6 @@ static int load_flat_file(struct linux_binprm * bprm, abi_long result; abi_ulong realdatastart = 0; abi_ulong text_len, data_len, bss_len, stack_len, flags; - abi_ulong memp = 0; /* for finding the brk area */ abi_ulong extra; abi_ulong reloc = 0, rp; int i, rev, relocs = 0; @@ -491,7 +490,6 @@ static int load_flat_file(struct linux_binprm * bprm, } reloc = datapos + (ntohl(hdr->reloc_start) - text_len); - memp = realdatastart; } else { @@ -506,7 +504,6 @@ static int load_flat_file(struct linux_binprm * bprm, realdatastart = textpos + ntohl(hdr->data_start); datapos = realdatastart + indx_len; reloc = (textpos + ntohl(hdr->reloc_start) + indx_len); - memp = textpos; #ifdef CONFIG_BINFMT_ZFLAT #error code needs checking -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 6/8] linux-user: Bump do_syscall() up to 8 syscall arguments 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell ` (4 preceding siblings ...) 2011-06-16 16:37 ` [Qemu-devel] [PATCH 5/8] flatload: memp was a write-only variable Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 7/8] linux-user/signal.c: Remove only-ever-set variable fpu_save_addr Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 8/8] linux-user/signal.c: Remove unused fenab Peter Maydell 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches On 32 bit MIPS a few syscalls have 7 arguments, and so to call them via NR_syscall the guest needs to be able to pass 8 arguments to do_syscall(). Raise the number of arguments do_syscall() takes accordingly. This fixes some gcc 4.6 compiler warnings about arg7 and arg8 variables being set and never used. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/main.c | 37 ++++++++++++++++++++++++------------- linux-user/qemu.h | 3 ++- linux-user/syscall.c | 8 +++++--- 3 files changed, 31 insertions(+), 17 deletions(-) diff --git a/linux-user/main.c b/linux-user/main.c index 71dd253..1293450 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -319,7 +319,8 @@ void cpu_loop(CPUX86State *env) env->regs[R_EDX], env->regs[R_ESI], env->regs[R_EDI], - env->regs[R_EBP]); + env->regs[R_EBP], + 0, 0); break; #ifndef TARGET_ABI32 case EXCP_SYSCALL: @@ -331,7 +332,8 @@ void cpu_loop(CPUX86State *env) env->regs[R_EDX], env->regs[10], env->regs[8], - env->regs[9]); + env->regs[9], + 0, 0); env->eip = env->exception_next_eip; break; #endif @@ -735,7 +737,8 @@ void cpu_loop(CPUARMState *env) env->regs[2], env->regs[3], env->regs[4], - env->regs[5]); + env->regs[5], + 0, 0); } } else { goto error; @@ -831,7 +834,8 @@ void cpu_loop(CPUState *env) env->regs[2], env->regs[3], env->regs[4], - env->regs[5]); + env->regs[5], + 0, 0); } } else { goto error; @@ -1018,7 +1022,8 @@ void cpu_loop (CPUSPARCState *env) ret = do_syscall (env, env->gregs[1], env->regwptr[0], env->regwptr[1], env->regwptr[2], env->regwptr[3], - env->regwptr[4], env->regwptr[5]); + env->regwptr[4], env->regwptr[5], + 0, 0); if ((abi_ulong)ret >= (abi_ulong)(-515)) { #if defined(TARGET_SPARC64) && !defined(TARGET_ABI32) env->xcc |= PSR_CARRY; @@ -1611,7 +1616,7 @@ void cpu_loop(CPUPPCState *env) env->crf[0] &= ~0x1; ret = do_syscall(env, env->gpr[0], env->gpr[3], env->gpr[4], env->gpr[5], env->gpr[6], env->gpr[7], - env->gpr[8]); + env->gpr[8], 0, 0); if (ret == (uint32_t)(-TARGET_QEMU_ESIGRETURN)) { /* Returning from a successful sigreturn syscall. Avoid corrupting register state. */ @@ -2072,7 +2077,7 @@ void cpu_loop(CPUMIPSState *env) env->active_tc.gpr[5], env->active_tc.gpr[6], env->active_tc.gpr[7], - arg5, arg6/*, arg7, arg8*/); + arg5, arg6, arg7, arg8); } if (ret == -TARGET_QEMU_ESIGRETURN) { /* Returning from a successful sigreturn syscall. @@ -2160,7 +2165,8 @@ void cpu_loop (CPUState *env) env->gregs[6], env->gregs[7], env->gregs[0], - env->gregs[1]); + env->gregs[1], + 0, 0); env->gregs[0] = ret; break; case EXCP_INTERRUPT: @@ -2229,7 +2235,8 @@ void cpu_loop (CPUState *env) env->regs[12], env->regs[13], env->pregs[7], - env->pregs[11]); + env->pregs[11], + 0, 0); env->regs[10] = ret; break; case EXCP_DEBUG: @@ -2288,7 +2295,8 @@ void cpu_loop (CPUState *env) env->regs[7], env->regs[8], env->regs[9], - env->regs[10]); + env->regs[10], + 0, 0); env->regs[3] = ret; env->sregs[SR_PC] = env->regs[14]; break; @@ -2398,7 +2406,8 @@ void cpu_loop(CPUM68KState *env) env->dregs[3], env->dregs[4], env->dregs[5], - env->aregs[0]); + env->aregs[0], + 0, 0); } break; case EXCP_INTERRUPT: @@ -2576,7 +2585,8 @@ void cpu_loop (CPUState *env) sysret = do_syscall(env, trapnr, env->ir[IR_A0], env->ir[IR_A1], env->ir[IR_A2], env->ir[IR_A3], - env->ir[IR_A4], env->ir[IR_A5]); + env->ir[IR_A4], env->ir[IR_A5], + 0, 0); if (trapnr == TARGET_NR_sigreturn || trapnr == TARGET_NR_rt_sigreturn) { break; @@ -2707,7 +2717,8 @@ void cpu_loop(CPUS390XState *env) env->regs[4], env->regs[5], env->regs[6], - env->regs[7]); + env->regs[7], + 0, 0); } break; case EXCP_ADDR: diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 237386c..627c8b3 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -192,7 +192,8 @@ abi_long do_brk(abi_ulong new_brk); void syscall_init(void); abi_long do_syscall(void *cpu_env, int num, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, - abi_long arg5, abi_long arg6); + abi_long arg5, abi_long arg6, abi_long arg7, + abi_long arg8); void gemu_log(const char *fmt, ...) GCC_FMT_ATTR(1, 2); extern THREAD CPUState *thread_env; void cpu_loop(CPUState *env); diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 2635b75..a95025f 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -4484,7 +4484,8 @@ int get_osversion(void) All errnos that do_syscall() returns must be -TARGET_<errcode>. */ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, abi_long arg2, abi_long arg3, abi_long arg4, - abi_long arg5, abi_long arg6) + abi_long arg5, abi_long arg6, abi_long arg7, + abi_long arg8) { abi_long ret; struct stat st; @@ -6029,8 +6030,9 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, #endif #ifdef TARGET_NR_syscall case TARGET_NR_syscall: - ret = do_syscall(cpu_env,arg1 & 0xffff,arg2,arg3,arg4,arg5,arg6,0); - break; + ret = do_syscall(cpu_env, arg1 & 0xffff, arg2, arg3, arg4, arg5, + arg6, arg7, arg8, 0); + break; #endif case TARGET_NR_wait4: { -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 7/8] linux-user/signal.c: Remove only-ever-set variable fpu_save_addr 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell ` (5 preceding siblings ...) 2011-06-16 16:37 ` [Qemu-devel] [PATCH 6/8] linux-user: Bump do_syscall() up to 8 syscall arguments Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 8/8] linux-user/signal.c: Remove unused fenab Peter Maydell 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches Move the access of fpu_save into the commented out skeleton code for restoring FPU registers on SPARC sigreturn, thus silencing a gcc 4.6 "variable set but never used" warning. (This doesn't affect the calculation of 'err' because in fact __get_user() can never fail.) Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/signal.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index 11b25be..2e34ffb 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -2080,7 +2080,6 @@ long do_sigreturn(CPUState *env) uint32_t up_psr, pc, npc; target_sigset_t set; sigset_t host_set; - abi_ulong fpu_save_addr; int err, i; sf_addr = env->regwptr[UREG_FP]; @@ -2120,10 +2119,11 @@ long do_sigreturn(CPUState *env) err |= __get_user(env->regwptr[i + UREG_I0], &sf->info.si_regs.u_regs[i+8]); } - err |= __get_user(fpu_save_addr, &sf->fpu_save); - - //if (fpu_save) - // err |= restore_fpu_state(env, fpu_save); + /* FIXME: implement FPU save/restore: + * __get_user(fpu_save, &sf->fpu_save); + * if (fpu_save) + * err |= restore_fpu_state(env, fpu_save); + */ /* This is pretty much atomic, no amount locking would prevent * the races which exist anyways. -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH 8/8] linux-user/signal.c: Remove unused fenab 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell ` (6 preceding siblings ...) 2011-06-16 16:37 ` [Qemu-devel] [PATCH 7/8] linux-user/signal.c: Remove only-ever-set variable fpu_save_addr Peter Maydell @ 2011-06-16 16:37 ` Peter Maydell 7 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2011-06-16 16:37 UTC (permalink / raw) To: qemu-devel; +Cc: Riku Voipio, Juan Quintela, patches Remove fenab as it is only written, never used. Add a FIXME comment about the discrepancy between our behaviour and that of the Linux kernel for this routine. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- linux-user/signal.c | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) diff --git a/linux-user/signal.c b/linux-user/signal.c index 2e34ffb..73670ac 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -2228,7 +2228,6 @@ void sparc64_set_context(CPUSPARCState *env) target_mc_gregset_t *grp; abi_ulong pc, npc, tstate; abi_ulong fp, i7, w_addr; - unsigned char fenab; int err; unsigned int i; @@ -2293,7 +2292,11 @@ void sparc64_set_context(CPUSPARCState *env) if (put_user(i7, w_addr + offsetof(struct target_reg_window, ins[7]), abi_ulong) != 0) goto do_sigsegv; - err |= __get_user(fenab, &(ucp->tuc_mcontext.mc_fpregs.mcfpu_enab)); + /* FIXME this does not match how the kernel handles the FPU in + * its sparc64_set_context implementation. In particular the FPU + * is only restored if fenab is non-zero in: + * __get_user(fenab, &(ucp->tuc_mcontext.mc_fpregs.mcfpu_enab)); + */ err |= __get_user(env->fprs, &(ucp->tuc_mcontext.mc_fpregs.mcfpu_fprs)); { uint32_t *src, *dst; -- 1.7.1 ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-06-16 16:59 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-06-16 16:37 [Qemu-devel] [PATCH 0/8] linux-user: Fix gcc 4.6 compile warnings Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 1/8] linuxload: id_change was a write only variable Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 2/8] syscall: really return ret code Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 3/8] linux-user: syscall should use sanitized arg1 Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 4/8] flatload: end_code was only used in a debug message Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 5/8] flatload: memp was a write-only variable Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 6/8] linux-user: Bump do_syscall() up to 8 syscall arguments Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 7/8] linux-user/signal.c: Remove only-ever-set variable fpu_save_addr Peter Maydell 2011-06-16 16:37 ` [Qemu-devel] [PATCH 8/8] linux-user/signal.c: Remove unused fenab Peter Maydell
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).