The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / uclibc / 0.9.33.2 / 0035-socket.h-pull-socket_type.h-from-eglibc.patch
diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/package/uclibc/0.9.33.2/0035-socket.h-pull-socket_type.h-from-eglibc.patch b/cirros-testvm/src-cirros/buildroot-2015.05/package/uclibc/0.9.33.2/0035-socket.h-pull-socket_type.h-from-eglibc.patch
new file mode 100644 (file)
index 0000000..1bea7fb
--- /dev/null
@@ -0,0 +1,1374 @@
+From 8eccce991d08960d135b97066621c8d3248a79b7 Mon Sep 17 00:00:00 2001
+From: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
+Date: Thu, 17 Jan 2013 19:29:22 +0100
+Subject: [PATCH] socket.h: pull socket_type.h from eglibc
+
+Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
+---
+ Makefile.in                                      |    2 +-
+ libc/inet/opensock.c                             |    9 +-
+ libc/sysdeps/linux/alpha/bits/socket_type.h      |   54 ++++
+ libc/sysdeps/linux/common/bits/kernel-features.h |   10 +-
+ libc/sysdeps/linux/common/bits/socket.h          |  104 +++---
+ libc/sysdeps/linux/common/bits/socket_type.h     |   54 ++++
+ libc/sysdeps/linux/common/cmsg_nxthdr.c          |    1 +
+ libc/sysdeps/linux/hppa/bits/socket_type.h       |   54 ++++
+ libc/sysdeps/linux/mips/bits/socket.h            |  369 ---------------------
+ libc/sysdeps/linux/mips/bits/socket_type.h       |   55 ++++
+ libc/sysdeps/linux/sparc/bits/socket.h           |  376 ----------------------
+ libc/sysdeps/linux/sparc/bits/socket_type.h      |   54 ++++
+ 12 files changed, 325 insertions(+), 817 deletions(-)
+ create mode 100644 libc/sysdeps/linux/alpha/bits/socket_type.h
+ create mode 100644 libc/sysdeps/linux/common/bits/socket_type.h
+ create mode 100644 libc/sysdeps/linux/hppa/bits/socket_type.h
+ delete mode 100644 libc/sysdeps/linux/mips/bits/socket.h
+ create mode 100644 libc/sysdeps/linux/mips/bits/socket_type.h
+ delete mode 100644 libc/sysdeps/linux/sparc/bits/socket.h
+ create mode 100644 libc/sysdeps/linux/sparc/bits/socket_type.h
+
+diff --git a/Makefile.in b/Makefile.in
+index 87b8e4b..69abfaf 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -255,7 +255,7 @@ HEADERS_RM-$(UCLIBC_HAS_REALTIME)            += mqueue.h bits/mqueue.h sched.h \
+ HEADERS_RM-$(UCLIBC_HAS_REGEX)               += regex.h regexp.h
+ HEADERS_RM-$(UCLIBC_HAS_RPC)                 += rpc
+ HEADERS_RM-$(UCLIBC_HAS_SHADOW)              += shadow.h
+-HEADERS_RM-$(UCLIBC_HAS_SOCKET)              += sys/socket.h bits/socket.h sys/socketvar.h
++HEADERS_RM-$(UCLIBC_HAS_SOCKET)              += sys/socket.h bits/socket.h sys/socketvar.h bits/socket_type.h
+ HEADERS_RM-$(UCLIBC_HAS_SYSLOG)              += syslog.h sys/syslog.h bits/syslog*.h
+ HEADERS_RM-$(UCLIBC_HAS_THREADS)             += *thread*.h semaphore.h \
+       bits/*thread*.h \
+diff --git a/libc/inet/opensock.c b/libc/inet/opensock.c
+index 86f8c59..da5858f 100644
+--- a/libc/inet/opensock.c
++++ b/libc/inet/opensock.c
+@@ -16,14 +16,11 @@
+    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+    02111-1307 USA.  */
+-#include <assert.h>
+-#include <errno.h>
+-#include <stdio.h>
+-#include <string.h>
+-#include <unistd.h>
+-#include <sys/socket.h>
++
+ #include <features.h>
+ #include <libc-internal.h>
++#include <sys/socket.h>
++#include <bits/kernel-features.h>
+ /* Return a socket of any type.  The socket can be used in subsequent
+    ioctl calls to talk to the kernel.  */
+diff --git a/libc/sysdeps/linux/alpha/bits/socket_type.h b/libc/sysdeps/linux/alpha/bits/socket_type.h
+new file mode 100644
+index 0000000..ee55d66
+--- /dev/null
++++ b/libc/sysdeps/linux/alpha/bits/socket_type.h
+@@ -0,0 +1,54 @@
++/* Define enum __socket_type for Linux/Alpha.
++   Copyright (C) 1991-2012 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/>.  */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets.  */
++enum __socket_type
++{
++  SOCK_STREAM = 1,            /* Sequenced, reliable, connection-based
++                                 byte streams.  */
++#define SOCK_STREAM SOCK_STREAM
++  SOCK_DGRAM = 2,             /* Connectionless, unreliable datagrams
++                                 of fixed maximum length.  */
++#define SOCK_DGRAM SOCK_DGRAM
++  SOCK_RAW = 3,                       /* Raw protocol interface.  */
++#define SOCK_RAW SOCK_RAW
++  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
++#define SOCK_RDM SOCK_RDM
++  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
++                                 datagrams of fixed maximum length.  */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++  SOCK_DCCP = 6,              /* Datagram Congestion Control Protocol.  */
++#define SOCK_DCCP SOCK_DCCP
++  SOCK_PACKET = 10,           /* Linux specific way of getting packets
++                                 at the dev level.  For writing rarp and
++                                 other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++  /* Flags to be ORed into the type parameter of socket and socketpair.  */
++
++  SOCK_CLOEXEC = 010000000,   /* Atomically set close-on-exec flag for the
++                                 new descriptor(s).  */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++  SOCK_NONBLOCK = 0x40000000  /* Atomically mark descriptor(s) as
++                                 non-blocking.  */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff --git a/libc/sysdeps/linux/common/bits/kernel-features.h b/libc/sysdeps/linux/common/bits/kernel-features.h
+index 5ea85d2..5665e24 100644
+--- a/libc/sysdeps/linux/common/bits/kernel-features.h
++++ b/libc/sysdeps/linux/common/bits/kernel-features.h
+@@ -311,17 +311,19 @@
+ /* Support for various CLOEXEC and NONBLOCK flags was added for x86,
+  *    x86-64, PPC, IA-64, and SPARC in 2.6.27.  */
+-#if __LINUX_KERNEL_VERSION >= 0x02061b \
+-    && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
+-        || defined __ia64__ || defined __sparc__ || defined __s390__)
++#if (__LINUX_KERNEL_VERSION >= 0x02061b \
++     && (defined __i386__ || defined __x86_64__ || defined __powerpc__ \
++         || defined __ia64__ || defined __sparc__ || defined __s390__) \
++      ) || (__LINUX_KERNEL_VERSION >= 0x020621 && defined __alpha__) \
++      || defined __aarch64__ || defined __tile__
+ /* # define __ASSUME_SOCK_CLOEXEC  1 */
+ /* # define __ASSUME_IN_NONBLOCK   1 */
+ # define __ASSUME_PIPE2         1
+ /* # define __ASSUME_EVENTFD2      1 */
+ /* # define __ASSUME_SIGNALFD4     1 */
++/* # define __ASSUME_DUP3             1 */
+ #endif
+-
+ /* These features were surely available with 2.4.12.  */
+ #if __LINUX_KERNEL_VERSION >= 132108 && defined __mc68000__
+ # define __ASSUME_MMAP2_SYSCALL               1
+diff --git a/libc/sysdeps/linux/common/bits/socket.h b/libc/sysdeps/linux/common/bits/socket.h
+index 7e12733..6a89340 100644
+--- a/libc/sysdeps/linux/common/bits/socket.h
++++ b/libc/sysdeps/linux/common/bits/socket.h
+@@ -1,5 +1,6 @@
+ /* System-specific socket constants and types.  Linux version.
+-   Copyright (C) 1991,1992,1994-2001,2004,2006 Free Software Foundation, Inc.
++   Copyright (C) 1991,1992,1994-2001,2004,2006-2012
++   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
+@@ -20,12 +21,11 @@
+ #ifndef __BITS_SOCKET_H
+ #define __BITS_SOCKET_H
+-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
++#ifndef _SYS_SOCKET_H
+ # error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+ #endif
+ #define       __need_size_t
+-#define __need_NULL
+ #include <stddef.h>
+ #include <limits.h>
+@@ -37,37 +37,8 @@ typedef __socklen_t socklen_t;
+ # define __socklen_t_defined
+ #endif
+-/* Types of sockets.  */
+-enum __socket_type
+-{
+-  SOCK_STREAM = 1,            /* Sequenced, reliable, connection-based
+-                                 byte streams.  */
+-#define SOCK_STREAM SOCK_STREAM
+-  SOCK_DGRAM = 2,             /* Connectionless, unreliable datagrams
+-                                 of fixed maximum length.  */
+-#define SOCK_DGRAM SOCK_DGRAM
+-  SOCK_RAW = 3,                       /* Raw protocol interface.  */
+-#define SOCK_RAW SOCK_RAW
+-  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
+-#define SOCK_RDM SOCK_RDM
+-  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
+-                                 datagrams of fixed maximum length.  */
+-#define SOCK_SEQPACKET SOCK_SEQPACKET
+-  SOCK_PACKET = 10,           /* Linux specific way of getting packets
+-                                 at the dev level.  For writing rarp and
+-                                 other similar things on the user level. */
+-#define SOCK_PACKET SOCK_PACKET
+-
+-  /* Flags to be ORed into the type parameter of socket and socketpair and
+-     used for the flags parameter of paccept.  */
+-
+-  SOCK_CLOEXEC = 02000000,    /* Atomically set close-on-exec flag for the
+-                                 new descriptor(s).  */
+-#define SOCK_CLOEXEC SOCK_CLOEXEC
+-  SOCK_NONBLOCK = 04000               /* Atomically mark descriptor(s) as
+-                                 non-blocking.  */
+-#define SOCK_NONBLOCK SOCK_NONBLOCK
+-};
++/* Get the architecture-dependent definition of enum __socket_type.  */
++#include <bits/socket_type.h>
+ /* Protocol families.  */
+ #define       PF_UNSPEC       0       /* Unspecified.  */
+@@ -94,22 +65,24 @@ enum __socket_type
+ #define       PF_ASH          18      /* Ash.  */
+ #define       PF_ECONET       19      /* Acorn Econet.  */
+ #define       PF_ATMSVC       20      /* ATM SVCs.  */
++#define PF_RDS                21      /* RDS sockets.  */
+ #define       PF_SNA          22      /* Linux SNA Project */
+ #define       PF_IRDA         23      /* IRDA sockets.  */
+ #define       PF_PPPOX        24      /* PPPoX sockets.  */
+ #define       PF_WANPIPE      25      /* Wanpipe API sockets.  */
+-#define       PF_LLC          26      /* Linux LLC.  */
+-#define       PF_CAN          29      /* Controller Area Network.  */
+-#define       PF_TIPC         30      /* TIPC sockets.  */
++#define PF_LLC                26      /* Linux LLC.  */
++#define PF_CAN                29      /* Controller Area Network.  */
++#define PF_TIPC               30      /* TIPC sockets.  */
+ #define       PF_BLUETOOTH    31      /* Bluetooth sockets.  */
+ #define       PF_IUCV         32      /* IUCV sockets.  */
+-#define       PF_RXRPC        33      /* RxRPC sockets.  */
+-#define       PF_ISDN         34      /* mISDN sockets.  */
+-#define       PF_PHONET       35      /* Phonet sockets.  */
+-#define       PF_IEEE802154   36      /* IEEE 802.15.4 sockets.  */
+-#define       PF_CAIF         37      /* CAIF sockets.  */
+-#define       PF_ALG          38      /* Algorithm sockets.  */
+-#define       PF_MAX          39      /* For now..  */
++#define PF_RXRPC      33      /* RxRPC sockets.  */
++#define PF_ISDN               34      /* mISDN sockets.  */
++#define PF_PHONET     35      /* Phonet sockets.  */
++#define PF_IEEE802154 36      /* IEEE 802.15.4 sockets.  */
++#define PF_CAIF               37      /* CAIF sockets.  */
++#define PF_ALG                38      /* Algorithm sockets.  */
++#define PF_NFC                39      /* NFC sockets.  */
++#define       PF_MAX          40      /* For now..  */
+ /* Address families.  */
+ #define       AF_UNSPEC       PF_UNSPEC
+@@ -136,21 +109,23 @@ enum __socket_type
+ #define       AF_ASH          PF_ASH
+ #define       AF_ECONET       PF_ECONET
+ #define       AF_ATMSVC       PF_ATMSVC
++#define AF_RDS                PF_RDS
+ #define       AF_SNA          PF_SNA
+ #define       AF_IRDA         PF_IRDA
+ #define       AF_PPPOX        PF_PPPOX
+ #define       AF_WANPIPE      PF_WANPIPE
+-#define       AF_LLC          PF_LLC
+-#define       AF_CAN          PF_CAN
+-#define       AF_TIPC         PF_TIPC
++#define AF_LLC                PF_LLC
++#define AF_CAN                PF_CAN
++#define AF_TIPC               PF_TIPC
+ #define       AF_BLUETOOTH    PF_BLUETOOTH
+-#define       AF_IUCV         PF_IUCV
+-#define       AF_RXRPC        PF_RXRPC
+-#define       AF_ISDN         PF_ISDN
+-#define       AF_PHONET       PF_PHONET
+-#define       AF_IEEE802154   PF_IEEE802154
+-#define       AF_CAIF         PF_CAIF
+-#define       AF_ALG          PF_ALG
++#define AF_IUCV               PF_IUCV
++#define AF_RXRPC      PF_RXRPC
++#define AF_ISDN               PF_ISDN
++#define AF_PHONET     PF_PHONET
++#define AF_IEEE802154 PF_IEEE802154
++#define AF_CAIF               PF_CAIF
++#define AF_ALG                PF_ALG
++#define AF_NFC                PF_NFC
+ #define       AF_MAX          PF_MAX
+ /* Socket level values.  Others are defined in the appropriate headers.
+@@ -235,8 +210,14 @@ enum
+ #define       MSG_ERRQUEUE    MSG_ERRQUEUE
+     MSG_NOSIGNAL      = 0x4000, /* Do not generate SIGPIPE.  */
+ #define       MSG_NOSIGNAL    MSG_NOSIGNAL
+-    MSG_MORE          = 0x8000  /* Sender will send more.  */
++    MSG_MORE          = 0x8000,  /* Sender will send more.  */
+ #define       MSG_MORE        MSG_MORE
++    MSG_WAITFORONE    = 0x10000, /* Wait for at least one packet to return.*/
++#define MSG_WAITFORONE        MSG_WAITFORONE
++    MSG_CMSG_CLOEXEC  = 0x40000000    /* Set close_on_exit for file
++                                         descriptor received through
++                                         SCM_RIGHTS.  */
++#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+   };
+@@ -290,7 +271,7 @@ struct cmsghdr
+ #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+ #define CMSG_FIRSTHDR(mhdr) \
+   ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)               \
+-   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
++   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0)
+ #define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+                        & (size_t) ~(sizeof (size_t) - 1))
+ #define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+@@ -302,14 +283,14 @@ extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+ libc_hidden_proto(__cmsg_nxthdr)
+ #ifdef __USE_EXTERN_INLINES
+ # ifndef _EXTERN_INLINE
+-#  define _EXTERN_INLINE extern __inline
++#  define _EXTERN_INLINE __extern_inline
+ # endif
+ _EXTERN_INLINE struct cmsghdr *
+ __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+ {
+   if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+     /* The kernel header does this so there may be a reason.  */
+-    return 0;
++    return (struct cmsghdr *) 0;
+   __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+                              + CMSG_ALIGN (__cmsg->cmsg_len));
+@@ -318,7 +299,7 @@ __NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+       || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+         > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+     /* No more entries.  */
+-    return 0;
++    return (struct cmsghdr *) 0;
+   return __cmsg;
+ }
+ #endif        /* Use `extern inline'.  */
+@@ -329,20 +310,21 @@ enum
+   {
+     SCM_RIGHTS = 0x01         /* Transfer file descriptors.  */
+ #define SCM_RIGHTS SCM_RIGHTS
+-#ifdef __USE_BSD
++#ifdef __USE_GNU
+     , SCM_CREDENTIALS = 0x02  /* Credentials passing.  */
+ # define SCM_CREDENTIALS SCM_CREDENTIALS
+ #endif
+   };
++#ifdef __USE_GNU
+ /* User visible structure for SCM_CREDENTIALS message */
+-
+ struct ucred
+ {
+   pid_t pid;                  /* PID of sending process.  */
+   uid_t uid;                  /* UID of sending process.  */
+   gid_t gid;                  /* GID of sending process.  */
+ };
++#endif
+ /* Get socket manipulation related informations from kernel headers.  */
+ #ifndef __GLIBC__
+diff --git a/libc/sysdeps/linux/common/bits/socket_type.h b/libc/sysdeps/linux/common/bits/socket_type.h
+new file mode 100644
+index 0000000..65436b0
+--- /dev/null
++++ b/libc/sysdeps/linux/common/bits/socket_type.h
+@@ -0,0 +1,54 @@
++/* Define enum __socket_type for generic Linux.
++   Copyright (C) 1991-2012 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/>.  */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets.  */
++enum __socket_type
++{
++  SOCK_STREAM = 1,            /* Sequenced, reliable, connection-based
++                                 byte streams.  */
++#define SOCK_STREAM SOCK_STREAM
++  SOCK_DGRAM = 2,             /* Connectionless, unreliable datagrams
++                                 of fixed maximum length.  */
++#define SOCK_DGRAM SOCK_DGRAM
++  SOCK_RAW = 3,                       /* Raw protocol interface.  */
++#define SOCK_RAW SOCK_RAW
++  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
++#define SOCK_RDM SOCK_RDM
++  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
++                                 datagrams of fixed maximum length.  */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++  SOCK_DCCP = 6,              /* Datagram Congestion Control Protocol.  */
++#define SOCK_DCCP SOCK_DCCP
++  SOCK_PACKET = 10,           /* Linux specific way of getting packets
++                                 at the dev level.  For writing rarp and
++                                 other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++  /* Flags to be ORed into the type parameter of socket and socketpair.  */
++
++  SOCK_CLOEXEC = 02000000,    /* Atomically set close-on-exec flag for the
++                                 new descriptor(s).  */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++  SOCK_NONBLOCK = 00004000    /* Atomically mark descriptor(s) as
++                                 non-blocking.  */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff --git a/libc/sysdeps/linux/common/cmsg_nxthdr.c b/libc/sysdeps/linux/common/cmsg_nxthdr.c
+index 0360b47..9c21190 100644
+--- a/libc/sysdeps/linux/common/cmsg_nxthdr.c
++++ b/libc/sysdeps/linux/common/cmsg_nxthdr.c
+@@ -19,6 +19,7 @@
+ #define __FORCE_GLIBC
+ #include <features.h>
++#include <stddef.h>
+ /* Prevent math.h from defining a colliding inline */
+ #undef __USE_EXTERN_INLINES
+ #include <sys/socket.h>
+diff --git a/libc/sysdeps/linux/hppa/bits/socket_type.h b/libc/sysdeps/linux/hppa/bits/socket_type.h
+new file mode 100644
+index 0000000..c6df6c3
+--- /dev/null
++++ b/libc/sysdeps/linux/hppa/bits/socket_type.h
+@@ -0,0 +1,54 @@
++/* Define enum __socket_type for Linux/HP-PARISC.
++   Copyright (C) 2012 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/>.  */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets.  */
++enum __socket_type
++{
++  SOCK_STREAM = 1,            /* Sequenced, reliable, connection-based
++                                 byte streams.  */
++#define SOCK_STREAM SOCK_STREAM
++  SOCK_DGRAM = 2,             /* Connectionless, unreliable datagrams
++                                 of fixed maximum length.  */
++#define SOCK_DGRAM SOCK_DGRAM
++  SOCK_RAW = 3,                       /* Raw protocol interface.  */
++#define SOCK_RAW SOCK_RAW
++  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
++#define SOCK_RDM SOCK_RDM
++  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
++                                 datagrams of fixed maximum length.  */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++  SOCK_DCCP = 6,              /* Datagram Congestion Control Protocol.  */
++#define SOCK_DCCP SOCK_DCCP
++  SOCK_PACKET = 10,           /* Linux specific way of getting packets
++                                 at the dev level.  For writing rarp and
++                                 other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++  /* Flags to be ORed into the type parameter of socket and socketpair.  */
++
++  SOCK_CLOEXEC = 010000000,   /* Atomically set close-on-exec flag for the
++                                 new descriptor(s).  */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++  SOCK_NONBLOCK = 0x40000000  /* Atomically mark descriptor(s) as
++                                 non-blocking.  */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff --git a/libc/sysdeps/linux/mips/bits/socket.h b/libc/sysdeps/linux/mips/bits/socket.h
+deleted file mode 100644
+index 27ceafa..0000000
+--- a/libc/sysdeps/linux/mips/bits/socket.h
++++ /dev/null
+@@ -1,369 +0,0 @@
+-/* System-specific socket constants and types.  Linux/MIPS version.
+-   Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006
+-   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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef __BITS_SOCKET_H
+-#define __BITS_SOCKET_H
+-
+-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
+-# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+-#endif
+-
+-#define       __need_size_t
+-#define __need_NULL
+-#include <stddef.h>
+-
+-#include <limits.h>
+-#include <sys/types.h>
+-
+-/* Type for length arguments in socket calls.  */
+-#ifndef __socklen_t_defined
+-typedef __socklen_t socklen_t;
+-# define __socklen_t_defined
+-#endif
+-
+-/* Types of sockets.  */
+-enum __socket_type
+-{
+-  SOCK_DGRAM = 1,             /* Connectionless, unreliable datagrams
+-                                 of fixed maximum length.  */
+-#define SOCK_DGRAM SOCK_DGRAM
+-  SOCK_STREAM = 2,            /* Sequenced, reliable, connection-based
+-                                 byte streams.  */
+-#define SOCK_STREAM SOCK_STREAM
+-  SOCK_RAW = 3,                       /* Raw protocol interface.  */
+-#define SOCK_RAW SOCK_RAW
+-  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
+-#define SOCK_RDM SOCK_RDM
+-  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
+-                                 datagrams of fixed maximum length.  */
+-#define SOCK_SEQPACKET SOCK_SEQPACKET
+-  SOCK_DCCP = 6,
+-#define SOCK_DCCP SOCK_DCCP   /* Datagram Congestion Control Protocol.  */
+-  SOCK_PACKET = 10,           /* Linux specific way of getting packets
+-                                 at the dev level.  For writing rarp and
+-                                 other similar things on the user level. */
+-#define SOCK_PACKET SOCK_PACKET
+-  /* Flags to be ORed into the type parameter of socket and socketpair and
+-     used for the flags parameter of paccept.  */
+-
+-  SOCK_CLOEXEC = 02000000,    /* Atomically set close-on-exec flag for the
+-                                   new descriptor(s).  */
+-#define SOCK_CLOEXEC SOCK_CLOEXEC
+-  SOCK_NONBLOCK = 0200                /* Atomically mark descriptor(s) as
+-                                 non-blocking.  */
+-#define SOCK_NONBLOCK SOCK_NONBLOCK
+-};
+-
+-/* Protocol families.  */
+-#define       PF_UNSPEC       0       /* Unspecified.  */
+-#define       PF_LOCAL        1       /* Local to host (pipes and file-domain).  */
+-#define       PF_UNIX         PF_LOCAL /* Old BSD name for PF_LOCAL.  */
+-#define       PF_FILE         PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
+-#define       PF_INET         2       /* IP protocol family.  */
+-#define       PF_AX25         3       /* Amateur Radio AX.25.  */
+-#define       PF_IPX          4       /* Novell Internet Protocol.  */
+-#define       PF_APPLETALK    5       /* Appletalk DDP.  */
+-#define       PF_NETROM       6       /* Amateur radio NetROM.  */
+-#define       PF_BRIDGE       7       /* Multiprotocol bridge.  */
+-#define       PF_ATMPVC       8       /* ATM PVCs.  */
+-#define       PF_X25          9       /* Reserved for X.25 project.  */
+-#define       PF_INET6        10      /* IP version 6.  */
+-#define       PF_ROSE         11      /* Amateur Radio X.25 PLP.  */
+-#define       PF_DECnet       12      /* Reserved for DECnet project.  */
+-#define       PF_NETBEUI      13      /* Reserved for 802.2LLC project.  */
+-#define       PF_SECURITY     14      /* Security callback pseudo AF.  */
+-#define       PF_KEY          15      /* PF_KEY key management API.  */
+-#define       PF_NETLINK      16
+-#define       PF_ROUTE        PF_NETLINK /* Alias to emulate 4.4BSD.  */
+-#define       PF_PACKET       17      /* Packet family.  */
+-#define       PF_ASH          18      /* Ash.  */
+-#define       PF_ECONET       19      /* Acorn Econet.  */
+-#define       PF_ATMSVC       20      /* ATM SVCs.  */
+-#define       PF_SNA          22      /* Linux SNA Project */
+-#define       PF_IRDA         23      /* IRDA sockets.  */
+-#define       PF_PPPOX        24      /* PPPoX sockets.  */
+-#define       PF_WANPIPE      25      /* Wanpipe API sockets.  */
+-#define       PF_LLC          26      /* Linux LLC.  */
+-#define       PF_CAN          29      /* Controller Area Network.  */
+-#define       PF_TIPC         30      /* TIPC sockets.  */
+-#define       PF_BLUETOOTH    31      /* Bluetooth sockets.  */
+-#define       PF_IUCV         32      /* IUCV sockets.  */
+-#define       PF_RXRPC        33      /* RxRPC sockets.  */
+-#define       PF_ISDN         34      /* mISDN sockets.  */
+-#define       PF_PHONET       35      /* Phonet sockets.  */
+-#define       PF_IEEE802154   36      /* IEEE 802.15.4 sockets.  */
+-#define       PF_CAIF         37      /* CAIF sockets.  */
+-#define       PF_ALG          38      /* Algorithm sockets.  */
+-#define       PF_MAX          39      /* For now..  */
+-
+-/* Address families.  */
+-#define       AF_UNSPEC       PF_UNSPEC
+-#define       AF_LOCAL        PF_LOCAL
+-#define       AF_UNIX         PF_UNIX
+-#define       AF_FILE         PF_FILE
+-#define       AF_INET         PF_INET
+-#define       AF_AX25         PF_AX25
+-#define       AF_IPX          PF_IPX
+-#define       AF_APPLETALK    PF_APPLETALK
+-#define       AF_NETROM       PF_NETROM
+-#define       AF_BRIDGE       PF_BRIDGE
+-#define       AF_ATMPVC       PF_ATMPVC
+-#define       AF_X25          PF_X25
+-#define       AF_INET6        PF_INET6
+-#define       AF_ROSE         PF_ROSE
+-#define       AF_DECnet       PF_DECnet
+-#define       AF_NETBEUI      PF_NETBEUI
+-#define       AF_SECURITY     PF_SECURITY
+-#define       AF_KEY          PF_KEY
+-#define       AF_NETLINK      PF_NETLINK
+-#define       AF_ROUTE        PF_ROUTE
+-#define       AF_PACKET       PF_PACKET
+-#define       AF_ASH          PF_ASH
+-#define       AF_ECONET       PF_ECONET
+-#define       AF_ATMSVC       PF_ATMSVC
+-#define       AF_SNA          PF_SNA
+-#define       AF_IRDA         PF_IRDA
+-#define       AF_PPPOX        PF_PPPOX
+-#define       AF_WANPIPE      PF_WANPIPE
+-#define       AF_LLC          PF_LLC
+-#define       AF_CAN          PF_CAN
+-#define       AF_TIPC         PF_TIPC
+-#define       AF_BLUETOOTH    PF_BLUETOOTH
+-#define       AF_IUCV         PF_IUCV
+-#define       AF_RXRPC        PF_RXRPC
+-#define       AF_ISDN         PF_ISDN
+-#define       AF_PHONET       PF_PHONET
+-#define       AF_IEEE802154   PF_IEEE802154
+-#define       AF_CAIF         PF_CAIF
+-#define       AF_ALG          PF_ALG
+-#define       AF_MAX          PF_MAX
+-
+-/* Socket level values.  Others are defined in the appropriate headers.
+-
+-   XXX These definitions also should go into the appropriate headers as
+-   far as they are available.  */
+-#define SOL_RAW               255
+-#define SOL_DECNET      261
+-#define SOL_X25         262
+-#define SOL_PACKET    263
+-#define SOL_ATM               264     /* ATM layer (cell level).  */
+-#define SOL_AAL               265     /* ATM Adaption Layer (packet level).  */
+-#define SOL_IRDA      266
+-
+-/* Maximum queue length specifiable by listen.  */
+-#define SOMAXCONN     128
+-
+-/* Get the definition of the macro to define the common sockaddr members.  */
+-#include <bits/sockaddr.h>
+-
+-/* Structure describing a generic socket address.  */
+-struct sockaddr
+-  {
+-    __SOCKADDR_COMMON (sa_);  /* Common data: address family and length.  */
+-    char sa_data[14];         /* Address data.  */
+-  };
+-
+-
+-/* Structure large enough to hold any socket address (with the historical
+-   exception of AF_UNIX).  We reserve 128 bytes.  */
+-#define __ss_aligntype        unsigned long int
+-#define _SS_SIZE      128
+-#define _SS_PADSIZE   (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+-
+-struct sockaddr_storage
+-  {
+-    __SOCKADDR_COMMON (ss_);  /* Address family, etc.  */
+-    __ss_aligntype __ss_align;        /* Force desired alignment.  */
+-    char __ss_padding[_SS_PADSIZE];
+-  };
+-
+-
+-/* Bits in the FLAGS argument to `send', `recv', et al.  */
+-enum
+-  {
+-    MSG_OOB           = 0x01, /* Process out-of-band data.  */
+-#define MSG_OOB               MSG_OOB
+-    MSG_PEEK          = 0x02, /* Peek at incoming messages.  */
+-#define MSG_PEEK      MSG_PEEK
+-    MSG_DONTROUTE     = 0x04, /* Don't use local routing.  */
+-#define MSG_DONTROUTE MSG_DONTROUTE
+-#ifdef __USE_GNU
+-    /* DECnet uses a different name.  */
+-    MSG_TRYHARD               = MSG_DONTROUTE,
+-# define MSG_TRYHARD  MSG_DONTROUTE
+-#endif
+-    MSG_CTRUNC                = 0x08, /* Control data lost before delivery.  */
+-#define MSG_CTRUNC    MSG_CTRUNC
+-    MSG_PROXY         = 0x10, /* Supply or ask second address.  */
+-#define MSG_PROXY     MSG_PROXY
+-    MSG_TRUNC         = 0x20,
+-#define       MSG_TRUNC       MSG_TRUNC
+-    MSG_DONTWAIT      = 0x40, /* Nonblocking IO.  */
+-#define       MSG_DONTWAIT    MSG_DONTWAIT
+-    MSG_EOR           = 0x80, /* End of record.  */
+-#define       MSG_EOR         MSG_EOR
+-    MSG_WAITALL               = 0x100, /* Wait for a full request.  */
+-#define       MSG_WAITALL     MSG_WAITALL
+-    MSG_FIN           = 0x200,
+-#define       MSG_FIN         MSG_FIN
+-    MSG_SYN           = 0x400,
+-#define       MSG_SYN         MSG_SYN
+-    MSG_CONFIRM               = 0x800, /* Confirm path validity.  */
+-#define       MSG_CONFIRM     MSG_CONFIRM
+-    MSG_RST           = 0x1000,
+-#define       MSG_RST         MSG_RST
+-    MSG_ERRQUEUE      = 0x2000, /* Fetch message from error queue.  */
+-#define       MSG_ERRQUEUE    MSG_ERRQUEUE
+-    MSG_NOSIGNAL      = 0x4000, /* Do not generate SIGPIPE.  */
+-#define       MSG_NOSIGNAL    MSG_NOSIGNAL
+-    MSG_MORE          = 0x8000, /* Sender will send more.  */
+-#define       MSG_MORE        MSG_MORE
+-    MSG_WAITFORONE      = 0x10000, /* Wait for at least one packet to return.*/
+-#define MSG_WAITFORONE  MSG_WAITFORONE
+-
+-    MSG_CMSG_CLOEXEC    = 0x40000000    /* Set close_on_exit for file
+-                                         descriptor received through
+-                                         SCM_RIGHTS.  */
+-#define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC
+-  };
+-
+-
+-/* Structure describing messages sent by
+-   `sendmsg' and received by `recvmsg'.  */
+-/* Note: do not change these members to match glibc; these match the
+-   SuSv3 spec already (e.g. msg_iovlen/msg_controllen).
+-   http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html */
+-/* Note: linux kernel uses __kernel_size_t (which is 8bytes on 64bit
+-   platforms, and 4bytes on 32bit platforms) for msg_iovlen/msg_controllen */
+-struct msghdr
+-  {
+-    void *msg_name;           /* Address to send to/receive from.  */
+-    socklen_t msg_namelen;    /* Length of address data.  */
+-
+-    struct iovec *msg_iov;    /* Vector of data to send/receive into.  */
+-#if __WORDSIZE == 32
+-    int msg_iovlen;           /* Number of elements in the vector.  */
+-#else
+-    size_t msg_iovlen;                /* Number of elements in the vector.  */
+-#endif
+-
+-    void *msg_control;                /* Ancillary data (eg BSD filedesc passing). */
+-#if __WORDSIZE == 32
+-    socklen_t msg_controllen; /* Ancillary data buffer length.  */
+-#else
+-    size_t msg_controllen;    /* Ancillary data buffer length.  */
+-#endif
+-
+-    int msg_flags;            /* Flags on received message.  */
+-  };
+-
+-/* Structure used for storage of ancillary data object information.  */
+-struct cmsghdr
+-  {
+-    size_t cmsg_len;          /* Length of data in cmsg_data plus length
+-                                 of cmsghdr structure.  */
+-    int cmsg_level;           /* Originating protocol.  */
+-    int cmsg_type;            /* Protocol specific type.  */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+-    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
+-#endif
+-  };
+-
+-/* Ancillary data object manipulation macros.  */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+-#else
+-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+-#endif
+-#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+-#define CMSG_FIRSTHDR(mhdr) \
+-  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)               \
+-   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
+-#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+-                       & (size_t) ~(sizeof (size_t) - 1))
+-#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+-                       + CMSG_ALIGN (sizeof (struct cmsghdr)))
+-#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+-
+-extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+-                                    struct cmsghdr *__cmsg) __THROW;
+-libc_hidden_proto(__cmsg_nxthdr)
+-#ifdef __USE_EXTERN_INLINES
+-# ifndef _EXTERN_INLINE
+-#  define _EXTERN_INLINE extern __inline
+-# endif
+-_EXTERN_INLINE struct cmsghdr *
+-__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+-{
+-  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+-    /* The kernel header does this so there may be a reason.  */
+-    return 0;
+-
+-  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+-                             + CMSG_ALIGN (__cmsg->cmsg_len));
+-  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+-                                      + __mhdr->msg_controllen)
+-      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+-        > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+-    /* No more entries.  */
+-    return 0;
+-  return __cmsg;
+-}
+-#endif        /* Use `extern inline'.  */
+-
+-/* Socket level message types.  This must match the definitions in
+-   <linux/socket.h>.  */
+-enum
+-  {
+-    SCM_RIGHTS = 0x01         /* Transfer file descriptors.  */
+-#define SCM_RIGHTS SCM_RIGHTS
+-#ifdef __USE_BSD
+-    , SCM_CREDENTIALS = 0x02  /* Credentials passing.  */
+-# define SCM_CREDENTIALS SCM_CREDENTIALS
+-#endif
+-  };
+-
+-/* User visible structure for SCM_CREDENTIALS message */
+-
+-struct ucred
+-{
+-  pid_t pid;                  /* PID of sending process.  */
+-  uid_t uid;                  /* UID of sending process.  */
+-  gid_t gid;                  /* GID of sending process.  */
+-};
+-
+-/* Get socket manipulation related informations from kernel headers.  */
+-#ifndef __GLIBC__
+-#define __GLIBC__ 2
+-#include <asm/socket.h>
+-#undef __GLIBC__
+-#else
+-#include <asm/socket.h>
+-#endif
+-
+-
+-/* Structure used to manipulate the SO_LINGER option.  */
+-struct linger
+-  {
+-    int l_onoff;              /* Nonzero to linger on close.  */
+-    int l_linger;             /* Time to linger.  */
+-  };
+-
+-#endif        /* bits/socket.h */
+diff --git a/libc/sysdeps/linux/mips/bits/socket_type.h b/libc/sysdeps/linux/mips/bits/socket_type.h
+new file mode 100644
+index 0000000..20d2732
+--- /dev/null
++++ b/libc/sysdeps/linux/mips/bits/socket_type.h
+@@ -0,0 +1,55 @@
++/* System-specific socket constants and types.  Linux/MIPS version.
++   Copyright (C) 1991, 92, 1994-1999, 2000, 2001, 2004, 2005, 2006
++   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/>.  */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets.  */
++enum __socket_type
++{
++  SOCK_DGRAM = 1,             /* Connectionless, unreliable datagrams
++                                 of fixed maximum length.  */
++#define SOCK_DGRAM SOCK_DGRAM
++  SOCK_STREAM = 2,            /* Sequenced, reliable, connection-based
++                                 byte streams.  */
++#define SOCK_STREAM SOCK_STREAM
++  SOCK_RAW = 3,                       /* Raw protocol interface.  */
++#define SOCK_RAW SOCK_RAW
++  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
++#define SOCK_RDM SOCK_RDM
++  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
++                                 datagrams of fixed maximum length.  */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++  SOCK_DCCP = 6,
++#define SOCK_DCCP SOCK_DCCP   /* Datagram Congestion Control Protocol.  */
++  SOCK_PACKET = 10,           /* Linux specific way of getting packets
++                                 at the dev level.  For writing rarp and
++                                 other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++  /* Flags to be ORed into the type parameter of socket and socketpair.  */
++
++  SOCK_CLOEXEC = 02000000,    /* Atomically set close-on-exec flag for the
++                                 new descriptor(s).  */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++  SOCK_NONBLOCK = 00000200    /* Atomically mark descriptor(s) as
++                                 non-blocking.  */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+diff --git a/libc/sysdeps/linux/sparc/bits/socket.h b/libc/sysdeps/linux/sparc/bits/socket.h
+deleted file mode 100644
+index 64973e2..0000000
+--- a/libc/sysdeps/linux/sparc/bits/socket.h
++++ /dev/null
+@@ -1,376 +0,0 @@
+-/* System-specific socket constants and types.  Linux version.
+-   Copyright (C) 1991,1992,1994-2001,2004,2006 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, write to the Free
+-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+-   02111-1307 USA.  */
+-
+-#ifndef __BITS_SOCKET_H
+-#define __BITS_SOCKET_H
+-
+-#if !defined _SYS_SOCKET_H && !defined _NETINET_IN_H
+-# error "Never include <bits/socket.h> directly; use <sys/socket.h> instead."
+-#endif
+-
+-#define       __need_size_t
+-#define __need_NULL
+-#include <stddef.h>
+-
+-#include <limits.h>
+-#include <sys/types.h>
+-
+-/* Type for length arguments in socket calls.  */
+-#ifndef __socklen_t_defined
+-typedef __socklen_t socklen_t;
+-# define __socklen_t_defined
+-#endif
+-
+-/* Types of sockets.  */
+-enum __socket_type
+-{
+-  SOCK_STREAM = 1,            /* Sequenced, reliable, connection-based
+-                                 byte streams.  */
+-#define SOCK_STREAM SOCK_STREAM
+-  SOCK_DGRAM = 2,             /* Connectionless, unreliable datagrams
+-                                 of fixed maximum length.  */
+-#define SOCK_DGRAM SOCK_DGRAM
+-  SOCK_RAW = 3,                       /* Raw protocol interface.  */
+-#define SOCK_RAW SOCK_RAW
+-  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
+-#define SOCK_RDM SOCK_RDM
+-  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
+-                                 datagrams of fixed maximum length.  */
+-#define SOCK_SEQPACKET SOCK_SEQPACKET
+-  SOCK_PACKET = 10            /* Linux specific way of getting packets
+-                                 at the dev level.  For writing rarp and
+-                                 other similar things on the user level. */
+-#define SOCK_PACKET SOCK_PACKET
+-};
+-
+-/* Protocol families.  */
+-#define       PF_UNSPEC       0       /* Unspecified.  */
+-#define       PF_LOCAL        1       /* Local to host (pipes and file-domain).  */
+-#define       PF_UNIX         PF_LOCAL /* Old BSD name for PF_LOCAL.  */
+-#define       PF_FILE         PF_LOCAL /* Another non-standard name for PF_LOCAL.  */
+-#define       PF_INET         2       /* IP protocol family.  */
+-#define       PF_AX25         3       /* Amateur Radio AX.25.  */
+-#define       PF_IPX          4       /* Novell Internet Protocol.  */
+-#define       PF_APPLETALK    5       /* Appletalk DDP.  */
+-#define       PF_NETROM       6       /* Amateur radio NetROM.  */
+-#define       PF_BRIDGE       7       /* Multiprotocol bridge.  */
+-#define       PF_ATMPVC       8       /* ATM PVCs.  */
+-#define       PF_X25          9       /* Reserved for X.25 project.  */
+-#define       PF_INET6        10      /* IP version 6.  */
+-#define       PF_ROSE         11      /* Amateur Radio X.25 PLP.  */
+-#define       PF_DECnet       12      /* Reserved for DECnet project.  */
+-#define       PF_NETBEUI      13      /* Reserved for 802.2LLC project.  */
+-#define       PF_SECURITY     14      /* Security callback pseudo AF.  */
+-#define       PF_KEY          15      /* PF_KEY key management API.  */
+-#define       PF_NETLINK      16
+-#define       PF_ROUTE        PF_NETLINK /* Alias to emulate 4.4BSD.  */
+-#define       PF_PACKET       17      /* Packet family.  */
+-#define       PF_ASH          18      /* Ash.  */
+-#define       PF_ECONET       19      /* Acorn Econet.  */
+-#define       PF_ATMSVC       20      /* ATM SVCs.  */
+-#define       PF_SNA          22      /* Linux SNA Project */
+-#define       PF_IRDA         23      /* IRDA sockets.  */
+-#define       PF_PPPOX        24      /* PPPoX sockets.  */
+-#define       PF_WANPIPE      25      /* Wanpipe API sockets.  */
+-#define       PF_LLC          26      /* Linux LLC.  */
+-#define       PF_CAN          29      /* Controller Area Network.  */
+-#define       PF_TIPC         30      /* TIPC sockets.  */
+-#define       PF_BLUETOOTH    31      /* Bluetooth sockets.  */
+-#define       PF_IUCV         32      /* IUCV sockets.  */
+-#define       PF_RXRPC        33      /* RxRPC sockets.  */
+-#define       PF_ISDN         34      /* mISDN sockets.  */
+-#define       PF_PHONET       35      /* Phonet sockets.  */
+-#define       PF_IEEE802154   36      /* IEEE 802.15.4 sockets.  */
+-#define       PF_CAIF         37      /* CAIF sockets.  */
+-#define       PF_ALG          38      /* Algorithm sockets.  */
+-#define       PF_MAX          39      /* For now..  */
+-
+-/* Address families.  */
+-#define       AF_UNSPEC       PF_UNSPEC
+-#define       AF_LOCAL        PF_LOCAL
+-#define       AF_UNIX         PF_UNIX
+-#define       AF_FILE         PF_FILE
+-#define       AF_INET         PF_INET
+-#define       AF_AX25         PF_AX25
+-#define       AF_IPX          PF_IPX
+-#define       AF_APPLETALK    PF_APPLETALK
+-#define       AF_NETROM       PF_NETROM
+-#define       AF_BRIDGE       PF_BRIDGE
+-#define       AF_ATMPVC       PF_ATMPVC
+-#define       AF_X25          PF_X25
+-#define       AF_INET6        PF_INET6
+-#define       AF_ROSE         PF_ROSE
+-#define       AF_DECnet       PF_DECnet
+-#define       AF_NETBEUI      PF_NETBEUI
+-#define       AF_SECURITY     PF_SECURITY
+-#define       AF_KEY          PF_KEY
+-#define       AF_NETLINK      PF_NETLINK
+-#define       AF_ROUTE        PF_ROUTE
+-#define       AF_PACKET       PF_PACKET
+-#define       AF_ASH          PF_ASH
+-#define       AF_ECONET       PF_ECONET
+-#define       AF_ATMSVC       PF_ATMSVC
+-#define       AF_SNA          PF_SNA
+-#define       AF_IRDA         PF_IRDA
+-#define       AF_PPPOX        PF_PPPOX
+-#define       AF_WANPIPE      PF_WANPIPE
+-#define       AF_LLC          PF_LLC
+-#define       AF_CAN          PF_CAN
+-#define       AF_TIPC         PF_TIPC
+-#define       AF_BLUETOOTH    PF_BLUETOOTH
+-#define       AF_IUCV         PF_IUCV
+-#define       AF_RXRPC        PF_RXRPC
+-#define       AF_ISDN         PF_ISDN
+-#define       AF_PHONET       PF_PHONET
+-#define       AF_IEEE802154   PF_IEEE802154
+-#define       AF_CAIF         PF_CAIF
+-#define       AF_ALG          PF_ALG
+-#define       AF_MAX          PF_MAX
+-
+-/* Socket level values.  Others are defined in the appropriate headers.
+-
+-   XXX These definitions also should go into the appropriate headers as
+-   far as they are available.  */
+-#define SOL_RAW               255
+-#define SOL_DECNET      261
+-#define SOL_X25         262
+-#define SOL_PACKET    263
+-#define SOL_ATM               264     /* ATM layer (cell level).  */
+-#define SOL_AAL               265     /* ATM Adaption Layer (packet level).  */
+-#define SOL_IRDA      266
+-
+-/* Maximum queue length specifiable by listen.  */
+-#define SOMAXCONN     128
+-
+-/* Get the definition of the macro to define the common sockaddr members.  */
+-#include <bits/sockaddr.h>
+-
+-/* Structure describing a generic socket address.  */
+-struct sockaddr
+-  {
+-    __SOCKADDR_COMMON (sa_);  /* Common data: address family and length.  */
+-    char sa_data[14];         /* Address data.  */
+-  };
+-
+-
+-/* Structure large enough to hold any socket address (with the historical
+-   exception of AF_UNIX).  We reserve 128 bytes.  */
+-#if ULONG_MAX > 0xffffffff
+-# define __ss_aligntype       __uint64_t
+-#else
+-# define __ss_aligntype       __uint32_t
+-#endif
+-#define _SS_SIZE      128
+-#define _SS_PADSIZE   (_SS_SIZE - (2 * sizeof (__ss_aligntype)))
+-
+-struct sockaddr_storage
+-  {
+-    __SOCKADDR_COMMON (ss_);  /* Address family, etc.  */
+-    __ss_aligntype __ss_align;        /* Force desired alignment.  */
+-    char __ss_padding[_SS_PADSIZE];
+-  };
+-
+-
+-/* Bits in the FLAGS argument to `send', `recv', et al.  */
+-enum
+-  {
+-    MSG_OOB           = 0x01, /* Process out-of-band data.  */
+-#define MSG_OOB               MSG_OOB
+-    MSG_PEEK          = 0x02, /* Peek at incoming messages.  */
+-#define MSG_PEEK      MSG_PEEK
+-    MSG_DONTROUTE     = 0x04, /* Don't use local routing.  */
+-#define MSG_DONTROUTE MSG_DONTROUTE
+-#ifdef __USE_GNU
+-    /* DECnet uses a different name.  */
+-    MSG_TRYHARD               = MSG_DONTROUTE,
+-# define MSG_TRYHARD  MSG_DONTROUTE
+-#endif
+-    MSG_CTRUNC                = 0x08, /* Control data lost before delivery.  */
+-#define MSG_CTRUNC    MSG_CTRUNC
+-    MSG_PROXY         = 0x10, /* Supply or ask second address.  */
+-#define MSG_PROXY     MSG_PROXY
+-    MSG_TRUNC         = 0x20,
+-#define       MSG_TRUNC       MSG_TRUNC
+-    MSG_DONTWAIT      = 0x40, /* Nonblocking IO.  */
+-#define       MSG_DONTWAIT    MSG_DONTWAIT
+-    MSG_EOR           = 0x80, /* End of record.  */
+-#define       MSG_EOR         MSG_EOR
+-    MSG_WAITALL               = 0x100, /* Wait for a full request.  */
+-#define       MSG_WAITALL     MSG_WAITALL
+-    MSG_FIN           = 0x200,
+-#define       MSG_FIN         MSG_FIN
+-    MSG_SYN           = 0x400,
+-#define       MSG_SYN         MSG_SYN
+-    MSG_CONFIRM               = 0x800, /* Confirm path validity.  */
+-#define       MSG_CONFIRM     MSG_CONFIRM
+-    MSG_RST           = 0x1000,
+-#define       MSG_RST         MSG_RST
+-    MSG_ERRQUEUE      = 0x2000, /* Fetch message from error queue.  */
+-#define       MSG_ERRQUEUE    MSG_ERRQUEUE
+-    MSG_NOSIGNAL      = 0x4000, /* Do not generate SIGPIPE.  */
+-#define       MSG_NOSIGNAL    MSG_NOSIGNAL
+-    MSG_MORE          = 0x8000  /* Sender will send more.  */
+-#define       MSG_MORE        MSG_MORE
+-  };
+-
+-
+-/* Structure describing messages sent by
+-   `sendmsg' and received by `recvmsg'.  */
+-/* Note: do not change these members to match glibc; these match the
+-   SuSv3 spec already (e.g. msg_iovlen/msg_controllen).
+-   http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html */
+-/* Note: linux kernel uses __kernel_size_t (which is 8bytes on 64bit
+-   platforms, and 4bytes on 32bit platforms) for msg_iovlen/msg_controllen */
+-struct msghdr
+-  {
+-    void *msg_name;           /* Address to send to/receive from.  */
+-    socklen_t msg_namelen;    /* Length of address data.  */
+-
+-    struct iovec *msg_iov;    /* Vector of data to send/receive into.  */
+-#if __WORDSIZE == 32
+-    int msg_iovlen;           /* Number of elements in the vector.  */
+-#else
+-    size_t msg_iovlen;                /* Number of elements in the vector.  */
+-#endif
+-
+-    void *msg_control;                /* Ancillary data (eg BSD filedesc passing). */
+-#if __WORDSIZE == 32
+-    socklen_t msg_controllen; /* Ancillary data buffer length.  */
+-#else
+-    size_t msg_controllen;    /* Ancillary data buffer length.  */
+-#endif
+-
+-    int msg_flags;            /* Flags on received message.  */
+-  };
+-
+-/* Structure used for storage of ancillary data object information.  */
+-struct cmsghdr
+-  {
+-    size_t cmsg_len;          /* Length of data in cmsg_data plus length
+-                                 of cmsghdr structure.  */
+-    int cmsg_level;           /* Originating protocol.  */
+-    int cmsg_type;            /* Protocol specific type.  */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+-    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
+-#endif
+-  };
+-
+-/* Ancillary data object manipulation macros.  */
+-#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
+-#else
+-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
+-#endif
+-#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
+-#define CMSG_FIRSTHDR(mhdr) \
+-  ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr)               \
+-   ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL)
+-#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \
+-                       & (size_t) ~(sizeof (size_t) - 1))
+-#define CMSG_SPACE(len) (CMSG_ALIGN (len) \
+-                       + CMSG_ALIGN (sizeof (struct cmsghdr)))
+-#define CMSG_LEN(len)   (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len))
+-
+-extern struct cmsghdr *__cmsg_nxthdr (struct msghdr *__mhdr,
+-                                    struct cmsghdr *__cmsg) __THROW;
+-libc_hidden_proto(__cmsg_nxthdr)
+-#ifdef __USE_EXTERN_INLINES
+-# ifndef _EXTERN_INLINE
+-#  define _EXTERN_INLINE extern __inline
+-# endif
+-_EXTERN_INLINE struct cmsghdr *
+-__NTH (__cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg))
+-{
+-  if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr))
+-    /* The kernel header does this so there may be a reason.  */
+-    return 0;
+-
+-  __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg
+-                             + CMSG_ALIGN (__cmsg->cmsg_len));
+-  if ((unsigned char *) (__cmsg + 1) > ((unsigned char *) __mhdr->msg_control
+-                                      + __mhdr->msg_controllen)
+-      || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len)
+-        > ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen)))
+-    /* No more entries.  */
+-    return 0;
+-  return __cmsg;
+-}
+-#endif        /* Use `extern inline'.  */
+-
+-/* Socket level message types.  This must match the definitions in
+-   <linux/socket.h>.  */
+-enum
+-  {
+-    SCM_RIGHTS = 0x01         /* Transfer file descriptors.  */
+-#define SCM_RIGHTS SCM_RIGHTS
+-#ifdef __USE_BSD
+-    , SCM_CREDENTIALS = 0x02  /* Credentials passing.  */
+-# define SCM_CREDENTIALS SCM_CREDENTIALS
+-#endif
+-  };
+-
+-/* User visible structure for SCM_CREDENTIALS message */
+-
+-struct ucred
+-{
+-  pid_t pid;                  /* PID of sending process.  */
+-  uid_t uid;                  /* UID of sending process.  */
+-  gid_t gid;                  /* GID of sending process.  */
+-};
+-
+-/* Get socket manipulation related informations from kernel headers.  */
+-#ifndef __GLIBC__
+-#define __GLIBC__ 2
+-#include <asm/socket.h>
+-#undef __GLIBC__
+-#else
+-#include <asm/socket.h>
+-#endif
+-
+-
+-/* Structure used to manipulate the SO_LINGER option.  */
+-struct linger
+-  {
+-    int l_onoff;              /* Nonzero to linger on close.  */
+-    int l_linger;             /* Time to linger.  */
+-  };
+-
+-/* Prefer socketcall over all these for sparc32, 
+-   since it only has socketcall */
+-#ifndef __arch64__
+- #undef __NR_accept
+- #undef __NR_bind
+- #undef __NR_connect
+- #undef __NR_getpeername
+- #undef __NR_getsockname
+- #undef __NR_getsockopt
+- #undef __NR_listen
+- #undef __NR_recv
+- #undef __NR_recvfrom
+- #undef __NR_recvmsg
+- #undef __NR_send
+- #undef __NR_sendmsg
+- #undef __NR_sendto
+- #undef __NR_setsockopt
+- #undef __NR_shutdown
+- #undef __NR_socket
+- #undef __NR_socketpair
+-#endif
+-
+-#endif        /* bits/socket.h */
+diff --git a/libc/sysdeps/linux/sparc/bits/socket_type.h b/libc/sysdeps/linux/sparc/bits/socket_type.h
+new file mode 100644
+index 0000000..494655f
+--- /dev/null
++++ b/libc/sysdeps/linux/sparc/bits/socket_type.h
+@@ -0,0 +1,54 @@
++/* System-specific socket constants and types.  Linux version.
++   Copyright (C) 1991,1992,1994-2001,2004,2006 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/>.  */
++
++#ifndef _SYS_SOCKET_H
++# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead."
++#endif
++
++/* Types of sockets.  */
++enum __socket_type
++{
++  SOCK_STREAM = 1,            /* Sequenced, reliable, connection-based
++                                 byte streams.  */
++#define SOCK_STREAM SOCK_STREAM
++  SOCK_DGRAM = 2,             /* Connectionless, unreliable datagrams
++                                 of fixed maximum length.  */
++#define SOCK_DGRAM SOCK_DGRAM
++  SOCK_RAW = 3,                       /* Raw protocol interface.  */
++#define SOCK_RAW SOCK_RAW
++  SOCK_RDM = 4,                       /* Reliably-delivered messages.  */
++#define SOCK_RDM SOCK_RDM
++  SOCK_SEQPACKET = 5,         /* Sequenced, reliable, connection-based,
++                                 datagrams of fixed maximum length.  */
++#define SOCK_SEQPACKET SOCK_SEQPACKET
++  SOCK_DCCP = 6,              /* Datagram Congestion Control Protocol.  */
++#define SOCK_DCCP SOCK_DCCP
++  SOCK_PACKET = 10,           /* Linux specific way of getting packets
++                                 at the dev level.  For writing rarp and
++                                 other similar things on the user level. */
++#define SOCK_PACKET SOCK_PACKET
++
++  /* Flags to be ORed into the type parameter of socket and socketpair.  */
++
++  SOCK_CLOEXEC = 0x400000,    /* Atomically set close-on-exec flag for the
++                                 new descriptor(s).  */
++#define SOCK_CLOEXEC SOCK_CLOEXEC
++  SOCK_NONBLOCK = 0x004000    /* Atomically mark descriptor(s) as
++                                 non-blocking.  */
++#define SOCK_NONBLOCK SOCK_NONBLOCK
++};
+-- 
+1.7.10.4
+