This is the mail archive of the glibc-cvs@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]

GNU C Library master sources branch master updated. glibc-2.25-534-g8082d91


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  8082d91e1c449e0cb137468b731004a5e605c8c6 (commit)
       via  af85385f311c574590381f7897461643f8a2fe6f (commit)
       via  f0be25b6336db7492e47d2e8e72eb8af53b5506d (commit)
      from  bafcba22ac5eb612dcc32425fce5479d1ee3e79b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=8082d91e1c449e0cb137468b731004a5e605c8c6

commit 8082d91e1c449e0cb137468b731004a5e605c8c6
Author: Zack Weinberg <zackw@panix.com>
Date:   Sat Jun 3 16:22:24 2017 -0400

    Factor out shared definitions from bits/signum.h.
    
    Many of the things defined by bits/signum.h are invariant across all
    supported operating systems.  This patch factors out all of them to a
    new header bits/signum-generic.h, which each bits/signum.h will include
    and then override whichever things need adjustment.  Normally that will
    mean, at most, adding or changing a few signal numbers.
    
    A user-visible side effect is that the obsolete signal constant SIGUNUSED
    (which is an alias for SIGSYS on all platforms that define it) is no
    longer exposed by any version of bits/signum.h.
    
    A side effect only relevant to glibc hackers is that _NSIG is now defined
    in terms of __SIGRTMAX, instead of the other way around.  This is because
    __SIGRTMAX varies from platform to platform, but _NSIG==__SIGRTMAX+1 is
    true universally.  If your platform doesn't support realtime signals,
    leave __SIGRTMAX equal to __SIGRTMIN.
    
    I also added a Linux-specific test to make sure that our signal constants
    match the ones in <asm/signal.h>, since we can't use that header (it's
    not even vaguely namespace-clean).
    
    	* bits/signum-generic.h: Renamed from bits/signum.h.
    	Add proper multiple include guard and misuse check.
    	Define __SIGRTMIN = __SIGRTMAX = 32, and define _NSIG = __SIGRTMAX+1.
    	Move definition of SIGIO to "archaic names for compatibility" section.
    	* bits/signum.h: New file which just includes bits/signum-generic.h.
    	* sysdeps/unix/bsd/bits/signum.h
    	* sysdeps/unix/sysv/linux/bits/signum.h
    	* sysdeps/unix/sysv/linux/alpha/bits/signum.h
    	* sysdeps/unix/sysv/linux/hppa/bits/signum.h
    	* sysdeps/unix/sysv/linux/mips/bits/signum.h
    	* sysdeps/unix/sysv/linux/sparc/bits/signum.h
    	Just include <bits/signum-generic.h> and then add or adjust
    	signal constants.  Do not define SIGUNUSED, SIGRTMIN, or SIGRTMAX.
    
    	* signal/Makefile: Install bits/signum-generic.h.
    	* signal/signal.h: Define SIGRTMIN and SIGRTMAX here.
    
    	* sysdeps/generic/siglist.h: SIGSYS and SIGWINCH are
    	universal.  Prefer SIGPOLL to SIGIO. Simplify #ifdeffage.
    
    	* sysdeps/unix/sysv/linux/tst-signal-numbers.sh: New test.
    	* sysdeps/unix/sysv/linux/Makefile: Run it.

diff --git a/ChangeLog b/ChangeLog
index efc7c7a..b3693a4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,30 @@
 2017-06-20  Zack Weinberg  <zackw@panix.com>
 
+	* bits/signum-generic.h: Renamed from bits/signum.h.
+	Add proper multiple include guard and misuse check.
+	Define __SIGRTMIN = __SIGRTMAX = 32, and define _NSIG = __SIGRTMAX+1.
+	Move definition of SIGIO to "archaic names for compatibility" section.
+	* bits/signum.h: New file which just includes bits/signum-generic.h.
+	* sysdeps/unix/bsd/bits/signum.h
+	* sysdeps/unix/sysv/linux/bits/signum.h
+	* sysdeps/unix/sysv/linux/alpha/bits/signum.h
+	* sysdeps/unix/sysv/linux/hppa/bits/signum.h
+	* sysdeps/unix/sysv/linux/mips/bits/signum.h
+	* sysdeps/unix/sysv/linux/sparc/bits/signum.h
+	Just include <bits/signum-generic.h> and then add or adjust
+	signal constants.  Do not define SIGUNUSED, SIGRTMIN, or SIGRTMAX.
+
+	* signal/Makefile: Install bits/signum-generic.h.
+	* signal/signal.h: Define SIGRTMIN and SIGRTMAX here.
+
+	* sysdeps/generic/siglist.h: SIGSYS and SIGWINCH are
+	universal.  Prefer SIGPOLL to SIGIO. Simplify #ifdeffage.
+
+	* sysdeps/unix/sysv/linux/tst-signal-numbers.sh: New test.
+	* sysdeps/unix/sysv/linux/Makefile: Run it.
+
+2017-06-20  Zack Weinberg  <zackw@panix.com>
+
 	* locale/xlocale.h: Rename to...
 	* locale/bits/types/__locale_t.h: ...here.  Adjust commentary.
 	Only define struct __locale_struct and __locale_t, not locale_t.
diff --git a/NEWS b/NEWS
index 0736b4b..1af7331 100644
--- a/NEWS
+++ b/NEWS
@@ -78,6 +78,8 @@ Version 2.26
   use <locale.h> instead.  If you have a specific need for the definition
   of locale_t with no other declarations, please talk to us.
 
+* The obsolete signal constant SIGUNUSED is no longer defined by <signal.h>.
+
 * The reallocarray function has been added to libc.  It is a realloc
   replacement with a check for integer overflow when calculating total
   allocation size.
diff --git a/bits/signum.h b/bits/signum-generic.h
similarity index 66%
copy from bits/signum.h
copy to bits/signum-generic.h
index cfbc7ac..5a5683e 100644
--- a/bits/signum.h
+++ b/bits/signum-generic.h
@@ -1,4 +1,4 @@
-/* Signal number constants.  Generic version.
+/* Signal number constants.  Generic template.
    Copyright (C) 1991-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -16,7 +16,12 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef	_BITS_SIGNUM_GENERIC_H
+#define _BITS_SIGNUM_GENERIC_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum-generic.h> directly; use <signal.h> instead."
+#endif
 
 /* Fake signal functions.  */
 
@@ -25,7 +30,7 @@
 #define	SIG_IGN	 ((__sighandler_t)  1)	/* Ignore signal.  */
 
 #ifdef __USE_XOPEN
-# define SIG_HOLD ((__sighandler_t)  2)	/* Add signal to hold mask.  */
+# define SIG_HOLD ((__sighandler_t) 2)	/* Add signal to hold mask.  */
 #endif
 
 /* We define here all the signal names listed in POSIX (1003.1-2008);
@@ -34,7 +39,10 @@
    real-world POSIX variant (e.g. SIGWINCH).
 
    Signals in the 1-15 range are defined with their historical numbers.
-   For other signals, we use the BSD numbers.  */
+   For other signals, we use the BSD numbers.
+   There are two unallocated signal numbers in the 1-31 range: 7 and 29.
+   Signal number 0 is reserved for use as kill(pid, 0), to test whether
+   a process exists without sending it a signal.  */
 
 /* ISO C99 signals.  */
 #define	SIGINT		2	/* Interactive attention signal.  */
@@ -55,15 +63,14 @@
 #define	SIGALRM		14	/* Alarm clock.  */
 
 /* New(er) POSIX signals (1003.1-2008, 1003.1-2013).  */
-#define	SIGURG		16 /* High bandwidth data is available at a socket.  */
-#define	SIGSTOP		17	/* Stopped (signal).  */
-#define	SIGTSTP		18	/* Stopped.  */
-#define	SIGCONT		19	/* Continued.  */
+#define	SIGURG		16	/* Urgent data is available at a socket.  */
+#define	SIGSTOP		17	/* Stop, unblockable.  */
+#define	SIGTSTP		18	/* Keyboard stop.  */
+#define	SIGCONT		19	/* Continue.  */
 #define	SIGCHLD		20	/* Child terminated or stopped.  */
 #define	SIGTTIN		21	/* Background read from control terminal.  */
 #define	SIGTTOU		22	/* Background write to control terminal.  */
-#define	SIGPOLL 	23	/* Pollable event occurred (System V).  */
-#define	SIGIO		SIGPOLL /* I/O now possible (4.2 BSD).  */
+#define	SIGPOLL		23	/* Pollable event occurred (System V).  */
 #define	SIGXCPU		24	/* CPU time limit exceeded.  */
 #define	SIGXFSZ		25	/* File size limit exceeded.  */
 #define	SIGVTALRM	26	/* Virtual timer expired.  */
@@ -75,10 +82,21 @@
    (including both BSD and Linux).  */
 #define	SIGWINCH	28	/* Window size change (4.3 BSD, Sun).  */
 
-#define	_NSIG		32
-
-/* Archaic names for compatibility. */
+/* Archaic names for compatibility.  */
+#define	SIGIO		SIGPOLL	/* I/O now possible (4.2 BSD).  */
 #define	SIGIOT		SIGABRT	/* IOT instruction, abort() on a PDP-11.  */
 #define	SIGCLD		SIGCHLD	/* Old System V name */
 
-#endif	/* <signal.h> included.  */
+/* Not all systems support real-time signals.  bits/signum.h indicates
+   that they are supported by overriding __SIGRTMAX to a value greater
+   than __SIGRTMIN.  These constants give the kernel-level hard limits,
+   but some real-time signals may be used internally by glibc.  Do not
+   use these constants in application code; use SIGRTMIN and SIGRTMAX
+   (defined in signal.h) instead.  */
+#define __SIGRTMIN	32
+#define __SIGRTMAX	__SIGRTMIN
+
+/* Biggest signal number + 1 (including real-time signals).  */
+#define _NSIG		(__SIGRTMAX + 1)
+
+#endif /* bits/signum-generic.h.  */
diff --git a/bits/signum.h b/bits/signum.h
index cfbc7ac..8d6d03c 100644
--- a/bits/signum.h
+++ b/bits/signum.h
@@ -1,5 +1,5 @@
 /* Signal number constants.  Generic version.
-   Copyright (C) 1991-2017 Free Software Foundation, Inc.
+   Copyright (C) 2017 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,69 +16,17 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-
-#define	SIG_ERR	 ((__sighandler_t) -1)	/* Error return.  */
-#define	SIG_DFL	 ((__sighandler_t)  0)	/* Default action.  */
-#define	SIG_IGN	 ((__sighandler_t)  1)	/* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD ((__sighandler_t)  2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
-/* We define here all the signal names listed in POSIX (1003.1-2008);
-   as of 1003.1-2013, no additional signals have been added by POSIX.
-   We also define here signal names that historically exist in every
-   real-world POSIX variant (e.g. SIGWINCH).
-
-   Signals in the 1-15 range are defined with their historical numbers.
-   For other signals, we use the BSD numbers.  */
-
-/* ISO C99 signals.  */
-#define	SIGINT		2	/* Interactive attention signal.  */
-#define	SIGILL		4	/* Illegal instruction.  */
-#define	SIGABRT		6	/* Abnormal termination.  */
-#define	SIGFPE		8	/* Erroneous arithmetic operation.  */
-#define	SIGSEGV		11	/* Invalid access to storage.  */
-#define	SIGTERM		15	/* Termination request.  */
-
-/* Historical signals specified by POSIX. */
-#define	SIGHUP		1	/* Hangup.  */
-#define	SIGQUIT		3	/* Quit.  */
-#define	SIGTRAP		5	/* Trace/breakpoint trap.  */
-#define	SIGKILL		9	/* Killed.  */
-#define SIGBUS		10	/* Bus error.  */
-#define	SIGSYS		12	/* Bad system call.  */
-#define	SIGPIPE		13	/* Broken pipe.  */
-#define	SIGALRM		14	/* Alarm clock.  */
-
-/* New(er) POSIX signals (1003.1-2008, 1003.1-2013).  */
-#define	SIGURG		16 /* High bandwidth data is available at a socket.  */
-#define	SIGSTOP		17	/* Stopped (signal).  */
-#define	SIGTSTP		18	/* Stopped.  */
-#define	SIGCONT		19	/* Continued.  */
-#define	SIGCHLD		20	/* Child terminated or stopped.  */
-#define	SIGTTIN		21	/* Background read from control terminal.  */
-#define	SIGTTOU		22	/* Background write to control terminal.  */
-#define	SIGPOLL 	23	/* Pollable event occurred (System V).  */
-#define	SIGIO		SIGPOLL /* I/O now possible (4.2 BSD).  */
-#define	SIGXCPU		24	/* CPU time limit exceeded.  */
-#define	SIGXFSZ		25	/* File size limit exceeded.  */
-#define	SIGVTALRM	26	/* Virtual timer expired.  */
-#define	SIGPROF		27	/* Profiling timer expired.  */
-#define	SIGUSR1		30	/* User-defined signal 1.  */
-#define	SIGUSR2		31	/* User-defined signal 2.  */
-
-/* Nonstandard signals found in all modern POSIX systems
-   (including both BSD and Linux).  */
-#define	SIGWINCH	28	/* Window size change (4.3 BSD, Sun).  */
-
-#define	_NSIG		32
+#include <bits/signum-generic.h>
 
-/* Archaic names for compatibility. */
-#define	SIGIOT		SIGABRT	/* IOT instruction, abort() on a PDP-11.  */
-#define	SIGCLD		SIGCHLD	/* Old System V name */
+/* This operating system does not need to override any of the generic
+   signal number assignments in bits/signum-generic.h, nor to add any
+   additional signal constants.  */
 
-#endif	/* <signal.h> included.  */
+#endif /* bits/signum.h.  */
diff --git a/signal/Makefile b/signal/Makefile
index 9ce8232..8c9a7d1 100644
--- a/signal/Makefile
+++ b/signal/Makefile
@@ -23,7 +23,8 @@ subdir	:= signal
 include ../Makeconfig
 
 headers := signal.h sys/signal.h \
-	   bits/signum.h bits/sigcontext.h bits/sigaction.h \
+	   bits/signum.h bits/signum-generic.h \
+	   bits/sigcontext.h bits/sigaction.h \
 	   bits/sigevent-consts.h bits/siginfo-consts.h \
 	   bits/sigstack.h bits/sigthread.h bits/ss_flags.h \
 	   bits/types/__sigset_t.h bits/types/sig_atomic_t.h \
diff --git a/signal/signal.h b/signal/signal.h
index ddb79c7..c8f6100 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -363,6 +363,9 @@ extern int __libc_current_sigrtmin (void) __THROW;
 /* Return number of available real-time signal with lowest priority.  */
 extern int __libc_current_sigrtmax (void) __THROW;
 
+#define SIGRTMIN        (__libc_current_sigrtmin ())
+#define SIGRTMAX        (__libc_current_sigrtmax ())
+
 __END_DECLS
 
 #endif /* not signal.h */
diff --git a/sysdeps/generic/siglist.h b/sysdeps/generic/siglist.h
index dd72929..022be56 100644
--- a/sysdeps/generic/siglist.h
+++ b/sysdeps/generic/siglist.h
@@ -24,7 +24,8 @@
 
 /* This file is included multiple times.  */
 
-/* Standard signals  */
+/* Standard signals, in the numerical order defined in
+   bits/signum-generic.h.  */
   init_sig (SIGHUP, "HUP", N_("Hangup"))
   init_sig (SIGINT, "INT", N_("Interrupt"))
   init_sig (SIGQUIT, "QUIT", N_("Quit"))
@@ -34,6 +35,7 @@
   init_sig (SIGFPE, "FPE", N_("Floating point exception"))
   init_sig (SIGKILL, "KILL", N_("Killed"))
   init_sig (SIGBUS, "BUS", N_("Bus error"))
+  init_sig (SIGSYS, "SYS", N_("Bad system call"))
   init_sig (SIGSEGV, "SEGV", N_("Segmentation fault"))
   init_sig (SIGPIPE, "PIPE", N_("Broken pipe"))
   init_sig (SIGALRM, "ALRM", N_("Alarm clock"))
@@ -45,32 +47,28 @@
   init_sig (SIGCHLD, "CHLD", N_("Child exited"))
   init_sig (SIGTTIN, "TTIN", N_("Stopped (tty input)"))
   init_sig (SIGTTOU, "TTOU", N_("Stopped (tty output)"))
-  init_sig (SIGIO, "IO", N_("I/O possible"))
+  init_sig (SIGPOLL, "POLL", N_("I/O possible"))
   init_sig (SIGXCPU, "XCPU", N_("CPU time limit exceeded"))
   init_sig (SIGXFSZ, "XFSZ", N_("File size limit exceeded"))
   init_sig (SIGVTALRM, "VTALRM", N_("Virtual timer expired"))
   init_sig (SIGPROF, "PROF", N_("Profiling timer expired"))
   init_sig (SIGUSR1, "USR1", N_("User defined signal 1"))
   init_sig (SIGUSR2, "USR2", N_("User defined signal 2"))
+  init_sig (SIGWINCH, "WINCH", N_("Window changed"))
 
-/* Variations  */
+/* Signals that are not present on all supported platforms.  */
 #ifdef SIGEMT
   init_sig (SIGEMT, "EMT", N_("EMT trap"))
 #endif
-#ifdef SIGSYS
-  init_sig (SIGSYS, "SYS", N_("Bad system call"))
-#endif
 #ifdef SIGSTKFLT
   init_sig (SIGSTKFLT, "STKFLT", N_("Stack fault"))
 #endif
-#ifdef SIGINFO
-  init_sig (SIGINFO, "INFO", N_("Information request"))
-#elif defined(SIGPWR) && (!defined(SIGLOST) || (SIGPWR != SIGLOST))
+#ifdef SIGPWR
   init_sig (SIGPWR, "PWR", N_("Power failure"))
 #endif
-#ifdef SIGLOST
-  init_sig (SIGLOST, "LOST", N_("Resource lost"))
+#if defined SIGINFO && (!defined SIGPWR || SIGPWR != SIGINFO)
+  init_sig (SIGINFO, "INFO", N_("Information request"))
 #endif
-#ifdef SIGWINCH
-  init_sig (SIGWINCH, "WINCH", N_("Window changed"))
+#if defined SIGLOST && (!defined SIGPWR || SIGPWR != SIGLOST)
+  init_sig (SIGLOST, "LOST", N_("Resource lost"))
 #endif
diff --git a/sysdeps/unix/bsd/bits/signum.h b/sysdeps/unix/bsd/bits/signum.h
index 268c24a..f55edc9 100644
--- a/sysdeps/unix/bsd/bits/signum.h
+++ b/sysdeps/unix/bsd/bits/signum.h
@@ -16,58 +16,20 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* This file defines the fake signal functions and signal
-   number constants for 4.2 or 4.3 BSD-derived Unix system.  */
-
-/* Fake signal functions.  */
-#define	SIG_ERR	((__sighandler_t) -1) /* Error return.  */
-#define	SIG_DFL	((__sighandler_t) 0) /* Default action.  */
-#define	SIG_IGN	((__sighandler_t) 1) /* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD      ((__sighandler_t) 2)    /* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
+#include <bits/signum-generic.h>
 
-/* Signals.  */
-#define	SIGHUP		1	/* Hangup (POSIX).  */
-#define	SIGINT		2	/* Interrupt (ANSI).  */
-#define	SIGQUIT		3	/* Quit (POSIX).  */
-#define	SIGILL		4	/* Illegal instruction (ANSI).  */
-#define	SIGABRT		SIGIOT	/* Abort (ANSI).  */
-#define	SIGTRAP		5	/* Trace trap (POSIX).  */
-#define	SIGIOT		6	/* IOT trap (4.2 BSD).  */
-#define	SIGEMT		7	/* EMT trap (4.2 BSD).  */
-#define	SIGFPE		8	/* Floating-point exception (ANSI).  */
-#define	SIGKILL		9	/* Kill, unblockable (POSIX).  */
-#define	SIGBUS		10	/* Bus error (4.2 BSD).  */
-#define	SIGSEGV		11	/* Segmentation violation (ANSI).  */
-#define	SIGSYS		12	/* Bad argument to system call (4.2 BSD).  */
-#define	SIGPIPE		13	/* Broken pipe (POSIX).  */
-#define	SIGALRM		14	/* Alarm clock (POSIX).  */
-#define	SIGTERM		15	/* Termination (ANSI).  */
-#define	SIGURG		16	/* Urgent condition on socket (4.2 BSD).  */
-#define	SIGSTOP		17	/* Stop, unblockable (POSIX).  */
-#define	SIGTSTP		18	/* Keyboard stop (POSIX).  */
-#define	SIGCONT		19	/* Continue (POSIX).  */
-#define	SIGCHLD		20	/* Child status has changed (POSIX).  */
-#define	SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
-#define	SIGTTIN		21	/* Background read from tty (POSIX).  */
-#define	SIGTTOU		22	/* Background write to tty (POSIX).  */
-#define	SIGIO		23	/* I/O now possible (4.2 BSD).  */
-#define	SIGPOLL		SIGIO	/* Same as SIGIO? (SVID).  */
-#define	SIGXCPU		24	/* CPU limit exceeded (4.2 BSD).  */
-#define	SIGXFSZ		25	/* File size limit exceeded (4.2 BSD).  */
-#define	SIGVTALRM	26	/* Virtual alarm clock (4.2 BSD).  */
-#define	SIGPROF		27	/* Profiling alarm clock (4.2 BSD).  */
-#define	SIGWINCH	28	/* Window size change (4.3 BSD, Sun).  */
+/* Adjustments and additions to the signal number constants for
+   4.2 or 4.3 BSD-derived Unix systems.  */
+
+#define SIGEMT		 7	/* Emulator trap (4.2 BSD).  */
 #define SIGINFO		29	/* Information request (4.4 BSD).  */
-#define	SIGUSR1		30	/* User-defined signal 1 (POSIX).  */
-#define	SIGUSR2		31	/* User-defined signal 2 (POSIX).  */
 #define SIGLOST		32	/* Resource lost (Sun); server died (GNU).  */
 
-#endif	/* <signal.h> included.  */
-
-#define	_NSIG		33	/* Biggest signal number + 1.  */
+#endif /* bits/signum.h.  */
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile
index 1a170c2..8b340d4 100644
--- a/sysdeps/unix/sysv/linux/Makefile
+++ b/sysdeps/unix/sysv/linux/Makefile
@@ -128,6 +128,20 @@ sysdep_headers += sys/timex.h bits/timex.h
 sysdep_routines += ntp_gettime ntp_gettimex
 endif
 
+ifeq ($(subdir),signal)
+tests-special += $(objpfx)tst-signal-numbers.out
+# Depending on signal.o* is a hack.  What we actually want is a dependency
+# on signal.h and everything it includes.  That's impractical to write
+# in this context, but signal.c includes signal.h and not much else so it'll
+# be conservatively correct.
+$(objpfx)tst-signal-numbers.out: \
+		../sysdeps/unix/sysv/linux/tst-signal-numbers.sh \
+		$(objpfx)signal.o*
+	AWK=$(AWK) $(SHELL) ../sysdeps/unix/sysv/linux/tst-signal-numbers.sh \
+	$(CC) $(patsubst -DMODULE_NAME=%,-DMODULE_NAME=testsuite,$(CPPFLAGS)) \
+	< /dev/null > $@; $(evaluate-test)
+endif
+
 ifeq ($(subdir),socket)
 sysdep_headers += net/if_ppp.h net/ppp-comp.h \
 		  net/ppp_defs.h net/if_arp.h net/route.h net/ethernet.h \
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signum.h b/sysdeps/unix/sysv/linux/alpha/bits/signum.h
index e5cc521..8227be9 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/signum.h
@@ -16,66 +16,25 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-#define SIG_ERR ((__sighandler_t) -1) /* Error return.  */
-#define SIG_DFL ((__sighandler_t) 0) /* Default action.  */
-#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
-/*
- * Linux/AXP has different signal numbers that Linux/i386: I'm trying
- * to make it OSF/1 binary compatible, at least for normal binaries.
- */
-#define SIGHUP		 1
-#define SIGINT		 2
-#define SIGQUIT		 3
-#define SIGILL		 4
-#define SIGTRAP		 5
-#define SIGABRT		 6
-#define SIGEMT		 7
-#define SIGFPE		 8
-#define SIGKILL		 9
-#define SIGBUS		10
-#define SIGSEGV		11
-#define SIGSYS		12
-#define SIGPIPE		13
-#define SIGALRM		14
-#define SIGTERM		15
-#define SIGURG		16
-#define SIGSTOP		17
-#define SIGTSTP		18
-#define SIGCONT		19
-#define SIGCHLD		20
-#define SIGCLD          SIGCHLD
-#define SIGTTIN		21
-#define SIGTTOU		22
-#define SIGIO		23
-#define SIGXCPU		24
-#define SIGXFSZ		25
-#define SIGVTALRM	26
-#define SIGPROF		27
-#define SIGWINCH	28
-#define SIGINFO		29
-#define SIGUSR1		30
-#define SIGUSR2		31
-
-#define SIGPOLL	SIGIO
-#define SIGPWR	SIGINFO
-#define SIGIOT	SIGABRT
+#include <bits/signum-generic.h>
 
-#define	_NSIG		65	/* Biggest signal number + 1.  */
+/* Adjustments and additions to the signal number constants for
+   Linux/Alpha.  Signal values on this platform were chosen for OSF/1
+   binary compatibility, and are therefore almost identical to the
+   BSD-derived defaults.  */
 
-#define SIGRTMIN	(__libc_current_sigrtmin ())
-#define SIGRTMAX	(__libc_current_sigrtmax ())
+#define SIGEMT		 7	/* Emulator trap (4.2 BSD).  */
+#define SIGINFO		29	/* Information request (BSD).  */
+#define SIGPWR		SIGINFO	/* Power failure imminent (System V).  */
 
-/* These are the hard limits of the kernel.  These values should not be
-   used directly at user level.  */
-#define __SIGRTMIN	32
-#define __SIGRTMAX	(_NSIG - 1)
+#undef	__SIGRTMAX
+#define __SIGRTMAX	64
 
 #endif	/* <signal.h> included.  */
diff --git a/sysdeps/unix/sysv/linux/bits/signum.h b/sysdeps/unix/sysv/linux/bits/signum.h
index e30efea..1a68255 100644
--- a/sysdeps/unix/sysv/linux/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/bits/signum.h
@@ -16,64 +16,43 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-#define SIG_ERR	((__sighandler_t) -1)		/* Error return.  */
-#define SIG_DFL	((__sighandler_t) 0)		/* Default action.  */
-#define SIG_IGN	((__sighandler_t) 1)		/* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
-
-/* Signals.  */
-#define	SIGHUP		1	/* Hangup (POSIX).  */
-#define	SIGINT		2	/* Interrupt (ANSI).  */
-#define	SIGQUIT		3	/* Quit (POSIX).  */
-#define	SIGILL		4	/* Illegal instruction (ANSI).  */
-#define	SIGTRAP		5	/* Trace trap (POSIX).  */
-#define	SIGABRT		6	/* Abort (ANSI).  */
-#define	SIGIOT		6	/* IOT trap (4.2 BSD).  */
-#define	SIGBUS		7	/* BUS error (4.2 BSD).  */
-#define	SIGFPE		8	/* Floating-point exception (ANSI).  */
-#define	SIGKILL		9	/* Kill, unblockable (POSIX).  */
-#define	SIGUSR1		10	/* User-defined signal 1 (POSIX).  */
-#define	SIGSEGV		11	/* Segmentation violation (ANSI).  */
-#define	SIGUSR2		12	/* User-defined signal 2 (POSIX).  */
-#define	SIGPIPE		13	/* Broken pipe (POSIX).  */
-#define	SIGALRM		14	/* Alarm clock (POSIX).  */
-#define	SIGTERM		15	/* Termination (ANSI).  */
-#define	SIGSTKFLT	16	/* Stack fault.  */
-#define	SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
-#define	SIGCHLD		17	/* Child status has changed (POSIX).  */
-#define	SIGCONT		18	/* Continue (POSIX).  */
-#define	SIGSTOP		19	/* Stop, unblockable (POSIX).  */
-#define	SIGTSTP		20	/* Keyboard stop (POSIX).  */
-#define	SIGTTIN		21	/* Background read from tty (POSIX).  */
-#define	SIGTTOU		22	/* Background write to tty (POSIX).  */
-#define	SIGURG		23	/* Urgent condition on socket (4.2 BSD).  */
-#define	SIGXCPU		24	/* CPU limit exceeded (4.2 BSD).  */
-#define	SIGXFSZ		25	/* File size limit exceeded (4.2 BSD).  */
-#define	SIGVTALRM	26	/* Virtual alarm clock (4.2 BSD).  */
-#define	SIGPROF		27	/* Profiling alarm clock (4.2 BSD).  */
-#define	SIGWINCH	28	/* Window size change (4.3 BSD, Sun).  */
-#define	SIGPOLL		SIGIO	/* Pollable event occurred (System V).  */
-#define	SIGIO		29	/* I/O now possible (4.2 BSD).  */
-#define	SIGPWR		30	/* Power failure restart (System V).  */
-#define SIGSYS		31	/* Bad system call.  */
-#define SIGUNUSED	31
-
-#define	_NSIG		65	/* Biggest signal number + 1
-				   (including real-time signals).  */
-
-#define SIGRTMIN        (__libc_current_sigrtmin ())
-#define SIGRTMAX        (__libc_current_sigrtmax ())
-
-/* These are the hard limits of the kernel.  These values should not be
-   used directly at user level.  */
-#define __SIGRTMIN	32
-#define __SIGRTMAX	(_NSIG - 1)
+#include <bits/signum-generic.h>
+
+/* Adjustments and additions to the signal number constants for
+   most Linux systems.  */
+
+#define	SIGSTKFLT	16	/* Stack fault (obsolete).  */
+#define	SIGPWR		30	/* Power failure imminent.  */
+
+#undef	SIGBUS
+#define	SIGBUS		 7
+#undef	SIGUSR1
+#define	SIGUSR1		10
+#undef	SIGUSR2
+#define	SIGUSR2		12
+#undef	SIGCHLD
+#define	SIGCHLD		17
+#undef	SIGCONT
+#define	SIGCONT		18
+#undef	SIGSTOP
+#define	SIGSTOP		19
+#undef	SIGTSTP
+#define	SIGTSTP		20
+#undef	SIGURG
+#define	SIGURG		23
+#undef	SIGPOLL
+#define	SIGPOLL		29
+#undef	SIGSYS
+#define SIGSYS		31
+
+#undef	__SIGRTMAX
+#define __SIGRTMAX	64
 
 #endif	/* <signal.h> included.  */
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/signum.h b/sysdeps/unix/sysv/linux/hppa/bits/signum.h
index 20c0b60..5f54d1c 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/signum.h
@@ -16,74 +16,60 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-#define SIG_ERR	((__sighandler_t) -1)		/* Error return.  */
-#define SIG_DFL	((__sighandler_t) 0)		/* Default action.  */
-#define SIG_IGN	((__sighandler_t) 1)		/* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
+#include <bits/signum-generic.h>
 
-/* Signals.  */
-#define	SIGHUP		1	/* Hangup (POSIX).  */
-#define	SIGINT		2	/* Interrupt (ANSI).  */
-#define	SIGQUIT		3	/* Quit (POSIX).  */
-#define	SIGILL		4	/* Illegal instruction (ANSI).  */
-#define	SIGTRAP		5	/* Trace trap (POSIX).  */
-#define	SIGABRT		6	/* Abort (ANSI).  */
-#define	SIGIOT		6	/* IOT trap (4.2 BSD).  */
-#define	SIGSTKFLT	7	/* Stack fault.  */
-#define	SIGFPE		8	/* Floating-point exception (ANSI).  */
-#define	SIGKILL		9	/* Kill, unblockable (POSIX).  */
-#define	SIGBUS		10	/* BUS error (4.2 BSD).  */
-#define	SIGSEGV		11	/* Segmentation violation (ANSI).  */
-#define	SIGXCPU		12	/* CPU limit exceeded (4.2 BSD).  */
-#define	SIGPIPE		13	/* Broken pipe (POSIX).  */
-#define	SIGALRM		14	/* Alarm clock (POSIX).  */
-#define	SIGTERM		15	/* Termination (ANSI).  */
-#define	SIGUSR1		16	/* User-defined signal 1 (POSIX).  */
-#define SIGUSR2		17	/* User-defined signal 2 (POSIX).  */
-#define	SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
-#define	SIGCHLD		18	/* Child status has changed (POSIX).  */
-#define	SIGPWR		19	/* Power failure restart (System V).  */
-#define	SIGVTALRM	20	/* Virtual alarm clock (4.2 BSD).  */
-#define	SIGPROF		21	/* Profiling alarm clock (4.2 BSD).  */
-#define	SIGPOLL		SIGIO	/* Pollable event occurred (System V).  */
-#define	SIGIO		22	/* I/O now possible (4.2 BSD).  */
-#define	SIGWINCH	23	/* Window size change (4.3 BSD, Sun).  */
-#define	SIGSTOP		24	/* Stop, unblockable (POSIX).  */
-#define	SIGTSTP		25	/* Keyboard stop (POSIX).  */
-#define	SIGCONT		26	/* Continue (POSIX).  */
-#define	SIGTTIN		27	/* Background read from tty (POSIX).  */
-#define	SIGTTOU		28	/* Background write to tty (POSIX).  */
-#define	SIGURG		29	/* Urgent condition on socket (4.2 BSD).  */
-#define	SIGXFSZ		30	/* File size limit exceeded (4.2 BSD).  */
-#define SIGSYS		31	/* Bad system call.  */
-#define SIGUNUSED	31
+/* Adjustments and additions to the signal number constants for
+   Linux/HPPA.  These values were originally chosen for HP/UX
+   compatibility, but were renumbered as of kernel 3.17 and glibc 2.21
+   to accommodate software (notably systemd) that assumed at least 29
+   real-time signal numbers would be available.  SIGEMT and SIGLOST
+   were removed, and the values of SIGSTKFLT, SIGXCPU, XIGXFSZ, and
+   SIGSYS were changed, enabling __SIGRTMIN to be 32.  */
 
-#define	_NSIG		65	/* Biggest signal number + 1
-				   (including real-time signals).  */
+#define	SIGSTKFLT	 7	/* Stack fault (obsolete).  */
+#define	SIGPWR		19	/* Power failure imminent.  */
 
-#define SIGRTMIN        (__libc_current_sigrtmin ())
-#define SIGRTMAX        (__libc_current_sigrtmax ())
+#undef	SIGXCPU
+#define	SIGXCPU		12
+#undef	SIGUSR1
+#define	SIGUSR1		16
+#undef	SIGUSR2
+#define SIGUSR2		17
+#undef	SIGCHLD
+#define	SIGCHLD		18
+#undef	SIGVTALRM
+#define	SIGVTALRM	20
+#undef	SIGPROF
+#define	SIGPROF		21
+#undef	SIGPOLL
+#define	SIGPOLL		22
+#undef	SIGWINCH
+#define	SIGWINCH	23
+#undef	SIGSTOP
+#define	SIGSTOP		24
+#undef	SIGTSTP
+#define	SIGTSTP		25
+#undef	SIGCONT
+#define	SIGCONT		26
+#undef	SIGTTIN
+#define	SIGTTIN		27
+#undef	SIGTTOU
+#define	SIGTTOU		28
+#undef	SIGURG
+#define	SIGURG		29
+#undef	SIGXFSZ
+#define	SIGXFSZ		30
+#undef	SIGSYS
+#define SIGSYS		31
 
-/* These are the hard limits of the kernel.  These values should not be
-   used directly at user level.  */
-/* In the Linux kernel version 3.17, and glibc 2.21, the signal numbers
-   were rearranged in order to make hppa like every other arch. Previously
-   we started __SIGRTMIN at 37, and that meant several pieces of important
-   software, including systemd, would fail to build. To support systemd we
-   removed SIGEMT and SIGLOST, and rearranged the others according to
-   expected values. This is technically an ABI incompatible change, but
-   because zero applications use SIGSTKFLT, SIGXCPU, SIGXFSZ and SIGSYS
-   nothing broke.  Nothing uses SIGEMT and SIGLOST, and they were present
-   for HPUX compatibility which is no longer supported.  Thus because
-   nothing breaks we don't do any compatibility work here.  */
-#define __SIGRTMIN	32	/* Kernel > 3.17.  */
-#define __SIGRTMAX	(_NSIG - 1)
+#undef	__SIGRTMAX
+#define __SIGRTMAX	64
 
 #endif	/* <signal.h> included.  */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/signum.h b/sysdeps/unix/sysv/linux/mips/bits/signum.h
index 6c31e01..1672847 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/signum.h
@@ -1,4 +1,4 @@
-/* Signal number definitions.  Linux version.
+/* Signal number definitions.  Linux/MIPS version.
    Copyright (C) 1995-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
@@ -16,63 +16,53 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-#define SIG_ERR ((__sighandler_t) -1)		/* Error return.  */
-#define SIG_DFL ((__sighandler_t) 0)		/* Default action.  */
-#define SIG_IGN ((__sighandler_t) 1)		/* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
+#include <bits/signum-generic.h>
 
-#define SIGHUP		 1	/* Hangup (POSIX).  */
-#define SIGINT		 2	/* Interrupt (ANSI).  */
-#define SIGQUIT		 3	/* Quit (POSIX).  */
-#define SIGILL		 4	/* Illegal instruction (ANSI).  */
-#define SIGTRAP		 5	/* Trace trap (POSIX).  */
-#define SIGIOT		 6	/* IOT trap (4.2 BSD).  */
-#define SIGABRT		 SIGIOT	/* Abort (ANSI).  */
-#define SIGEMT		 7
-#define SIGFPE		 8	/* Floating-point exception (ANSI).  */
-#define SIGKILL		 9	/* Kill, unblockable (POSIX).  */
-#define SIGBUS		10	/* BUS error (4.2 BSD).  */
-#define SIGSEGV		11	/* Segmentation violation (ANSI).  */
-#define SIGSYS		12
-#define SIGPIPE		13	/* Broken pipe (POSIX).  */
-#define SIGALRM		14	/* Alarm clock (POSIX).  */
-#define SIGTERM		15	/* Termination (ANSI).  */
-#define SIGUSR1		16	/* User-defined signal 1 (POSIX).  */
-#define SIGUSR2		17	/* User-defined signal 2 (POSIX).  */
-#define SIGCHLD		18	/* Child status has changed (POSIX).  */
-#define SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
-#define SIGPWR		19	/* Power failure restart (System V).  */
-#define SIGWINCH	20	/* Window size change (4.3 BSD, Sun).  */
-#define SIGURG		21	/* Urgent condition on socket (4.2 BSD).  */
-#define SIGIO		22	/* I/O now possible (4.2 BSD).  */
-#define SIGPOLL		SIGIO	/* Pollable event occurred (System V).  */
-#define SIGSTOP		23	/* Stop, unblockable (POSIX).  */
-#define SIGTSTP		24	/* Keyboard stop (POSIX).  */
-#define SIGCONT		25	/* Continue (POSIX).  */
-#define SIGTTIN		26	/* Background read from tty (POSIX).  */
-#define SIGTTOU		27	/* Background write to tty (POSIX).  */
-#define SIGVTALRM	28	/* Virtual alarm clock (4.2 BSD).  */
-#define SIGPROF		29	/* Profiling alarm clock (4.2 BSD).  */
-#define SIGXCPU		30	/* CPU limit exceeded (4.2 BSD).  */
-#define SIGXFSZ		31	/* File size limit exceeded (4.2 BSD).  */
-
+/* Adjustments and additions to the signal number constants for
+   Linux/MIPS.  */
 
-#define _NSIG		128	/* Biggest signal number + 1
-				   (including real-time signals).  */
+#define SIGEMT		 7	/* Emulator trap.  */
+#define SIGPWR		19	/* Power failure imminent.  */
 
-#define SIGRTMIN	(__libc_current_sigrtmin ())
-#define SIGRTMAX	(__libc_current_sigrtmax ())
+#undef	SIGUSR1
+#define SIGUSR1		16
+#undef	SIGUSR2
+#define SIGUSR2		17
+#undef	SIGCHLD
+#define SIGCHLD		18
+#undef	SIGWINCH
+#define SIGWINCH	20
+#undef	SIGURG
+#define SIGURG		21
+#undef	SIGPOLL
+#define SIGPOLL		22
+#undef	SIGSTOP
+#define SIGSTOP		23
+#undef	SIGTSTP
+#define SIGTSTP		24
+#undef	SIGCONT
+#define SIGCONT		25
+#undef	SIGTTIN
+#define SIGTTIN		26
+#undef	SIGTTOU
+#define SIGTTOU		27
+#undef	SIGVTALRM
+#define SIGVTALRM	28
+#undef	SIGPROF
+#define SIGPROF		29
+#undef	SIGXCPU
+#define SIGXCPU		30
+#undef	SIGXFSZ
+#define SIGXFSZ		31
 
-/* These are the hard limits of the kernel.  These values should not be
-   used directly at user level.  */
-#define __SIGRTMIN	32
-#define __SIGRTMAX	(_NSIG - 1)
+#undef	__SIGRTMAX
+#define __SIGRTMAX	127
 
 #endif	/* <signal.h> included.  */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/signum.h b/sysdeps/unix/sysv/linux/sparc/bits/signum.h
index a0c5be5..25341ee 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/signum.h
@@ -16,68 +16,24 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-#define SIG_ERR ((__sighandler_t) -1) /* Error return.  */
-#define SIG_DFL ((__sighandler_t) 0) /* Default action.  */
-#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
-/*
- * Linux/SPARC has different signal numbers that Linux/i386: I'm trying
- * to make it OSF/1 binary compatible, at least for normal binaries.
- */
-#define SIGHUP		 1
-#define SIGINT		 2
-#define SIGQUIT		 3
-#define SIGILL		 4
-#define SIGTRAP		 5
-#define SIGABRT		 6
-#define SIGIOT		 6
-#define SIGEMT           7
-#define SIGFPE		 8
-#define SIGKILL		 9
-#define SIGBUS          10
-#define SIGSEGV		11
-#define SIGSYS		12
-#define SIGPIPE		13
-#define SIGALRM		14
-#define SIGTERM		15
-#define SIGURG          16
-
-/* SunOS values which deviate from the Linux/i386 ones */
-#define SIGSTOP		17
-#define SIGTSTP		18
-#define SIGCONT		19
-#define SIGCHLD		20
-#define SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
-#define SIGTTIN		21
-#define SIGTTOU		22
-#define SIGIO		23
-#define SIGPOLL		SIGIO   /* SysV name for SIGIO */
-#define SIGXCPU		24
-#define SIGXFSZ		25
-#define SIGVTALRM	26
-#define SIGPROF		27
-#define SIGWINCH	28
-#define SIGLOST		29
-#define SIGPWR          SIGLOST
-#define SIGUSR1		30
-#define SIGUSR2		31
+#include <bits/signum-generic.h>
 
-#define	_NSIG		65	/* Biggest signal number + 1
-				   (including real-time signals).  */
+/* Adjustments and additions to the signal number constants for
+   Linux/SPARC systems.  Signal values on this platform were chosen
+   for SunOS binary compatibility.  */
 
-#define SIGRTMIN        (__libc_current_sigrtmin ())
-#define SIGRTMAX        (__libc_current_sigrtmax ())
+#define SIGEMT		 7	/* Emulator trap.  */
+#define SIGLOST		29	/* Resource lost (Sun); server died (GNU).  */
+#define SIGPWR		SIGLOST	/* Power failure imminent (SysV).  */
 
-/* These are the hard limits of the kernel.  These values should not be
-   used directly at user level.  */
-#define __SIGRTMIN	32
-#define __SIGRTMAX	(_NSIG - 1)
+#undef	__SIGRTMAX
+#define __SIGRTMAX	64
 
 #endif	/* <signal.h> included.  */
diff --git a/sysdeps/unix/sysv/linux/tst-signal-numbers.sh b/sysdeps/unix/sysv/linux/tst-signal-numbers.sh
new file mode 100644
index 0000000..bdd75fb
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/tst-signal-numbers.sh
@@ -0,0 +1,86 @@
+#! /bin/sh
+# Test that glibc's signal numbers match the kernel's.
+# Copyright (C) 2017 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
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <http://www.gnu.org/licenses/>.
+
+set -e
+if [ -n "$BASH_VERSION" ]; then set -o pipefail; fi
+LC_ALL=C; export LC_ALL
+
+# We cannot use Linux's asm/signal.h to define signal numbers, because
+# it isn't sufficiently namespace-clean.  Instead, this test checks
+# that our signal numbers match the kernel's.  This script expects
+# "$@" to be $(CC) $(CPPFLAGS) as set by glibc's Makefiles, and $AWK
+# to be set in the environment.
+
+# Before doing anything else, fail if the compiler doesn't work.
+"$@" -E -xc -dM - < /dev/null > /dev/null
+
+tmpG=`mktemp -t signums_glibc.XXXXXXXXX`
+tmpK=`mktemp -t signums_kernel.XXXXXXXXX`
+trap "rm -f '$tmpG' '$tmpK'" 0
+
+# Filter out constants that aren't signal numbers.
+# If SIGPOLL is defined as SIGIO, swap it around so SIGIO is defined as
+# SIGPOLL. Similarly for SIGABRT and SIGIOT.
+# Discard obsolete signal numbers and unrelated constants:
+#    SIGCLD, SIGIOT, SIGSWI, SIGUNUSED.
+#    SIGSTKSZ, SIGRTMIN, SIGRTMAX.
+# Then sort the list.
+filter_defines ()
+{
+    $AWK '
+/^#define SIG[A-Z]+ ([0-9]+|SIG[A-Z0-9]+)$/ { signals[$2] = $3 }
+END {
+  if ("SIGPOLL" in signals && "SIGIO" in signals &&
+      signals["SIGPOLL"] == "SIGIO") {
+    signals["SIGPOLL"] = signals["SIGIO"]
+    signals["SIGIO"] = "SIGPOLL"
+  }
+  if ("SIGABRT" in signals && "SIGIOT" in signals &&
+      signals["SIGABRT"] == "SIGIOT") {
+    signals["SIGABRT"] = signals["SIGIOT"]
+    signals["SIGIOT"] = "SIGABRT"
+  }
+  for (sig in signals) {
+    if (sig !~ /^SIG(CLD|IOT|RT(MIN|MAX)|STKSZ|SWI|UNUSED)$/) {
+      printf("#define %s %s\n", sig, signals[sig])
+    }
+  }
+}' | sort
+}
+
+# $CC may contain command-line switches, so it should be word-split.
+printf '%s' '#define _GNU_SOURCE 1
+#include <signal.h>
+' |
+    "$@" -E -xc -dM - |
+    filter_defines > "$tmpG"
+
+printf '%s' '#define _GNU_SOURCE 1
+#define __ASSEMBLER__ 1
+#include <asm/signal.h>
+' |
+    "$@" -E -xc -dM - |
+    filter_defines > "$tmpK"
+
+if cmp -s "$tmpG" "$tmpK"; then
+    exit 0
+else
+    diff -u "$tmpG" "$tmpK"
+    exit 1
+fi

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=af85385f311c574590381f7897461643f8a2fe6f

commit af85385f311c574590381f7897461643f8a2fe6f
Author: Zack Weinberg <zackw@panix.com>
Date:   Tue Jun 20 09:26:43 2017 -0400

    Use locale_t, not __locale_t, throughout glibc
    
    <locale.h> is specified to define locale_t in POSIX.1-2008, and so are
    all of the headers that define functions that take locale_t arguments.
    Under _GNU_SOURCE, the additional headers that define such functions
    have also always defined locale_t.  Therefore, there is no need to use
    __locale_t in public function prototypes, nor in any internal code.
    
    	* ctype/ctype-c99_l.c, ctype/ctype.h, ctype/ctype_l.c
    	* include/monetary.h, include/stdlib.h, include/time.h
    	* include/wchar.h, locale/duplocale.c, locale/freelocale.c
    	* locale/global-locale.c, locale/langinfo.h, locale/locale.h
    	* locale/localeinfo.h, locale/newlocale.c
    	* locale/nl_langinfo_l.c, locale/uselocale.c
    	* localedata/bug-usesetlocale.c, localedata/tst-xlocale2.c
    	* stdio-common/vfscanf.c, stdlib/monetary.h, stdlib/stdlib.h
    	* stdlib/strfmon_l.c, stdlib/strtod_l.c, stdlib/strtof_l.c
    	* stdlib/strtol.c, stdlib/strtol_l.c, stdlib/strtold_l.c
    	* stdlib/strtoll_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c
    	* string/strcasecmp.c, string/strcoll_l.c, string/string.h
    	* string/strings.h, string/strncase.c, string/strxfrm_l.c
    	* sysdeps/ieee754/float128/strtof128_l.c
    	* sysdeps/ieee754/float128/wcstof128.c
    	* sysdeps/ieee754/float128/wcstof128_l.c
    	* sysdeps/ieee754/ldbl-128ibm/strtold_l.c
    	* sysdeps/ieee754/ldbl-64-128/strtold_l.c
    	* sysdeps/ieee754/ldbl-opt/nldbl-compat.c
    	* sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c
    	* sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c
    	* sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c
    	* sysdeps/powerpc/powerpc32/power7/strcasecmp.S
    	* sysdeps/powerpc/powerpc64/power7/strcasecmp.S
    	* sysdeps/x86_64/strcasecmp_l-nonascii.c
    	* sysdeps/x86_64/strncase_l-nonascii.c, time/strftime_l.c
    	* time/strptime_l.c, time/time.h, wcsmbs/mbsrtowcs_l.c
    	* wcsmbs/wchar.h, wcsmbs/wcscasecmp.c, wcsmbs/wcsncase.c
    	* wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c
    	* wcsmbs/wcstof_l.c, wcsmbs/wcstol_l.c, wcsmbs/wcstold.c
    	* wcsmbs/wcstold_l.c, wcsmbs/wcstoll_l.c, wcsmbs/wcstoul_l.c
    	* wcsmbs/wcstoull_l.c, wctype/iswctype_l.c
    	* wctype/towctrans_l.c, wctype/wcfuncs_l.c
    	* wctype/wctrans_l.c, wctype/wctype.h, wctype/wctype_l.c:
    	Change all uses of __locale_t to locale_t.

diff --git a/ChangeLog b/ChangeLog
index c7877ef..efc7c7a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,31 +1,67 @@
 2017-06-20  Zack Weinberg  <zackw@panix.com>
 
-        * locale/xlocale.h: Rename to...
+	* locale/xlocale.h: Rename to...
 	* locale/bits/types/__locale_t.h: ...here.  Adjust commentary.
 	Only define struct __locale_struct and __locale_t, not locale_t.
-        * locale/bits/types/locale_t.h: New file; define locale_t here.
-        * locale/Makefile (headers): Update to match.
-
-        * include/xlocale.h: Delete wrapper.
-        * include/bits/types/__locale_t.h: New wrapper.
-        * include/bits/types/locale_t.h: New wrapper.
-
-        * ctype/ctype.h, include/printf.h, include/time.h
-        * locale/langinfo.h, locale/locale.h, stdlib/monetary.h
-        * stdlib/stdlib.h, string/string.h, string/strings.h, time/time.h
-        * wcsmbs/wchar.h, wctype/wctype.h: Use bits/types/locale_t.h.
-        Correct outdated comments regarding the standardization status of
-        the functions that take locale_t arguments.
-
-        * stdlib/strtod_l.c, stdlib/strtof_l.c, stdlib/strtol_l.c
-        * stdlib/strtold_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c
-        * sysdeps/ieee754/ldbl-128ibm/strtold_l.c
-        * sysdeps/ieee754/ldbl-64-128/strtold_l.c
-        * wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c
-        * wcsmbs/wcstof_l.c, wcsmbs/wcstold.c, wcsmbs/wcstold_l.c:
-        Don't include xlocale.h. If necessary, include locale.h instead.
-
-        * stdlib/strtold_l.c: Unconditionally include wchar.h.
+	* locale/bits/types/locale_t.h: New file; define locale_t here.
+	* locale/Makefile (headers): Update to match.
+
+	* include/xlocale.h: Delete wrapper.
+	* include/bits/types/__locale_t.h: New wrapper.
+	* include/bits/types/locale_t.h: New wrapper.
+
+	* ctype/ctype.h, include/printf.h, include/time.h
+	* locale/langinfo.h, locale/locale.h, stdlib/monetary.h
+	* stdlib/stdlib.h, string/string.h, string/strings.h, time/time.h
+	* wcsmbs/wchar.h, wctype/wctype.h: Use bits/types/locale_t.h.
+	Correct outdated comments regarding the standardization status of
+	the functions that take locale_t arguments.
+
+	* stdlib/strtod_l.c, stdlib/strtof_l.c, stdlib/strtol_l.c
+	* stdlib/strtold_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c
+	* sysdeps/ieee754/ldbl-128ibm/strtold_l.c
+	* sysdeps/ieee754/ldbl-64-128/strtold_l.c
+	* wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c
+	* wcsmbs/wcstof_l.c, wcsmbs/wcstold.c, wcsmbs/wcstold_l.c:
+	Don't include xlocale.h. If necessary, include locale.h instead.
+
+	* stdlib/strtold_l.c: Unconditionally include wchar.h.
+
+	* ctype/ctype-c99_l.c, ctype/ctype.h, ctype/ctype_l.c
+	* include/monetary.h, include/stdlib.h, include/time.h
+	* include/wchar.h, locale/duplocale.c, locale/freelocale.c
+	* locale/global-locale.c, locale/langinfo.h, locale/locale.h
+	* locale/localeinfo.h, locale/newlocale.c
+	* locale/nl_langinfo_l.c, locale/uselocale.c
+	* localedata/bug-usesetlocale.c, localedata/tst-xlocale2.c
+	* stdio-common/vfscanf.c, stdlib/monetary.h, stdlib/stdlib.h
+	* stdlib/strfmon_l.c, stdlib/strtod_l.c, stdlib/strtof_l.c
+	* stdlib/strtol.c, stdlib/strtol_l.c, stdlib/strtold_l.c
+	* stdlib/strtoll_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c
+	* string/strcasecmp.c, string/strcoll_l.c, string/string.h
+	* string/strings.h, string/strncase.c, string/strxfrm_l.c
+	* sysdeps/ieee754/float128/strtof128_l.c
+	* sysdeps/ieee754/float128/wcstof128.c
+	* sysdeps/ieee754/float128/wcstof128_l.c
+	* sysdeps/ieee754/ldbl-128ibm/strtold_l.c
+	* sysdeps/ieee754/ldbl-64-128/strtold_l.c
+	* sysdeps/ieee754/ldbl-opt/nldbl-compat.c
+	* sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c
+	* sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c
+	* sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c
+	* sysdeps/powerpc/powerpc32/power7/strcasecmp.S
+	* sysdeps/powerpc/powerpc64/power7/strcasecmp.S
+	* sysdeps/x86_64/strcasecmp_l-nonascii.c
+	* sysdeps/x86_64/strncase_l-nonascii.c, time/strftime_l.c
+	* time/strptime_l.c, time/time.h, wcsmbs/mbsrtowcs_l.c
+	* wcsmbs/wchar.h, wcsmbs/wcscasecmp.c, wcsmbs/wcsncase.c
+	* wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c
+	* wcsmbs/wcstof_l.c, wcsmbs/wcstol_l.c, wcsmbs/wcstold.c
+	* wcsmbs/wcstold_l.c, wcsmbs/wcstoll_l.c, wcsmbs/wcstoul_l.c
+	* wcsmbs/wcstoull_l.c, wctype/iswctype_l.c
+	* wctype/towctrans_l.c, wctype/wcfuncs_l.c
+	* wctype/wctrans_l.c, wctype/wctype.h, wctype/wctype_l.c:
+	Change all uses of __locale_t to locale_t.
 
 2017-06-20  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
diff --git a/ctype/ctype-c99_l.c b/ctype/ctype-c99_l.c
index efb5a67..da54359 100644
--- a/ctype/ctype-c99_l.c
+++ b/ctype/ctype-c99_l.c
@@ -20,7 +20,7 @@
 #include <ctype.h>
 
 int
-__isblank_l (int c, __locale_t l)
+__isblank_l (int c, locale_t l)
 {
   return __isctype_l (c, _ISblank, l);
 }
diff --git a/ctype/ctype.h b/ctype/ctype.h
index ce598d5..1fcbb66 100644
--- a/ctype/ctype.h
+++ b/ctype/ctype.h
@@ -242,7 +242,7 @@ __NTH (toupper (int __c))
   ((locale)->__ctype_b[(int) (c)] & (unsigned short int) type)
 
 # define __exctype_l(name) 						      \
-  extern int name (int, __locale_t) __THROW
+  extern int name (int, locale_t) __THROW
 
 /* The following names are all functions:
      int isCHARACTERISTIC(int c, locale_t *locale);
@@ -264,12 +264,12 @@ __exctype_l (isblank_l);
 
 
 /* Return the lowercase version of C in locale L.  */
-extern int __tolower_l (int __c, __locale_t __l) __THROW;
-extern int tolower_l (int __c, __locale_t __l) __THROW;
+extern int __tolower_l (int __c, locale_t __l) __THROW;
+extern int tolower_l (int __c, locale_t __l) __THROW;
 
 /* Return the uppercase version of C.  */
-extern int __toupper_l (int __c, __locale_t __l) __THROW;
-extern int toupper_l (int __c, __locale_t __l) __THROW;
+extern int __toupper_l (int __c, locale_t __l) __THROW;
+extern int toupper_l (int __c, locale_t __l) __THROW;
 
 # if __GNUC__ >= 2 && defined __OPTIMIZE__ && !defined __cplusplus
 #  define __tolower_l(c, locale) \
diff --git a/ctype/ctype_l.c b/ctype/ctype_l.c
index a7b5f52..e565068 100644
--- a/ctype/ctype_l.c
+++ b/ctype/ctype_l.c
@@ -21,7 +21,7 @@
 /* Provide real-function versions of all the ctype macros.  */
 
 #define	func(name, type) \
-  int __##name (int c, __locale_t l) { return __isctype_l (c, type, l); } \
+  int __##name (int c, locale_t l) { return __isctype_l (c, type, l); } \
   weak_alias (__##name, name)
 
 func (isalnum_l, _ISalnum)
@@ -37,14 +37,14 @@ func (isupper_l, _ISupper)
 func (isxdigit_l, _ISxdigit)
 
 int
-(__tolower_l) (int c, __locale_t l)
+(__tolower_l) (int c, locale_t l)
 {
   return l->__ctype_tolower[c];
 }
 weak_alias (__tolower_l, tolower_l)
 
 int
-(__toupper_l) (int c, __locale_t l)
+(__toupper_l) (int c, locale_t l)
 {
   return l->__ctype_toupper[c];
 }
diff --git a/include/monetary.h b/include/monetary.h
index e687013..2a18263 100644
--- a/include/monetary.h
+++ b/include/monetary.h
@@ -2,6 +2,6 @@
 #ifndef _ISOMAC
 #include <stdarg.h>
 
-extern ssize_t __vstrfmon_l (char *s, size_t maxsize, __locale_t loc,
+extern ssize_t __vstrfmon_l (char *s, size_t maxsize, locale_t loc,
 			     const char *format, va_list ap);
 #endif
diff --git a/include/stdlib.h b/include/stdlib.h
index cae9f2c..6fd8688 100644
--- a/include/stdlib.h
+++ b/include/stdlib.h
@@ -156,34 +156,34 @@ libc_hidden_proto (__strtoull_internal)
 
 extern double ____strtod_l_internal (const char *__restrict __nptr,
 				     char **__restrict __endptr, int __group,
-				     __locale_t __loc);
+				     locale_t __loc);
 extern float ____strtof_l_internal (const char *__restrict __nptr,
 				    char **__restrict __endptr, int __group,
-				    __locale_t __loc);
+				    locale_t __loc);
 extern long double ____strtold_l_internal (const char *__restrict __nptr,
 					   char **__restrict __endptr,
-					   int __group, __locale_t __loc);
+					   int __group, locale_t __loc);
 extern long int ____strtol_l_internal (const char *__restrict __nptr,
 				       char **__restrict __endptr,
 				       int __base, int __group,
-				       __locale_t __loc);
+				       locale_t __loc);
 extern unsigned long int ____strtoul_l_internal (const char *
 						 __restrict __nptr,
 						 char **__restrict __endptr,
 						 int __base, int __group,
-						 __locale_t __loc);
+						 locale_t __loc);
 __extension__
 extern long long int ____strtoll_l_internal (const char *__restrict __nptr,
 					     char **__restrict __endptr,
 					     int __base, int __group,
-					     __locale_t __loc);
+					     locale_t __loc);
 __extension__
 extern unsigned long long int ____strtoull_l_internal (const char *
 						       __restrict __nptr,
 						       char **
 						       __restrict __endptr,
 						       int __base, int __group,
-						       __locale_t __loc);
+						       locale_t __loc);
 
 libc_hidden_proto (____strtof_l_internal)
 libc_hidden_proto (____strtod_l_internal)
@@ -243,7 +243,7 @@ libc_hidden_proto (__strtof128_internal)
 
 extern _Float128 ____strtof128_l_internal (const char *__restrict __nptr,
 					   char **__restrict __endptr,
-					   int __group, __locale_t __loc);
+					   int __group, locale_t __loc);
 
 libc_hidden_proto (____strtof128_l_internal)
 #endif
diff --git a/include/time.h b/include/time.h
index 0a67cf3..7eb0fa7 100644
--- a/include/time.h
+++ b/include/time.h
@@ -92,7 +92,7 @@ extern int __getclktck (void);
 /* strptime support.  */
 extern char * __strptime_internal (const char *rp, const char *fmt,
 				   struct tm *tm, void *statep,
-				   __locale_t locparam)
+				   locale_t locparam)
      internal_function;
 
 extern double __difftime (time_t time1, time_t time0);
diff --git a/include/wchar.h b/include/wchar.h
index b7b5a5c..7bf042c 100644
--- a/include/wchar.h
+++ b/include/wchar.h
@@ -54,7 +54,7 @@ extern unsigned long long int __wcstoull_internal (const wchar_t *
 						   int __group) __THROW;
 extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
 						       wchar_t **, int, int,
-						       __locale_t);
+						       locale_t);
 libc_hidden_proto (__wcstof_internal)
 libc_hidden_proto (__wcstod_internal)
 libc_hidden_proto (__wcstold_internal)
@@ -221,7 +221,7 @@ libc_hidden_proto (__isoc99_vfwscanf)
 
 /* Internal functions.  */
 extern size_t __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len,
-			     mbstate_t *ps, __locale_t l) attribute_hidden;
+			     mbstate_t *ps, locale_t l) attribute_hidden;
 
 /* Special version.  We know that all uses of mbsinit inside the libc
    have a non-NULL parameter.  And certainly we can access the
diff --git a/locale/duplocale.c b/locale/duplocale.c
index 07c2c58..4bf1d56 100644
--- a/locale/duplocale.c
+++ b/locale/duplocale.c
@@ -29,8 +29,8 @@
 __libc_rwlock_define (extern , __libc_setlocale_lock attribute_hidden)
 
 
-__locale_t
-__duplocale (__locale_t dataset)
+locale_t
+__duplocale (locale_t dataset)
 {
   /* This static object is returned for newlocale (LC_ALL_MASK, "C").  */
   if (dataset == _nl_C_locobj_ptr)
@@ -40,7 +40,7 @@ __duplocale (__locale_t dataset)
   if (dataset == LC_GLOBAL_LOCALE)
     dataset = &_nl_global_locale;
 
-  __locale_t result;
+  locale_t result;
   int cnt;
   size_t names_len = 0;
 
diff --git a/locale/freelocale.c b/locale/freelocale.c
index 393fab5..e326396 100644
--- a/locale/freelocale.c
+++ b/locale/freelocale.c
@@ -29,7 +29,7 @@ __libc_rwlock_define (extern , __libc_setlocale_lock attribute_hidden)
 
 
 void
-__freelocale (__locale_t dataset)
+__freelocale (locale_t dataset)
 {
   int cnt;
 
diff --git a/locale/global-locale.c b/locale/global-locale.c
index 3629c72..cf5f8cf 100644
--- a/locale/global-locale.c
+++ b/locale/global-locale.c
@@ -61,4 +61,4 @@ struct __locale_struct _nl_global_locale attribute_hidden =
 #include <tls.h>
 
 /* The tsd macros don't permit an initializer.  */
-__thread __locale_t __libc_tsd_LOCALE = &_nl_global_locale;
+__thread locale_t __libc_tsd_LOCALE = &_nl_global_locale;
diff --git a/locale/langinfo.h b/locale/langinfo.h
index 93d8446..1403957 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -588,7 +588,7 @@ extern char *nl_langinfo (nl_item __item) __THROW;
 # include <bits/types/locale_t.h>
 
 /* Just like nl_langinfo but get the information from the locale object L.  */
-extern char *nl_langinfo_l (nl_item __item, __locale_t __l);
+extern char *nl_langinfo_l (nl_item __item, locale_t __l);
 #endif
 
 __END_DECLS
diff --git a/locale/locale.h b/locale/locale.h
index 6c1b220..ba025f6 100644
--- a/locale/locale.h
+++ b/locale/locale.h
@@ -138,8 +138,8 @@ extern struct lconv *localeconv (void) __THROW;
    datasets.  Unlike for the CATEGORY parameter for `setlocale' the
    CATEGORY_MASK parameter here uses a single bit for each category,
    made by OR'ing together LC_*_MASK bits above.  */
-extern __locale_t newlocale (int __category_mask, const char *__locale,
-			     __locale_t __base) __THROW;
+extern locale_t newlocale (int __category_mask, const char *__locale,
+			   locale_t __base) __THROW;
 
 /* These are the bits that can be set in the CATEGORY_MASK argument to
    `newlocale'.  In the GNU implementation, LC_FOO_MASK has the value
@@ -173,22 +173,22 @@ extern __locale_t newlocale (int __category_mask, const char *__locale,
 
 /* Return a duplicate of the set of locale in DATASET.  All usage
    counters are increased if necessary.  */
-extern __locale_t duplocale (__locale_t __dataset) __THROW;
+extern locale_t duplocale (locale_t __dataset) __THROW;
 
 /* Free the data associated with a locale dataset previously returned
    by a call to `setlocale_r'.  */
-extern void freelocale (__locale_t __dataset) __THROW;
+extern void freelocale (locale_t __dataset) __THROW;
 
 /* Switch the current thread's locale to DATASET.
    If DATASET is null, instead just return the current setting.
    The special value LC_GLOBAL_LOCALE is the initial setting
    for all threads and can also be installed any time, meaning
    the thread uses the global settings controlled by `setlocale'.  */
-extern __locale_t uselocale (__locale_t __dataset) __THROW;
+extern locale_t uselocale (locale_t __dataset) __THROW;
 
 /* This value can be passed to `uselocale' and may be returned by it.
    Passing this value to any other function has undefined behavior.  */
-# define LC_GLOBAL_LOCALE	((__locale_t) -1L)
+# define LC_GLOBAL_LOCALE	((locale_t) -1L)
 
 #endif
 
diff --git a/locale/localeinfo.h b/locale/localeinfo.h
index f0694dc..4e1c8c5 100644
--- a/locale/localeinfo.h
+++ b/locale/localeinfo.h
@@ -214,9 +214,9 @@ extern struct __locale_struct _nl_global_locale attribute_hidden;
 
 /* This fetches the thread-local locale_t pointer, either one set with
    uselocale or &_nl_global_locale.  */
-#define _NL_CURRENT_LOCALE	(__libc_tsd_get (__locale_t, LOCALE))
+#define _NL_CURRENT_LOCALE	(__libc_tsd_get (locale_t, LOCALE))
 #include <libc-tsd.h>
-__libc_tsd_define (extern, __locale_t, LOCALE)
+__libc_tsd_define (extern, locale_t, LOCALE)
 
 
 /* For static linking it is desireable to avoid always linking in the code
diff --git a/locale/newlocale.c b/locale/newlocale.c
index 2190b73..828d715 100644
--- a/locale/newlocale.c
+++ b/locale/newlocale.c
@@ -39,13 +39,13 @@ __libc_rwlock_define (extern , __libc_setlocale_lock attribute_hidden)
   } while (0)
 
 
-__locale_t
-__newlocale (int category_mask, const char *locale, __locale_t base)
+locale_t
+__newlocale (int category_mask, const char *locale, locale_t base)
 {
   /* Intermediate memory for result.  */
   const char *newnames[__LC_LAST];
   struct __locale_struct result;
-  __locale_t result_ptr;
+  locale_t result_ptr;
   char *locale_path;
   size_t locale_path_len;
   const char *locpath_var;
@@ -86,7 +86,7 @@ __newlocale (int category_mask, const char *locale, __locale_t base)
      dataset using the C locale data.  */
   if (category_mask == 0)
     {
-      result_ptr = (__locale_t) malloc (sizeof (struct __locale_struct));
+      result_ptr = (locale_t) malloc (sizeof (struct __locale_struct));
       if (result_ptr == NULL)
 	return NULL;
       *result_ptr = result;
diff --git a/locale/nl_langinfo_l.c b/locale/nl_langinfo_l.c
index 89acdbd..f29a5a5 100644
--- a/locale/nl_langinfo_l.c
+++ b/locale/nl_langinfo_l.c
@@ -27,7 +27,7 @@
 /* Return a string with the data for locale-dependent parameter ITEM.  */
 
 char *
-__nl_langinfo_l (nl_item item, __locale_t l)
+__nl_langinfo_l (nl_item item, locale_t l)
 {
   int category = _NL_ITEM_CATEGORY (item);
   unsigned int index = _NL_ITEM_INDEX (item);
diff --git a/locale/uselocale.c b/locale/uselocale.c
index 9ef22d3..a66b9cb 100644
--- a/locale/uselocale.c
+++ b/locale/uselocale.c
@@ -34,7 +34,7 @@ __uselocale (locale_t newloc)
     {
       const locale_t locobj
 	= newloc == LC_GLOBAL_LOCALE ? &_nl_global_locale : newloc;
-      __libc_tsd_set (__locale_t, LOCALE, locobj);
+      __libc_tsd_set (locale_t, LOCALE, locobj);
 
 #ifdef NL_CURRENT_INDIRECT
       /* Now we must update all the per-category thread-local variables to
diff --git a/localedata/bug-usesetlocale.c b/localedata/bug-usesetlocale.c
index 0637067..5f4a2d1 100644
--- a/localedata/bug-usesetlocale.c
+++ b/localedata/bug-usesetlocale.c
@@ -8,7 +8,7 @@
 static int
 do_test (void)
 {
-  __locale_t loc_new, loc_old;
+  locale_t loc_new, loc_old;
 
   int first = !!isalpha(0xE4);
 
diff --git a/localedata/tst-xlocale2.c b/localedata/tst-xlocale2.c
index 30d87de..7f99050 100644
--- a/localedata/tst-xlocale2.c
+++ b/localedata/tst-xlocale2.c
@@ -4,7 +4,7 @@
 #include <stdlib.h>
 
 
-static int do_test (__locale_t l);
+static int do_test (locale_t l);
 
 int
 main (void)
diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c
index 1adf27e..7d9d17b 100644
--- a/stdio-common/vfscanf.c
+++ b/stdio-common/vfscanf.c
@@ -289,7 +289,7 @@ _IO_vfscanf_internal (_IO_FILE *s, const char *format, _IO_va_list argptr,
   int flags;		/* Modifiers for current format element.  */
   int errval = 0;
 #ifndef COMPILE_WSCANF
-  __locale_t loc = _NL_CURRENT_LOCALE;
+  locale_t loc = _NL_CURRENT_LOCALE;
   struct __locale_data *const curctype = loc->__locales[LC_CTYPE];
 #endif
 
diff --git a/stdlib/monetary.h b/stdlib/monetary.h
index c1fcbf0..2c35cc1 100644
--- a/stdlib/monetary.h
+++ b/stdlib/monetary.h
@@ -45,7 +45,7 @@ extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
 
 /* Formatting a monetary value according to the given locale.  */
 extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
-			  __locale_t __loc,
+			  locale_t __loc,
 			  const char *__restrict __format, ...)
      __THROW __attribute_format_strfmon__ (4, 5);
 #endif
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index ce2602e..7a720cf 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -200,42 +200,42 @@ extern int strfromf128 (char *__dest, size_t __size, const char * __format,
 
 extern long int strtol_l (const char *__restrict __nptr,
 			  char **__restrict __endptr, int __base,
-			  __locale_t __loc) __THROW __nonnull ((1, 4));
+			  locale_t __loc) __THROW __nonnull ((1, 4));
 
 extern unsigned long int strtoul_l (const char *__restrict __nptr,
 				    char **__restrict __endptr,
-				    int __base, __locale_t __loc)
+				    int __base, locale_t __loc)
      __THROW __nonnull ((1, 4));
 
 __extension__
 extern long long int strtoll_l (const char *__restrict __nptr,
 				char **__restrict __endptr, int __base,
-				__locale_t __loc)
+				locale_t __loc)
      __THROW __nonnull ((1, 4));
 
 __extension__
 extern unsigned long long int strtoull_l (const char *__restrict __nptr,
 					  char **__restrict __endptr,
-					  int __base, __locale_t __loc)
+					  int __base, locale_t __loc)
      __THROW __nonnull ((1, 4));
 
 extern double strtod_l (const char *__restrict __nptr,
-			char **__restrict __endptr, __locale_t __loc)
+			char **__restrict __endptr, locale_t __loc)
      __THROW __nonnull ((1, 3));
 
 extern float strtof_l (const char *__restrict __nptr,
-		       char **__restrict __endptr, __locale_t __loc)
+		       char **__restrict __endptr, locale_t __loc)
      __THROW __nonnull ((1, 3));
 
 extern long double strtold_l (const char *__restrict __nptr,
 			      char **__restrict __endptr,
-			      __locale_t __loc)
+			      locale_t __loc)
      __THROW __nonnull ((1, 3));
 
 # if __HAVE_FLOAT128
 extern _Float128 strtof128_l (const char *__restrict __nptr,
 			      char **__restrict __endptr,
-			      __locale_t __loc)
+			      locale_t __loc)
      __THROW __nonnull ((1, 3));
 # endif
 #endif /* GNU */
diff --git a/stdlib/strfmon_l.c b/stdlib/strfmon_l.c
index af64173..69ca9d5 100644
--- a/stdlib/strfmon_l.c
+++ b/stdlib/strfmon_l.c
@@ -81,7 +81,7 @@ extern unsigned int __guess_grouping (unsigned int intdig_max,
    too.  Some of the information contradicts the information which can
    be specified in format string.  */
 ssize_t
-__vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
+__vstrfmon_l (char *s, size_t maxsize, locale_t loc, const char *format,
 	      va_list ap)
 {
   struct __locale_data *current = loc->__locales[LC_MONETARY];
@@ -609,7 +609,7 @@ __vstrfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format,
 }
 
 ssize_t
-___strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
+___strfmon_l (char *s, size_t maxsize, locale_t loc, const char *format, ...)
 {
   va_list ap;
 
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index a782a24..9fc9e4c 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -19,7 +19,7 @@
 
 #include <locale.h>
 
-extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
+extern double ____strtod_l_internal (const char *, char **, int, locale_t);
 
 /* Configuration part.  These macros are defined by `strtold.c',
    `strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
@@ -484,7 +484,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
    ERANGE and return HUGE_VAL with the appropriate sign.  */
 FLOAT
 ____STRTOF_INTERNAL (const STRING_TYPE *nptr, STRING_TYPE **endptr, int group,
-		     __locale_t loc)
+		     locale_t loc)
 {
   int negative;			/* The sign of the number.  */
   MPN_VAR (num);		/* MP representation of the number.  */
@@ -1758,7 +1758,7 @@ FLOAT
 #ifdef weak_function
 weak_function
 #endif
-__STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+__STRTOF (const STRING_TYPE *nptr, STRING_TYPE **endptr, locale_t loc)
 {
   return ____STRTOF_INTERNAL (nptr, endptr, 0, loc);
 }
diff --git a/stdlib/strtof_l.c b/stdlib/strtof_l.c
index ea76c34..33be42f 100644
--- a/stdlib/strtof_l.c
+++ b/stdlib/strtof_l.c
@@ -19,7 +19,7 @@
 
 #include <locale.h>
 
-extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
+extern float ____strtof_l_internal (const char *, char **, int, locale_t);
 
 #define	FLOAT		float
 #define	FLT		FLT
diff --git a/stdlib/strtol.c b/stdlib/strtol.c
index 8ac8347..d1e3bfe 100644
--- a/stdlib/strtol.c
+++ b/stdlib/strtol.c
@@ -88,7 +88,7 @@
 
 
 extern INT INTERNAL (__strtol_l) (const STRING_TYPE *, STRING_TYPE **, int,
-				  int, __locale_t);
+				  int, locale_t);
 
 
 INT
diff --git a/stdlib/strtol_l.c b/stdlib/strtol_l.c
index 48e9ab5..28ea4bc 100644
--- a/stdlib/strtol_l.c
+++ b/stdlib/strtol_l.c
@@ -222,7 +222,7 @@ extern const unsigned char __strtol_ull_rem_tab[] attribute_hidden;
 
 INT
 INTERNAL (__strtol_l) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-		       int base, int group, __locale_t loc)
+		       int base, int group, locale_t loc)
 {
   int negative;
   unsigned LONG int cutoff;
@@ -542,7 +542,7 @@ INT
 weak_function
 #endif
 __strtol_l (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-	    int base, __locale_t loc)
+	    int base, locale_t loc)
 {
   return INTERNAL (__strtol_l) (nptr, endptr, base, 0, loc);
 }
diff --git a/stdlib/strtold_l.c b/stdlib/strtold_l.c
index 7b9efd8..7445379 100644
--- a/stdlib/strtold_l.c
+++ b/stdlib/strtold_l.c
@@ -35,12 +35,12 @@
 #define INTERNAL1(x) __##x##_internal
 
 extern double INTERNAL (__STRTOD) (const STRING_TYPE *, STRING_TYPE **,
-				   int, __locale_t);
+				   int, locale_t);
 
 /* There is no `long double' type, use the `double' implementations.  */
 long double
 INTERNAL (__STRTOLD) (const STRING_TYPE *nptr, STRING_TYPE **endptr,
-		      int group, __locale_t loc)
+		      int group, locale_t loc)
 {
   return INTERNAL (__STRTOD) (nptr, endptr, group, loc);
 }
@@ -50,7 +50,7 @@ libc_hidden_def (INTERNAL (__STRTOLD))
 
 long double
 weak_function
-__STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, __locale_t loc)
+__STRTOLD (const STRING_TYPE *nptr, STRING_TYPE **endptr, locale_t loc)
 {
   return INTERNAL (__STRTOD) (nptr, endptr, 0, loc);
 }
diff --git a/stdlib/strtoll_l.c b/stdlib/strtoll_l.c
index 003f425..93548d0 100644
--- a/stdlib/strtoll_l.c
+++ b/stdlib/strtoll_l.c
@@ -22,6 +22,6 @@
 #include <locale.h>
 
 extern long long int ____strtoll_l_internal (const char *, char **, int, int,
-					     __locale_t);
+					     locale_t);
 
 #include <strtol_l.c>
diff --git a/stdlib/strtoul_l.c b/stdlib/strtoul_l.c
index 45b0585..8a0934c 100644
--- a/stdlib/strtoul_l.c
+++ b/stdlib/strtoul_l.c
@@ -22,6 +22,6 @@
 #include <locale.h>
 
 extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
-						 int, __locale_t);
+						 int, locale_t);
 
 #include "strtol_l.c"
diff --git a/stdlib/strtoull_l.c b/stdlib/strtoull_l.c
index da6d7cd..a9de8eb 100644
--- a/stdlib/strtoull_l.c
+++ b/stdlib/strtoull_l.c
@@ -23,6 +23,6 @@
 #include <locale.h>
 
 extern unsigned long long int ____strtoull_l_internal (const char *, char **,
-						       int, int, __locale_t);
+						       int, int, locale_t);
 
 #include <strtol_l.c>
diff --git a/string/strcasecmp.c b/string/strcasecmp.c
index 2d6ae0f..d739963 100644
--- a/string/strcasecmp.c
+++ b/string/strcasecmp.c
@@ -34,7 +34,7 @@
 #endif
 
 #ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# define LOCALE_PARAM , __locale_t loc
+# define LOCALE_PARAM , locale_t loc
 #else
 # define LOCALE_PARAM
 #endif
@@ -46,7 +46,7 @@ int
 __strcasecmp (const char *s1, const char *s2 LOCALE_PARAM)
 {
 #if defined _LIBC && !defined USE_IN_EXTENDED_LOCALE_MODEL
-  __locale_t loc = _NL_CURRENT_LOCALE;
+  locale_t loc = _NL_CURRENT_LOCALE;
 #endif
   const unsigned char *p1 = (const unsigned char *) s1;
   const unsigned char *p2 = (const unsigned char *) s2;
diff --git a/string/strcoll_l.c b/string/strcoll_l.c
index 8fd55b0..d46932c 100644
--- a/string/strcoll_l.c
+++ b/string/strcoll_l.c
@@ -254,7 +254,7 @@ out:
 }
 
 int
-STRCOLL (const STRING_TYPE *s1, const STRING_TYPE *s2, __locale_t l)
+STRCOLL (const STRING_TYPE *s1, const STRING_TYPE *s2, locale_t l)
 {
   struct __locale_data *current = l->__locales[LC_COLLATE];
   uint_fast32_t nrules = current->values[_NL_ITEM_INDEX (_NL_COLLATE_NRULES)].word;
diff --git a/string/string.h b/string/string.h
index fb073d0..79f8345 100644
--- a/string/string.h
+++ b/string/string.h
@@ -152,12 +152,12 @@ extern size_t strxfrm (char *__restrict __dest,
 # include <bits/types/locale_t.h>
 
 /* Compare the collated forms of S1 and S2, using sorting rules from L.  */
-extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
+extern int strcoll_l (const char *__s1, const char *__s2, locale_t __l)
      __THROW __attribute_pure__ __nonnull ((1, 2, 3));
 /* Put a transformation of SRC into no more than N bytes of DEST,
    using sorting rules from L.  */
 extern size_t strxfrm_l (char *__dest, const char *__src, size_t __n,
-			 __locale_t __l) __THROW __nonnull ((2, 4));
+			 locale_t __l) __THROW __nonnull ((2, 4));
 #endif
 
 #if (defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8	\
@@ -424,7 +424,7 @@ extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
 
 #ifdef __USE_XOPEN2K8
 /* Translate error number to string according to the locale L.  */
-extern char *strerror_l (int __errnum, __locale_t __l) __THROW;
+extern char *strerror_l (int __errnum, locale_t __l) __THROW;
 #endif
 
 #ifdef __USE_MISC
diff --git a/string/strings.h b/string/strings.h
index 53d1b5c..630b3ad 100644
--- a/string/strings.h
+++ b/string/strings.h
@@ -125,13 +125,13 @@ extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
 # include <bits/types/locale_t.h>
 
 /* Compare S1 and S2, ignoring case, using collation rules from LOC.  */
-extern int strcasecmp_l (const char *__s1, const char *__s2, __locale_t __loc)
+extern int strcasecmp_l (const char *__s1, const char *__s2, locale_t __loc)
      __THROW __attribute_pure__ __nonnull ((1, 2, 3));
 
 /* Compare no more than N chars of S1 and S2, ignoring case, using
    collation rules from LOC.  */
 extern int strncasecmp_l (const char *__s1, const char *__s2,
-			  size_t __n, __locale_t __loc)
+			  size_t __n, locale_t __loc)
      __THROW __attribute_pure__ __nonnull ((1, 2, 4));
 #endif
 
diff --git a/string/strncase.c b/string/strncase.c
index 6cb996c..ba42b61 100644
--- a/string/strncase.c
+++ b/string/strncase.c
@@ -36,7 +36,7 @@
 #endif
 
 #ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# define LOCALE_PARAM , __locale_t loc
+# define LOCALE_PARAM , locale_t loc
 #else
 # define LOCALE_PARAM
 #endif
@@ -49,7 +49,7 @@ int
 __strncasecmp (const char *s1, const char *s2, size_t n LOCALE_PARAM)
 {
 #if defined _LIBC && !defined USE_IN_EXTENDED_LOCALE_MODEL
-  __locale_t loc = _NL_CURRENT_LOCALE;
+  locale_t loc = _NL_CURRENT_LOCALE;
 #endif
   const unsigned char *p1 = (const unsigned char *) s1;
   const unsigned char *p2 = (const unsigned char *) s2;
diff --git a/string/strxfrm_l.c b/string/strxfrm_l.c
index dd98a4c..7e04bfc 100644
--- a/string/strxfrm_l.c
+++ b/string/strxfrm_l.c
@@ -665,7 +665,7 @@ do_xfrm_cached (STRING_TYPE *dest, size_t n, const locale_data_t *l_data,
 }
 
 size_t
-STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, __locale_t l)
+STRXFRM (STRING_TYPE *dest, const STRING_TYPE *src, size_t n, locale_t l)
 {
   locale_data_t l_data;
   struct __locale_data *current = l->__locales[LC_COLLATE];
diff --git a/sysdeps/ieee754/float128/strtof128_l.c b/sysdeps/ieee754/float128/strtof128_l.c
index 0f768a3..d3d55ea 100644
--- a/sysdeps/ieee754/float128/strtof128_l.c
+++ b/sysdeps/ieee754/float128/strtof128_l.c
@@ -22,7 +22,7 @@
 #include <bits/floatn.h>
 
 extern _Float128 ____strtof128_l_internal (const char *, char **,
-					   int, __locale_t);
+					   int, locale_t);
 
 #define	FLOAT		_Float128
 #define	FLT		FLT128
diff --git a/sysdeps/ieee754/float128/wcstof128.c b/sysdeps/ieee754/float128/wcstof128.c
index c5a17ba..1d6326d 100644
--- a/sysdeps/ieee754/float128/wcstof128.c
+++ b/sysdeps/ieee754/float128/wcstof128.c
@@ -25,6 +25,6 @@
 #include <bits/floatn.h>
 
 extern _Float128 ____wcstof128_l_internal (const wchar_t *, wchar_t **, int,
-					   __locale_t);
+					   locale_t);
 
 #include "strtof128.c"
diff --git a/sysdeps/ieee754/float128/wcstof128_l.c b/sysdeps/ieee754/float128/wcstof128_l.c
index 670b6af..2df7184 100644
--- a/sysdeps/ieee754/float128/wcstof128_l.c
+++ b/sysdeps/ieee754/float128/wcstof128_l.c
@@ -25,6 +25,6 @@
 #include <bits/floatn.h>
 
 extern _Float128 ____wcstof128_l_internal (const wchar_t *, wchar_t **, int,
-					   __locale_t);
+					   locale_t);
 
 #include "strtof128_l.c"
diff --git a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
index 341de78..b12151d 100644
--- a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
@@ -25,13 +25,13 @@
 #define FLOAT		long double
 #define FLT		LDBL
 #ifdef USE_WIDE_CHAR
-extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, __locale_t);
+extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, locale_t);
 # define STRTOF		__new_wcstold_l
 # define __STRTOF	____new_wcstold_l
 # define ____STRTOF_INTERNAL ____wcstold_l_internal
 # define STRTOF_NAN	__wcstold_nan
 #else
-extern long double ____new_strtold_l (const char *, char **, __locale_t);
+extern long double ____new_strtold_l (const char *, char **, locale_t);
 # define STRTOF		__new_strtold_l
 # define __STRTOF	____new_strtold_l
 # define ____STRTOF_INTERNAL ____strtold_l_internal
diff --git a/sysdeps/ieee754/ldbl-64-128/strtold_l.c b/sysdeps/ieee754/ldbl-64-128/strtold_l.c
index 341de78..b12151d 100644
--- a/sysdeps/ieee754/ldbl-64-128/strtold_l.c
+++ b/sysdeps/ieee754/ldbl-64-128/strtold_l.c
@@ -25,13 +25,13 @@
 #define FLOAT		long double
 #define FLT		LDBL
 #ifdef USE_WIDE_CHAR
-extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, __locale_t);
+extern long double ____new_wcstold_l (const wchar_t *, wchar_t **, locale_t);
 # define STRTOF		__new_wcstold_l
 # define __STRTOF	____new_wcstold_l
 # define ____STRTOF_INTERNAL ____wcstold_l_internal
 # define STRTOF_NAN	__wcstold_nan
 #else
-extern long double ____new_strtold_l (const char *, char **, __locale_t);
+extern long double ____new_strtold_l (const char *, char **, locale_t);
 # define STRTOF		__new_strtold_l
 # define __STRTOF	____new_strtold_l
 # define ____STRTOF_INTERNAL ____strtold_l_internal
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
index 84c4aee..e11d6d1 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-compat.c
@@ -790,7 +790,7 @@ __nldbl_strfmon (char *s, size_t maxsize, const char *format, ...)
 
 ssize_t
 attribute_compat_text_section
-__nldbl___strfmon_l (char *s, size_t maxsize, __locale_t loc,
+__nldbl___strfmon_l (char *s, size_t maxsize, locale_t loc,
 		     const char *format, ...)
 {
   va_list ap;
@@ -818,7 +818,7 @@ libc_hidden_def (__nldbl___vstrfmon)
 
 ssize_t
 attribute_compat_text_section
-__nldbl___vstrfmon_l (char *s, size_t maxsize, __locale_t loc,
+__nldbl___vstrfmon_l (char *s, size_t maxsize, locale_t loc,
 		      const char *format, va_list ap)
 {
   ssize_t res;
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c b/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c
index 0db0e8c..9281e17 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c
@@ -2,7 +2,7 @@
 
 ssize_t
 attribute_hidden
-__strfmon_l (char *s, size_t maxsize, __locale_t loc, const char *format, ...)
+__strfmon_l (char *s, size_t maxsize, locale_t loc, const char *format, ...)
 {
   va_list ap;
   ssize_t res;
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c b/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c
index 33ff1ca..29ad60c 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c
@@ -8,11 +8,11 @@
 
 extern double
 __strtod_l (const char *__restrict __nptr, char **__restrict __endptr,
-	    __locale_t __loc);
+	    locale_t __loc);
 
 double
 attribute_hidden
-__strtold_l (const char *nptr, char **endptr, __locale_t loc)
+__strtold_l (const char *nptr, char **endptr, locale_t loc)
 {
   return __strtod_l (nptr, endptr, loc);
 }
diff --git a/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c b/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c
index e32d13a..7004ae7 100644
--- a/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c
+++ b/sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c
@@ -6,7 +6,7 @@
 
 double
 attribute_hidden
-__wcstold_l (const wchar_t *nptr, wchar_t **endptr, __locale_t loc)
+__wcstold_l (const wchar_t *nptr, wchar_t **endptr, locale_t loc)
 {
   return __wcstod_l (nptr, endptr, loc);
 }
diff --git a/sysdeps/powerpc/powerpc32/power7/strcasecmp.S b/sysdeps/powerpc/powerpc32/power7/strcasecmp.S
index 964875a..5aa0d62 100644
--- a/sysdeps/powerpc/powerpc32/power7/strcasecmp.S
+++ b/sysdeps/powerpc/powerpc32/power7/strcasecmp.S
@@ -24,7 +24,7 @@
    or if defined USE_IN_EXTENDED_LOCALE_MODEL:
 
    int [r3] strcasecmp_l (const char *s1 [r3], const char *s2 [r4],
-                          __locale_t loc [r5]) */
+                          locale_t loc [r5]) */
 
 #ifndef STRCMP
 # define __STRCMP __strcasecmp
diff --git a/sysdeps/powerpc/powerpc64/power7/strcasecmp.S b/sysdeps/powerpc/powerpc64/power7/strcasecmp.S
index 2243187..c453ccd 100644
--- a/sysdeps/powerpc/powerpc64/power7/strcasecmp.S
+++ b/sysdeps/powerpc/powerpc64/power7/strcasecmp.S
@@ -24,7 +24,7 @@
    or if defined USE_IN_EXTENDED_LOCALE_MODEL:
 
    int [r3] strcasecmp_l (const char *s1 [r3], const char *s2 [r4],
-                          __locale_t loc [r5]) */
+                          locale_t loc [r5]) */
 
 #ifndef STRCMP
 # define __STRCMP __strcasecmp
diff --git a/sysdeps/x86_64/strcasecmp_l-nonascii.c b/sysdeps/x86_64/strcasecmp_l-nonascii.c
index 30e8969..9ba9bc8 100644
--- a/sysdeps/x86_64/strcasecmp_l-nonascii.c
+++ b/sysdeps/x86_64/strcasecmp_l-nonascii.c
@@ -1,7 +1,7 @@
 #include <string.h>
 
 extern int __strcasecmp_l_nonascii (const char *__s1, const char *__s2,
-				    __locale_t __loc);
+				    locale_t __loc);
 
 #define __strcasecmp_l __strcasecmp_l_nonascii
 #define USE_IN_EXTENDED_LOCALE_MODEL    1
diff --git a/sysdeps/x86_64/strncase_l-nonascii.c b/sysdeps/x86_64/strncase_l-nonascii.c
index 8664863..e3d83a0 100644
--- a/sysdeps/x86_64/strncase_l-nonascii.c
+++ b/sysdeps/x86_64/strncase_l-nonascii.c
@@ -1,7 +1,7 @@
 #include <string.h>
 
 extern int __strncasecmp_l_nonascii (const char *__s1, const char *__s2,
-				     size_t __n, __locale_t __loc);
+				     size_t __n, locale_t __loc);
 
 #define __strncasecmp_l __strncasecmp_l_nonascii
 #define USE_IN_EXTENDED_LOCALE_MODEL    1
diff --git a/time/strftime_l.c b/time/strftime_l.c
index eb3efb8..439b971 100644
--- a/time/strftime_l.c
+++ b/time/strftime_l.c
@@ -284,7 +284,7 @@ static const CHAR_T zeroes[16] = /* "0000000000000000" */
 # undef _NL_CURRENT
 # define _NL_CURRENT(category, item) \
   (current->values[_NL_ITEM_INDEX (item)].string)
-# define LOCALE_PARAM , __locale_t loc
+# define LOCALE_PARAM , locale_t loc
 # define LOCALE_ARG , loc
 # define HELPER_LOCALE_ARG  , current
 #else
diff --git a/time/strptime_l.c b/time/strptime_l.c
index dbf4606..185619e 100644
--- a/time/strptime_l.c
+++ b/time/strptime_l.c
@@ -181,7 +181,7 @@ static const unsigned short int __mon_yday[2][13] =
 # undef _NL_CURRENT_WORD
 # define _NL_CURRENT_WORD(category, item) \
   (current->values[_NL_ITEM_INDEX (item)].word)
-# define LOCALE_PARAM , __locale_t locale
+# define LOCALE_PARAM , locale_t locale
 # define LOCALE_ARG , locale
 # define HELPER_LOCALE_ARG , current
 # define ISSPACE(Ch) __isspace_l (Ch, locale)
diff --git a/time/time.h b/time/time.h
index 17cc1e6..f12a461 100644
--- a/time/time.h
+++ b/time/time.h
@@ -104,13 +104,13 @@ extern char *strptime (const char *__restrict __s,
 extern size_t strftime_l (char *__restrict __s, size_t __maxsize,
 			  const char *__restrict __format,
 			  const struct tm *__restrict __tp,
-			  __locale_t __loc) __THROW;
+			  locale_t __loc) __THROW;
 #endif
 
 #ifdef __USE_GNU
 extern char *strptime_l (const char *__restrict __s,
 			 const char *__restrict __fmt, struct tm *__tp,
-			 __locale_t __loc) __THROW;
+			 locale_t __loc) __THROW;
 #endif
 
 
diff --git a/wcsmbs/mbsrtowcs_l.c b/wcsmbs/mbsrtowcs_l.c
index 4ffb652..33b432a 100644
--- a/wcsmbs/mbsrtowcs_l.c
+++ b/wcsmbs/mbsrtowcs_l.c
@@ -38,7 +38,7 @@
 size_t
 attribute_hidden
 __mbsrtowcs_l (wchar_t *dst, const char **src, size_t len, mbstate_t *ps,
-	       __locale_t l)
+	       locale_t l)
 {
   struct __gconv_step_data data;
   size_t result;
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index 9054661..4f16f98 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -120,10 +120,10 @@ extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
 /* Similar to the two functions above but take the information from
    the provided locale and not the global locale.  */
 extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
-			 __locale_t __loc) __THROW;
+			 locale_t __loc) __THROW;
 
 extern int wcsncasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
-			  size_t __n, __locale_t __loc) __THROW;
+			  size_t __n, locale_t __loc) __THROW;
 #endif
 
 /* Compare S1 and S2, both interpreted as appropriate to the
@@ -142,13 +142,13 @@ extern size_t wcsxfrm (wchar_t *__restrict __s1,
 /* Compare S1 and S2, both interpreted as appropriate to the
    LC_COLLATE category of the given locale.  */
 extern int wcscoll_l (const wchar_t *__s1, const wchar_t *__s2,
-		      __locale_t __loc) __THROW;
+		      locale_t __loc) __THROW;
 
 /* Transform S2 into array pointed to by S1 such that if wcscmp is
    applied to two transformed strings the result is the as applying
    `wcscoll' to the original strings.  */
 extern size_t wcsxfrm_l (wchar_t *__s1, const wchar_t *__s2,
-			 size_t __n, __locale_t __loc) __THROW;
+			 size_t __n, locale_t __loc) __THROW;
 
 /* Duplicate S, returning an identical malloc'd string.  */
 extern wchar_t *wcsdup (const wchar_t *__s) __THROW __attribute_malloc__;
@@ -441,39 +441,39 @@ extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
    by the POSIX.1-2008 extended locale API.  */
 extern long int wcstol_l (const wchar_t *__restrict __nptr,
 			  wchar_t **__restrict __endptr, int __base,
-			  __locale_t __loc) __THROW;
+			  locale_t __loc) __THROW;
 
 extern unsigned long int wcstoul_l (const wchar_t *__restrict __nptr,
 				    wchar_t **__restrict __endptr,
-				    int __base, __locale_t __loc) __THROW;
+				    int __base, locale_t __loc) __THROW;
 
 __extension__
 extern long long int wcstoll_l (const wchar_t *__restrict __nptr,
 				wchar_t **__restrict __endptr,
-				int __base, __locale_t __loc) __THROW;
+				int __base, locale_t __loc) __THROW;
 
 __extension__
 extern unsigned long long int wcstoull_l (const wchar_t *__restrict __nptr,
 					  wchar_t **__restrict __endptr,
-					  int __base, __locale_t __loc)
+					  int __base, locale_t __loc)
      __THROW;
 
 extern double wcstod_l (const wchar_t *__restrict __nptr,
-			wchar_t **__restrict __endptr, __locale_t __loc)
+			wchar_t **__restrict __endptr, locale_t __loc)
      __THROW;
 
 extern float wcstof_l (const wchar_t *__restrict __nptr,
-		       wchar_t **__restrict __endptr, __locale_t __loc)
+		       wchar_t **__restrict __endptr, locale_t __loc)
      __THROW;
 
 extern long double wcstold_l (const wchar_t *__restrict __nptr,
 			      wchar_t **__restrict __endptr,
-			      __locale_t __loc) __THROW;
+			      locale_t __loc) __THROW;
 
 # if __HAVE_FLOAT128
 extern _Float128 wcstof128_l (const wchar_t *__restrict __nptr,
 			      wchar_t **__restrict __endptr,
-			      __locale_t __loc) __THROW;
+			      locale_t __loc) __THROW;
 # endif
 #endif	/* use GNU */
 
@@ -775,7 +775,7 @@ extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
 extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
 			  const wchar_t *__restrict __format,
 			  const struct tm *__restrict __tp,
-			  __locale_t __loc) __THROW;
+			  locale_t __loc) __THROW;
 # endif
 
 /* Define some macros helping to catch buffer overflows.  */
diff --git a/wcsmbs/wcscasecmp.c b/wcsmbs/wcscasecmp.c
index 0f02e50..e5db009 100644
--- a/wcsmbs/wcscasecmp.c
+++ b/wcsmbs/wcscasecmp.c
@@ -35,7 +35,7 @@
 #endif
 
 #ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# define LOCALE_PARAM , __locale_t loc
+# define LOCALE_PARAM , locale_t loc
 #else
 # define LOCALE_PARAM
 #endif
diff --git a/wcsmbs/wcsncase.c b/wcsmbs/wcsncase.c
index 945434c..82fc31b 100644
--- a/wcsmbs/wcsncase.c
+++ b/wcsmbs/wcsncase.c
@@ -37,7 +37,7 @@
 #endif
 
 #ifdef USE_IN_EXTENDED_LOCALE_MODEL
-# define LOCALE_PARAM , __locale_t loc
+# define LOCALE_PARAM , locale_t loc
 #else
 # define LOCALE_PARAM
 #endif
diff --git a/wcsmbs/wcstod.c b/wcsmbs/wcstod.c
index 72fa7ea..4604f51 100644
--- a/wcsmbs/wcstod.c
+++ b/wcsmbs/wcstod.c
@@ -23,6 +23,6 @@
 #define	USE_WIDE_CHAR	1
 
 extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
-				     __locale_t);
+				     locale_t);
 
 #include <stdlib/strtod.c>
diff --git a/wcsmbs/wcstod_l.c b/wcsmbs/wcstod_l.c
index 1d5c67c..7790f5a 100644
--- a/wcsmbs/wcstod_l.c
+++ b/wcsmbs/wcstod_l.c
@@ -22,7 +22,7 @@
 
 
 extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
-				     __locale_t);
+				     locale_t);
 
 #define	USE_WIDE_CHAR	1
 
diff --git a/wcsmbs/wcstof.c b/wcsmbs/wcstof.c
index 67c16e0..e91c09c 100644
--- a/wcsmbs/wcstof.c
+++ b/wcsmbs/wcstof.c
@@ -22,6 +22,6 @@
 #define	USE_WIDE_CHAR	1
 
 extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
-				    __locale_t);
+				    locale_t);
 
 #include <stdlib/strtof.c>
diff --git a/wcsmbs/wcstof_l.c b/wcsmbs/wcstof_l.c
index d430bf1..143b716 100644
--- a/wcsmbs/wcstof_l.c
+++ b/wcsmbs/wcstof_l.c
@@ -24,6 +24,6 @@
 #define	USE_WIDE_CHAR	1
 
 extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
-				    __locale_t);
+				    locale_t);
 
 #include <stdlib/strtof_l.c>
diff --git a/wcsmbs/wcstol_l.c b/wcsmbs/wcstol_l.c
index 744f8f8..42bd842 100644
--- a/wcsmbs/wcstol_l.c
+++ b/wcsmbs/wcstol_l.c
@@ -24,6 +24,6 @@
 #define	USE_WIDE_CHAR	1
 
 extern long int ____wcstol_l_internal (const wchar_t *, wchar_t **, int, int,
-				       __locale_t);
+				       locale_t);
 
 #include <stdlib/strtol_l.c>
diff --git a/wcsmbs/wcstold.c b/wcsmbs/wcstold.c
index 816f43b..7a14cd2 100644
--- a/wcsmbs/wcstold.c
+++ b/wcsmbs/wcstold.c
@@ -22,6 +22,6 @@
 #define USE_WIDE_CHAR	1
 
 extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int,
-					   __locale_t);
+					   locale_t);
 
 #include <stdlib/strtold.c>
diff --git a/wcsmbs/wcstold_l.c b/wcsmbs/wcstold_l.c
index 86f63e8..a7ab025 100644
--- a/wcsmbs/wcstold_l.c
+++ b/wcsmbs/wcstold_l.c
@@ -23,6 +23,6 @@
 #define USE_WIDE_CHAR	1
 
 extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int,
-					   __locale_t);
+					   locale_t);
 
 #include <strtold_l.c>
diff --git a/wcsmbs/wcstoll_l.c b/wcsmbs/wcstoll_l.c
index 225153f..598d3f5 100644
--- a/wcsmbs/wcstoll_l.c
+++ b/wcsmbs/wcstoll_l.c
@@ -24,6 +24,6 @@
 #define QUAD	1
 
 extern long long int ____wcstoll_l_internal (const wchar_t *, wchar_t **,
-					     int, int, __locale_t);
+					     int, int, locale_t);
 
 #include <wcstol_l.c>
diff --git a/wcsmbs/wcstoul_l.c b/wcsmbs/wcstoul_l.c
index 0847284..f9f3808 100644
--- a/wcsmbs/wcstoul_l.c
+++ b/wcsmbs/wcstoul_l.c
@@ -24,6 +24,6 @@
 #define UNSIGNED	1
 
 extern unsigned long int ____wcstoul_l_internal (const wchar_t *, wchar_t **,
-						 int, int, __locale_t);
+						 int, int, locale_t);
 
 #include "wcstol_l.c"
diff --git a/wcsmbs/wcstoull_l.c b/wcsmbs/wcstoull_l.c
index 532d01a..412a9fc 100644
--- a/wcsmbs/wcstoull_l.c
+++ b/wcsmbs/wcstoull_l.c
@@ -25,6 +25,6 @@
 
 extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
 						       wchar_t **, int, int,
-						       __locale_t);
+						       locale_t);
 
 #include <wcstoll_l.c>
diff --git a/wctype/iswctype_l.c b/wctype/iswctype_l.c
index 9a5daec..0f85264 100644
--- a/wctype/iswctype_l.c
+++ b/wctype/iswctype_l.c
@@ -24,7 +24,7 @@
 
 
 int
-__iswctype_l (wint_t wc, wctype_t desc, __locale_t locale)
+__iswctype_l (wint_t wc, wctype_t desc, locale_t locale)
 {
   /* If the user passes in an invalid DESC valid (the one returned from
      `__wctype_l' in case of an error) simply return 0.  */
diff --git a/wctype/towctrans_l.c b/wctype/towctrans_l.c
index f45f195..1c65897 100644
--- a/wctype/towctrans_l.c
+++ b/wctype/towctrans_l.c
@@ -23,7 +23,7 @@
 #include "wchar-lookup.h"
 
 wint_t
-__towctrans_l (wint_t wc, wctrans_t desc, __locale_t locale)
+__towctrans_l (wint_t wc, wctrans_t desc, locale_t locale)
 {
   /* If the user passes in an invalid DESC valid (the one returned from
      `__wctrans_l' in case of an error) simply return the value.  */
diff --git a/wctype/wcfuncs_l.c b/wctype/wcfuncs_l.c
index 994813b..d45dc10 100644
--- a/wctype/wcfuncs_l.c
+++ b/wctype/wcfuncs_l.c
@@ -27,7 +27,7 @@
 /* Provide real-function versions of all the wctype macros.  */
 
 #define	func(name, type) \
-  int __isw##name (wint_t wc, __locale_t locale)			      \
+  int __isw##name (wint_t wc, locale_t locale)				      \
   {									      \
     if (isascii (wc))							      \
       return is##name ((int) wc, locale);				      \
@@ -54,7 +54,7 @@ func (upper_l, __ISwupper)
 func (xdigit_l, __ISwxdigit)
 
 wint_t
-(__towlower_l) (wint_t wc, __locale_t locale)
+(__towlower_l) (wint_t wc, locale_t locale)
 {
   size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + __TOW_tolower;
   const char *desc = locale->__locales[LC_CTYPE]->values[i].string;
@@ -64,7 +64,7 @@ libc_hidden_def (__towlower_l)
 weak_alias (__towlower_l, towlower_l)
 
 wint_t
-(__towupper_l) (wint_t wc, __locale_t locale)
+(__towupper_l) (wint_t wc, locale_t locale)
 {
   size_t i = locale->__locales[LC_CTYPE]->values[_NL_ITEM_INDEX (_NL_CTYPE_MAP_OFFSET)].word + __TOW_toupper;
   const char *desc = locale->__locales[LC_CTYPE]->values[i].string;
diff --git a/wctype/wctrans_l.c b/wctype/wctrans_l.c
index 10a960b..e64c303 100644
--- a/wctype/wctrans_l.c
+++ b/wctype/wctrans_l.c
@@ -21,7 +21,7 @@
 #include "../locale/localeinfo.h"
 
 wctrans_t
-__wctrans_l (const char *property, __locale_t locale)
+__wctrans_l (const char *property, locale_t locale)
 {
   const char *names;
   size_t cnt;
diff --git a/wctype/wctype.h b/wctype/wctype.h
index 7945795..3bcf9c6 100644
--- a/wctype/wctype.h
+++ b/wctype/wctype.h
@@ -60,66 +60,66 @@ extern wint_t towctrans (wint_t __wc, wctrans_t __desc) __THROW;
 
 /* Test for any wide character for which `iswalpha' or `iswdigit' is
    true.  */
-extern int iswalnum_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswalnum_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character for which `iswupper' or 'iswlower' is
    true, or any wide character that is one of a locale-specific set of
    wide-characters for which none of `iswcntrl', `iswdigit',
    `iswpunct', or `iswspace' is true.  */
-extern int iswalpha_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswalpha_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any control wide character.  */
-extern int iswcntrl_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswcntrl_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character that corresponds to a decimal-digit
    character.  */
-extern int iswdigit_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswdigit_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character for which `iswprint' is true and
    `iswspace' is false.  */
-extern int iswgraph_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswgraph_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character that corresponds to a lowercase letter
    or is one of a locale-specific set of wide characters for which
    none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
-extern int iswlower_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswlower_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any printing wide character.  */
-extern int iswprint_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswprint_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any printing wide character that is one of a
    locale-specific et of wide characters for which neither `iswspace'
    nor `iswalnum' is true.  */
-extern int iswpunct_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswpunct_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character that corresponds to a locale-specific
    set of wide characters for which none of `iswalnum', `iswgraph', or
    `iswpunct' is true.  */
-extern int iswspace_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswspace_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character that corresponds to an uppercase letter
    or is one of a locale-specific set of wide character for which none
    of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
-extern int iswupper_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswupper_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character that corresponds to a hexadecimal-digit
    character equivalent to that performed be the functions described
    in the previous subclause.  */
-extern int iswxdigit_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswxdigit_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Test for any wide character that corresponds to a standard blank
    wide character or a locale-specific set of wide characters for
    which `iswalnum' is false.  */
-extern int iswblank_l (wint_t __wc, __locale_t __locale) __THROW;
+extern int iswblank_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Construct value that describes a class of wide characters identified
    by the string argument PROPERTY.  */
-extern wctype_t wctype_l (const char *__property, __locale_t __locale)
+extern wctype_t wctype_l (const char *__property, locale_t __locale)
      __THROW;
 
 /* Determine whether the wide-character WC has the property described by
    DESC.  */
-extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
+extern int iswctype_l (wint_t __wc, wctype_t __desc, locale_t __locale)
      __THROW;
 
 /*
@@ -127,19 +127,19 @@ extern int iswctype_l (wint_t __wc, wctype_t __desc, __locale_t __locale)
  */
 
 /* Converts an uppercase letter to the corresponding lowercase letter.  */
-extern wint_t towlower_l (wint_t __wc, __locale_t __locale) __THROW;
+extern wint_t towlower_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Converts an lowercase letter to the corresponding uppercase letter.  */
-extern wint_t towupper_l (wint_t __wc, __locale_t __locale) __THROW;
+extern wint_t towupper_l (wint_t __wc, locale_t __locale) __THROW;
 
 /* Construct value that describes a mapping between wide characters
    identified by the string argument PROPERTY.  */
-extern wctrans_t wctrans_l (const char *__property, __locale_t __locale)
+extern wctrans_t wctrans_l (const char *__property, locale_t __locale)
      __THROW;
 
 /* Map the wide character WC using the mapping described by DESC.  */
 extern wint_t towctrans_l (wint_t __wc, wctrans_t __desc,
-			   __locale_t __locale) __THROW;
+			   locale_t __locale) __THROW;
 
 # endif /* Use POSIX 2008.  */
 
diff --git a/wctype/wctype_l.c b/wctype/wctype_l.c
index c17a1e9..ea60ba3 100644
--- a/wctype/wctype_l.c
+++ b/wctype/wctype_l.c
@@ -23,7 +23,7 @@
 #include <locale/localeinfo.h>
 
 wctype_t
-__wctype_l (const char *property, __locale_t locale)
+__wctype_l (const char *property, locale_t locale)
 {
   const char *names;
   unsigned int result;

http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=f0be25b6336db7492e47d2e8e72eb8af53b5506d

commit f0be25b6336db7492e47d2e8e72eb8af53b5506d
Author: Zack Weinberg <zackw@panix.com>
Date:   Fri Jun 9 12:02:06 2017 -0400

    Rename xlocale.h to bits/types/__locale_t.h.
    
    xlocale.h is already a single-type micro-header, defining struct
    __locale_struct and the typedefs __locale_t and locale_t.  This patch
    brings it into the bits/types/ scheme: there are now
    bits/types/__locale_t.h which defines only __locale_struct and
    __locale_t, and bits/types/locale_t.h which defines locale_t as well
    as the other two.  None of *our* headers need __locale_t.h, but it
    appears to me that libstdc++ could make use of it.
    
    There are a lot of external uses of xlocale.h, but all the uses I
    checked had an autoconf test or equivalent for its existence.  It has
    never been available from other C libraries, and it has always
    contained a comment reading "This file is not standardized, don't rely
    on it, it can go away without warning" so I think dropping it is
    pretty safe.
    
    I also took the opportunity to clean up comments in various public
    header files that still talk about the *_l interfaces as though they
    were completely nonstandard.  There are a few of them, notably the
    strtoX_l and wcstoX_l families, that haven't been standardized, but
    the bulk are in POSIX.1-2008.
    
            * locale/xlocale.h: Rename to...
    	* locale/bits/types/__locale_t.h: ...here.  Adjust commentary.
    	Only define struct __locale_struct and __locale_t, not locale_t.
            * locale/bits/types/locale_t.h: New file; define locale_t here.
            * locale/Makefile (headers): Update to match.
    
            * include/xlocale.h: Delete wrapper.
            * include/bits/types/__locale_t.h: New wrapper.
            * include/bits/types/locale_t.h: New wrapper.
    
            * ctype/ctype.h, include/printf.h, include/time.h
            * locale/langinfo.h, locale/locale.h, stdlib/monetary.h
            * stdlib/stdlib.h, string/string.h, string/strings.h, time/time.h
            * wcsmbs/wchar.h, wctype/wctype.h: Use bits/types/locale_t.h.
            Correct outdated comments regarding the standardization status of
            the functions that take locale_t arguments.
    
            * stdlib/strtod_l.c, stdlib/strtof_l.c, stdlib/strtol_l.c
            * stdlib/strtold_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c
            * sysdeps/ieee754/ldbl-128ibm/strtold_l.c
            * sysdeps/ieee754/ldbl-64-128/strtold_l.c
            * wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c
            * wcsmbs/wcstof_l.c, wcsmbs/wcstold.c, wcsmbs/wcstold_l.c:
            Don't include xlocale.h. If necessary, include locale.h instead.
    
            * stdlib/strtold_l.c: Unconditionally include wchar.h.

diff --git a/ChangeLog b/ChangeLog
index 84f177d..c7877ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+2017-06-20  Zack Weinberg  <zackw@panix.com>
+
+        * locale/xlocale.h: Rename to...
+	* locale/bits/types/__locale_t.h: ...here.  Adjust commentary.
+	Only define struct __locale_struct and __locale_t, not locale_t.
+        * locale/bits/types/locale_t.h: New file; define locale_t here.
+        * locale/Makefile (headers): Update to match.
+
+        * include/xlocale.h: Delete wrapper.
+        * include/bits/types/__locale_t.h: New wrapper.
+        * include/bits/types/locale_t.h: New wrapper.
+
+        * ctype/ctype.h, include/printf.h, include/time.h
+        * locale/langinfo.h, locale/locale.h, stdlib/monetary.h
+        * stdlib/stdlib.h, string/string.h, string/strings.h, time/time.h
+        * wcsmbs/wchar.h, wctype/wctype.h: Use bits/types/locale_t.h.
+        Correct outdated comments regarding the standardization status of
+        the functions that take locale_t arguments.
+
+        * stdlib/strtod_l.c, stdlib/strtof_l.c, stdlib/strtol_l.c
+        * stdlib/strtold_l.c, stdlib/strtoul_l.c, stdlib/strtoull_l.c
+        * sysdeps/ieee754/ldbl-128ibm/strtold_l.c
+        * sysdeps/ieee754/ldbl-64-128/strtold_l.c
+        * wcsmbs/wcstod.c, wcsmbs/wcstod_l.c, wcsmbs/wcstof.c
+        * wcsmbs/wcstof_l.c, wcsmbs/wcstold.c, wcsmbs/wcstold_l.c:
+        Don't include xlocale.h. If necessary, include locale.h instead.
+
+        * stdlib/strtold_l.c: Unconditionally include wchar.h.
+
 2017-06-20  Adhemerval Zanella  <adhemerval.zanella@linaro.org>
 
 	* sysdeps/unix/sysv/linux/openat.c (__libc_openat): Build only
diff --git a/NEWS b/NEWS
index 4db334b..0736b4b 100644
--- a/NEWS
+++ b/NEWS
@@ -74,6 +74,10 @@ Version 2.26
   as this kind of optimization is better done by the compiler.  The macros
   __USE_STRING_INLINES and __NO_STRING_INLINES no longer have any effect.
 
+* The nonstandard header <xlocale.h> has been removed.  Most programs should
+  use <locale.h> instead.  If you have a specific need for the definition
+  of locale_t with no other declarations, please talk to us.
+
 * The reallocarray function has been added to libc.  It is a realloc
   replacement with a check for integer overflow when calculating total
   allocation size.
diff --git a/ctype/ctype.h b/ctype/ctype.h
index 1fe89cf..ce598d5 100644
--- a/ctype/ctype.h
+++ b/ctype/ctype.h
@@ -233,20 +233,8 @@ __NTH (toupper (int __c))
 
 
 #ifdef __USE_XOPEN2K8
-/* The concept of one static locale per category is not very well
-   thought out.  Many applications will need to process its data using
-   information from several different locales.  Another application is
-   the implementation of the internationalization handling in the
-   upcoming ISO C++ standard library.  To support this another set of
-   the functions using locale data exist which have an additional
-   argument.
-
-   Attention: all these functions are *not* standardized in any form.
-   This is a proof-of-concept implementation.  */
-
-/* Structure for reentrant locale using functions.  This is an
-   (almost) opaque type for the user level programs.  */
-# include <xlocale.h>
+/* POSIX.1-2008 extended locale interface (see locale.h).  */
+# include <bits/types/locale_t.h>
 
 /* These definitions are similar to the ones above but all functions
    take as an argument a handle for the locale which shall be used.  */
diff --git a/dev/null b/dev/null
new file mode 100644
index 0000000..e69de29
diff --git a/include/bits/types/__locale_t.h b/include/bits/types/__locale_t.h
new file mode 100644
index 0000000..610b819
--- /dev/null
+++ b/include/bits/types/__locale_t.h
@@ -0,0 +1 @@
+#include <locale/bits/types/__locale_t.h>
diff --git a/include/bits/types/locale_t.h b/include/bits/types/locale_t.h
new file mode 100644
index 0000000..24b0748
--- /dev/null
+++ b/include/bits/types/locale_t.h
@@ -0,0 +1 @@
+#include <locale/bits/types/locale_t.h>
diff --git a/include/printf.h b/include/printf.h
index 984f263..7b4d209 100644
--- a/include/printf.h
+++ b/include/printf.h
@@ -4,7 +4,7 @@
 
 # ifndef _ISOMAC
 
-#include <xlocale.h>
+#include <bits/types/locale_t.h>
 
 /* Now define the internal interfaces.  */
 extern int __printf_fphex (FILE *, const struct printf_info *,
diff --git a/include/time.h b/include/time.h
index 3a828e0..0a67cf3 100644
--- a/include/time.h
+++ b/include/time.h
@@ -2,7 +2,7 @@
 #include <time/time.h>
 
 #ifndef _ISOMAC
-# include <xlocale.h>
+# include <bits/types/locale_t.h>
 
 extern __typeof (strftime_l) __strftime_l;
 libc_hidden_proto (__strftime_l)
diff --git a/include/xlocale.h b/include/xlocale.h
deleted file mode 100644
index 5280ef0..0000000
--- a/include/xlocale.h
+++ /dev/null
@@ -1 +0,0 @@
-#include <locale/xlocale.h>
diff --git a/locale/Makefile b/locale/Makefile
index d9ef48f..98ee762 100644
--- a/locale/Makefile
+++ b/locale/Makefile
@@ -22,7 +22,8 @@ subdir	:= locale
 
 include ../Makeconfig
 
-headers		= locale.h bits/locale.h langinfo.h xlocale.h
+headers		= langinfo.h locale.h bits/locale.h \
+		  bits/types/locale_t.h bits/types/__locale_t.h
 routines	= setlocale findlocale loadlocale loadarchive \
 		  localeconv nl_langinfo nl_langinfo_l mb_cur_max \
 		  newlocale duplocale freelocale uselocale
diff --git a/locale/xlocale.h b/locale/bits/types/__locale_t.h
similarity index 72%
rename from locale/xlocale.h
rename to locale/bits/types/__locale_t.h
index 20b2c11..4511aa1 100644
--- a/locale/xlocale.h
+++ b/locale/bits/types/__locale_t.h
@@ -1,4 +1,4 @@
-/* Definition of locale datatype.
+/* Definition of struct __locale_struct and __locale_t.
    Copyright (C) 1997-2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@@ -17,14 +17,15 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifndef _XLOCALE_H
-#define _XLOCALE_H	1
+#ifndef _BITS_TYPES___LOCALE_T_H
+#define _BITS_TYPES___LOCALE_T_H 1
 
-/* Structure for reentrant locale using functions.  This is an
-   (almost) opaque type for the user level programs.  The file and
-   this data structure is not standardized.  Don't rely on it.  It can
-   go away without warning.  */
-typedef struct __locale_struct
+/* POSIX.1-2008: the locale_t type, representing a locale context
+   (implementation-namespace version).  This type should be treated
+   as opaque by applications; some details are exposed for the sake of
+   efficiency in e.g. ctype functions.  */
+
+struct __locale_struct
 {
   /* Note: LC_ALL is not a valid index into this array.  */
   struct __locale_data *__locales[13]; /* 13 = __LC_LAST. */
@@ -36,9 +37,8 @@ typedef struct __locale_struct
 
   /* Note: LC_ALL is not a valid index into this array.  */
   const char *__names[13];
-} *__locale_t;
+};
 
-/* POSIX 2008 makes locale_t official.  */
-typedef __locale_t locale_t;
+typedef struct __locale_struct *__locale_t;
 
-#endif /* xlocale.h */
+#endif /* bits/types/__locale_t.h */
diff --git a/wcsmbs/wcstof.c b/locale/bits/types/locale_t.h
similarity index 70%
copy from wcsmbs/wcstof.c
copy to locale/bits/types/locale_t.h
index 29cdec3..de7ec2e 100644
--- a/wcsmbs/wcstof.c
+++ b/locale/bits/types/locale_t.h
@@ -1,6 +1,6 @@
-/* Copyright (C) 1996-2017 Free Software Foundation, Inc.
+/* Definition of locale_t.
+   Copyright (C) 2017 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
-   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1996.
 
    The GNU C Library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
@@ -16,12 +16,11 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <stddef.h>
-#include <xlocale.h>
+#ifndef _BITS_TYPES_LOCALE_T_H
+#define _BITS_TYPES_LOCALE_T_H 1
 
-#define	USE_WIDE_CHAR	1
+#include <bits/types/__locale_t.h>
 
-extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
-				    __locale_t);
+typedef __locale_t locale_t;
 
-#include <stdlib/strtof.c>
+#endif /* bits/types/locale_t.h */
diff --git a/locale/langinfo.h b/locale/langinfo.h
index 759adfb..93d8446 100644
--- a/locale/langinfo.h
+++ b/locale/langinfo.h
@@ -584,11 +584,8 @@ extern char *nl_langinfo (nl_item __item) __THROW;
 
 
 #ifdef __USE_XOPEN2K8
-/* This interface is for the extended locale model.  See <locale.h> for
-   more information.  */
-
-/* Get locale datatype definition.  */
-# include <xlocale.h>
+/* POSIX.1-2008 extended locale interface (see locale.h).  */
+# include <bits/types/locale_t.h>
 
 /* Just like nl_langinfo but get the information from the locale object L.  */
 extern char *nl_langinfo_l (nl_item __item, __locale_t __l);
diff --git a/locale/locale.h b/locale/locale.h
index 9a5fce9..6c1b220 100644
--- a/locale/locale.h
+++ b/locale/locale.h
@@ -126,19 +126,13 @@ extern struct lconv *localeconv (void) __THROW;
 
 
 #ifdef	__USE_XOPEN2K8
-/* The concept of one static locale per category is not very well
-   thought out.  Many applications will need to process its data using
-   information from several different locales.  Another application is
-   the implementation of the internationalization handling in the
-   upcoming ISO C++ standard library.  To support this another set of
-   the functions using locale data exist which have an additional
-   argument.
-
-   Attention: all these functions are *not* standardized in any form.
-   This is a proof-of-concept implementation.  */
-
-/* Get locale datatype definition.  */
-# include <xlocale.h>
+/* POSIX.1-2008 extends the locale interface with functions for
+   explicit creation and manipulation of 'locale_t' objects
+   representing locale contexts, and a set of parallel
+   locale-sensitive text processing functions that take a locale_t
+   argument.  This enables applications to work with data from
+   multiple locales simultaneously and thread-safely.  */
+# include <bits/types/locale_t.h>
 
 /* Return a reference to a data structure representing a set of locale
    datasets.  Unlike for the CATEGORY parameter for `setlocale' the
diff --git a/stdlib/monetary.h b/stdlib/monetary.h
index dcfbfc5..c1fcbf0 100644
--- a/stdlib/monetary.h
+++ b/stdlib/monetary.h
@@ -40,7 +40,8 @@ extern ssize_t strfmon (char *__restrict __s, size_t __maxsize,
      __THROW __attribute_format_strfmon__ (3, 4);
 
 #ifdef __USE_XOPEN2K8
-# include <xlocale.h>
+/* POSIX.1-2008 extended locale interface (see locale.h).  */
+# include <bits/types/locale_t.h>
 
 /* Formatting a monetary value according to the given locale.  */
 extern ssize_t strfmon_l (char *__restrict __s, size_t __maxsize,
diff --git a/stdlib/stdlib.h b/stdlib/stdlib.h
index 6f1e70e..ce2602e 100644
--- a/stdlib/stdlib.h
+++ b/stdlib/stdlib.h
@@ -193,23 +193,11 @@ extern int strfromf128 (char *__dest, size_t __size, const char * __format,
 
 
 #ifdef __USE_GNU
-/* The concept of one static locale per category is not very well
-   thought out.  Many applications will need to process its data using
-   information from several different locales.  Another problem is
-   the implementation of the internationalization handling in the
-   ISO C++ standard library.  To support this another set of
-   the functions using locale data exist which take an additional
-   argument.
-
-   Attention: even though several *_l interfaces are part of POSIX:2008,
-   these are not.  */
-
-/* Structure for reentrant locale using functions.  This is an
-   (almost) opaque type for the user level programs.  */
-# include <xlocale.h>
-
-/* Special versions of the functions above which take the locale to
-   use as an additional parameter.  */
+/* Parallel versions of the functions above which take the locale to
+   use as an additional parameter.  These are GNU extensions inspired
+   by the POSIX.1-2008 extended locale API.  */
+# include <bits/types/locale_t.h>
+
 extern long int strtol_l (const char *__restrict __nptr,
 			  char **__restrict __endptr, int __base,
 			  __locale_t __loc) __THROW __nonnull ((1, 4));
diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
index 99c2af3..a782a24 100644
--- a/stdlib/strtod_l.c
+++ b/stdlib/strtod_l.c
@@ -17,7 +17,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <xlocale.h>
+#include <locale.h>
 
 extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
 
@@ -46,7 +46,6 @@ extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
 #include <errno.h>
 #include <float.h>
 #include "../locale/localeinfo.h"
-#include <locale.h>
 #include <math.h>
 #include <math_private.h>
 #include <stdlib.h>
diff --git a/stdlib/strtof_l.c b/stdlib/strtof_l.c
index 57e5575..ea76c34 100644
--- a/stdlib/strtof_l.c
+++ b/stdlib/strtof_l.c
@@ -17,7 +17,7 @@
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
-#include <xlocale.h>
+#include <locale.h>
 
 extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
 
diff --git a/stdlib/strtol_l.c b/stdlib/strtol_l.c
index 5a0683b..48e9ab5 100644
--- a/stdlib/strtol_l.c
+++ b/stdlib/strtol_l.c
@@ -41,7 +41,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <locale.h>
-#include <xlocale.h>
 #include <stdint.h>
 #include <bits/wordsize.h>
 
diff --git a/stdlib/strtold_l.c b/stdlib/strtold_l.c
index bef2a4d..7b9efd8 100644
--- a/stdlib/strtold_l.c
+++ b/stdlib/strtold_l.c
@@ -17,11 +17,7 @@
 
 #include <math.h>
 #include <stdlib.h>
-#include <xlocale.h>
-
-#if defined _LIBC || defined HAVE_WCHAR_H
-# include <wchar.h>
-#endif
+#include <wchar.h>
 
 #ifdef USE_WIDE_CHAR
 # define STRING_TYPE	wchar_t
diff --git a/stdlib/strtoll_l.c b/stdlib/strtoll_l.c
index 2a712eb..003f425 100644
--- a/stdlib/strtoll_l.c
+++ b/stdlib/strtoll_l.c
@@ -19,7 +19,7 @@
 
 #define QUAD	1
 
-#include <xlocale.h>
+#include <locale.h>
 
 extern long long int ____strtoll_l_internal (const char *, char **, int, int,
 					     __locale_t);
diff --git a/stdlib/strtoul_l.c b/stdlib/strtoul_l.c
index 6d23ee2..45b0585 100644
--- a/stdlib/strtoul_l.c
+++ b/stdlib/strtoul_l.c
@@ -19,7 +19,7 @@
 
 #define UNSIGNED	1
 
-#include <xlocale.h>
+#include <locale.h>
 
 extern unsigned long int ____strtoul_l_internal (const char *, char **, int,
 						 int, __locale_t);
diff --git a/stdlib/strtoull_l.c b/stdlib/strtoull_l.c
index 53ecb91..da6d7cd 100644
--- a/stdlib/strtoull_l.c
+++ b/stdlib/strtoull_l.c
@@ -20,7 +20,7 @@
 #define QUAD		1
 #define UNSIGNED	1
 
-#include <xlocale.h>
+#include <locale.h>
 
 extern unsigned long long int ____strtoull_l_internal (const char *, char **,
 						       int, int, __locale_t);
diff --git a/string/string.h b/string/string.h
index 5aec0ef..fb073d0 100644
--- a/string/string.h
+++ b/string/string.h
@@ -148,7 +148,8 @@ extern size_t strxfrm (char *__restrict __dest,
      __THROW __nonnull ((2));
 
 #ifdef __USE_XOPEN2K8
-# include <xlocale.h>
+/* POSIX.1-2008 extended locale interface (see locale.h).  */
+# include <bits/types/locale_t.h>
 
 /* Compare the collated forms of S1 and S2, using sorting rules from L.  */
 extern int strcoll_l (const char *__s1, const char *__s2, __locale_t __l)
diff --git a/string/strings.h b/string/strings.h
index 43207af..53d1b5c 100644
--- a/string/strings.h
+++ b/string/strings.h
@@ -121,7 +121,8 @@ extern int strncasecmp (const char *__s1, const char *__s2, size_t __n)
      __THROW __attribute_pure__ __nonnull ((1, 2));
 
 #ifdef	__USE_XOPEN2K8
-# include <xlocale.h>
+/* POSIX.1-2008 extended locale interface (see locale.h).  */
+# include <bits/types/locale_t.h>
 
 /* Compare S1 and S2, ignoring case, using collation rules from LOC.  */
 extern int strcasecmp_l (const char *__s1, const char *__s2, __locale_t __loc)
diff --git a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
index 37034cb..341de78 100644
--- a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
+++ b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
@@ -18,7 +18,6 @@
 #include <math.h>
 #include <stdlib.h>
 #include <wchar.h>
-#include <xlocale.h>
 
 /* The actual implementation for all floating point sizes is in strtod.c.
    These macros tell it to produce the `long double' version, `strtold'.  */
diff --git a/sysdeps/ieee754/ldbl-64-128/strtold_l.c b/sysdeps/ieee754/ldbl-64-128/strtold_l.c
index 37034cb..341de78 100644
--- a/sysdeps/ieee754/ldbl-64-128/strtold_l.c
+++ b/sysdeps/ieee754/ldbl-64-128/strtold_l.c
@@ -18,7 +18,6 @@
 #include <math.h>
 #include <stdlib.h>
 #include <wchar.h>
-#include <xlocale.h>
 
 /* The actual implementation for all floating point sizes is in strtod.c.
    These macros tell it to produce the `long double' version, `strtold'.  */
diff --git a/time/time.h b/time/time.h
index bb4994f..17cc1e6 100644
--- a/time/time.h
+++ b/time/time.h
@@ -57,7 +57,7 @@ typedef __pid_t pid_t;
 #endif
 
 #ifdef __USE_XOPEN2K8
-# include <xlocale.h>
+# include <bits/types/locale_t.h>
 #endif
 
 #ifdef __USE_ISOC11
diff --git a/wcsmbs/wchar.h b/wcsmbs/wchar.h
index accd24a..9054661 100644
--- a/wcsmbs/wchar.h
+++ b/wcsmbs/wchar.h
@@ -45,6 +45,9 @@
 #if defined __USE_UNIX98 || defined __USE_XOPEN2K
 # include <bits/types/FILE.h>
 #endif
+#ifdef __USE_XOPEN2K8
+# include <bits/types/locale_t.h>
+#endif
 
 /* Tell the caller that we provide correct C++ prototypes.  */
 #if defined __cplusplus && __GNUC_PREREQ (4, 4)
@@ -116,8 +119,6 @@ extern int wcsncasecmp (const wchar_t *__s1, const wchar_t *__s2,
 
 /* Similar to the two functions above but take the information from
    the provided locale and not the global locale.  */
-# include <xlocale.h>
-
 extern int wcscasecmp_l (const wchar_t *__s1, const wchar_t *__s2,
 			 __locale_t __loc) __THROW;
 
@@ -435,23 +436,9 @@ extern unsigned long long int wcstouq (const wchar_t *__restrict __nptr,
 #endif /* Use GNU.  */
 
 #ifdef __USE_GNU
-/* The concept of one static locale per category is not very well
-   thought out.  Many applications will need to process its data using
-   information from several different locales.  Another application is
-   the implementation of the internationalization handling in the
-   upcoming ISO C++ standard library.  To support this another set of
-   the functions using locale data exist which have an additional
-   argument.
-
-   Attention: all these functions are *not* standardized in any form.
-   This is a proof-of-concept implementation.  */
-
-/* Structure for reentrant locale using functions.  This is an
-   (almost) opaque type for the user level programs.  */
-# include <xlocale.h>
-
-/* Special versions of the functions above which take the locale to
-   use as an additional parameter.  */
+/* Parallel versions of the functions above which take the locale to
+   use as an additional parameter.  These are GNU extensions inspired
+   by the POSIX.1-2008 extended locale API.  */
 extern long int wcstol_l (const wchar_t *__restrict __nptr,
 			  wchar_t **__restrict __endptr, int __base,
 			  __locale_t __loc) __THROW;
@@ -783,8 +770,6 @@ extern size_t wcsftime (wchar_t *__restrict __s, size_t __maxsize,
 			const struct tm *__restrict __tp) __THROW;
 
 # ifdef __USE_GNU
-# include <xlocale.h>
-
 /* Similar to `wcsftime' but takes the information from
    the provided locale and not the global locale.  */
 extern size_t wcsftime_l (wchar_t *__restrict __s, size_t __maxsize,
diff --git a/wcsmbs/wcstod.c b/wcsmbs/wcstod.c
index b7db11b..72fa7ea 100644
--- a/wcsmbs/wcstod.c
+++ b/wcsmbs/wcstod.c
@@ -17,7 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
-#include <xlocale.h>
+#include <locale.h>
 
 
 #define	USE_WIDE_CHAR	1
diff --git a/wcsmbs/wcstod_l.c b/wcsmbs/wcstod_l.c
index 5f7498c..1d5c67c 100644
--- a/wcsmbs/wcstod_l.c
+++ b/wcsmbs/wcstod_l.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
-#include <xlocale.h>
+#include <locale.h>
 
 
 extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
diff --git a/wcsmbs/wcstof.c b/wcsmbs/wcstof.c
index 29cdec3..67c16e0 100644
--- a/wcsmbs/wcstof.c
+++ b/wcsmbs/wcstof.c
@@ -17,7 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
-#include <xlocale.h>
+#include <locale.h>
 
 #define	USE_WIDE_CHAR	1
 
diff --git a/wcsmbs/wcstof_l.c b/wcsmbs/wcstof_l.c
index 23d402d..d430bf1 100644
--- a/wcsmbs/wcstof_l.c
+++ b/wcsmbs/wcstof_l.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
-#include <xlocale.h>
+#include <locale.h>
 
 
 #define	USE_WIDE_CHAR	1
diff --git a/wcsmbs/wcstold.c b/wcsmbs/wcstold.c
index e5c1cc3..816f43b 100644
--- a/wcsmbs/wcstold.c
+++ b/wcsmbs/wcstold.c
@@ -17,7 +17,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
-#include <xlocale.h>
+#include <locale.h>
 
 #define USE_WIDE_CHAR	1
 
diff --git a/wcsmbs/wcstold_l.c b/wcsmbs/wcstold_l.c
index 3dd33a7..86f63e8 100644
--- a/wcsmbs/wcstold_l.c
+++ b/wcsmbs/wcstold_l.c
@@ -18,7 +18,7 @@
    <http://www.gnu.org/licenses/>.  */
 
 #include <stddef.h>
-#include <xlocale.h>
+#include <locale.h>
 
 #define USE_WIDE_CHAR	1
 
diff --git a/wctype/wctype.h b/wctype/wctype.h
index 962aef1..7945795 100644
--- a/wctype/wctype.h
+++ b/wctype/wctype.h
@@ -55,8 +55,8 @@ extern wctrans_t wctrans (const char *__property) __THROW;
 extern wint_t towctrans (wint_t __wc, wctrans_t __desc) __THROW;
 
 # ifdef __USE_XOPEN2K8
-/* Declare the interface to extended locale model.  */
-#  include <xlocale.h>
+/* POSIX.1-2008 extended locale interface (see locale.h).  */
+#  include <bits/types/locale_t.h>
 
 /* Test for any wide character for which `iswalpha' or `iswdigit' is
    true.  */

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                     |   90 ++++++++++++++++++++
 NEWS                                          |    6 ++
 bits/signum-generic.h                         |  102 +++++++++++++++++++++++
 bits/signum.h                                 |   72 ++--------------
 ctype/ctype-c99_l.c                           |    2 +-
 ctype/ctype.h                                 |   26 ++----
 ctype/ctype_l.c                               |    6 +-
 sysdeps/generic/ld.abilist => dev/null        |    0
 include/bits/types/__locale_t.h               |    1 +
 include/bits/types/locale_t.h                 |    1 +
 include/monetary.h                            |    2 +-
 include/printf.h                              |    2 +-
 include/stdlib.h                              |   16 ++--
 include/time.h                                |    4 +-
 include/wchar.h                               |    4 +-
 include/xlocale.h                             |    1 -
 locale/Makefile                               |    3 +-
 locale/bits/types/__locale_t.h                |   44 ++++++++++
 locale/bits/types/locale_t.h                  |   26 ++++++
 locale/duplocale.c                            |    6 +-
 locale/freelocale.c                           |    2 +-
 locale/global-locale.c                        |    2 +-
 locale/langinfo.h                             |    9 +--
 locale/locale.h                               |   32 +++----
 locale/localeinfo.h                           |    4 +-
 locale/newlocale.c                            |    8 +-
 locale/nl_langinfo_l.c                        |    2 +-
 locale/uselocale.c                            |    2 +-
 locale/xlocale.h                              |   44 ----------
 localedata/bug-usesetlocale.c                 |    2 +-
 localedata/tst-xlocale2.c                     |    2 +-
 signal/Makefile                               |    3 +-
 signal/signal.h                               |    3 +
 stdio-common/vfscanf.c                        |    2 +-
 stdlib/monetary.h                             |    5 +-
 stdlib/stdlib.h                               |   38 +++------
 stdlib/strfmon_l.c                            |    4 +-
 stdlib/strtod_l.c                             |    9 +-
 stdlib/strtof_l.c                             |    4 +-
 stdlib/strtol.c                               |    2 +-
 stdlib/strtol_l.c                             |    5 +-
 stdlib/strtold_l.c                            |   12 +--
 stdlib/strtoll_l.c                            |    4 +-
 stdlib/strtoul_l.c                            |    4 +-
 stdlib/strtoull_l.c                           |    4 +-
 string/strcasecmp.c                           |    4 +-
 string/strcoll_l.c                            |    2 +-
 string/string.h                               |    9 +-
 string/strings.h                              |    7 +-
 string/strncase.c                             |    4 +-
 string/strxfrm_l.c                            |    2 +-
 sysdeps/generic/siglist.h                     |   24 +++---
 sysdeps/ieee754/float128/strtof128_l.c        |    2 +-
 sysdeps/ieee754/float128/wcstof128.c          |    2 +-
 sysdeps/ieee754/float128/wcstof128_l.c        |    2 +-
 sysdeps/ieee754/ldbl-128ibm/strtold_l.c       |    5 +-
 sysdeps/ieee754/ldbl-64-128/strtold_l.c       |    5 +-
 sysdeps/ieee754/ldbl-opt/nldbl-compat.c       |    4 +-
 sysdeps/ieee754/ldbl-opt/nldbl-strfmon_l.c    |    2 +-
 sysdeps/ieee754/ldbl-opt/nldbl-strtold_l.c    |    4 +-
 sysdeps/ieee754/ldbl-opt/nldbl-wcstold_l.c    |    2 +-
 sysdeps/powerpc/powerpc32/power7/strcasecmp.S |    2 +-
 sysdeps/powerpc/powerpc64/power7/strcasecmp.S |    2 +-
 sysdeps/unix/bsd/bits/signum.h                |   58 ++-----------
 sysdeps/unix/sysv/linux/Makefile              |   14 +++
 sysdeps/unix/sysv/linux/alpha/bits/signum.h   |   69 +++------------
 sysdeps/unix/sysv/linux/bits/signum.h         |   91 ++++++++-------------
 sysdeps/unix/sysv/linux/hppa/bits/signum.h    |  110 +++++++++++--------------
 sysdeps/unix/sysv/linux/mips/bits/signum.h    |   94 ++++++++++------------
 sysdeps/unix/sysv/linux/sparc/bits/signum.h   |   70 +++-------------
 sysdeps/unix/sysv/linux/tst-signal-numbers.sh |   86 +++++++++++++++++++
 sysdeps/x86_64/strcasecmp_l-nonascii.c        |    2 +-
 sysdeps/x86_64/strncase_l-nonascii.c          |    2 +-
 time/strftime_l.c                             |    2 +-
 time/strptime_l.c                             |    2 +-
 time/time.h                                   |    6 +-
 wcsmbs/mbsrtowcs_l.c                          |    2 +-
 wcsmbs/wchar.h                                |   53 ++++--------
 wcsmbs/wcscasecmp.c                           |    2 +-
 wcsmbs/wcsncase.c                             |    2 +-
 wcsmbs/wcstod.c                               |    4 +-
 wcsmbs/wcstod_l.c                             |    4 +-
 wcsmbs/wcstof.c                               |    4 +-
 wcsmbs/wcstof_l.c                             |    4 +-
 wcsmbs/wcstol_l.c                             |    2 +-
 wcsmbs/wcstold.c                              |    4 +-
 wcsmbs/wcstold_l.c                            |    4 +-
 wcsmbs/wcstoll_l.c                            |    2 +-
 wcsmbs/wcstoul_l.c                            |    2 +-
 wcsmbs/wcstoull_l.c                           |    2 +-
 wctype/iswctype_l.c                           |    2 +-
 wctype/towctrans_l.c                          |    2 +-
 wctype/wcfuncs_l.c                            |    6 +-
 wctype/wctrans_l.c                            |    2 +-
 wctype/wctype.h                               |   40 +++++-----
 wctype/wctype_l.c                             |    2 +-
 96 files changed, 756 insertions(+), 701 deletions(-)
 create mode 100644 bits/signum-generic.h
 copy sysdeps/generic/ld.abilist => dev/null (100%)
 create mode 100644 include/bits/types/__locale_t.h
 create mode 100644 include/bits/types/locale_t.h
 delete mode 100644 include/xlocale.h
 create mode 100644 locale/bits/types/__locale_t.h
 create mode 100644 locale/bits/types/locale_t.h
 delete mode 100644 locale/xlocale.h
 create mode 100644 sysdeps/unix/sysv/linux/tst-signal-numbers.sh


hooks/post-receive
-- 
GNU C Library master sources


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