Remove pre-2.4.21 Linux kernel support.

This commit is contained in:
Joseph Myers 2012-07-25 21:19:13 +00:00
parent 842a39cd1a
commit 89b4b02f42
23 changed files with 188 additions and 519 deletions

View File

@ -1,3 +1,95 @@
2012-07-25 Joseph Myers <joseph@codesourcery.com>
[BZ #13717]
* sysdeps/unix/sysv/linux/configure.in (arch_minimum_kernel):
Change to 2.4.21 where previously 2.4.1.
* sysdeps/unix/sysv/linux/configure: Regenerated.
* sysdeps/unix/sysv/linux/kernel-features.h [(__powerpc__ ||
__sh__) && !__powerpc64__] (__ASSUME_FCNTL64): Do not condition on
Linux kernel version.
(__ASSUME_STD_AUXV): Remove.
[__powerpc__] (__ASSUME_VFORK_SYSCALL): Do not condition on Linux
kernel version.
[__powerpc__ && !__powerpc64] (__ASSUME_MMAP2_SYSCALL): Likewise.
(__ASSUME_NEW_PRCTL_SYSCALL): Remove.
(__ASSUME_FIXED_CLONE_SYSCALL): Likewise.
(__ASSUME_NEW_RT_SIGRETURN_SYSCALL): Likewise.
(__ASSUME_NETLINK_SUPPORT): Likewise.
* nscd/gai.c [NEED_NETLINK && __ASSUME_NETLINK_SUPPORT == 0]
(__no_netlink_support): Remove conditional definition.
* sysdeps/unix/sysv/linux/check_pf.c (__no_netlink_support):
Remove.
(__check_pf) [!__ASSUME_NETLINK_SUPPORT]: Remove conditional code.
[__ASSUME_NETLINK_SUPPORT]: Make code unconditional.
* sysdeps/unix/sysv/linux/if_index.c [!__ASSUME_NETLINK_SUPPORT]
(if_nameindex_ioctl): Remove.
(if_nameindex_netlink): Do not handle __no_netlink_support.
(if_nameindex) [!__ASSUME_NETLINK_SUPPORT]: Remove conditional
code.
* sysdeps/unix/sysv/linux/ifaddrs.c [!__ASSUME_NETLINK_SUPPORT]:
Remove conditional code.
(__netlink_open) [!__ASSUME_NETLINK_SUPPORT]: Remove conditional
code.
(getifaddrs_internal) [__ASSUME_NETLINK_SUPPORT]: Make code
unconditional.
[!__ASSUME_NETLINK_SUPPORT]: Remove conditional code.
[__ASSUME_NETLINK_SUPPORT] (freeifaddrs): Make code unconditional.
* sysdeps/unix/sysv/linux/netlinkaccess.h (__no_netlink_support):
Remove.
* sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c
[!__ASSUME_STD_AUXV]: Remove conditional code.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S (__clone)
[!__ASSUME_FIXED_CLONE_SYSCALL]: Remove conditional code.
[__ASSUME_FIXED_CLONE_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_mask.c
[!__ASSUME_NEW_PRCTL_SYSCALL] (fe_mask_handler): Remove.
(__fe_mask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove conditional
code.
[__ASSUME_NEW_PRCTL_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/fe_nomask.c
[!__ASSUME_NEW_PRCTL_SYSCALL] (fe_nomask_handler): Remove.
(__fe_nomask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove
conditional code.
[__ASSUME_NEW_PRCTL_SYSCALL]: Make code unconditional.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_mask.c
(__fe_mask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove conditional
code.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/fpu/fe_nomask.c
(__fe_nomask_env) [!__ASSUME_NEW_PRCTL_SYSCALL]: Remove
conditional code.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/getcontext.S
(__novec_getcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make
code unconditional.
(__novec_getcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
(__getcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
unconditional.
(__getcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/makecontext.S
(__makecontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
unconditional.
(__makecontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S
(__novec_setcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make
code unconditional.
(__novec_setcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
(__setcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
unconditional.
(__setcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S
(__novec_swapcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make
code unconditional.
(__novec_swapcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
(__swapcontext) [__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Make code
unconditional.
(__swapcontext) [!__ASSUME_NEW_RT_SIGRETURN_SYSCALL]: Remove
conditional code.
2012-07-25 Andreas Schwab <schwab@linux-m68k.org> 2012-07-25 Andreas Schwab <schwab@linux-m68k.org>
* sysdeps/unix/sysv/linux/i386/accept4.S: Remove pseudo_end label. * sysdeps/unix/sysv/linux/i386/accept4.S: Remove pseudo_end label.

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2004, 2005, 2006, 2007 Free Software Foundation, Inc. /* Copyright (C) 2004-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2004. Contributed by Ulrich Drepper <drepper@cygnus.com>, 2004.
@ -43,7 +43,3 @@
/* Some variables normally defined in libc. */ /* Some variables normally defined in libc. */
service_user *__nss_hosts_database; service_user *__nss_hosts_database;
#if defined NEED_NETLINK && __ASSUME_NETLINK_SUPPORT == 0
int __no_netlink_support attribute_hidden;
#endif

View File

@ -1,3 +1,8 @@
2012-07-25 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/arm/kernel-features.h
(__ASSUME_FCNTL64): Define unconditionally.
2012-07-25 Florian Weimer <fweimer@redhat.com> 2012-07-25 Florian Weimer <fweimer@redhat.com>
* sysdeps/unix/sysv/linux/arm/nptl/libc.abilist: Add * sysdeps/unix/sysv/linux/arm/nptl/libc.abilist: Add

View File

@ -1,3 +1,11 @@
2012-07-25 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/sysv/linux/m68k/kernel-features.h
(__ASSUME_MMAP2_SYSCALL): Define unconditionally.
(__ASSUME_STAT64_SYSCALL): Likewise.
(__ASSUME_FCNTL64): Likewise.
(__ASSUME_VFORK_SYSCALL): Likewise.
2012-07-25 Florian Weimer <fweimer@redhat.com> 2012-07-25 Florian Weimer <fweimer@redhat.com>
* sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libc.abilist: * sysdeps/unix/sysv/linux/m68k/coldfire/nptl/libc.abilist:

View File

@ -28,9 +28,7 @@
#define __ASSUME_STAT64_SYSCALL 1 #define __ASSUME_STAT64_SYSCALL 1
/* Arm got fcntl64 in 2.4.4. */ /* Arm got fcntl64 in 2.4.4. */
#if __LINUX_KERNEL_VERSION >= 132100 #define __ASSUME_FCNTL64 1
# define __ASSUME_FCNTL64 1
#endif
/* The vfork syscall on arm was definitely available in 2.4. */ /* The vfork syscall on arm was definitely available in 2.4. */
#define __ASSUME_VFORK_SYSCALL 1 #define __ASSUME_VFORK_SYSCALL 1

View File

@ -18,12 +18,10 @@
<http://www.gnu.org/licenses/>. */ <http://www.gnu.org/licenses/>. */
/* These features were surely available with 2.4.12. */ /* These features were surely available with 2.4.12. */
#if __LINUX_KERNEL_VERSION >= 132108 #define __ASSUME_MMAP2_SYSCALL 1
# define __ASSUME_MMAP2_SYSCALL 1 #define __ASSUME_STAT64_SYSCALL 1
# define __ASSUME_STAT64_SYSCALL 1 #define __ASSUME_FCNTL64 1
# define __ASSUME_FCNTL64 1 #define __ASSUME_VFORK_SYSCALL 1
# define __ASSUME_VFORK_SYSCALL 1
#endif
/* Many syscalls were added in 2.6.10 for m68k. */ /* Many syscalls were added in 2.6.10 for m68k. */
#if __LINUX_KERNEL_VERSION >= 132618 #if __LINUX_KERNEL_VERSION >= 132618

View File

@ -1,5 +1,5 @@
/* Determine protocol families for which interfaces exist. Linux version. /* Determine protocol families for which interfaces exist. Linux version.
Copyright (C) 2003, 2006-2008, 2010, 2011 Free Software Foundation, Inc. Copyright (C) 2003-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -289,16 +289,6 @@ out_fail:
} }
/* We don't know if we have NETLINK support compiled into our
Kernel. */
#if __ASSUME_NETLINK_SUPPORT == 0
/* Define in ifaddrs.h. */
extern int __no_netlink_support attribute_hidden;
#else
# define __no_netlink_support 0
#endif
void void
attribute_hidden attribute_hidden
__check_pf (bool *seen_ipv4, bool *seen_ipv6, __check_pf (bool *seen_ipv4, bool *seen_ipv6,
@ -307,12 +297,10 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
*in6ai = NULL; *in6ai = NULL;
*in6ailen = 0; *in6ailen = 0;
if (! __no_netlink_support) struct cached_data *olddata = NULL;
{ struct cached_data *data = NULL;
struct cached_data *olddata = NULL;
struct cached_data *data = NULL;
__libc_lock_lock (lock); __libc_lock_lock (lock);
#ifdef IS_IN_nscd #ifdef IS_IN_nscd
# define cache_valid() nl_timestamp != 0 && cache->timestamp == nl_timestamp # define cache_valid() nl_timestamp != 0 && cache->timestamp == nl_timestamp
@ -321,90 +309,59 @@ __check_pf (bool *seen_ipv4, bool *seen_ipv6,
({ uint32_t val = __nscd_get_nl_timestamp (); \ ({ uint32_t val = __nscd_get_nl_timestamp (); \
val != 0 && cache->timestamp == val; }) val != 0 && cache->timestamp == val; })
#endif #endif
if (cache != NULL && cache_valid ()) if (cache != NULL && cache_valid ())
{
data = cache;
atomic_increment (&cache->usecnt);
}
else
{
int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (__builtin_expect (fd >= 0, 1))
{ {
data = cache; struct sockaddr_nl nladdr;
atomic_increment (&cache->usecnt); memset (&nladdr, '\0', sizeof (nladdr));
nladdr.nl_family = AF_NETLINK;
socklen_t addr_len = sizeof (nladdr);
if (__bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) == 0
&& __getsockname (fd, (struct sockaddr *) &nladdr,
&addr_len) == 0)
data = make_request (fd, nladdr.nl_pid);
close_not_cancel_no_status (fd);
} }
else
{
int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
if (__builtin_expect (fd >= 0, 1))
{
struct sockaddr_nl nladdr;
memset (&nladdr, '\0', sizeof (nladdr));
nladdr.nl_family = AF_NETLINK;
socklen_t addr_len = sizeof (nladdr);
if(__bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) == 0
&& __getsockname (fd, (struct sockaddr *) &nladdr,
&addr_len) == 0)
data = make_request (fd, nladdr.nl_pid);
close_not_cancel_no_status (fd);
}
if (data != NULL)
{
olddata = cache;
cache = data;
}
}
__libc_lock_unlock (lock);
if (data != NULL) if (data != NULL)
{ {
/* It worked. */ olddata = cache;
*seen_ipv4 = data->seen_ipv4; cache = data;
*seen_ipv6 = data->seen_ipv6;
*in6ailen = data->in6ailen;
*in6ai = data->in6ai;
if (olddata != NULL && olddata->usecnt > 0
&& atomic_add_zero (&olddata->usecnt, -1))
free (olddata);
return;
} }
#if __ASSUME_NETLINK_SUPPORT == 0
/* Remember that there is no netlink support. */
__no_netlink_support = 1;
#else
/* We cannot determine what interfaces are available. Be
pessimistic. */
*seen_ipv4 = true;
*seen_ipv6 = true;
#endif
} }
#if __ASSUME_NETLINK_SUPPORT == 0 __libc_lock_unlock (lock);
/* No netlink. Get the interface list via getifaddrs. */
struct ifaddrs *ifa = NULL; if (data != NULL)
if (getifaddrs (&ifa) != 0)
{ {
/* We cannot determine what interfaces are available. Be /* It worked. */
pessimistic. */ *seen_ipv4 = data->seen_ipv4;
*seen_ipv4 = true; *seen_ipv6 = data->seen_ipv6;
*seen_ipv6 = true; *in6ailen = data->in6ailen;
*in6ai = data->in6ai;
if (olddata != NULL && olddata->usecnt > 0
&& atomic_add_zero (&olddata->usecnt, -1))
free (olddata);
return; return;
} }
struct ifaddrs *runp; /* We cannot determine what interfaces are available. Be
for (runp = ifa; runp != NULL; runp = runp->ifa_next) pessimistic. */
if (runp->ifa_addr != NULL) *seen_ipv4 = true;
{ *seen_ipv6 = true;
if (runp->ifa_addr->sa_family == PF_INET)
*seen_ipv4 = true;
else if (runp->ifa_addr->sa_family == PF_INET6)
*seen_ipv6 = true;
}
(void) freeifaddrs (ifa);
#endif
} }

View File

@ -284,25 +284,22 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in case "$machine" in
i386*) i386*)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
powerpc/powerpc32) powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1
;;
powerpc/powerpc64)
arch_minimum_kernel=2.4.21 arch_minimum_kernel=2.4.21
;; ;;
s390/s390-32) s390/s390-32)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
s390/s390-64) s390/s390-64)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
sh*) sh*)
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
;; ;;
sparc/sparc64*) sparc/sparc64*)
@ -311,10 +308,10 @@ case "$machine" in
;; ;;
sparc*) sparc*)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
*) *)
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
esac esac
if test -n "$minimum_kernel"; then if test -n "$minimum_kernel"; then

View File

@ -41,25 +41,22 @@ test -n "$arch_minimum_kernel" ||
case "$machine" in case "$machine" in
i386*) i386*)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
powerpc/powerpc32) powerpc/powerpc32)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1
;;
powerpc/powerpc64)
arch_minimum_kernel=2.4.21 arch_minimum_kernel=2.4.21
;; ;;
s390/s390-32) s390/s390-32)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
s390/s390-64) s390/s390-64)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
sh*) sh*)
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
;; ;;
sparc/sparc64*) sparc/sparc64*)
@ -68,10 +65,10 @@ case "$machine" in
;; ;;
sparc*) sparc*)
libc_cv_gcc_unwind_find_fde=yes libc_cv_gcc_unwind_find_fde=yes
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
*) *)
arch_minimum_kernel=2.4.1 arch_minimum_kernel=2.4.21
;; ;;
esac esac
if test -n "$minimum_kernel"; then if test -n "$minimum_kernel"; then

View File

@ -74,90 +74,13 @@ if_freenameindex (struct if_nameindex *ifn)
libc_hidden_def (if_freenameindex) libc_hidden_def (if_freenameindex)
#if __ASSUME_NETLINK_SUPPORT == 0
static struct if_nameindex *
if_nameindex_ioctl (void)
{
int fd = __opensock ();
struct ifconf ifc;
unsigned int nifs, i;
int rq_len;
struct if_nameindex *idx = NULL;
# define RQ_IFS 4
if (fd < 0)
return NULL;
ifc.ifc_buf = NULL;
/* We may be able to get the needed buffer size directly, rather than
guessing. */
ifc.ifc_buf = NULL;
ifc.ifc_len = 0;
if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0 || ifc.ifc_len == 0)
rq_len = RQ_IFS * sizeof (struct ifreq);
else
rq_len = ifc.ifc_len;
/* Read all the interfaces out of the kernel. */
ifc.ifc_buf = alloca (rq_len);
ifc.ifc_len = rq_len;
if (__ioctl (fd, SIOCGIFCONF, &ifc) < 0)
{
close_not_cancel_no_status (fd);
return NULL;
}
nifs = ifc.ifc_len / sizeof (struct ifreq);
idx = malloc ((nifs + 1) * sizeof (struct if_nameindex));
if (idx == NULL)
{
close_not_cancel_no_status (fd);
__set_errno (ENOBUFS);
return NULL;
}
for (i = 0; i < nifs; ++i)
{
struct ifreq *ifr = &ifc.ifc_req[i];
idx[i].if_name = __strdup (ifr->ifr_name);
if (idx[i].if_name == NULL
|| __ioctl (fd, SIOCGIFINDEX, ifr) < 0)
{
int saved_errno = errno;
unsigned int j;
for (j = 0; j < i; ++j)
free (idx[j].if_name);
free (idx);
close_not_cancel_no_status (fd);
if (saved_errno == EINVAL)
saved_errno = ENOSYS;
else if (saved_errno == ENOMEM)
saved_errno = ENOBUFS;
__set_errno (saved_errno);
return NULL;
}
idx[i].if_index = ifr->ifr_ifindex;
}
idx[i].if_index = 0;
idx[i].if_name = NULL;
close_not_cancel_no_status (fd);
return idx;
}
#endif
static struct if_nameindex * static struct if_nameindex *
if_nameindex_netlink (void) if_nameindex_netlink (void)
{ {
struct netlink_handle nh = { 0, 0, 0, NULL, NULL }; struct netlink_handle nh = { 0, 0, 0, NULL, NULL };
struct if_nameindex *idx = NULL; struct if_nameindex *idx = NULL;
if (__no_netlink_support || __netlink_open (&nh) < 0) if (__netlink_open (&nh) < 0)
return NULL; return NULL;
@ -274,10 +197,6 @@ if_nameindex (void)
return NULL; return NULL;
#else #else
struct if_nameindex *result = if_nameindex_netlink (); struct if_nameindex *result = if_nameindex_netlink ();
# if __ASSUME_NETLINK_SUPPORT == 0
if (__no_netlink_support)
result = if_nameindex_ioctl ();
# endif
return result; return result;
#endif #endif
} }

View File

@ -1,5 +1,5 @@
/* getifaddrs -- get names and addresses of all network interfaces /* getifaddrs -- get names and addresses of all network interfaces
Copyright (C) 2003-2008, 2009, 2010, 2011 Free Software Foundation, Inc. Copyright (C) 2003-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -37,17 +37,6 @@
#include "netlinkaccess.h" #include "netlinkaccess.h"
/* We don't know if we have NETLINK support compiled into our
Kernel, so include the old implementation as fallback. */
#if __ASSUME_NETLINK_SUPPORT == 0
int __no_netlink_support attribute_hidden;
# define getifaddrs fallback_getifaddrs
# include "sysdeps/gnu/ifaddrs.c"
# undef getifaddrs
#endif
/* There is a problem with this type. The address length for /* There is a problem with this type. The address length for
Infiniband sockets is much longer than the 8 bytes allocated in the Infiniband sockets is much longer than the 8 bytes allocated in the
sockaddr_ll definition. Hence we use here a special sockaddr_ll definition. Hence we use here a special
@ -274,9 +263,6 @@ __netlink_open (struct netlink_handle *h)
close_and_out: close_and_out:
__netlink_close (h); __netlink_close (h);
out: out:
#if __ASSUME_NETLINK_SUPPORT == 0
__no_netlink_support = 1;
#endif
return -1; return -1;
} }
/* Determine the ID the kernel assigned for this netlink connection. /* Determine the ID the kernel assigned for this netlink connection.
@ -340,17 +326,8 @@ getifaddrs_internal (struct ifaddrs **ifap)
*ifap = NULL; *ifap = NULL;
if (! __no_netlink_support && __netlink_open (&nh) < 0) if (__netlink_open (&nh) < 0)
{ return -1;
#if __ASSUME_NETLINK_SUPPORT != 0
return -1;
#endif
}
#if __ASSUME_NETLINK_SUPPORT == 0
if (__no_netlink_support)
return fallback_getifaddrs (ifap);
#endif
/* Tell the kernel that we wish to get a list of all /* Tell the kernel that we wish to get a list of all
active interfaces, collect all data for every interface. */ active interfaces, collect all data for every interface. */
@ -859,11 +836,9 @@ getifaddrs (struct ifaddrs **ifap)
libc_hidden_def (getifaddrs) libc_hidden_def (getifaddrs)
#if __ASSUME_NETLINK_SUPPORT != 0
void void
freeifaddrs (struct ifaddrs *ifa) freeifaddrs (struct ifaddrs *ifa)
{ {
free (ifa); free (ifa);
} }
libc_hidden_def (freeifaddrs) libc_hidden_def (freeifaddrs)
#endif

View File

@ -91,8 +91,7 @@
/* Arm got fcntl64 in 2.4.4, PowerPC and SH have it also in 2.4.4 (I /* Arm got fcntl64 in 2.4.4, PowerPC and SH have it also in 2.4.4 (I
don't know when it got introduced). But PowerPC64 does not support don't know when it got introduced). But PowerPC64 does not support
separate FCNTL64 call, FCNTL is already 64-bit */ separate FCNTL64 call, FCNTL is already 64-bit */
#if __LINUX_KERNEL_VERSION >= 132100 \ #if (defined __powerpc__ || defined __sh__) \
&& (defined __powerpc__ || defined __sh__) \
&& !defined __powerpc64__ && !defined __powerpc64__
# define __ASSUME_FCNTL64 1 # define __ASSUME_FCNTL64 1
#endif #endif
@ -101,39 +100,18 @@
MIPS n32). */ MIPS n32). */
#define __ASSUME_GETDENTS64_SYSCALL 1 #define __ASSUME_GETDENTS64_SYSCALL 1
/* Starting with 2.4.5 kernels PPC passes the AUXV in the standard way /* Starting with 2.4.5 kernels the vfork syscall made it into the
and the vfork syscall made it into the official kernel. */ official kernel for PPC. */
#if __LINUX_KERNEL_VERSION >= (132096+5) && defined __powerpc__ #ifdef __powerpc__
# define __ASSUME_STD_AUXV 1
# define __ASSUME_VFORK_SYSCALL 1 # define __ASSUME_VFORK_SYSCALL 1
#endif #endif
/* Starting with 2.4.5 kernels the mmap2 syscall made it into the official /* Starting with 2.4.5 kernels the mmap2 syscall made it into the official
kernel. But PowerPC64 does not support a separate MMAP2 call. */ kernel. But PowerPC64 does not support a separate MMAP2 call. */
#if __LINUX_KERNEL_VERSION >= (132096+5) && defined __powerpc__ \ #if defined __powerpc__ && !defined __powerpc64__
&& !defined __powerpc64__
# define __ASSUME_MMAP2_SYSCALL 1 # define __ASSUME_MMAP2_SYSCALL 1
#endif #endif
/* Starting with 2.4.21 PowerPC implements the new prctl syscall.
This allows applications to get/set the Floating Point Exception Mode. */
#if __LINUX_KERNEL_VERSION >= (132096+21) && defined __powerpc__
# define __ASSUME_NEW_PRCTL_SYSCALL 1
#endif
/* Starting with 2.4.21 the PowerPC32 clone syscall works as expected. */
#if __LINUX_KERNEL_VERSION >= (132096+21) && defined __powerpc__ \
&& !defined __powerpc64__
# define __ASSUME_FIXED_CLONE_SYSCALL 1
#endif
/* Starting with 2.4.21 PowerPC64 implements the new rt_sigreturn syscall.
The new rt_sigreturn takes an ucontext pointer allowing rt_sigreturn
to be used in the set/swapcontext implementation. */
#if __LINUX_KERNEL_VERSION >= (132096+21) && defined __powerpc64__
# define __ASSUME_NEW_RT_SIGRETURN_SYSCALL 1
#endif
/* On x86, the set_thread_area syscall was introduced in 2.5.29, but its /* On x86, the set_thread_area syscall was introduced in 2.5.29, but its
semantics was changed in 2.5.30, and again after 2.5.31. */ semantics was changed in 2.5.30, and again after 2.5.31. */
#if __LINUX_KERNEL_VERSION >= 132384 && defined __i386__ #if __LINUX_KERNEL_VERSION >= 132384 && defined __i386__
@ -169,11 +147,6 @@
# define __ASSUME_POSIX_CPU_TIMERS 1 # define __ASSUME_POSIX_CPU_TIMERS 1
#endif #endif
/* With kernel 2.4.17 we always have netlink support. */
#if __LINUX_KERNEL_VERSION >= (132096+17)
# define __ASSUME_NETLINK_SUPPORT 1
#endif
/* The requeue futex functionality was introduced in 2.5.70. */ /* The requeue futex functionality was introduced in 2.5.70. */
#if __LINUX_KERNEL_VERSION >= 132422 #if __LINUX_KERNEL_VERSION >= 132422
# define __ASSUME_FUTEX_REQUEUE 1 # define __ASSUME_FUTEX_REQUEUE 1

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. /* Copyright (C) 2004-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -44,13 +44,6 @@ struct netlink_handle
}; };
#if __ASSUME_NETLINK_SUPPORT == 0
extern int __no_netlink_support attribute_hidden;
#else
# define __no_netlink_support 0
#endif
extern int __netlink_open (struct netlink_handle *h); extern int __netlink_open (struct netlink_handle *h);
extern void __netlink_close (struct netlink_handle *h); extern void __netlink_close (struct netlink_handle *h);
extern void __netlink_free_handle (struct netlink_handle *h); extern void __netlink_free_handle (struct netlink_handle *h);

View File

@ -1,6 +1,5 @@
/* Operating system support for run-time dynamic linker. Linux/PPC version. /* Operating system support for run-time dynamic linker. Linux/PPC version.
Copyright (C) 1997, 1998, 2001, 2003, 2006, 2007 Copyright (C) 1997-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -32,35 +31,4 @@ int __cache_line_size attribute_hidden;
__cache_line_size = av->a_un.a_val; \ __cache_line_size = av->a_un.a_val; \
break; break;
#ifndef __ASSUME_STD_AUXV
/* The PowerPC's auxiliary argument block gets aligned to a 16-byte
boundary. This is history and impossible to change compatibly. */
#define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp) \
do { \
char **_tmp; \
size_t _test; \
(argc) = *(long int *) cookie; \
(argv) = (char **) cookie + 1; \
(envp) = (argv) + (argc) + 1; \
for (_tmp = (envp); *_tmp; ++_tmp) \
continue; \
/* The following '++' is important! */ \
++_tmp; \
\
_test = (size_t)_tmp; \
_test = (_test + 0xf) & ~0xf; \
/* Under some circumstances, MkLinux (up to at least DR3a5) \
omits the padding. To work around this, we make a \
basic sanity check of the argument vector. Of \
course, this means that in future, the argument \
vector will have to be laid out to allow for this \
test :-(. */ \
if (((ElfW(auxv_t) *)_test)->a_type <= 0x10) \
_tmp = (char **)_test; \
(auxp) = (ElfW(auxv_t) *) _tmp; \
} while (0)
#endif
#include <sysdeps/unix/sysv/linux/dl-sysdep.c> #include <sysdeps/unix/sysv/linux/dl-sysdep.c>

View File

@ -1,5 +1,5 @@
/* Wrapper around clone system call. /* Wrapper around clone system call.
Copyright (C) 1997,98,99,2000,02,04,2006 Free Software Foundation, Inc. Copyright (C) 1997-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -52,11 +52,7 @@ ENTRY (BP_SYM (__clone))
#ifdef RESET_PID #ifdef RESET_PID
stmw r28,16(r1) stmw r28,16(r1)
#else #else
# ifndef __ASSUME_FIXED_CLONE_SYSCALL
stmw r29,16(r1)
# else
stmw r30,16(r1) stmw r30,16(r1)
# endif
#endif #endif
/* Set up stack frame for child. */ /* Set up stack frame for child. */
@ -66,9 +62,6 @@ ENTRY (BP_SYM (__clone))
/* Save fn, args, stack across syscall. */ /* Save fn, args, stack across syscall. */
mr r30,r3 /* Function in r30. */ mr r30,r3 /* Function in r30. */
#ifndef __ASSUME_FIXED_CLONE_SYSCALL
mr r29,r4 /* Stack pointer in r29. */
#endif
#ifdef RESET_PID #ifdef RESET_PID
mr r28,r5 mr r28,r5
#endif #endif
@ -95,14 +88,6 @@ ENTRY (BP_SYM (__clone))
crandc cr1*4+eq,cr1*4+eq,cr0*4+so crandc cr1*4+eq,cr1*4+eq,cr0*4+so
bne- cr1,L(parent) /* The '-' is to minimise the race. */ bne- cr1,L(parent) /* The '-' is to minimise the race. */
#ifndef __ASSUME_FIXED_CLONE_SYSCALL
/* On at least mklinux DR3a5, clone() doesn't actually change
the stack pointer. I'm pretty sure this is a bug, because
it adds a race condition if a signal is sent to a thread
just after it is created (in the previous three instructions). */
mr r1,r29
#endif
#ifdef RESET_PID #ifdef RESET_PID
andis. r0,r28,CLONE_THREAD>>16 andis. r0,r28,CLONE_THREAD>>16
bne+ r0,L(oldpid) bne+ r0,L(oldpid)
@ -128,11 +113,7 @@ L(parent):
#ifdef RESET_PID #ifdef RESET_PID
lmw r28,16(r1) lmw r28,16(r1)
#else #else
# ifndef __ASSUME_FIXED_CLONE_SYSCALL
lmw r29,16(r1)
# else
lmw r30,16(r1) lmw r30,16(r1)
# endif
#endif #endif
addi r1,r1,32 addi r1,r1,32
bnslr+ bnslr+

View File

@ -1,5 +1,5 @@
/* Procedure definition for FE_MASK_ENV for Linux/ppc. /* Procedure definition for FE_MASK_ENV for Linux/ppc.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -24,44 +24,11 @@
#include <sys/prctl.h> #include <sys/prctl.h>
#include <kernel-features.h> #include <kernel-features.h>
#if __ASSUME_NEW_PRCTL_SYSCALL == 0
/* This is rather fiddly under Linux. We don't have direct access,
and there is no system call, but we can change the bits
in a signal handler's context... */
static struct sigaction oact;
static void
fe_mask_handler (int signum, struct sigcontext *sc)
{
sc->regs->msr &= ~0x900ul; /* FE0 | FE1 */
sigaction (SIGUSR1, &oact, NULL);
}
#endif
const fenv_t * const fenv_t *
__fe_mask_env (void) __fe_mask_env (void)
{ {
#if __ASSUME_NEW_PRCTL_SYSCALL == 0
# if defined PR_SET_FPEXC && defined PR_FP_EXC_DISABLED
int result = INLINE_SYSCALL (prctl, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED);
if (result == -1 && errno == EINVAL)
# endif
{
struct sigaction act;
act.sa_handler = (sighandler_t) fe_mask_handler;
sigemptyset (&act.sa_mask);
act.sa_flags = 0;
sigaction (SIGUSR1, &act, &oact);
raise (SIGUSR1);
}
#else
INTERNAL_SYSCALL_DECL (err); INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED); INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED);
#endif
return FE_DFL_ENV; return FE_DFL_ENV;
} }

View File

@ -1,5 +1,5 @@
/* Procedure definition for FE_NOMASK_ENV for Linux/ppc. /* Procedure definition for FE_NOMASK_ENV for Linux/ppc.
Copyright (C) 2000, 2006, 2008 Free Software Foundation, Inc. Copyright (C) 2000-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -24,44 +24,11 @@
#include <sys/prctl.h> #include <sys/prctl.h>
#include <kernel-features.h> #include <kernel-features.h>
#if __ASSUME_NEW_PRCTL_SYSCALL == 0
/* This is rather fiddly under Linux. We don't have direct access,
and there is no system call, but we can change the bits
in a signal handler's context... */
static struct sigaction oact;
static void
fe_nomask_handler (int signum, struct sigcontext *sc)
{
sc->regs->msr |= 0x900ul; /* FE0 | FE1 */
sigaction (SIGUSR1, &oact, NULL);
}
#endif
const fenv_t * const fenv_t *
__fe_nomask_env (void) __fe_nomask_env (void)
{ {
#if __ASSUME_NEW_PRCTL_SYSCALL == 0
# if defined PR_SET_FPEXC && defined PR_FP_EXC_PRECISE
int result = INLINE_SYSCALL (prctl, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE);
if (result == -1 && errno == EINVAL)
# endif
{
struct sigaction act;
act.sa_handler = (sighandler_t) fe_nomask_handler;
sigemptyset (&act.sa_mask);
act.sa_flags = 0;
sigaction (SIGUSR1, &act, &oact);
raise (SIGUSR1);
}
#else
INTERNAL_SYSCALL_DECL (err); INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE); INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE);
#endif
return FE_ENABLED_ENV; return FE_ENABLED_ENV;
} }

View File

@ -1,5 +1,5 @@
/* Procedure definition for FE_MASK_ENV for Linux/ppc64. /* Procedure definition for FE_MASK_ENV for Linux/ppc64.
Copyright (C) 2007 Free Software Foundation, Inc. Copyright (C) 2007-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -30,11 +30,6 @@ __fe_mask_env (void)
int result; int result;
INTERNAL_SYSCALL_DECL (err); INTERNAL_SYSCALL_DECL (err);
result = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED); result = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_DISABLED);
# ifndef __ASSUME_NEW_PRCTL_SYSCALL
if (INTERNAL_SYSCALL_ERROR_P (result, err)
&& INTERNAL_SYSCALL_ERRNO (result, err) == EINVAL)
__set_errno (ENOSYS);
# endif
#else #else
__set_errno (ENOSYS); __set_errno (ENOSYS);
#endif #endif

View File

@ -1,5 +1,5 @@
/* Procedure definition for FE_NOMASK_ENV for Linux/ppc64. /* Procedure definition for FE_NOMASK_ENV for Linux/ppc64.
Copyright (C) 2003, 2006, 2008 Free Software Foundation, Inc. Copyright (C) 2003-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -30,11 +30,6 @@ __fe_nomask_env (void)
int result; int result;
INTERNAL_SYSCALL_DECL (err); INTERNAL_SYSCALL_DECL (err);
result = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE); result = INTERNAL_SYSCALL (prctl, err, 2, PR_SET_FPEXC, PR_FP_EXC_PRECISE);
# ifndef __ASSUME_NEW_PRCTL_SYSCALL
if (INTERNAL_SYSCALL_ERROR_P (result, err)
&& INTERNAL_SYSCALL_ERRNO (result, err) == EINVAL)
__set_errno (ENOSYS);
# endif
#else #else
__set_errno (ENOSYS); __set_errno (ENOSYS);
#endif #endif

View File

@ -1,5 +1,5 @@
/* Save current context. /* Save current context.
Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc. Copyright (C) 2002-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -30,7 +30,6 @@
#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) #if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4)
ENTRY(__novec_getcontext) ENTRY(__novec_getcontext)
CALL_MCOUNT 1 CALL_MCOUNT 1
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3)
std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3)
mflr r0 mflr r0
@ -137,18 +136,6 @@ ENTRY(__novec_getcontext)
li r3,SIG_BLOCK li r3,SIG_BLOCK
bl JUMPTARGET(__sigprocmask) bl JUMPTARGET(__sigprocmask)
nop nop
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset (lr, FRAME_LR_SAVE)
stdu r1,-128(r1)
cfi_adjust_cfa_offset(128)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
#endif
ld r0,128+FRAME_LR_SAVE(r1) ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128 addi r1,r1,128
@ -172,7 +159,6 @@ compat_symbol (libc, __novec_getcontext, getcontext, GLIBC_2_3)
.machine "altivec" .machine "altivec"
ENTRY(__getcontext) ENTRY(__getcontext)
CALL_MCOUNT 1 CALL_MCOUNT 1
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3)
std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3)
mflr r0 mflr r0
@ -388,18 +374,6 @@ L(has_no_vec):
li r3,SIG_BLOCK li r3,SIG_BLOCK
bl JUMPTARGET(__sigprocmask) bl JUMPTARGET(__sigprocmask)
nop nop
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset (lr, FRAME_LR_SAVE)
stdu r1,-128(r1)
cfi_adjust_cfa_offset (128)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
#endif
ld r0,128+FRAME_LR_SAVE(r1) ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128 addi r1,r1,128

View File

@ -1,5 +1,5 @@
/* Create new context. /* Create new context.
Copyright (C) 2002, 2004, 2006 Free Software Foundation, Inc. Copyright (C) 2002-2012 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -26,7 +26,6 @@
ENTRY(__makecontext) ENTRY(__makecontext)
CALL_MCOUNT 3 CALL_MCOUNT 3
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
/* Save parameters into the parameter save area of callers frame. */ /* Save parameters into the parameter save area of callers frame. */
std r3,FRAME_PARM1_SAVE(r1) /* ucontext_t *ucp */ std r3,FRAME_PARM1_SAVE(r1) /* ucontext_t *ucp */
std r4,FRAME_PARM2_SAVE(r1) /* void (*func)(void) */ std r4,FRAME_PARM2_SAVE(r1) /* void (*func)(void) */
@ -166,22 +165,6 @@ L(gotexitcodeaddr):
addi r1,r1,128 addi r1,r1,128
mtlr r0 mtlr r0
blr blr
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset (lr, FRAME_LR_SAVE)
stdu r1,-128(r1)
cfi_adjust_cfa_offset (128)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128
mtlr r0
blr
#endif
END(__makecontext) END(__makecontext)
weak_alias (__makecontext, makecontext) weak_alias (__makecontext, makecontext)

View File

@ -1,6 +1,5 @@
/* Switch to context. /* Switch to context.
Copyright (C) 2002, 2004, 2005, 2006, 2008, 2009 Copyright (C) 2002-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -39,7 +38,6 @@
#if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4) #if SHLIB_COMPAT (libc, GLIBC_2_3, GLIBC_2_3_4)
ENTRY(__novec_setcontext) ENTRY(__novec_setcontext)
CALL_MCOUNT 1 CALL_MCOUNT 1
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
mflr r0 mflr r0
std r31,-8(1) std r31,-8(1)
cfi_offset(r31,-8) cfi_offset(r31,-8)
@ -200,22 +198,6 @@ L(nv_do_sigret):
li r0,SYS_ify(rt_sigreturn) li r0,SYS_ify(rt_sigreturn)
sc sc
/* No return. */ /* No return. */
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset(lr,FRAME_LR_SAVE)
stdu r1,-128(r1)
cfi_adjust_cfa_offset(128)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128
mtlr r0
blr
#endif
PSEUDO_END(__novec_setcontext) PSEUDO_END(__novec_setcontext)
@ -227,7 +209,6 @@ compat_symbol (libc, __novec_setcontext, setcontext, GLIBC_2_3)
.machine "altivec" .machine "altivec"
ENTRY(__setcontext) ENTRY(__setcontext)
CALL_MCOUNT 1 CALL_MCOUNT 1
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
mflr r0 mflr r0
std r31,-8(1) std r31,-8(1)
cfi_offset(r31,-8) cfi_offset(r31,-8)
@ -491,22 +472,6 @@ L(do_sigret):
li r0,SYS_ify(rt_sigreturn) li r0,SYS_ify(rt_sigreturn)
sc sc
/* No return. */ /* No return. */
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset (lr, FRAME_LR_SAVE)
stdu r1,-128(r1)
cfi_adjust_cfa_offset (128)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128
mtlr r0
blr
#endif
PSEUDO_END(__setcontext) PSEUDO_END(__setcontext)

View File

@ -1,6 +1,5 @@
/* Save current context and install the given one. /* Save current context and install the given one.
Copyright (C) 2002, 2004, 2005, 2006, 2008, 2009 Copyright (C) 2002-2012 Free Software Foundation, Inc.
Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -39,7 +38,6 @@
.section ".text" .section ".text"
ENTRY(__novec_swapcontext) ENTRY(__novec_swapcontext)
CALL_MCOUNT 2 CALL_MCOUNT 2
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3)
std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3)
mflr r0 mflr r0
@ -294,21 +292,6 @@ L(nv_do_sigret):
li r0,SYS_ify(rt_sigreturn) li r0,SYS_ify(rt_sigreturn)
sc sc
/* No return. */ /* No return. */
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset(lr,FRAME_LR_SAVE)
stdu r1,-128(r1)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128
mtlr r0
blr
#endif
PSEUDO_END(__novec_swapcontext) PSEUDO_END(__novec_swapcontext)
@ -320,7 +303,6 @@ compat_symbol (libc, __novec_swapcontext, swapcontext, GLIBC_2_3)
.machine "altivec" .machine "altivec"
ENTRY(__swapcontext) ENTRY(__swapcontext)
CALL_MCOUNT 2 CALL_MCOUNT 2
#ifdef __ASSUME_NEW_RT_SIGRETURN_SYSCALL
std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3) std r0,(SIGCONTEXT_GP_REGS+(PT_R0*8))(r3)
std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3) std r1,(SIGCONTEXT_GP_REGS+(PT_R1*8))(r3)
mflr r0 mflr r0
@ -789,22 +771,6 @@ L(do_sigret):
li r0,SYS_ify(rt_sigreturn) li r0,SYS_ify(rt_sigreturn)
sc sc
/* No return. */ /* No return. */
#else
/* If the kernel is not at least 2.4.21 then generate a ENOSYS stub. */
mflr r0
std r0,FRAME_LR_SAVE(r1)
cfi_offset (lr, FRAME_LR_SAVE)
stdu r1,-128(r1)
cfi_adjust_cfa_offset (128)
li r3,ENOSYS
bl JUMPTARGET(__syscall_error)
nop
li r3,-1
ld r0,128+FRAME_LR_SAVE(r1)
addi r1,r1,128
mtlr r0
blr
#endif
PSEUDO_END(__swapcontext) PSEUDO_END(__swapcontext)