This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix some 64-bit sparc build warnings.


Some more warning fixups.

The INLINE_SYCALL typing issue actually resulted in values being
truncated.  And for the case that generated the warning (Linux's
shmat.c) it matters because that system call returns a virtual
address.

Committed to master.

	* 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 +++++
 .../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 29b7c67..7b6bc84 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2012-03-11  David S. Miller  <davem@davemloft.net>
 
+	* 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 3bb4e7a..e925040 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 542e940..fc955c2 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
-- 
1.7.6.401.g6a319


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]