From 1292db8782c761fef640b09eef22bcef505985cb Mon Sep 17 00:00:00 2001 From: Richard Purdie Date: Wed, 20 Dec 2006 12:07:48 +0000 Subject: glibc: Update patches git-svn-id: https://svn.o-hand.com/repos/poky/trunk@1062 311d38ba-8fff-0310-9ca6-ca027cbcb966 --- .../glibc/glibc-2.4/arm_eabi_ipc_fix.patch | 94 ++++++ meta/packages/glibc/glibc-2.4/glibc-check_pf.patch | 343 +++++++++++++++++++++ .../glibc/glibc-2.4/powerpc-sqrt-hack.diff | 25 ++ 3 files changed, 462 insertions(+) create mode 100644 meta/packages/glibc/glibc-2.4/arm_eabi_ipc_fix.patch create mode 100644 meta/packages/glibc/glibc-2.4/glibc-check_pf.patch create mode 100644 meta/packages/glibc/glibc-2.4/powerpc-sqrt-hack.diff diff --git a/meta/packages/glibc/glibc-2.4/arm_eabi_ipc_fix.patch b/meta/packages/glibc/glibc-2.4/arm_eabi_ipc_fix.patch new file mode 100644 index 0000000000..8b36960b04 --- /dev/null +++ b/meta/packages/glibc/glibc-2.4/arm_eabi_ipc_fix.patch @@ -0,0 +1,94 @@ +From libc-ports-return-430-listarch-libc-ports=sources dot redhat dot com at sourceware dot org Mon Aug 21 20:08:57 2006 +Return-Path: +Delivered-To: listarch-libc-ports at sources dot redhat dot com +Received: (qmail 9913 invoked by alias); 21 Aug 2006 20:08:56 -0000 +Received: (qmail 9893 invoked by uid 22791); 21 Aug 2006 20:08:53 -0000 +X-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,TW_HM,TW_SG,TW_SN +X-Spam-Check-By: sourceware.org +Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.31.1) with ESMTP; Mon, 21 Aug 2006 20:08:44 +0000 +Received: from drow by nevyn.them.org with local (Exim 4.54) id 1GFG4f-0007gO-TW for libc-ports@sourceware.org; Mon, 21 Aug 2006 16:08:42 -0400 +Date: Mon, 21 Aug 2006 16:08:41 -0400 +From: Daniel Jacobowitz +To: libc-ports at sourceware dot org +Subject: ARM IPC fix +Message-ID: <20060821200841.GA29502@nevyn.them.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +User-Agent: Mutt/1.5.11+cvs20060403 +X-IsSubscribed: yes +Mailing-List: contact libc-ports-help at sourceware dot org; run by ezmlm +Precedence: bulk +List-Subscribe: +List-Post: +List-Help: , +Sender: libc-ports-owner at sourceware dot org +Delivered-To: mailing list libc-ports at sourceware dot org + +We can't treat msgctl as a real syscall; if we don't add __IPC_64, we'll get +a mismatched type for ipc_perm. Fixed by using the Alpha implementation, +which is similar to the standard i386 implementation but doesn't use +the multiplexer syscall. + +-- +Daniel Jacobowitz +CodeSourcery + +2006-08-21 Daniel Jacobowitz + + * sysdeps/unix/sysv/linux/arm/eabi/syscalls.list: Remove msgctl, + shmctl, and semctl. + * sysdeps/unix/sysv/linux/arm/eabi/semctl.c, + sysdeps/unix/sysv/linux/arm/eabi/shmctl.c, + sysdeps/unix/sysv/linux/arm/eabi/msgctl.c: New files. + +Index: a/ports/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list +=================================================================== +--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list (revision 147209) ++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list (working copy) +@@ -1,18 +1,16 @@ + # File name Caller Syscall name # args Strong name Weak names + +-# semaphore and shm system calls +-msgctl - msgctl i:iip __msgctl msgctl ++# Semaphore and shm system calls. msgctl, shmctl, and semctl have C ++# wrappers (to set __IPC_64). + msgget - msgget i:ii __msgget msgget + msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv + msgsnd - msgsnd Ci:ibni __msgsnd msgsnd + shmat - shmat i:ipi __shmat shmat +-shmctl - shmctl i:iip __shmctl shmctl + shmdt - shmdt i:s __shmdt shmdt + shmget - shmget i:iii __shmget shmget + semop - semop i:ipi __semop semop + semtimedop - semtimedop i:ipip semtimedop + semget - semget i:iii __semget semget +-semctl - semctl i:iiii __semctl semctl + + # proper socket implementations: + accept - accept Ci:iBN __libc_accept __accept accept + +Property changes on: sysdeps/unix/sysv/linux/arm/eabi/syscalls.list +___________________________________________________________________ +Name: svn:mime-type + - application/octet-stream + +Index: a/ports/sysdeps/unix/sysv/linux/arm/eabi/semctl.c +=================================================================== +--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/semctl.c (revision 0) ++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/semctl.c (revision 0) +@@ -0,0 +1 @@ ++#include +Index: a/ports/sysdeps/unix/sysv/linux/arm/eabi/msgctl.c +=================================================================== +--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/msgctl.c (revision 0) ++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/msgctl.c (revision 0) +@@ -0,0 +1 @@ ++#include +Index: a/ports/sysdeps/unix/sysv/linux/arm/eabi/shmctl.c +=================================================================== +--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/shmctl.c (revision 0) ++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/shmctl.c (revision 0) +@@ -0,0 +1 @@ ++#include + diff --git a/meta/packages/glibc/glibc-2.4/glibc-check_pf.patch b/meta/packages/glibc/glibc-2.4/glibc-check_pf.patch new file mode 100644 index 0000000000..3cff6bbcfa --- /dev/null +++ b/meta/packages/glibc/glibc-2.4/glibc-check_pf.patch @@ -0,0 +1,343 @@ +From libc-ports-return-550-listarch-libc-ports=sources dot redhat dot com at sourceware dot org Tue Oct 31 17:37:21 2006 +Return-Path: +Delivered-To: listarch-libc-ports at sources dot redhat dot com +Received: (qmail 17273 invoked by alias); 31 Oct 2006 17:37:20 -0000 +Received: (qmail 17262 invoked by uid 22791); 31 Oct 2006 17:37:19 -0000 +X-Spam-Status: No, hits=-2.5 required=5.0 tests=AWL,BAYES_00,TW_CP +X-Spam-Check-By: sourceware.org +Received: from nevyn.them.org (HELO nevyn.them.org) (66.93.172.17) by sourceware.org (qpsmtpd/0.31.1) with ESMTP; Tue, 31 Oct 2006 17:37:11 +0000 +Received: from drow by nevyn.them.org with local (Exim 4.54) id 1GexXw-0007Dj-30; Tue, 31 Oct 2006 12:37:08 -0500 +Date: Tue, 31 Oct 2006 12:37:08 -0500 +From: Daniel Jacobowitz +To: Mike Frysinger +Cc: libc-ports at sourceware dot org, Philip Balister +Subject: Re: Problem with glibc-2.5 on ARM +Message-ID: <20061031173708.GJ20468@nevyn.them.org> +References: <499146270610241149ibe030e0nd9d6b177a95b346e@mail.gmail.com> <499146270610241254u7cadf63ej2edf05cedbc5266f@mail.gmail.com> <20061024195837.GA20181@nevyn.them.org> <200610291954.27022.vapier@gentoo.org> +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii +Content-Disposition: inline +In-Reply-To: <200610291954 dot 27022 dot vapier at gentoo dot org> +User-Agent: Mutt/1.5.13 (2006-08-11) +X-IsSubscribed: yes +Mailing-List: contact libc-ports-help at sourceware dot org; run by ezmlm +Precedence: bulk +List-Subscribe: +List-Post: +List-Help: , +Sender: libc-ports-owner at sourceware dot org +Delivered-To: mailing list libc-ports at sourceware dot org + +On Sun, Oct 29, 2006 at 07:54:25PM -0500, Mike Frysinger wrote: +> On Tuesday 24 October 2006 15:58, Daniel Jacobowitz wrote: +> > ARM is going to need a slightly different version of that file, I +> > guess. +> +> would declaring req with attribute packed not help ? +> -mike + +Nope. "struct rtgenmsg" would still have size 4. + +Philip, are you still at all interested in this for the old ABI? +I don't have time to test this patch right now, but I think it +will work. + +-- +Daniel Jacobowitz +CodeSourcery + +2006-10-31 Daniel Jacobowitz + + * sysdeps/unix/sysv/linux/arm/check_pf.c: New file. + * sysdeps/unix/sysv/linux/arm/eabi/check_pf.c: New file. + +Index: sysdeps/unix/sysv/linux/arm/check_pf.c +=================================================================== +RCS file: sysdeps/unix/sysv/linux/arm/check_pf.c +diff -N sysdeps/unix/sysv/linux/arm/check_pf.c +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ sysdeps/unix/sysv/linux/arm/check_pf.c 31 Oct 2006 17:29:58 -0000 +@@ -0,0 +1,274 @@ ++/* Determine protocol families for which interfaces exist. ARM Linux version. ++ Copyright (C) 2003, 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. */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++ ++#include ++#include ++ ++ ++#ifndef IFA_F_TEMPORARY ++# define IFA_F_TEMPORARY IFA_F_SECONDARY ++#endif ++#ifndef IFA_F_HOMEADDRESS ++# define IFA_F_HOMEADDRESS 0 ++#endif ++ ++ ++static int ++make_request (int fd, pid_t pid, bool *seen_ipv4, bool *seen_ipv6, ++ struct in6addrinfo **in6ai, size_t *in6ailen) ++{ ++ struct req ++ { ++ struct nlmsghdr nlh; ++ struct rtgenmsg g; ++ } req; ++ struct sockaddr_nl nladdr; ++ ++ /* struct rtgenmsg consists of a single byte but the ARM ABI rounds ++ it up to a word. Clear the padding explicitly here. */ ++ assert (sizeof (req.g) == 4); ++ memset (&req.g, '\0', sizeof (req.g)); ++ ++ req.nlh.nlmsg_len = sizeof (req); ++ req.nlh.nlmsg_type = RTM_GETADDR; ++ req.nlh.nlmsg_flags = NLM_F_ROOT | NLM_F_MATCH | NLM_F_REQUEST; ++ req.nlh.nlmsg_pid = 0; ++ req.nlh.nlmsg_seq = time (NULL); ++ req.g.rtgen_family = AF_UNSPEC; ++ ++ memset (&nladdr, '\0', sizeof (nladdr)); ++ nladdr.nl_family = AF_NETLINK; ++ ++ if (TEMP_FAILURE_RETRY (__sendto (fd, (void *) &req, sizeof (req), 0, ++ (struct sockaddr *) &nladdr, ++ sizeof (nladdr))) < 0) ++ return -1; ++ ++ *seen_ipv4 = false; ++ *seen_ipv6 = false; ++ ++ bool done = false; ++ char buf[4096]; ++ struct iovec iov = { buf, sizeof (buf) }; ++ struct in6ailist ++ { ++ struct in6addrinfo info; ++ struct in6ailist *next; ++ } *in6ailist = NULL; ++ size_t in6ailistlen = 0; ++ ++ do ++ { ++ struct msghdr msg = ++ { ++ (void *) &nladdr, sizeof (nladdr), ++ &iov, 1, ++ NULL, 0, ++ 0 ++ }; ++ ++ ssize_t read_len = TEMP_FAILURE_RETRY (__recvmsg (fd, &msg, 0)); ++ if (read_len < 0) ++ return -1; ++ ++ if (msg.msg_flags & MSG_TRUNC) ++ return -1; ++ ++ struct nlmsghdr *nlmh; ++ for (nlmh = (struct nlmsghdr *) buf; ++ NLMSG_OK (nlmh, (size_t) read_len); ++ nlmh = (struct nlmsghdr *) NLMSG_NEXT (nlmh, read_len)) ++ { ++ if (nladdr.nl_pid != 0 || (pid_t) nlmh->nlmsg_pid != pid ++ || nlmh->nlmsg_seq != req.nlh.nlmsg_seq) ++ continue; ++ ++ if (nlmh->nlmsg_type == RTM_NEWADDR) ++ { ++ struct ifaddrmsg *ifam = (struct ifaddrmsg *) NLMSG_DATA (nlmh); ++ ++ switch (ifam->ifa_family) ++ { ++ case AF_INET: ++ *seen_ipv4 = true; ++ break; ++ case AF_INET6: ++ *seen_ipv6 = true; ++ ++ if (ifam->ifa_flags & (IFA_F_DEPRECATED ++ | IFA_F_TEMPORARY ++ | IFA_F_HOMEADDRESS)) ++ { ++ struct rtattr *rta = IFA_RTA (ifam); ++ size_t len = (nlmh->nlmsg_len ++ - NLMSG_LENGTH (sizeof (*ifam))); ++ void *local = NULL; ++ void *address = NULL; ++ while (RTA_OK (rta, len)) ++ { ++ switch (rta->rta_type) ++ { ++ case IFA_LOCAL: ++ local = RTA_DATA (rta); ++ break; ++ ++ case IFA_ADDRESS: ++ address = RTA_DATA (rta); ++ break; ++ } ++ ++ rta = RTA_NEXT (rta, len); ++ } ++ ++ struct in6ailist *newp = alloca (sizeof (*newp)); ++ newp->info.flags = (((ifam->ifa_flags & IFA_F_DEPRECATED) ++ ? in6ai_deprecated : 0) ++ | ((ifam->ifa_flags ++ & IFA_F_TEMPORARY) ++ ? in6ai_temporary : 0) ++ | ((ifam->ifa_flags ++ & IFA_F_HOMEADDRESS) ++ ? in6ai_homeaddress : 0)); ++ memcpy (newp->info.addr, address ?: local, ++ sizeof (newp->info.addr)); ++ newp->next = in6ailist; ++ in6ailist = newp; ++ ++in6ailistlen; ++ } ++ break; ++ default: ++ /* Ignore. */ ++ break; ++ } ++ } ++ else if (nlmh->nlmsg_type == NLMSG_DONE) ++ /* We found the end, leave the loop. */ ++ done = true; ++ } ++ } ++ while (! done); ++ ++ close_not_cancel_no_status (fd); ++ ++ if (in6ailist != NULL) ++ { ++ *in6ai = malloc (in6ailistlen * sizeof (**in6ai)); ++ if (*in6ai == NULL) ++ return -1; ++ ++ *in6ailen = in6ailistlen; ++ ++ do ++ { ++ (*in6ai)[--in6ailistlen] = in6ailist->info; ++ in6ailist = in6ailist->next; ++ } ++ while (in6ailist != NULL); ++ } ++ ++ return 0; ++} ++ ++ ++/* We don't know if we have NETLINK support compiled in in 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 ++attribute_hidden ++__check_pf (bool *seen_ipv4, bool *seen_ipv6, ++ struct in6addrinfo **in6ai, size_t *in6ailen) ++{ ++ *in6ai = NULL; ++ *in6ailen = 0; ++ ++ if (! __no_netlink_support) ++ { ++ int fd = __socket (PF_NETLINK, SOCK_RAW, NETLINK_ROUTE); ++ ++ struct sockaddr_nl nladdr; ++ memset (&nladdr, '\0', sizeof (nladdr)); ++ nladdr.nl_family = AF_NETLINK; ++ ++ socklen_t addr_len = sizeof (nladdr); ++ ++ if (fd >= 0 ++ && __bind (fd, (struct sockaddr *) &nladdr, sizeof (nladdr)) == 0 ++ && __getsockname (fd, (struct sockaddr *) &nladdr, &addr_len) == 0 ++ && make_request (fd, nladdr.nl_pid, seen_ipv4, seen_ipv6, ++ in6ai, in6ailen) == 0) ++ /* It worked. */ ++ return; ++ ++ if (fd >= 0) ++ __close (fd); ++ ++#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 ++ /* No netlink. Get the interface list via getifaddrs. */ ++ struct ifaddrs *ifa = NULL; ++ if (getifaddrs (&ifa) != 0) ++ { ++ /* We cannot determine what interfaces are available. Be ++ pessimistic. */ ++ *seen_ipv4 = true; ++ *seen_ipv6 = true; ++ return; ++ } ++ ++ struct ifaddrs *runp; ++ for (runp = ifa; runp != NULL; runp = runp->ifa_next) ++ 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 ++} +Index: sysdeps/unix/sysv/linux/arm/eabi/check_pf.c +=================================================================== +RCS file: sysdeps/unix/sysv/linux/arm/eabi/check_pf.c +diff -N sysdeps/unix/sysv/linux/arm/eabi/check_pf.c +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ sysdeps/unix/sysv/linux/arm/eabi/check_pf.c 31 Oct 2006 17:29:58 -0000 +@@ -0,0 +1 @@ ++#include + diff --git a/meta/packages/glibc/glibc-2.4/powerpc-sqrt-hack.diff b/meta/packages/glibc/glibc-2.4/powerpc-sqrt-hack.diff new file mode 100644 index 0000000000..1046efb2a1 --- /dev/null +++ b/meta/packages/glibc/glibc-2.4/powerpc-sqrt-hack.diff @@ -0,0 +1,25 @@ +diff -Nurd ../glibc-initial-2.5-r4/glibc-2.5/sysdeps/powerpc/fpu/e_sqrt.c glibc-2.5/sysdeps/powerpc/fpu/e_sqrt.c +--- ../glibc-initial-2.5-r4/glibc-2.5/sysdeps/powerpc/fpu/e_sqrt.c 2006-04-14 07:44:30.000000000 +0200 ++++ glibc-2.5/sysdeps/powerpc/fpu/e_sqrt.c 2006-12-08 12:53:32.202227000 +0100 +@@ -25,6 +25,9 @@ + #include + #include + ++#define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0) ++ ++ + static const double almost_half = 0.5000000000000001; /* 0.5 + 2^-53 */ + static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 }; + static const ieee_float_shape_type a_inf = {.word = 0x7f800000 }; +diff -Nurd ../glibc-initial-2.5-r4/glibc-2.5/sysdeps/powerpc/fpu/e_sqrtf.c glibc-2.5/sysdeps/powerpc/fpu/e_sqrtf.c +--- ../glibc-initial-2.5-r4/glibc-2.5/sysdeps/powerpc/fpu/e_sqrtf.c 2006-04-14 07:44:30.000000000 +0200 ++++ glibc-2.5/sysdeps/powerpc/fpu/e_sqrtf.c 2006-12-08 12:53:36.992227000 +0100 +@@ -25,6 +25,8 @@ + #include + #include + ++#define __CPU_HAS_FSQRT ((GLRO(dl_hwcap) & PPC_FEATURE_64) != 0) ++ + static const float almost_half = 0.50000006; /* 0.5 + 2^-24 */ + static const ieee_float_shape_type a_nan = {.word = 0x7fc00000 }; + static const ieee_float_shape_type a_inf = {.word = 0x7f800000 }; -- cgit v1.2.3-54-g00ecf