about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog36
-rw-r--r--db2/db_int.h2
-rw-r--r--elf/Makefile2
-rw-r--r--include/stdio.h4
-rw-r--r--io/lockf.c11
-rw-r--r--libio/stdio.h46
-rw-r--r--linuxthreads/ChangeLog5
-rw-r--r--math/bits/mathcalls.h12
-rw-r--r--math/math.h7
-rw-r--r--math/tgmath.h92
-rw-r--r--stdlib/stdlib.h4
-rw-r--r--sysdeps/standalone/bits/errno.h3
-rw-r--r--sysdeps/unix/sysv/linux/Dist2
-rw-r--r--sysdeps/unix/sysv/linux/bits/sigcontext.h11
-rw-r--r--sysdeps/wordsize-32/inttypes.h103
-rw-r--r--sysdeps/wordsize-64/inttypes.h117
16 files changed, 328 insertions, 129 deletions
diff --git a/ChangeLog b/ChangeLog
index 9ff887a06e..b00f5157eb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,39 @@
+1998-08-31 15:56  Ulrich Drepper  <drepper@cygnus.com>
+
+	* db2/db_int.h: Use <db.h> instead of "db.h" to find header in include.
+
+	* include/stdio.h: Add __vsscanf.
+
+	* libio/stdio.h: Make vfscanf, scanf, and vsscanf available if
+	__USE_ISOC9X.
+	Remove __vsscanf declaration.
+	Always declare fgetpos and fsetpos.
+
+	* math/math.h: Define isinf as macro.
+	* math/bits/mathcalls.h: Change to declare __isinf all the time.
+	Don't declare scalb for ISO C 9x.
+
+	* math/tgmath.h: Define fma.  Rewrite the underlying macros.
+
+	* stdlib/stdlib.h: Declare strtof and strtold is __USE_ISOC9X.
+
+	* sysdeps/unix/sysv/linux/bits/sigcontext.h: Allow inclusion from
+	sys/ucontext.h.
+
+	* sysdeps/wordsize-32/inttypes.h: Define missing PRI* and SCN*
+	macros.
+
+1998-08-31  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* sysdeps/standalone/bits/errno.h (ENOMSG): Remove duplicate.
+	Reported by jreising@frequentis.com [PR libc/767].
+
+1998-08-31  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
+
+	* io/lockf.c (lockf): Move initilisation of fl.l_whence and
+	fl.l_start at beginning of function.
+	Patch by Geoff. Dash <geoffd@zeta.org.au> [PR libc/769].
+
 1998-08-31  Ulrich Drepper  <drepper@cygnus.com>
 
 	* io/sys/stat.h (ALLPERMS): Fix type (S_ISTXT -> S_ISVTX).
diff --git a/db2/db_int.h b/db2/db_int.h
index b48b104a91..92a3817764 100644
--- a/db2/db_int.h
+++ b/db2/db_int.h
@@ -10,7 +10,7 @@
 #ifndef _DB_INTERNAL_H_
 #define	_DB_INTERNAL_H_
 
-#include "db.h"				/* Standard DB include file. */
+#include <db.h>				/* Standard DB include file. */
 #include "queue.h"
 
 /*******************************************************
diff --git a/elf/Makefile b/elf/Makefile
index 4fcb997b3e..7f2201dc0a 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -36,7 +36,7 @@ elide-routines.os = $(dl-routines) dl-support enbl-secure
 # interpreter and operating independent of libc.
 rtld-routines	:= rtld $(dl-routines) dl-sysdep dl-environ dl-minimal
 distribute	= $(rtld-routines:=.c) dynamic-link.h do-rel.h dl-machine.h \
-		  dl-hash.h soinit.c sofini.c ldd.sh.in ldd.bash.in eval.c \
+		  dl-hash.h soinit.c sofini.c ldd.bash.in eval.c \
 		  genrtldtbl.awk atomicity.h dl-procinfo.h ldsodefs.h \
 		  dl-librecon.h interp.c sln.c dl-origin.h
 
diff --git a/include/stdio.h b/include/stdio.h
index c0ca6027e8..d09e29d1c1 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -18,6 +18,10 @@ extern int __vscanf __P ((__const char *__restrict __format,
      __attribute__ ((__format__ (__scanf__, 1, 0)));
 extern _IO_ssize_t __getline __P ((char **__lineptr, size_t *__n,
 				   FILE *__stream));
+extern int __vsscanf __P ((__const char *__restrict __s,
+			   __const char *__restrict __format,
+			   _G_va_list __arg))
+     __attribute__ ((__format__ (__scanf__, 2, 0)));
 
 #endif
 #else
diff --git a/io/lockf.c b/io/lockf.c
index 6d5049027f..6e8851bed7 100644
--- a/io/lockf.c
+++ b/io/lockf.c
@@ -31,6 +31,11 @@ lockf (int fd, int cmd, off_t len)
 
   memset ((char *) &fl, '\0', sizeof (fl));
 
+  /* lockf is always relative to the current file position.  */
+  fl.l_whence = SEEK_CUR;
+  fl.l_start = 0;
+  fl.l_len = len;
+
   switch (cmd)
     {
     case F_TEST:
@@ -61,11 +66,5 @@ lockf (int fd, int cmd, off_t len)
       return -1;
     }
 
-  /* lockf is always relative to the current file position.  */
-  fl.l_whence = SEEK_CUR;
-  fl.l_start = 0;
-
-  fl.l_len = len;
-
   return __fcntl (fd, cmd, &fl);
 }
diff --git a/libio/stdio.h b/libio/stdio.h
index 4d01061b3e..774003b490 100644
--- a/libio/stdio.h
+++ b/libio/stdio.h
@@ -334,7 +334,7 @@ extern int scanf __P ((__const char *__restrict __format, ...));
 extern int sscanf __P ((__const char *__restrict __s,
 			__const char *__restrict __format, ...));
 
-#ifdef	__USE_GNU
+#ifdef	__USE_ISOC9X
 /* Read formatted input from S into argument list ARG.  */
 extern int vfscanf __P ((FILE *__restrict __s,
 			 __const char *__restrict __format,
@@ -346,10 +346,6 @@ extern int vscanf __P ((__const char *__restrict __format, _G_va_list __arg))
      __attribute__ ((__format__ (__scanf__, 1, 0)));
 
 /* Read formatted input from S into argument list ARG.  */
-extern int __vsscanf __P ((__const char *__restrict __s,
-			   __const char *__restrict __format,
-			   _G_va_list __arg))
-     __attribute__ ((__format__ (__scanf__, 2, 0)));
 extern int vsscanf __P ((__const char *__restrict __s,
 			 __const char *__restrict __format,
 			 _G_va_list __arg))
@@ -541,64 +537,70 @@ extern long int ftell __P ((FILE *__stream));
 /* Rewind to the beginning of STREAM.  */
 extern void rewind __P ((FILE *__stream));
 
-#if (defined __USE_LARGEFILE || defined __USE_LARGEFILE64 \
-     || defined __USE_FILE_OFFSET64)
 /* The Single Unix Specification, Version 2, specifies an alternative,
    more adequate interface for the two functions above which deal with
    file offset.  `long int' is not the right type.  These definitions
    are originally defined in the Large File Support API.  */
 
 /* Types needed in these functions.  */
-# ifndef off_t
-#  ifndef __USE_FILE_OFFSET64
+#ifndef off_t
+# ifndef __USE_FILE_OFFSET64
 typedef __off_t off_t;
-#  else
+# else
 typedef __off64_t off_t;
-#  endif
-#  define off_t off_t
 # endif
+# define off_t off_t
+#endif
 
-# if defined __USE_LARGEFILE64 && !defined off64_t
+#if defined __USE_LARGEFILE64 && !defined off64_t
 typedef __off64_t off64_t;
-#  define off64_t off64_t
-# endif
+# define off64_t off64_t
+#endif
 
 
-# ifndef __USE_FILE_OFFSET64
+#ifndef __USE_FILE_OFFSET64
+# ifndef __USE_UNIX98
 /* Seek to a certain position on STREAM.  */
 extern int fseeko __P ((FILE *__stream, __off_t __off, int __whence));
 /* Return the current position of STREAM.  */
 extern __off_t ftello __P ((FILE *__stream));
+#endif
+
 /* Get STREAM's position.  */
 extern int fgetpos __P ((FILE *__restrict __stream,
 			 fpos_t *__restrict __pos));
 /* Set STREAM's position.  */
 extern int fsetpos __P ((FILE *__stream, __const fpos_t *__pos));
-# else
+#else
 # ifdef __REDIRECT
+#  ifndef __USE_UNIX98
 extern int __REDIRECT (fseeko,
 		       __P ((FILE *__stream, __off64_t __off, int __whence)),
 		       fseeko64);
 extern __off64_t __REDIRECT (ftello, __P ((FILE *__stream)), ftello64);
+#  endif
 extern int __REDIRECT (fgetpos, __P ((FILE *__restrict __stream,
 				      fpos_t *__restrict __pos)), fgetpos64);
 extern int __REDIRECT (fsetpos, __P ((FILE *__stream, __const fpos_t *__pos)),
 		       fsetpos64);
-#  else
+# else
+#  ifndef __USE_UNIX98
 #   define fseeko fseeko64
 #   define ftello ftello64
-#   define fgetpos fgetpos64
-#   define fsetpos fsetpos64
 #  endif
+#  define fgetpos fgetpos64
+#  define fsetpos fsetpos64
 # endif
+#endif
 
-# ifdef __USE_LARGEFILE64
+#ifdef __USE_LARGEFILE64
+# ifndef __USE_UNIX98
 extern int fseeko64 __P ((FILE *__stream, __off64_t __off, int __whence));
 extern __off64_t ftello64 __P ((FILE *__stream));
+# endif
 extern int fgetpos64 __P ((FILE *__restrict __stream,
 			   fpos64_t *__restrict __pos));
 extern int fsetpos64 __P ((FILE *__stream, __const fpos64_t *__pos));
-# endif
 #endif
 
 /* Clear the error and EOF indicators for STREAM.  */
diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog
index b8cad4cbbf..88cf853c84 100644
--- a/linuxthreads/ChangeLog
+++ b/linuxthreads/ChangeLog
@@ -1,3 +1,8 @@
+1998-08-31  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/i386/pt-machine.h (testandset): Add memory clobber.
+	Suggested by Roland McGrath.
+
 1998-08-28 13:58  Ulrich Drepper  <drepper@cygnus.com>
 
 	* internals.h: Also define THREAD_GETMEM_NC and THREAD_SETMEM_NC to
diff --git a/math/bits/mathcalls.h b/math/bits/mathcalls.h
index a94707ffe3..d23a013ae6 100644
--- a/math/bits/mathcalls.h
+++ b/math/bits/mathcalls.h
@@ -171,10 +171,14 @@ __MATHCALL (floor,, (_Mdouble_ __x));
 __MATHCALL (fmod,, (_Mdouble_ __x, _Mdouble_ __y));
 
 
+/* Return 0 if VALUE is finite or NaN, +1 if it
+   is +Infinity, -1 if it is -Infinity.  */
+__MATHDECL_1 (int,__isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
+
 #ifdef __USE_MISC
 /* Return 0 if VALUE is finite or NaN, +1 if it
    is +Infinity, -1 if it is -Infinity.  */
-__MATHDECLX (int,isinf,, (_Mdouble_ __value), (__const__));
+__MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__));
 
 /* Return nonzero if VALUE is finite and not NaN.  */
 __MATHDECLX (int,finite,, (_Mdouble_ __value), (__const__));
@@ -248,15 +252,17 @@ __MATHCALL (rint,, (_Mdouble_ __x));
 
 /* Return X + epsilon if X < Y, X - epsilon if X > Y.  */
 __MATHCALLX (nextafter,, (_Mdouble_ __x, _Mdouble_ __y), (__const__));
-#ifdef __USE_ISOC9X
+# ifdef __USE_ISOC9X
 __MATHCALLX (nextafterx,, (_Mdouble_ __x, long double __y), (__const__));
-#endif
+# endif
 
 /* Return the remainder of integer divison X / Y with infinite precision.  */
 __MATHCALL (remainder,, (_Mdouble_ __x, _Mdouble_ __y));
 
+#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
 /* Return X times (2 to the Nth power).  */
 __MATHCALL (scalb,, (_Mdouble_ __x, _Mdouble_ __n));
+#endif
 
 /* Return X times (2 to the Nth power).  */
 __MATHCALL (scalbn,, (_Mdouble_ __x, int __n));
diff --git a/math/math.h b/math/math.h
index 5381f29e9a..d7487dda4a 100644
--- a/math/math.h
+++ b/math/math.h
@@ -196,6 +196,13 @@ enum
       : sizeof (x) == sizeof (double) ?					      \
         __isnan (x) : __isnanl (x))
 
+/* Return nonzero value is X is positive or negative infinity.  */
+# define isinf(x) \
+     (sizeof (x) == sizeof (float) ?					      \
+        __isinff (x)							      \
+      : sizeof (x) == sizeof (double) ?					      \
+        __isinf (x) : __isinfl (x))
+
 #endif /* Use ISO C 9X.  */
 
 #ifdef	__USE_MISC
diff --git a/math/tgmath.h b/math/tgmath.h
index 5880e666d5..307a124afc 100644
--- a/math/tgmath.h
+++ b/math/tgmath.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -40,70 +40,83 @@
    only defined on real valued parameters and those which are defined
    for complex functions as well.  */
 # define __TGMATH_UNARY_REAL_ONLY(Val, Fct) \
-     (__extension__ (sizeof (__real__ (Val)) == sizeof (double)		      \
+     (__extension__ (sizeof (Val) == sizeof (double)			      \
 		     ? Fct (Val)					      \
-		     : (sizeof (__real__ (Val)) == sizeof (long double)	      \
+		     : (sizeof (Val) == sizeof (long double)		      \
 			? Fct##l (Val)					      \
 			: Fct##f (Val))))
 
 # define __TGMATH_BINARY_FIRST_REAL_ONLY(Val1, Val2, Fct) \
-     (__extension__ (sizeof (__real__ (Val1)) == sizeof (double)	      \
-		     ? Fct (Val1, Val2)					      \
-		     : (sizeof (__real__ (Val1)) == sizeof (long double)      \
-			? Fct##l (Val1, Val2)				      \
+     (__extension__ (sizeof (Val1) > sizeof (double)			      \
+		     ? Fct##l (Val1, Val2)				      \
+		     : (sizeof (Val1) == sizeof (double)		      \
+			? Fct (Val1, Val2)				      \
 			: Fct##f (Val1, Val2))))
 
 # define __TGMATH_BINARY_REAL_ONLY(Val1, Val2, Fct) \
-     (__extension__ (sizeof (Val1) == sizeof (double)			      \
-		     || sizeof (Val2) == sizeof (double)		      \
-		     ? Fct (Val1, Val2)					      \
-		     : (sizeof (Val1) == sizeof (long double)		      \
-			|| sizeof (Val2) == sizeof (long double)	      \
-			? Fct##l (Val1, Val2)				      \
+     (__extension__ (sizeof (Val1) > sizeof (double)			      \
+		     || sizeof (Val2) > sizeof (double)			      \
+		     ? Fct##l (Val1, Val2)				      \
+		     : (sizeof (Val1) == sizeof (double)		      \
+			|| sizeof (Val2) == sizeof (double)		      \
+			? Fct (Val1, Val2)				      \
 			: Fct##f (Val1, Val2))))
 
 # define __TGMATH_TERNARY_FIRST_SECOND_REAL_ONLY(Val1, Val2, Val3, Fct) \
-     (__extension__ (sizeof (Val1) == sizeof (double)			      \
-		     || sizeof (Val2) == sizeof (double)		      \
-		     ? Fct (Val1, Val2, Val3)				      \
-		     : (sizeof (Val1) == sizeof (long double)		      \
-			|| sizeof (Val2) == sizeof (long double)	      \
-			? Fct##l (Val1, Val2, Val3)			      \
+     (__extension__ (sizeof (Val1) > sizeof (double)			      \
+		     || sizeof (Val2) > sizeof (double)			      \
+		     ? Fct##l (Val1, Val2, Val3)			      \
+		     : (sizeof (Val1) == sizeof (double)		      \
+			|| sizeof (Val2) == sizeof (double)		      \
+			? Fct (Val1, Val2, Val3)			      \
+			: Fct##f (Val1, Val2, Val3))))
+
+# define __TGMATH_TERNARY_REAL_ONLY(Val1, Val2, Val3, Fct) \
+     (__extension__ (sizeof (Val1) > sizeof (double)			      \
+		     || sizeof (Val2) > sizeof (double)			      \
+		     || sizeof (Val3) > sizeof (double)			      \
+		     ? Fct##l (Val1, Val2, Val3)			      \
+		     : (sizeof (Val1) == sizeof (double)		      \
+			|| sizeof (Val2) == sizeof (double)		      \
+			|| sizeof (Val3) == sizeof (double)		      \
+			? Fct (Val1, Val2, Val3)			      \
 			: Fct##f (Val1, Val2, Val3))))
 
 # define __TGMATH_UNARY_REAL_IMAG(Val, Fct, Cfct) \
-     (__extension__ (sizeof (__real__ (Val)) == sizeof (double)		      \
+     (__extension__ (sizeof (__real__ (val)) > sizeof (double)		      \
 		     ? (sizeof (__real__ (Val)) == sizeof (Val)		      \
-			? Fct (Val)					      \
-			: Cfct (Val))					      \
-		     : (sizeof (__real__ (Val)) == sizeof (long double)	      \
+			? Fct##l (Val)					      \
+			: Cfct##l (Val))				      \
+		     : (sizeof (__real__ (val)) == sizeof (double)	      \
 			? (sizeof (__real__ (Val)) == sizeof (Val)	      \
-			   ? Fct##l (Val)				      \
-			   : Cfct##l (Val))				      \
+			   ? Fct (Val)					      \
+			   : Cfct (Val))				      \
 			: (sizeof (__real__ (Val)) == sizeof (Val)	      \
 			   ? Fct##f (Val)				      \
 			   : Cfct##f (Val)))))
 
+/* XXX This definition has to be changed as soon as the compiler understands
+   the imaginary keyword.  */
 # define __TGMATH_UNARY_IMAG_ONLY(Val, Fct) \
-     (__extension__ (sizeof (Val) == sizeof (__complex__ double)	      \
-		     ? Fct (Val)					      \
-		     : (sizeof (Val) == sizeof (__complex__ long double)      \
-			? Fct##l (Val)					      \
+     (__extension__ (sizeof (Val) > sizeof (__complex__ double)		      \
+		     ? Fct##l (Val)					      \
+		     : (sizeof (Val) == sizeof (__complex__ double)	      \
+			? Fct (Val)					      \
 			: Fct##f (Val))))
 
 # define __TGMATH_BINARY_REAL_IMAG(Val1, Val2, Fct, Cfct) \
-     (__extension__ (sizeof (__real__ (Val1)) == sizeof (double)	      \
-		     || sizeof (__real__ (Val2)) == sizeof (double)	      \
+     (__extension__ (sizeof (__real__ (Val1)) > sizeof (double)		      \
+		     || sizeof (__real__ (Val2)) > sizeof (double)	      \
 		     ? (sizeof (__real__ (Val1)) == sizeof (Val1)	      \
 			&& sizeof (__real__ (Val2)) == sizeof (Val2)	      \
-			? Fct (Val1, Val2)				      \
-			: Cfct (Val1, Val2))				      \
-		     : (sizeof (__real__ (Val1)) == sizeof (long double)      \
-			|| sizeof (__real__ (Val2)) == sizeof (long double)   \
+			? Fct##l (Val1, Val2)				      \
+			: Cfct##l (Val1, Val2))				      \
+		     : (sizeof (__real__ (Val1)) == sizeof (double)	      \
+			|| sizeof (__real__ (Val2)) == sizeof (double)	      \
 			? (sizeof (__real__ (Val1)) == sizeof (Val1)	      \
 			   && sizeof (__real__ (Val2)) == sizeof (Val2)	      \
-			   ? Fct##l (Val1, Val2)			      \
-			   : Cfct##l (Val1, Val2))			      \
+			   ? Fct (Val1, Val2)				      \
+			   : Cfct (Val1, Val2))				      \
 			: (sizeof (__real__ (Val1)) == sizeof (Val1)	      \
 			   && sizeof (__real__ (Val2)) == sizeof (Val2)	      \
 			   ? Fct##f (Val1, Val2)			      \
@@ -293,6 +306,11 @@
 #define fmin(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, fmin)
 
 
+/* Multiply-add function computed as a ternary operation.  */
+#define fma(Vat1, Val2, Val3) \
+     __TGMATH_TERNARY_REAL_ONLY (Val1, Val2, Val3, fma)
+
+
 /* Absolute value, conjugates, and projection.  */
 
 /* Argument value of Z.  */
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index a7488e0ce8..49374bd396 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -88,7 +88,7 @@ extern long long int atoll __P ((__const char *__nptr));
 extern double strtod __P ((__const char *__restrict __nptr,
 			   char **__restrict __endptr));
 
-#ifdef	__USE_GNU
+#ifdef	__USE_ISOC9X
 /* Likewise for `float' and `long double' sizes of floating-point numbers.  */
 extern float strtof __P ((__const char *__restrict __nptr,
 			  char **__restrict __endptr));
@@ -241,7 +241,7 @@ strtoul (__const char *__restrict __nptr, char **__restrict __endptr,
   return __strtoul_internal (__nptr, __endptr, __base, 0);
 }
 
-# ifdef __USE_GNU
+# ifdef __USE_ISOC9X
 extern __inline float
 strtof (__const char *__restrict __nptr, char **__restrict __endptr)
 {
diff --git a/sysdeps/standalone/bits/errno.h b/sysdeps/standalone/bits/errno.h
index d4030b7f44..d4f7879280 100644
--- a/sysdeps/standalone/bits/errno.h
+++ b/sysdeps/standalone/bits/errno.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991, 1994, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1991, 1994, 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -39,7 +39,6 @@
 # define ENOMSG  11
 # define ENAMETOOLONG 12
 # define ELOOP 13
-# define ENOMSG 14
 # define E2BIG 15
 # define EINTR 16
 # define ENOEXEC 18
diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist
index dbe401de3f..e10e24a678 100644
--- a/sysdeps/unix/sysv/linux/Dist
+++ b/sysdeps/unix/sysv/linux/Dist
@@ -77,3 +77,5 @@ xstatconv.c
 getdents64.c
 getresuid.c
 getresgid.c
+umount.S
+umount2.S
diff --git a/sysdeps/unix/sysv/linux/bits/sigcontext.h b/sysdeps/unix/sysv/linux/bits/sigcontext.h
index 08960b6824..97cbf4b301 100644
--- a/sysdeps/unix/sysv/linux/bits/sigcontext.h
+++ b/sysdeps/unix/sysv/linux/bits/sigcontext.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -16,13 +16,14 @@
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.  */
 
-#ifndef _SIGNAL_H
+#if !defined _SIGNAL_H && !defined _SYS_UCONTEXT_H
 # error "Never use <bits/sigcontext.h> directly; include <signal.h> instead."
 #endif
 
-
+#ifndef sigcontext_struct
 /* Kernel headers before 2.1.1 define a struct sigcontext_struct, but
    we need sigcontext.  */
-#define sigcontext_struct sigcontext
+# define sigcontext_struct sigcontext
 
-#include <asm/sigcontext.h>
+# include <asm/sigcontext.h>
+#endif
diff --git a/sysdeps/wordsize-32/inttypes.h b/sysdeps/wordsize-32/inttypes.h
index 79d3eed31c..250cbe31dd 100644
--- a/sysdeps/wordsize-32/inttypes.h
+++ b/sysdeps/wordsize-32/inttypes.h
@@ -82,6 +82,22 @@
 # define PRIoFAST32	"o"
 # define PRIoFAST64	"llo"
 
+/* Unsigned integers.  */
+# define PRIu8		"u"
+# define PRIu16		"u"
+# define PRIu32		"u"
+# define PRIu64		"llu"
+
+# define PRIuLEAST8	"u"
+# define PRIuLEAST16	"u"
+# define PRIuLEAST32	"u"
+# define PRIuLEAST64	"llu"
+
+# define PRIuFAST8	"u"
+# define PRIuFAST16	"u"
+# define PRIuFAST32	"u"
+# define PRIuFAST64	"llu"
+
 /* lowercase hexadecimal notation.  */
 # define PRIx8		"x"
 # define PRIx16		"x"
@@ -115,72 +131,119 @@
 # define PRIXFAST64	"llX"
 
 
-/* Unsigned integers.  */
-# define PRIu8		"u"
-# define PRIu16		"u"
-# define PRIu32		"u"
-# define PRIu64		"llu"
-
-# define PRIuLEAST8	"u"
-# define PRIuLEAST16	"u"
-# define PRIuLEAST32	"u"
-# define PRIuLEAST64	"llu"
-
-# define PRIuFAST8	"u"
-# define PRIuFAST16	"u"
-# define PRIuFAST32	"u"
-# define PRIuFAST64	"llu"
-
-
 /* Macros for printing `intmax_t' and `uintmax_t'.  */
 # define PRIdMAX	"lld"
+# define PRIiMAX	"lli"
 # define PRIoMAX	"llo"
-# define PRIxMAX	"llx"
 # define PRIuMAX	"llu"
+# define PRIxMAX	"llx"
+# define PRIXMAX	"llX"
 
 
 /* Macros for printing `intptr_t' and `uintptr_t'.  */
 # define PRIdPTR	"d"
+# define PRIiPTR	"i"
 # define PRIoPTR	"o"
-# define PRIxPTR	"x"
 # define PRIuPTR	"u"
+# define PRIxPTR	"x"
+# define PRIXPTR	"X"
 
 
 /* Macros for scanning format specifiers.  */
 
-/* Decimal notation.  */
+/* Signed decimal notation.  */
 # define SCNd8		"hhd"
 # define SCNd16		"hd"
 # define SCNd32		"d"
 # define SCNd64		"lld"
 
+# define SCNdLEAST8	"hhd"
+# define SCNdLEAST16	"hd"
+# define SCNdLEAST32	"d"
+# define SCNdLEAST64	"lld"
+
+# define SCNdFAST8	"hhd"
+# define SCNdFAST16	"d"
+# define SCNdFAST32	"d"
+# define SCNdFAST64	"lld"
+
+/* Signed decimal notation.  */
 # define SCNi8		"hhi"
 # define SCNi16		"hi"
 # define SCNi32		"i"
 # define SCNi64		"lli"
 
+# define SCNiLEAST8	"hhi"
+# define SCNiLEAST16	"hi"
+# define SCNiLEAST32	"i"
+# define SCNiLEAST64	"lli"
+
+# define SCNiFAST8	"hhi"
+# define SCNiFAST16	"i"
+# define SCNiFAST32	"i"
+# define SCNiFAST64	"lli"
+
+/* Unsigned decimal notation.  */
 # define SCNu8		"hhu"
 # define SCNu16		"hu"
 # define SCNu32		"u"
 # define SCNu64		"llu"
 
+# define SCNuLEAST8	"hhu"
+# define SCNuLEAST16	"hu"
+# define SCNuLEAST32	"u"
+# define SCNuLEAST64	"llu"
+
+# define SCNuFAST8	"hhu"
+# define SCNuFAST16	"u"
+# define SCNuFAST32	"u"
+# define SCNuFAST64	"llu"
+
 /* Octal notation.  */
 # define SCNo8		"hho"
 # define SCNo16		"ho"
 # define SCNo32		"o"
 # define SCNo64		"llo"
 
+# define SCNoLEAST8	"hho"
+# define SCNoLEAST16	"ho"
+# define SCNoLEAST32	"o"
+# define SCNoLEAST64	"llo"
+
+# define SCNoFAST8	"hho"
+# define SCNoFAST16	"o"
+# define SCNoFAST32	"o"
+# define SCNoFAST64	"llo"
+
 /* Hexadecimal notation.  */
 # define SCNx8		"hhx"
 # define SCNx16		"hx"
 # define SCNx32		"x"
 # define SCNx64		"llx"
 
+# define SCNxLEAST8	"hhx"
+# define SCNxLEAST16	"hx"
+# define SCNxLEAST32	"x"
+# define SCNxLEAST64	"llx"
+
+# define SCNxFAST8	"hhx"
+# define SCNxFAST16	"x"
+# define SCNxFAST32	"x"
+# define SCNxFAST64	"llx"
+
+
+/* Macros for scanning `intmax_t' and `uintmax_t'.  */
+# define SCNdMAX	"lld"
+# define SCNiMAX	"lli"
+# define SCNoMAX	"llo"
+# define SCNuMAX	"llu"
+# define SCNxMAX	"llx"
 
 /* Macros for scaning `intptr_t' and `uintptr_t'.  */
 # define SCNdPTR	"d"
 # define SCNiPTR	"i"
 # define SCNoPTR	"o"
+# define SCNuPTR	"u"
 # define SCNxPTR	"x"
 
 #endif	/* C++ && format macros */
diff --git a/sysdeps/wordsize-64/inttypes.h b/sysdeps/wordsize-64/inttypes.h
index c76d2c887d..61730bbc00 100644
--- a/sysdeps/wordsize-64/inttypes.h
+++ b/sysdeps/wordsize-64/inttypes.h
@@ -82,6 +82,22 @@
 # define PRIoFAST32	"o"
 # define PRIoFAST64	"lo"
 
+ /* Unsigned integers.  */
+# define PRIu8		"u"
+# define PRIu16		"u"
+# define PRIu32		"u"
+# define PRIu64		"lu"
+
+# define PRIuLEAST8	"u"
+# define PRIuLEAST16	"u"
+# define PRIuLEAST32	"u"
+# define PRIuLEAST64	"lu"
+
+# define PRIuFAST8	"u"
+# define PRIuFAST16	"u"
+# define PRIuFAST32	"u"
+# define PRIuFAST64	"lu"
+
 /* lowercase hexadecimal notation.  */
 # define PRIx8		"x"
 # define PRIx16		"x"
@@ -115,54 +131,57 @@
 # define PRIXFAST64	"lX"
 
 
-/* Unsigned integers.  */
-# define PRIu8		"u"
-# define PRIu16		"u"
-# define PRIu32		"u"
-# define PRIu64		"lu"
-
-# define PRIuLEAST8	"u"
-# define PRIuLEAST16	"u"
-# define PRIuLEAST32	"u"
-# define PRIuLEAST64	"lu"
-
-# define PRIuFAST8	"u"
-# define PRIuFAST16	"u"
-# define PRIuFAST32	"u"
-# define PRIuFAST64	"lu"
-
-
 /* Macros for printing `intmax_t' and `uintmax_t'.  */
 # define PRIdMAX	"ld"
+# define PRIiMAX	"li"
 # define PRIoMAX	"lo"
-# define PRIxMAX	"lx"
 # define PRIuMAX	"lu"
+# define PRIxMAX	"lx"
+# define PRIXMAX	"lX"
 
 
 /* Macros for printing `intptr_t' and `uintptr_t'.  */
 # define PRIdPTR	"ld"
+# define PRIiPTR	"li"
 # define PRIoPTR	"lo"
-# define PRIxPTR	"lx"
 # define PRIuPTR	"lu"
+# define PRIxPTR	"lx"
+# define PRIXPTR	"lX"
 
 
 /* Macros for printing format specifiers.  */
 
-/* Decimal notation.  */
+/* Signed decimal notation.  */
 # define SCNd8		"hhd"
 # define SCNd16		"hd"
 # define SCNd32		"d"
 # define SCNd64		"ld"
 
+# define SCNdLEAST8	"hhd"
+# define SCNdLEAST16	"hd"
+# define SCNdLEAST32	"d"
+# define SCNdLEAST64	"ld"
+
+# define SCNdFAST8	"hhd"
+# define SCNdFAST16	"ld"
+# define SCNdFAST32	"ld"
+# define SCNdFAST64	"ld"
+
+/* Signed decimal notation.  */
 # define SCNi8		"hhi"
 # define SCNi16		"hi"
 # define SCNi32		"i"
 # define SCNi64		"li"
 
-# define SCNu8		"hhu"
-# define SCNu16		"hu"
-# define SCNu32		"u"
-# define SCNu64		"lu"
+# define SCNiLEAST8	"hhi"
+# define SCNiLEAST16	"hi"
+# define SCNiLEAST32	"i"
+# define SCNiLEAST64	"li"
+
+# define SCNiFAST8	"hhi"
+# define SCNiFAST16	"li"
+# define SCNiFAST32	"li"
+# define SCNiFAST64	"li"
 
 /* Octal notation.  */
 # define SCNo8		"hho"
@@ -170,23 +189,61 @@
 # define SCNo32		"o"
 # define SCNo64		"lo"
 
+# define SCNoLEAST8	"hho"
+# define SCNoLEAST16	"ho"
+# define SCNoLEAST32	"o"
+# define SCNoLEAST64	"lo"
+
+# define SCNoFAST8	"hho"
+# define SCNoFAST16	"lo"
+# define SCNoFAST32	"lo"
+# define SCNoFAST64	"lo"
+
+/* Unsigned decimal notation.  */
+# define SCNu8		"hhu"
+# define SCNu16		"hu"
+# define SCNu32		"u"
+# define SCNu64		"lu"
+
+# define SCNuLEAST8	"hhu"
+# define SCNuLEAST16	"hu"
+# define SCNuLEAST32	"u"
+# define SCNuLEAST64	"lu"
+
+# define SCNuFAST8	"hhu"
+# define SCNuFAST16	"lu"
+# define SCNuFAST32	"lu"
+# define SCNuFAST64	"lu"
+
 /* Hexadecimal notation.  */
 # define SCNx8		"hhx"
 # define SCNx16		"hx"
 # define SCNx32		"x"
 # define SCNx64		"lx"
 
+# define SCNxLEAST8	"hhx"
+# define SCNxLEAST16	"hx"
+# define SCNxLEAST32	"x"
+# define SCNxLEAST64	"lx"
+
+# define SCNxFAST8	"hhx"
+# define SCNxFAST16	"lx"
+# define SCNxFAST32	"lx"
+# define SCNxFAST64	"lx"
+
 
-/* Macros for scaning `intfast_t' and `uintfast_t'.  */
-# define SCNdFAST	"ld"
-# define SCNiFAST	"li"
-# define SCNoFAST	"lo"
-# define SCNxFAST	"lx"
+/* Macros for scanning `intmax_t' and `uintmax_t'.  */
+# define SCNdMAX	"ld"
+# define SCNiMAX	"li"
+# define SCNoMAX	"lo"
+# define SCNuMAX	"lu"
+# define SCNxMAX	"lx"
 
-/* Macros for scaning `intptr_t' and `uintptr_t'.  */
+/* Macros for scanning `intptr_t' and `uintptr_t'.  */
 # define SCNdPTR	"ld"
 # define SCNiPTR	"li"
 # define SCNoPTR	"lo"
+# define SCNuPTR	"lu"
 # define SCNxPTR	"lx"
 
 #endif	/* C++ && format macros */