This is the mail archive of the
libc-ports@sources.redhat.com
mailing list for the libc-ports project.
Fix warnings for n32 glibc build
- From: Daniel Jacobowitz <drow at false dot org>
- To: libc-ports at sourceware dot org
- Date: Thu, 7 Jun 2007 10:41:55 -0400
- Subject: Fix warnings for n32 glibc build
Credit to Richard Sandiford for this clever trick. We get arguments
which may be int, long, long long, or pointers and we want to sign
extend if appropriate, then fit them into a register. This does so,
without the current warning on (long long) (void *) arg1.
Tested n32, checked in.
--
Daniel Jacobowitz
CodeSourcery
2007-06-07 Daniel Jacobowitz <dan@codesourcery.com>
* sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h (ARGIFY): New.
(internal_syscall1, internal_syscall2, internal_syscall3,
internal_syscall4, internal_syscall5, internal_syscall6): Use it.
Index: sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h
===================================================================
RCS file: /cvs/glibc/ports/sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h,v
retrieving revision 1.7
diff -u -p -r1.7 sysdep.h
--- sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h 23 Jan 2007 16:47:28 -0000 1.7
+++ sysdeps/unix/sysv/linux/mips/mips64/n32/sysdep.h 7 Jun 2007 14:39:03 -0000
@@ -44,6 +44,10 @@
#else /* ! __ASSEMBLER__ */
+/* Convert X to a long long, without losing any bits if it is one
+ already or warning if it is a 32-bit pointer. */
+#define ARGIFY(X) ((long long) (__typeof__ ((X) - (X))) (X))
+
/* Define a macro which expands into the inline wrapper code for a system
call. */
#undef INLINE_SYSCALL
@@ -102,7 +106,7 @@
\
{ \
register long long __v0 asm("$2") ncs_init; \
- register long long __a0 asm("$4") = (long long) arg1; \
+ register long long __a0 asm("$4") = ARGIFY (arg1); \
register long long __a3 asm("$7"); \
__asm__ volatile ( \
".set\tnoreorder\n\t" \
@@ -124,8 +128,8 @@
\
{ \
register long long __v0 asm("$2") ncs_init; \
- register long long __a0 asm("$4") = (long long) arg1; \
- register long long __a1 asm("$5") = (long long) arg2; \
+ register long long __a0 asm("$4") = ARGIFY (arg1); \
+ register long long __a1 asm("$5") = ARGIFY (arg2); \
register long long __a3 asm("$7"); \
__asm__ volatile ( \
".set\tnoreorder\n\t" \
@@ -147,9 +151,9 @@
\
{ \
register long long __v0 asm("$2") ncs_init; \
- register long long __a0 asm("$4") = (long long) arg1; \
- register long long __a1 asm("$5") = (long long) arg2; \
- register long long __a2 asm("$6") = (long long) arg3; \
+ register long long __a0 asm("$4") = ARGIFY (arg1); \
+ register long long __a1 asm("$5") = ARGIFY (arg2); \
+ register long long __a2 asm("$6") = ARGIFY (arg3); \
register long long __a3 asm("$7"); \
__asm__ volatile ( \
".set\tnoreorder\n\t" \
@@ -171,10 +175,10 @@
\
{ \
register long long __v0 asm("$2") ncs_init; \
- register long long __a0 asm("$4") = (long long) arg1; \
- register long long __a1 asm("$5") = (long long) arg2; \
- register long long __a2 asm("$6") = (long long) arg3; \
- register long long __a3 asm("$7") = (long long) arg4; \
+ register long long __a0 asm("$4") = ARGIFY (arg1); \
+ register long long __a1 asm("$5") = ARGIFY (arg2); \
+ register long long __a2 asm("$6") = ARGIFY (arg3); \
+ register long long __a3 asm("$7") = ARGIFY (arg4); \
__asm__ volatile ( \
".set\tnoreorder\n\t" \
cs_init \
@@ -195,11 +199,11 @@
\
{ \
register long long __v0 asm("$2") ncs_init; \
- register long long __a0 asm("$4") = (long long) arg1; \
- register long long __a1 asm("$5") = (long long) arg2; \
- register long long __a2 asm("$6") = (long long) arg3; \
- register long long __a3 asm("$7") = (long long) arg4; \
- register long long __a4 asm("$8") = (long long) arg5; \
+ register long long __a0 asm("$4") = ARGIFY (arg1); \
+ register long long __a1 asm("$5") = ARGIFY (arg2); \
+ register long long __a2 asm("$6") = ARGIFY (arg3); \
+ register long long __a3 asm("$7") = ARGIFY (arg4); \
+ register long long __a4 asm("$8") = ARGIFY (arg5); \
__asm__ volatile ( \
".set\tnoreorder\n\t" \
cs_init \
@@ -220,12 +224,12 @@
\
{ \
register long long __v0 asm("$2") ncs_init; \
- register long long __a0 asm("$4") = (long long) arg1; \
- register long long __a1 asm("$5") = (long long) arg2; \
- register long long __a2 asm("$6") = (long long) arg3; \
- register long long __a3 asm("$7") = (long long) arg4; \
- register long long __a4 asm("$8") = (long long) arg5; \
- register long long __a5 asm("$9") = (long long) arg6; \
+ register long long __a0 asm("$4") = ARGIFY (arg1); \
+ register long long __a1 asm("$5") = ARGIFY (arg2); \
+ register long long __a2 asm("$6") = ARGIFY (arg3); \
+ register long long __a3 asm("$7") = ARGIFY (arg4); \
+ register long long __a4 asm("$8") = ARGIFY (arg5); \
+ register long long __a5 asm("$9") = ARGIFY (arg6); \
__asm__ volatile ( \
".set\tnoreorder\n\t" \
cs_init \