Remove __ASSUME_SOCK_CLOEXEC / SOCK_CLOEXEC conditionals in Linux-specific code.

This patch removes conditionals on __ASSUME_SOCK_CLOEXEC, and on
SOCK_CLOEXEC being defined, in Linux-specific code, now that all
supported Linux kernel versions can be assumed to have this
functionality.  (The macro is also used in OS-independent code and is
not defined for Hurd.)

Tested x86_64 that the disassembly of installed shared libraries is
unchanged by this patch.

	* nptl/sysdeps/unix/sysv/linux/mq_notify.c: Do not include
	<kernel-features.h>.
	(init_mq_netlink): Remove conditional have_sock_cloexec
	definitions.  Remove code conditional on have_sock_cloexec < 0.
	(init_mq_netlink) [!SOCK_CLOEXEC]: Remove conditional code.
	(init_mq_netlink) [!__ASSUME_SOCK_CLOEXEC]: Likewise.
	* sysdeps/unix/sysv/linux/opensock.c: Do not include
	<kernel-features.h>.
	(__opensock) [SOCK_CLOEXEC]: Make code unconditional.
	(__opensock) [!__ASSUME_SOCK_CLOEXEC]: Remove conditional code.
This commit is contained in:
Joseph Myers 2014-06-20 23:22:08 +00:00
parent d92d8f8a42
commit d710902750
3 changed files with 16 additions and 65 deletions

View File

@ -1,3 +1,16 @@
2014-06-20 Joseph Myers <joseph@codesourcery.com>
* nptl/sysdeps/unix/sysv/linux/mq_notify.c: Do not include
<kernel-features.h>.
(init_mq_netlink): Remove conditional have_sock_cloexec
definitions. Remove code conditional on have_sock_cloexec < 0.
(init_mq_netlink) [!SOCK_CLOEXEC]: Remove conditional code.
(init_mq_netlink) [!__ASSUME_SOCK_CLOEXEC]: Likewise.
* sysdeps/unix/sysv/linux/opensock.c: Do not include
<kernel-features.h>.
(__opensock) [SOCK_CLOEXEC]: Make code unconditional.
(__opensock) [!__ASSUME_SOCK_CLOEXEC]: Remove conditional code.
2014-06-20 H.J. Lu <hongjiu.lu@intel.com> 2014-06-20 H.J. Lu <hongjiu.lu@intel.com>
* sysdeps/x86_64/multiarch/ifunc-impl-list.c (__libc_ifunc_impl_list): * sysdeps/x86_64/multiarch/ifunc-impl-list.c (__libc_ifunc_impl_list):

View File

@ -28,7 +28,6 @@
#include <unistd.h> #include <unistd.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <not-cancel.h> #include <not-cancel.h>
#include <kernel-features.h>
#include <nptl/pthreadP.h> #include <nptl/pthreadP.h>
@ -153,41 +152,15 @@ reset_once (void)
static void static void
init_mq_netlink (void) init_mq_netlink (void)
{ {
#ifdef SOCK_CLOEXEC
# ifndef __ASSUME_SOCK_CLOEXEC
static int have_sock_cloexec;
# else
# define have_sock_cloexec 1
# endif
#else
# define have_sock_cloexec -1
# define SOCK_CLOEXEC 0
#endif
/* This code might be called a second time after fork(). The file /* This code might be called a second time after fork(). The file
descriptor is inherited from the parent. */ descriptor is inherited from the parent. */
if (netlink_socket == -1) if (netlink_socket == -1)
{ {
/* Just a normal netlink socket, not bound. */ /* Just a normal netlink socket, not bound. */
if (have_sock_cloexec >= 0)
{
netlink_socket = socket (AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, 0); netlink_socket = socket (AF_NETLINK, SOCK_RAW | SOCK_CLOEXEC, 0);
#if defined SOCK_CLOEXEC && !defined __ASSUME_SOCK_CLOEXEC
if (have_sock_cloexec == 0)
have_sock_cloexec = (netlink_socket != -1 || errno != EINVAL
? 1 : -1);
#endif
}
if (have_sock_cloexec < 0)
netlink_socket = socket (AF_NETLINK, SOCK_RAW, 0);
/* No need to do more if we have no socket. */ /* No need to do more if we have no socket. */
if (netlink_socket == -1) if (netlink_socket == -1)
return; return;
/* Make sure the descriptor is closed on exec. */
if (have_sock_cloexec < 0
&& fcntl (netlink_socket, F_SETFD, FD_CLOEXEC) != 0)
goto errout;
} }
int err = 1; int err = 1;

View File

@ -21,7 +21,6 @@
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <kernel-features.h>
/* Return a socket of any type. The socket can be used in subsequent /* Return a socket of any type. The socket can be used in subsequent
ioctl calls to talk to the kernel. */ ioctl calls to talk to the kernel. */
@ -63,24 +62,7 @@ __opensock (void)
{ {
assert (last_type != 0); assert (last_type != 0);
#ifdef SOCK_CLOEXEC
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec >= 0)
# endif
{
result = __socket (last_family, last_type | SOCK_CLOEXEC, 0); result = __socket (last_family, last_type | SOCK_CLOEXEC, 0);
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec == 0)
__have_sock_cloexec = result != -1 || errno != EINVAL ? 1 : -1;
# endif
}
#endif
#ifndef __ASSUME_SOCK_CLOEXEC
# ifdef SOCK_CLOEXEC
if (__have_sock_cloexec < 0)
# endif
result = __socket (last_family, last_type, 0);
#endif
if (result != -1 || errno != EAFNOSUPPORT) if (result != -1 || errno != EAFNOSUPPORT)
/* Maybe the socket type isn't supported anymore (module is /* Maybe the socket type isn't supported anymore (module is
unloaded). In this case again try to find the type. */ unloaded). In this case again try to find the type. */
@ -115,24 +97,7 @@ __opensock (void)
if (afs[cnt].family == AF_NETROM || afs[cnt].family == AF_X25) if (afs[cnt].family == AF_NETROM || afs[cnt].family == AF_X25)
type = SOCK_SEQPACKET; type = SOCK_SEQPACKET;
#ifdef SOCK_CLOEXEC
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec >= 0)
# endif
{
result = __socket (afs[cnt].family, type | SOCK_CLOEXEC, 0); result = __socket (afs[cnt].family, type | SOCK_CLOEXEC, 0);
# ifndef __ASSUME_SOCK_CLOEXEC
if (__have_sock_cloexec == 0)
__have_sock_cloexec = result != -1 || errno != EINVAL ? 1 : -1;
# endif
}
#endif
#ifndef __ASSUME_SOCK_CLOEXEC
# ifdef SOCK_CLOEXEC
if (__have_sock_cloexec < 0)
# endif
result = __socket (afs[cnt].family, type, 0);
#endif
if (result != -1) if (result != -1)
{ {
/* Found an available family. */ /* Found an available family. */