From a1bcbd4035ac2483dc10da150d4db46f3e1744f8 Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Sun, 11 Mar 2012 20:13:55 -0700 Subject: [PATCH] Fix some 64-bit sparc build warnings. * sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c (__makecontext): Fix signedness of pointer casts setting up 'sp'. * sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_SYSCALL) Use 'long' for 'resultvar' otherwise things get truncated on 64-bit. --- ChangeLog | 5 +++++ sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c | 4 ++-- sysdeps/unix/sysv/linux/sparc/sysdep.h | 6 +++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 29b7c67e9e..7b6bc84be0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2012-03-11 David S. Miller + * sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c + (__makecontext): Fix signedness of pointer casts setting up 'sp'. + * sysdeps/unix/sysv/linux/sparc/sysdep.h (INLINE_SYSCALL) Use 'long' + for 'resultvar' otherwise things get truncated on 64-bit. + * sysdeps/unix/sysv/linux/dl-osinfo.h (_dl_setup_stack_chk_guard): Fix masking out of the most significant byte of random value used. diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c index 3bb4e7a28b..e925040d14 100644 --- a/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c +++ b/sysdeps/unix/sysv/linux/sparc/sparc64/makecontext.c @@ -29,9 +29,9 @@ __makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) va_list ap; int i; - sp = (long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); + sp = (unsigned long *) ((long) ucp->uc_stack.ss_sp + ucp->uc_stack.ss_size); sp -= (argc > 6 ? argc : 6) + 32; - sp = (long *) (((long) sp) & -16L); + sp = (unsigned long *) (((long) sp) & -16L); topsp = sp + (argc > 6 ? argc : 6) + 16; ucp->uc_mcontext.mc_gregs[MC_PC] = (long) func; diff --git a/sysdeps/unix/sysv/linux/sparc/sysdep.h b/sysdeps/unix/sysv/linux/sparc/sysdep.h index 542e94040c..fc955c236c 100644 --- a/sysdeps/unix/sysv/linux/sparc/sysdep.h +++ b/sysdeps/unix/sysv/linux/sparc/sysdep.h @@ -22,13 +22,13 @@ #undef INLINE_SYSCALL #define INLINE_SYSCALL(name, nr, args...) \ ({ INTERNAL_SYSCALL_DECL(err); \ - unsigned int resultvar = INTERNAL_SYSCALL(name, err, nr, args); \ + unsigned long resultvar = INTERNAL_SYSCALL(name, err, nr, args);\ if (INTERNAL_SYSCALL_ERROR_P (resultvar, err)) \ { \ __set_errno (INTERNAL_SYSCALL_ERRNO (resultvar, err)); \ - resultvar = 0xffffffff; \ + resultvar = (unsigned long) -1; \ } \ - (int) resultvar; \ + (long) resultvar; \ }) #undef INTERNAL_SYSCALL_DECL