]> code.ossystems Code Review - openembedded-core.git/commitdiff
glibc: bring back needed patches from older recipes
authorNitin A Kamble <nitin.a.kamble@intel.com>
Fri, 20 Aug 2010 19:20:52 +0000 (12:20 -0700)
committerRichard Purdie <rpurdie@linux.intel.com>
Fri, 20 Aug 2010 22:26:40 +0000 (23:26 +0100)
while removing old glibc recipes some needed patches from
older recipes got wiped out. Bringing them back.

Signed-off-by: Nitin A Kamble <nitin.a.kamble@intel.com>
meta/packages/glibc/glibc-2.10.1/generic-bits_select.h [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/generic-bits_time.h [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/generic-bits_types.h [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/generic-bits_typesizes.h [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/glibc-check_pf.patch [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/ldd-unbash.patch [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/ldsocache-varrun.patch [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/nptl-crosscompile.patch [new file with mode: 0644]
meta/packages/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff [new file with mode: 0644]

diff --git a/meta/packages/glibc/glibc-2.10.1/generic-bits_select.h b/meta/packages/glibc/glibc-2.10.1/generic-bits_select.h
new file mode 100644 (file)
index 0000000..47e7ded
--- /dev/null
@@ -0,0 +1,35 @@
+/* Copyright (C) 1997, 1998, 2001 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 _SYS_SELECT_H
+# error "Never use <bits/select.h> directly; include <sys/select.h> instead."
+#endif
+
+
+/* We don't use `memset' because this would require a prototype and
+   the array isn't too big.  */
+#define __FD_ZERO(s) \
+  do {                                                                       \
+    unsigned int __i;                                                        \
+    fd_set *__arr = (s);                                                     \
+    for (__i = 0; __i < sizeof (fd_set) / sizeof (__fd_mask); ++__i)         \
+      __FDS_BITS (__arr)[__i] = 0;                                           \
+  } while (0)
+#define __FD_SET(d, s)     (__FDS_BITS (s)[__FDELT(d)] |= __FDMASK(d))
+#define __FD_CLR(d, s)     (__FDS_BITS (s)[__FDELT(d)] &= ~__FDMASK(d))
+#define __FD_ISSET(d, s)   ((__FDS_BITS (s)[__FDELT(d)] & __FDMASK(d)) != 0)
diff --git a/meta/packages/glibc/glibc-2.10.1/generic-bits_time.h b/meta/packages/glibc/glibc-2.10.1/generic-bits_time.h
new file mode 100644 (file)
index 0000000..b3184d1
--- /dev/null
@@ -0,0 +1,75 @@
+/* System-dependent timing definitions.  Generic version.
+   Copyright (C) 1996,1997,1999-2002,2003 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.  */
+
+/*
+ * Never include this file directly; use <time.h> instead.
+ */
+
+#ifndef __need_timeval
+# ifndef _BITS_TIME_H
+#  define _BITS_TIME_H 1
+
+/* ISO/IEC 9899:1990 7.12.1: <time.h>
+   The macro `CLOCKS_PER_SEC' is the number per second of the value
+   returned by the `clock' function. */
+/* CAE XSH, Issue 4, Version 2: <time.h>
+   The value of CLOCKS_PER_SEC is required to be 1 million on all
+   XSI-conformant systems. */
+#  define CLOCKS_PER_SEC  1000000l
+
+#  if !defined __STRICT_ANSI__ && !defined __USE_XOPEN2K
+/* Even though CLOCKS_PER_SEC has such a strange value CLK_TCK
+   presents the real value for clock ticks per second for the system.  */
+#   include <bits/types.h>
+extern long int __sysconf (int);
+#   define CLK_TCK ((__clock_t) __sysconf (2)) /* 2 is _SC_CLK_TCK */
+#  endif
+
+#  ifdef __USE_POSIX199309
+/* Identifier for system-wide realtime clock.  */
+#   define CLOCK_REALTIME              0
+/* Monotonic system-wide clock.  */
+#   define CLOCK_MONOTONIC             1
+/* High-resolution timer from the CPU.  */
+#   define CLOCK_PROCESS_CPUTIME_ID    2
+/* Thread-specific CPU-time clock.  */
+#   define CLOCK_THREAD_CPUTIME_ID     3
+
+/* Flag to indicate time is absolute.  */
+#   define TIMER_ABSTIME               1
+#  endif
+
+# endif        /* bits/time.h */
+#endif
+
+#ifdef __need_timeval
+# undef __need_timeval
+# ifndef _STRUCT_TIMEVAL
+#  define _STRUCT_TIMEVAL      1
+#  include <bits/types.h>
+
+/* A time value that is accurate to the nearest
+   microsecond but also has a range of years.  */
+struct timeval
+  {
+    __time_t tv_sec;           /* Seconds.  */
+    __suseconds_t tv_usec;     /* Microseconds.  */
+  };
+# endif        /* struct timeval */
+#endif /* need timeval */
diff --git a/meta/packages/glibc/glibc-2.10.1/generic-bits_types.h b/meta/packages/glibc/glibc-2.10.1/generic-bits_types.h
new file mode 100644 (file)
index 0000000..65c8a9f
--- /dev/null
@@ -0,0 +1,200 @@
+/* bits/types.h -- definitions of __*_t types underlying *_t types.
+   Copyright (C) 2002, 2003, 2004, 2005 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.  */
+
+/*
+ * Never include this file directly; use <sys/types.h> instead.
+ */
+
+#ifndef        _BITS_TYPES_H
+#define        _BITS_TYPES_H   1
+
+#include <features.h>
+#include <bits/wordsize.h>
+
+#define __need_size_t
+#include <stddef.h>
+
+/* Convenience types.  */
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+
+/* Fixed-size types, underlying types depend on word size and compiler.  */
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+#if __WORDSIZE == 64
+typedef signed long int __int64_t;
+typedef unsigned long int __uint64_t;
+#elif defined __GLIBC_HAVE_LONG_LONG
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
+#endif
+
+/* quad_t is also 64 bits.  */
+#if __WORDSIZE == 64
+typedef long int __quad_t;
+typedef unsigned long int __u_quad_t;
+#elif defined __GLIBC_HAVE_LONG_LONG
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
+#else
+typedef struct
+{
+  long __val[2];
+} __quad_t;
+typedef struct
+{
+  __u_long __val[2];
+} __u_quad_t;
+#endif
+
+
+/* The machine-dependent file <bits/typesizes.h> defines __*_T_TYPE
+   macros for each of the OS types we define below.  The definitions
+   of those macros must use the following macros for underlying types.
+   We define __S<SIZE>_TYPE and __U<SIZE>_TYPE for the signed and unsigned
+   variants of each of the following integer types on this machine.
+
+       16              -- "natural" 16-bit type (always short)
+       32              -- "natural" 32-bit type (always int)
+       64              -- "natural" 64-bit type (long or long long)
+       LONG32          -- 32-bit type, traditionally long
+       QUAD            -- 64-bit type, always long long
+       WORD            -- natural type of __WORDSIZE bits (int or long)
+       LONGWORD        -- type of __WORDSIZE bits, traditionally long
+
+   We distinguish WORD/LONGWORD, 32/LONG32, and 64/QUAD so that the
+   conventional uses of `long' or `long long' type modifiers match the
+   types we define, even when a less-adorned type would be the same size.
+   This matters for (somewhat) portably writing printf/scanf formats for
+   these types, where using the appropriate l or ll format modifiers can
+   make the typedefs and the formats match up across all GNU platforms.  If
+   we used `long' when it's 64 bits where `long long' is expected, then the
+   compiler would warn about the formats not matching the argument types,
+   and the programmer changing them to shut up the compiler would break the
+   program's portability.
+
+   Here we assume what is presently the case in all the GCC configurations
+   we support: long long is always 64 bits, long is always word/address size,
+   and int is always 32 bits.  */
+
+#define        __S16_TYPE              short int
+#define __U16_TYPE             unsigned short int
+#define        __S32_TYPE              int
+#define __U32_TYPE             unsigned int
+#define __SLONGWORD_TYPE       long int
+#define __ULONGWORD_TYPE       unsigned long int
+#if __WORDSIZE == 32
+# define __SQUAD_TYPE          __quad_t
+# define __UQUAD_TYPE          __u_quad_t
+# define __SWORD_TYPE          int
+# define __UWORD_TYPE          unsigned int
+# define __SLONG32_TYPE                long int
+# define __ULONG32_TYPE                unsigned long int
+# define __S64_TYPE            __quad_t
+# define __U64_TYPE            __u_quad_t
+/* We want __extension__ before typedef's that use nonstandard base types
+   such as `long long' in C89 mode.  */
+# define __STD_TYPE            __extension__ typedef
+#elif __WORDSIZE == 64
+# define __SQUAD_TYPE          long int
+# define __UQUAD_TYPE          unsigned long int
+# define __SWORD_TYPE          long int
+# define __UWORD_TYPE          unsigned long int
+# define __SLONG32_TYPE                int
+# define __ULONG32_TYPE                unsigned int
+# define __S64_TYPE            long int
+# define __U64_TYPE            unsigned long int
+/* No need to mark the typedef with __extension__.   */
+# define __STD_TYPE            typedef
+#else
+# error
+#endif
+#include <bits/typesizes.h>    /* Defines __*_T_TYPE macros.  */
+
+
+__STD_TYPE __DEV_T_TYPE __dev_t;       /* Type of device numbers.  */
+__STD_TYPE __UID_T_TYPE __uid_t;       /* Type of user identifications.  */
+__STD_TYPE __GID_T_TYPE __gid_t;       /* Type of group identifications.  */
+__STD_TYPE __INO_T_TYPE __ino_t;       /* Type of file serial numbers.  */
+__STD_TYPE __INO64_T_TYPE __ino64_t;   /* Type of file serial numbers (LFS).*/
+__STD_TYPE __MODE_T_TYPE __mode_t;     /* Type of file attribute bitmasks.  */
+__STD_TYPE __NLINK_T_TYPE __nlink_t;   /* Type of file link counts.  */
+__STD_TYPE __OFF_T_TYPE __off_t;       /* Type of file sizes and offsets.  */
+__STD_TYPE __OFF64_T_TYPE __off64_t;   /* Type of file sizes and offsets (LFS).  */
+__STD_TYPE __PID_T_TYPE __pid_t;       /* Type of process identifications.  */
+__STD_TYPE __FSID_T_TYPE __fsid_t;     /* Type of file system IDs.  */
+__STD_TYPE __CLOCK_T_TYPE __clock_t;   /* Type of CPU usage counts.  */
+__STD_TYPE __RLIM_T_TYPE __rlim_t;     /* Type for resource measurement.  */
+__STD_TYPE __RLIM64_T_TYPE __rlim64_t; /* Type for resource measurement (LFS).  */
+__STD_TYPE __ID_T_TYPE __id_t;         /* General type for IDs.  */
+__STD_TYPE __TIME_T_TYPE __time_t;     /* Seconds since the Epoch.  */
+__STD_TYPE __USECONDS_T_TYPE __useconds_t; /* Count of microseconds.  */
+__STD_TYPE __SUSECONDS_T_TYPE __suseconds_t; /* Signed count of microseconds.  */
+
+__STD_TYPE __DADDR_T_TYPE __daddr_t;   /* The type of a disk address.  */
+__STD_TYPE __SWBLK_T_TYPE __swblk_t;   /* Type of a swap block maybe?  */
+__STD_TYPE __KEY_T_TYPE __key_t;       /* Type of an IPC key.  */
+
+/* Clock ID used in clock and timer functions.  */
+__STD_TYPE __CLOCKID_T_TYPE __clockid_t;
+
+/* Timer ID returned by `timer_create'.  */
+__STD_TYPE __TIMER_T_TYPE __timer_t;
+
+/* Type to represent block size.  */
+__STD_TYPE __BLKSIZE_T_TYPE __blksize_t;
+
+/* Types from the Large File Support interface.  */
+
+/* Type to count number of disk blocks.  */
+__STD_TYPE __BLKCNT_T_TYPE __blkcnt_t;
+__STD_TYPE __BLKCNT64_T_TYPE __blkcnt64_t;
+
+/* Type to count file system blocks.  */
+__STD_TYPE __FSBLKCNT_T_TYPE __fsblkcnt_t;
+__STD_TYPE __FSBLKCNT64_T_TYPE __fsblkcnt64_t;
+
+/* Type to count file system nodes.  */
+__STD_TYPE __FSFILCNT_T_TYPE __fsfilcnt_t;
+__STD_TYPE __FSFILCNT64_T_TYPE __fsfilcnt64_t;
+
+__STD_TYPE __SSIZE_T_TYPE __ssize_t; /* Type of a byte count, or error.  */
+
+/* These few don't really vary by system, they always correspond
+   to one of the other defined types.  */
+typedef __off64_t __loff_t;    /* Type of file sizes and offsets (LFS).  */
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+
+/* Duplicates info from stdint.h but this is used in unistd.h.  */
+__STD_TYPE __SWORD_TYPE __intptr_t;
+
+/* Duplicate info from sys/socket.h.  */
+__STD_TYPE __U32_TYPE __socklen_t;
+
+
+#undef __STD_TYPE
+
+#endif /* bits/types.h */
diff --git a/meta/packages/glibc/glibc-2.10.1/generic-bits_typesizes.h b/meta/packages/glibc/glibc-2.10.1/generic-bits_typesizes.h
new file mode 100644 (file)
index 0000000..e9226c4
--- /dev/null
@@ -0,0 +1,66 @@
+/* bits/typesizes.h -- underlying types for *_t.  Generic version.
+   Copyright (C) 2002, 2003 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_TYPES_H
+# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
+#endif
+
+#ifndef        _BITS_TYPESIZES_H
+#define        _BITS_TYPESIZES_H       1
+
+/* See <bits/types.h> for the meaning of these macros.  This file exists so
+   that <bits/types.h> need not vary across different GNU platforms.  */
+
+#define __DEV_T_TYPE           __UQUAD_TYPE
+#define __UID_T_TYPE           __U32_TYPE
+#define __GID_T_TYPE           __U32_TYPE
+#define __INO_T_TYPE           __ULONGWORD_TYPE
+#define __INO64_T_TYPE         __UQUAD_TYPE
+#define __MODE_T_TYPE          __U32_TYPE
+#define __NLINK_T_TYPE         __UWORD_TYPE
+#define __OFF_T_TYPE           __SLONGWORD_TYPE
+#define __OFF64_T_TYPE         __SQUAD_TYPE
+#define __PID_T_TYPE           __S32_TYPE
+#define __RLIM_T_TYPE          __ULONGWORD_TYPE
+#define __RLIM64_T_TYPE                __UQUAD_TYPE
+#define        __BLKCNT_T_TYPE         __SLONGWORD_TYPE
+#define        __BLKCNT64_T_TYPE       __SQUAD_TYPE
+#define        __FSBLKCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSBLKCNT64_T_TYPE     __UQUAD_TYPE
+#define        __FSFILCNT_T_TYPE       __ULONGWORD_TYPE
+#define        __FSFILCNT64_T_TYPE     __UQUAD_TYPE
+#define        __ID_T_TYPE             __U32_TYPE
+#define __CLOCK_T_TYPE         __SLONGWORD_TYPE
+#define __TIME_T_TYPE          __SLONGWORD_TYPE
+#define __USECONDS_T_TYPE      __U32_TYPE
+#define __SUSECONDS_T_TYPE     __SLONGWORD_TYPE
+#define __DADDR_T_TYPE         __S32_TYPE
+#define __SWBLK_T_TYPE         __SLONGWORD_TYPE
+#define __KEY_T_TYPE           __S32_TYPE
+#define __CLOCKID_T_TYPE       __S32_TYPE
+#define __TIMER_T_TYPE         void *
+#define __BLKSIZE_T_TYPE       __SLONGWORD_TYPE
+#define __FSID_T_TYPE          struct { int __val[2]; }
+#define __SSIZE_T_TYPE         __SWORD_TYPE
+
+/* Number of descriptors that can fit in an `fd_set'.  */
+#define        __FD_SETSIZE            1024
+
+
+#endif /* bits/typesizes.h */
diff --git a/meta/packages/glibc/glibc-2.10.1/glibc-check_pf.patch b/meta/packages/glibc/glibc-2.10.1/glibc-check_pf.patch
new file mode 100644 (file)
index 0000000..3cff6bb
--- /dev/null
@@ -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: <libc-ports-return-550-listarch-libc-ports=sources dot redhat dot com at sourceware dot org>
+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 <drow at false dot org>
+To: Mike Frysinger <vapier at gentoo dot org>
+Cc: libc-ports at sourceware dot org, Philip Balister <philip dot balister at gmail dot com>
+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: <mailto:libc-ports-subscribe at sourceware dot org>
+List-Post: <mailto:libc-ports at sourceware dot org>
+List-Help: <mailto:libc-ports-help at sourceware dot org>, <http://sourceware dot org/lists dot html#faqs>
+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  <dan@codesourcery.com>
+
+       * 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 <assert.h>
++#include <errno.h>
++#include <ifaddrs.h>
++#include <netdb.h>
++#include <stddef.h>
++#include <string.h>
++#include <time.h>
++#include <unistd.h>
++#include <sys/socket.h>
++
++#include <asm/types.h>
++#include <linux/netlink.h>
++#include <linux/rtnetlink.h>
++
++#include <not-cancel.h>
++#include <kernel-features.h>
++
++
++#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 <sysdeps/unix/sysv/linux/check_pf.c>
+
diff --git a/meta/packages/glibc/glibc-2.10.1/ldd-unbash.patch b/meta/packages/glibc/glibc-2.10.1/ldd-unbash.patch
new file mode 100644 (file)
index 0000000..2fb8854
--- /dev/null
@@ -0,0 +1,11 @@
+--- glibc-2.5/elf/ldd.bash.in.org      2006-04-30 16:06:20.000000000 +0000
++++ glibc-2.5/elf/ldd.bash.in  2007-03-30 19:18:57.000000000 +0000
+@@ -110,7 +110,7 @@
+ # environments where the executed program might not have permissions
+ # to write to the console/tty.  But only bash 3.x supports the pipefail
+ # option, and we don't bother to handle the case for older bash versions.
+-if set -o pipefail 2> /dev/null; then
++if false; then
+   try_trace() {
+     eval $add_env '"$@"' | cat
+   }
diff --git a/meta/packages/glibc/glibc-2.10.1/ldsocache-varrun.patch b/meta/packages/glibc/glibc-2.10.1/ldsocache-varrun.patch
new file mode 100644 (file)
index 0000000..9994d4f
--- /dev/null
@@ -0,0 +1,18 @@
+This patch moves ld.so.cache from /etc to /var/run. This is for devices
+where /etc is JFFS2 or CRAMFS but /var is a ramdisk.
+
+#
+# Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher
+#
+
+--- libc/sysdeps/generic/dl-cache.h~ldsocache-varrun
++++ libc/sysdeps/generic/dl-cache.h
+@@ -29,7 +29,7 @@
+ #endif
+ #ifndef LD_SO_CACHE
+-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache"
++# define LD_SO_CACHE "/var/run/ld.so.cache"
+ #endif
+ #ifndef add_system_dir
diff --git a/meta/packages/glibc/glibc-2.10.1/nptl-crosscompile.patch b/meta/packages/glibc/glibc-2.10.1/nptl-crosscompile.patch
new file mode 100644 (file)
index 0000000..18a46ad
--- /dev/null
@@ -0,0 +1,26 @@
+--- glibc-2.4/nptl/sysdeps/pthread/configure.in.ark    2006-03-12 00:41:40.000000000 +0100
++++ glibc-2.4/nptl/sysdeps/pthread/configure.in        2006-03-12 00:44:08.000000000 +0100
+@@ -45,5 +45,6 @@
+     AC_MSG_ERROR([the compiler must support C cleanup handling])
+   fi
+ else
+-  AC_MSG_ERROR(forced unwind support is required)
++  AC_MSG_WARN([forced unwind support is required, can't be verified while crosscompiling])
++  AC_DEFINE(HAVE_FORCED_UNWIND)
+ fi
+--- glibc-2.4/nptl/sysdeps/pthread/configure.ark       2006-03-12 00:42:47.000000000 +0100
++++ glibc-2.4/nptl/sysdeps/pthread/configure   2006-03-12 00:44:08.000000000 +0100
+@@ -153,7 +153,10 @@
+    { (exit 1); exit 1; }; }
+   fi
+ else
+-  { { echo "$as_me:$LINENO: error: forced unwind support is required" >&5
+-echo "$as_me: error: forced unwind support is required" >&2;}
+-   { (exit 1); exit 1; }; }
++  { echo "$as_me:$LINENO: WARNING: forced unwind support is required, can't be verified while crosscompiling" >&5
++echo "$as_me: WARNING: forced unwind support is required, can't be verified while crosscompiling" >&2;}
++  cat >>confdefs.h <<\_ACEOF
++#define HAVE_FORCED_UNWIND 1
++_ACEOF
++
+ fi
diff --git a/meta/packages/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff b/meta/packages/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
new file mode 100644 (file)
index 0000000..1046efb
--- /dev/null
@@ -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 <sysdep.h>
+ #include <ldsodefs.h>
++#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 <sysdep.h>
+ #include <ldsodefs.h>
++#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 };