All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir
@ 2010-07-15 20:46 Frans Meulenbroeks
  2010-07-15 20:46 ` [PATCH 2/3] glibc 2.10.1: " Frans Meulenbroeks
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Frans Meulenbroeks @ 2010-07-15 20:46 UTC (permalink / raw)
  To: openembedded-devel

moved all patches to glibc-2.9
removed references to other dirs.

Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
---
 recipes/glibc/glibc-2.9/arm-longlong.patch         |   58 ++
 .../glibc-2.9/arm-lowlevellock-include-tls.patch   |   12 +
 recipes/glibc/glibc-2.9/arm-memcpy.patch           |  758 ++++++++++++++++++++
 recipes/glibc/glibc-2.9/dl-cache-libcmp.patch      |   10 +
 recipes/glibc/glibc-2.9/fhs-linux-paths.patch      |   11 +
 recipes/glibc/glibc-2.9/generate-supported.mk      |   11 +
 recipes/glibc/glibc-2.9/generic-bits_select.h      |   35 +
 recipes/glibc/glibc-2.9/generic-bits_time.h        |   75 ++
 recipes/glibc/glibc-2.9/generic-bits_types.h       |  200 +++++
 recipes/glibc/glibc-2.9/generic-bits_typesizes.h   |   66 ++
 .../glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff   |   13 +
 recipes/glibc/glibc-2.9/glibc-check_pf.patch       |  343 +++++++++
 recipes/glibc/glibc-2.9/ldd-unbash.patch           |   11 +
 recipes/glibc/glibc-2.9/ldsocache-varrun.patch     |   18 +
 recipes/glibc/glibc-2.9/march-i686.patch           |   38 +
 recipes/glibc/glibc-2.9/no-z-defs.patch            |    9 +
 recipes/glibc/glibc-2.9/nptl-crosscompile.patch    |   26 +
 recipes/glibc/glibc-2.9/nscd-init.patch            |   39 +
 recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff     |   25 +
 recipes/glibc/glibc-2.9/tls_i486.patch             |   14 +
 recipes/glibc/glibc_2.9.bb                         |    3 -
 21 files changed, 1772 insertions(+), 3 deletions(-)
 create mode 100644 recipes/glibc/glibc-2.9/arm-longlong.patch
 create mode 100644 recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch
 create mode 100644 recipes/glibc/glibc-2.9/arm-memcpy.patch
 create mode 100644 recipes/glibc/glibc-2.9/dl-cache-libcmp.patch
 create mode 100644 recipes/glibc/glibc-2.9/fhs-linux-paths.patch
 create mode 100644 recipes/glibc/glibc-2.9/generate-supported.mk
 create mode 100644 recipes/glibc/glibc-2.9/generic-bits_select.h
 create mode 100644 recipes/glibc/glibc-2.9/generic-bits_time.h
 create mode 100644 recipes/glibc/glibc-2.9/generic-bits_types.h
 create mode 100644 recipes/glibc/glibc-2.9/generic-bits_typesizes.h
 create mode 100644 recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff
 create mode 100644 recipes/glibc/glibc-2.9/glibc-check_pf.patch
 create mode 100644 recipes/glibc/glibc-2.9/ldd-unbash.patch
 create mode 100644 recipes/glibc/glibc-2.9/ldsocache-varrun.patch
 create mode 100644 recipes/glibc/glibc-2.9/march-i686.patch
 create mode 100644 recipes/glibc/glibc-2.9/no-z-defs.patch
 create mode 100644 recipes/glibc/glibc-2.9/nptl-crosscompile.patch
 create mode 100644 recipes/glibc/glibc-2.9/nscd-init.patch
 create mode 100644 recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff
 create mode 100644 recipes/glibc/glibc-2.9/tls_i486.patch

diff --git a/recipes/glibc/glibc-2.9/arm-longlong.patch b/recipes/glibc/glibc-2.9/arm-longlong.patch
new file mode 100644
index 0000000..28aca83
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/arm-longlong.patch
@@ -0,0 +1,58 @@
+--- glibc-2.4/stdlib/longlong.h.ark	2006-03-11 22:49:27.000000000 +0100
++++ glibc-2.4/stdlib/longlong.h	2006-03-11 22:55:12.000000000 +0100
+@@ -206,6 +206,14 @@
+ 	     "rI" ((USItype) (bh)),					\
+ 	     "r" ((USItype) (al)),					\
+ 	     "rI" ((USItype) (bl)) __CLOBBER_CC)
++/* v3m and all higher arches have long multiply support.  */
++#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
++#define umul_ppmm(xh, xl, a, b) \
++  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
++#define UMUL_TIME 5
++#define smul_ppmm(xh, xl, a, b) \
++  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
++#else							   
+ #define umul_ppmm(xh, xl, a, b) \
+ {register USItype __t0, __t1, __t2;					\
+   __asm__ ("%@ Inlined umul_ppmm\n"					\
+@@ -227,7 +235,13 @@
+ 	   : "r" ((USItype) (a)),					\
+ 	     "r" ((USItype) (b)) __CLOBBER_CC );}
+ #define UMUL_TIME 20
++#endif
+ #define UDIV_TIME 100
++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
++#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
++#define COUNT_LEADING_ZEROS_0 32
++#endif
++							   
+ #endif /* __arm__ */
+ 
+ #if defined (__hppa) && W_TYPE_SIZE == 32
+--- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark	2006-03-11 22:56:43.000000000 +0100
++++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c	2006-03-11 22:58:19.000000000 +0100
+@@ -0,0 +1,24 @@
++/* __clz_tab -- support for longlong.h
++   Copyright (C) 2004 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.  */
++
++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
++/* Nothing required.  */
++#else
++#include <stdlib/mp_clz_tab.c>
++#endif
diff --git a/recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch b/recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch
new file mode 100644
index 0000000..5c8062e
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch
@@ -0,0 +1,12 @@
+Index: glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+===================================================================
+--- glibc-2.9.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h	2009-06-19 20:54:35.446686910 +0400
++++ glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h	2009-06-19 20:54:43.774683370 +0400
+@@ -25,6 +25,7 @@
+ #include <atomic.h>
+ #include <sysdep.h>
+ #include <kernel-features.h>
++#include <tls.h>
+ 
+ #define FUTEX_WAIT		0
+ #define FUTEX_WAKE		1
diff --git a/recipes/glibc/glibc-2.9/arm-memcpy.patch b/recipes/glibc/glibc-2.9/arm-memcpy.patch
new file mode 100644
index 0000000..bc2b3da
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/arm-memcpy.patch
@@ -0,0 +1,758 @@
+--- /dev/null	2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/memmove.S	2004-03-20 18:37:23.000000000 +0000
+@@ -0,0 +1,251 @@
++/*
++ *   Optimized memmove implementation for ARM processors
++ *
++ *	Author: 	Nicolas Pitre
++ *	Created:	Dec 23, 2003
++ *	Copyright:	(C) MontaVista Software, Inc.
++ *
++ *   This file 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.
++ *
++ *   This file 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.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)	code
++#else
++#define PLD(code...)
++#endif
++
++
++/* char * memmove (char *dst, const char *src) */
++ENTRY(memmove)
++		subs	ip, r0, r1
++		cmphi	r2, ip
++		bls	memcpy(PLT)
++
++		stmfd	sp!, {r0, r4, lr}
++		add	r1, r1, r2
++		add	r0, r0, r2
++		subs	r2, r2, #4
++		blt	25f
++		ands	ip, r0, #3
++	PLD(	pld	[r1, #-4]		)
++		bne	26f
++		ands	ip, r1, #3
++		bne	27f
++
++19:		subs	r2, r2, #4
++		blt	24f
++		subs	r2, r2, #8
++		blt	23f
++		subs	r2, r2, #16
++		blt	22f
++
++	PLD(	pld	[r1, #-32]		)
++	PLD(	subs	r2, r2, #96		)
++		stmfd	sp!, {r5 - r8}
++	PLD(	blt	21f			)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, r1, #31		)
++	PLD(	pld	[r1, #-64]		)
++	PLD(	beq	20f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #-96]		)
++	PLD(	blt	20f			)
++	PLD(	cmp	ip, #16			)
++	PLD(	sub	r2, r2, ip		)
++	PLD(	ldmgedb	r1!, {r3 - r6}		)
++	PLD(	stmgedb	r0!, {r3 - r6}		)
++	PLD(	beq	20f			)
++	PLD(	and	ip, ip, #15		)
++	PLD(	cmp	ip, #8			)
++	PLD(	ldr	r3, [r1, #-4]!		)
++	PLD(	ldrge	r4, [r1, #-4]!		)
++	PLD(	ldrgt	r5, [r1, #-4]!		)
++	PLD(	str	r3, [r0, #-4]!		)
++	PLD(	strge	r4, [r0, #-4]!		)
++	PLD(	strgt	r5, [r0, #-4]!		)
++
++20:	PLD(	pld	[r1, #-96]		)
++	PLD(	pld	[r1, #-128]		)
++21:		ldmdb	r1!, {r3, r4, ip, lr}
++		subs	r2, r2, #32
++		stmdb	r0!, {r3, r4, ip, lr}
++		ldmdb	r1!, {r3, r4, ip, lr}
++		stmgedb	r0!, {r3, r4, ip, lr}
++		ldmgedb	r1!, {r3, r4, ip, lr}
++		stmgedb	r0!, {r3, r4, ip, lr}
++		ldmgedb	r1!, {r3, r4, ip, lr}
++		subges	r2, r2, #32
++		stmdb	r0!, {r3, r4, ip, lr}
++		bge	20b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	21b			)
++	PLD(	add	r2, r2, #96		)
++		tst	r2, #31
++		ldmfd	sp!, {r5 - r8}
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		tst	r2, #16
++22:		ldmnedb	r1!, {r3, r4, ip, lr}
++		stmnedb	r0!, {r3, r4, ip, lr}
++
++		tst	r2, #8
++23:		ldmnedb	r1!, {r3, r4}
++		stmnedb	r0!, {r3, r4}
++
++		tst	r2, #4
++24:		ldrne	r3, [r1, #-4]!
++		strne	r3, [r0, #-4]!
++
++25:		ands	r2, r2, #3
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		cmp	r2, #2
++		ldrb	r3, [r1, #-1]
++		ldrgeb	r4, [r1, #-2]
++		ldrgtb	ip, [r1, #-3]
++		strb	r3, [r0, #-1]
++		strgeb	r4, [r0, #-2]
++		strgtb	ip, [r0, #-3]
++		ldmfd	sp!, {r0, r4, pc}
++
++26:		cmp	ip, #2
++		ldrb	r3, [r1, #-1]!
++		ldrgeb	r4, [r1, #-1]!
++		ldrgtb	lr, [r1, #-1]!
++		strb	r3, [r0, #-1]!
++		strgeb	r4, [r0, #-1]!
++		strgtb	lr, [r0, #-1]!
++		subs	r2, r2, ip
++		blt	25b
++		ands	ip, r1, #3
++		beq	19b
++
++27:		bic	r1, r1, #3
++		cmp	ip, #2
++		ldr	r3, [r1]
++		beq	35f
++		blt	36f
++
++
++		.macro	backward_copy_shift push pull
++
++		cmp	r2, #12
++	PLD(	pld	[r1, #-4]		)
++		blt	33f
++		subs	r2, r2, #28
++		stmfd	sp!, {r5 - r9}
++		blt	31f
++
++	PLD(	subs	r2, r2, #96		)
++	PLD(	pld	[r1, #-32]		)
++	PLD(	blt	30f			)
++	PLD(	pld	[r1, #-64]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, r1, #31		)
++	PLD(	pld	[r1, #-96]		)
++	PLD(	beq	29f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #-128]		)
++	PLD(	blt	29f			)
++	PLD(	sub	r2, r2, ip		)
++28:	PLD(	mov	r4, r3, push #\push	)
++	PLD(	ldr	r3, [r1, #-4]!		)
++	PLD(	subs	ip, ip, #4		)
++	PLD(	orr	r4, r4, r3, pull #\pull	)
++	PLD(	str	r4, [r0, #-4]!		)
++	PLD(	bgt	28b			)
++
++29:	PLD(	pld	[r1, #-128]		)
++30:		mov	lr, r3, push #\push
++		ldmdb	r1!, {r3 - r9, ip}
++		subs	r2, r2, #32
++		orr	lr, lr, ip, pull #\pull
++		mov	ip, ip, push #\push
++		orr	ip, ip, r9, pull #\pull
++		mov	r9, r9, push #\push
++		orr	r9, r9, r8, pull #\pull
++		mov	r8, r8, push #\push
++		orr	r8, r8, r7, pull #\pull
++		mov	r7, r7, push #\push
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	r0!, {r4 - r9, ip, lr}
++		bge	29b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	30b			)
++	PLD(	add	r2, r2, #96		)
++		cmn	r2, #16
++		blt	32f
++31:		mov	r7, r3, push #\push
++		ldmdb	r1!, {r3 - r6}
++		sub	r2, r2, #16
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	r0!, {r4 - r7}
++32:		adds	r2, r2, #28
++		ldmfd	sp!, {r5 - r9}
++		blt	34f
++33:		mov	r4, r3, push #\push
++		ldr	r3, [r1, #-4]!
++		subs	r2, r2, #4
++		orr	r4, r4, r3, pull #\pull
++		str	r4, [r0, #-4]!
++		bge	33b
++34:
++		.endm
++
++
++		backward_copy_shift	push=8	pull=24
++		add	r1, r1, #3
++		b	25b
++
++35:		backward_copy_shift	push=16	pull=16
++		add	r1, r1, #2
++		b	25b
++
++36:		backward_copy_shift	push=24	pull=8
++		add	r1, r1, #1
++		b	25b
++
++		.size	memmove, . - memmove
++END(memmove)
++libc_hidden_builtin_def (memmove)
+--- /dev/null	2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/bcopy.S	2004-03-20 18:37:48.000000000 +0000
+@@ -0,0 +1,255 @@
++/*
++ *   Optimized memmove implementation for ARM processors
++ *
++ *	Author: 	Nicolas Pitre
++ *	Created:	Dec 23, 2003
++ *	Copyright:	(C) MontaVista Software, Inc.
++ *
++ *   This file 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.
++ *
++ *   This file 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.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)	code
++#else
++#define PLD(code...)
++#endif
++
++dst		.req	r1
++src		.req	r0
++
++/* void *bcopy (const char *src, char *dst, size_t size) */
++ENTRY(bcopy)
++		subs	ip, dst, src
++		cmphi	r2, ip
++		movls	r3, r0
++		movls	r0, r1
++		movls	r1, r3
++		bls	memcpy(PLT)
++
++		stmfd	sp!, {r4, lr}
++		add	src, src, r2
++		add	dst, dst, r2
++		subs	r2, r2, #4
++		blt	25f
++		ands	ip, dst, #3
++	PLD(	pld	[src, #-4]		)
++		bne	26f
++		ands	ip, src, #3
++		bne	27f
++
++19:		subs	r2, r2, #4
++		blt	24f
++		subs	r2, r2, #8
++		blt	23f
++		subs	r2, r2, #16
++		blt	22f
++
++	PLD(	pld	[src, #-32]		)
++	PLD(	subs	r2, r2, #96		)
++		stmfd	sp!, {r5 - r8}
++	PLD(	blt	21f			)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, src, #31		)
++	PLD(	pld	[src, #-64]		)
++	PLD(	beq	20f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[src, #-96]		)
++	PLD(	blt	20f			)
++	PLD(	cmp	ip, #16			)
++	PLD(	sub	r2, r2, ip		)
++	PLD(	ldmgedb	src!, {r3 - r6}		)
++	PLD(	stmgedb	dst!, {r3 - r6}		)
++	PLD(	beq	20f			)
++	PLD(	and	ip, ip, #15		)
++	PLD(	cmp	ip, #8			)
++	PLD(	ldr	r3, [src, #-4]!		)
++	PLD(	ldrge	r4, [src, #-4]!		)
++	PLD(	ldrgt	r5, [src, #-4]!		)
++	PLD(	str	r3, [dst, #-4]!		)
++	PLD(	strge	r4, [dst, #-4]!		)
++	PLD(	strgt	r5, [dst, #-4]!		)
++
++20:	PLD(	pld	[src, #-96]		)
++	PLD(	pld	[src, #-128]		)
++21:		ldmdb	src!, {r3, r4, ip, lr}
++		subs	r2, r2, #32
++		stmdb	dst!, {r3, r4, ip, lr}
++		ldmdb	src!, {r3, r4, ip, lr}
++		stmgedb	dst!, {r3, r4, ip, lr}
++		ldmgedb	src!, {r3, r4, ip, lr}
++		stmgedb	dst!, {r3, r4, ip, lr}
++		ldmgedb	src!, {r3, r4, ip, lr}
++		subges	r2, r2, #32
++		stmdb	dst!, {r3, r4, ip, lr}
++		bge	20b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	21b			)
++	PLD(	add	r2, r2, #96		)
++		tst	r2, #31
++		ldmfd	sp!, {r5 - r8}
++		ldmeqfd	sp!, {r4, pc}
++
++		tst	r2, #16
++22:		ldmnedb	src!, {r3, r4, ip, lr}
++		stmnedb	dst!, {r3, r4, ip, lr}
++
++		tst	r2, #8
++23:		ldmnedb	src!, {r3, r4}
++		stmnedb	dst!, {r3, r4}
++
++		tst	r2, #4
++24:		ldrne	r3, [src, #-4]!
++		strne	r3, [dst, #-4]!
++
++25:		ands	r2, r2, #3
++		ldmeqfd	sp!, {dst, r4, pc}
++
++		cmp	r2, #2
++		ldrb	r3, [src, #-1]
++		ldrgeb	r4, [src, #-2]
++		ldrgtb	ip, [src, #-3]
++		strb	r3, [dst, #-1]
++		strgeb	r4, [dst, #-2]
++		strgtb	ip, [dst, #-3]
++		ldmfd	sp!, {dst, r4, pc}
++
++26:		cmp	ip, #2
++		ldrb	r3, [src, #-1]!
++		ldrgeb	r4, [src, #-1]!
++		ldrgtb	lr, [src, #-1]!
++		strb	r3, [dst, #-1]!
++		strgeb	r4, [dst, #-1]!
++		strgtb	lr, [dst, #-1]!
++		subs	r2, r2, ip
++		blt	25b
++		ands	ip, src, #3
++		beq	19b
++
++27:		bic	src, src, #3
++		cmp	ip, #2
++		ldr	r3, [src]
++		beq	35f
++		blt	36f
++
++
++		.macro	backward_copy_shift push pull
++
++		cmp	r2, #12
++	PLD(	pld	[src, #-4]		)
++		blt	33f
++		subs	r2, r2, #28
++		stmfd	sp!, {r5 - r9}
++		blt	31f
++
++	PLD(	subs	r2, r2, #96		)
++	PLD(	pld	[src, #-32]		)
++	PLD(	blt	30f			)
++	PLD(	pld	[src, #-64]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, src, #31		)
++	PLD(	pld	[src, #-96]		)
++	PLD(	beq	29f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[src, #-128]		)
++	PLD(	blt	29f			)
++	PLD(	sub	r2, r2, ip		)
++28:	PLD(	mov	r4, r3, push #\push	)
++	PLD(	ldr	r3, [src, #-4]!		)
++	PLD(	subs	ip, ip, #4		)
++	PLD(	orr	r4, r4, r3, pull #\pull	)
++	PLD(	str	r4, [dst, #-4]!		)
++	PLD(	bgt	28b			)
++
++29:	PLD(	pld	[src, #-128]		)
++30:		mov	lr, r3, push #\push
++		ldmdb	src!, {r3 - r9, ip}
++		subs	r2, r2, #32
++		orr	lr, lr, ip, pull #\pull
++		mov	ip, ip, push #\push
++		orr	ip, ip, r9, pull #\pull
++		mov	r9, r9, push #\push
++		orr	r9, r9, r8, pull #\pull
++		mov	r8, r8, push #\push
++		orr	r8, r8, r7, pull #\pull
++		mov	r7, r7, push #\push
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	dst!, {r4 - r9, ip, lr}
++		bge	29b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	30b			)
++	PLD(	add	r2, r2, #96		)
++		cmn	r2, #16
++		blt	32f
++31:		mov	r7, r3, push #\push
++		ldmdb	src!, {r3 - r6}
++		sub	r2, r2, #16
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	dst!, {r4 - r7}
++32:		adds	r2, r2, #28
++		ldmfd	sp!, {r5 - r9}
++		blt	34f
++33:		mov	r4, r3, push #\push
++		ldr	r3, [src, #-4]!
++		subs	r2, r2, #4
++		orr	r4, r4, r3, pull #\pull
++		str	r4, [dst, #-4]!
++		bge	33b
++34:
++		.endm
++
++
++		backward_copy_shift	push=8	pull=24
++		add	src, src, #3
++		b	25b
++
++35:		backward_copy_shift	push=16	pull=16
++		add	src, src, #2
++		b	25b
++
++36:		backward_copy_shift	push=24	pull=8
++		add	src, src, #1
++		b	25b
++
++		.size	bcopy, . - bcopy
++END(bcopy)
+
+--- /dev/null	2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/memcpy.S	2004-05-02 14:33:22.000000000 +0100
+@@ -0,0 +1,242 @@
++/*
++ *   Optimized memcpy implementation for ARM processors
++ *
++ *	Author: 	Nicolas Pitre
++ *	Created:	Dec 23, 2003
++ *	Copyright:	(C) MontaVista Software, Inc.
++ *
++ *   This file 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.
++ *
++ *   This file 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.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)	code
++#else
++#define PLD(code...)
++#endif
++
++
++/* char * memcpy (char *dst, const char *src) */
++
++ENTRY(memcpy)
++		subs	r2, r2, #4
++		stmfd	sp!, {r0, r4, lr}
++		blt	7f
++		ands	ip, r0, #3
++	PLD(	pld	[r1, #0]		)
++		bne	8f
++		ands	ip, r1, #3
++		bne	9f
++
++1:		subs	r2, r2, #4
++		blt	6f
++		subs	r2, r2, #8
++		blt	5f
++		subs	r2, r2, #16
++		blt	4f
++
++	PLD(	subs	r2, r2, #65		)
++		stmfd	sp!, {r5 - r8}
++	PLD(	blt	3f			)
++	PLD(	pld	[r1, #32]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, r1, #31		)
++	PLD(	pld	[r1, #64]		)
++	PLD(	beq	2f			)
++	PLD(	rsb	ip, ip, #32		)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #96]		)
++	PLD(	blt	2f			)
++	PLD(	cmp	ip, #16			)
++	PLD(	sub	r2, r2, ip		)
++	PLD(	ldmgeia	r1!, {r3 - r6}		)
++	PLD(	stmgeia	r0!, {r3 - r6}		)
++	PLD(	beq	2f			)
++	PLD(	and	ip, ip, #15		)
++	PLD(	cmp	ip, #8			)
++	PLD(	ldr	r3, [r1], #4		)
++	PLD(	ldrge	r4, [r1], #4		)
++	PLD(	ldrgt	r5, [r1], #4		)
++	PLD(	str	r3, [r0], #4		)
++	PLD(	strge	r4, [r0], #4		)
++	PLD(	strgt	r5, [r0], #4		)
++
++2:	PLD(	pld	[r1, #96]		)
++3:		ldmia	r1!, {r3 - r8, ip, lr}
++		subs	r2, r2, #32
++		stmia	r0!, {r3 - r8, ip, lr}
++		bge	2b
++	PLD(	cmn	r2, #65			)
++	PLD(	bge	3b			)
++	PLD(	add	r2, r2, #65		)
++		tst	r2, #31
++		ldmfd	sp!, {r5 - r8}
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		tst	r2, #16
++4:		ldmneia	r1!, {r3, r4, ip, lr}
++		stmneia	r0!, {r3, r4, ip, lr}
++
++		tst	r2, #8
++5:		ldmneia	r1!, {r3, r4}
++		stmneia	r0!, {r3, r4}
++
++		tst	r2, #4
++6:		ldrne	r3, [r1], #4
++		strne	r3, [r0], #4
++
++7:		ands	r2, r2, #3
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		cmp	r2, #2
++		ldrb	r3, [r1], #1
++		ldrgeb	r4, [r1], #1
++		ldrgtb	ip, [r1]
++		strb	r3, [r0], #1
++		strgeb	r4, [r0], #1
++		strgtb	ip, [r0]
++		ldmfd	sp!, {r0, r4, pc}
++
++8:		rsb	ip, ip, #4
++		cmp	ip, #2
++		ldrb	r3, [r1], #1
++		ldrgeb	r4, [r1], #1
++		ldrgtb	lr, [r1], #1
++		strb	r3, [r0], #1
++		strgeb	r4, [r0], #1
++		strgtb	lr, [r0], #1
++		subs	r2, r2, ip
++		blt	7b
++		ands	ip, r1, #3
++		beq	1b
++
++9:		bic	r1, r1, #3
++		cmp	ip, #2
++		ldr	lr, [r1], #4
++		beq	17f
++		bgt	18f
++
++
++		.macro	forward_copy_shift pull push
++
++		cmp	r2, #12
++	PLD(	pld	[r1, #0]		)
++		blt	15f
++		subs	r2, r2, #28
++		stmfd	sp!, {r5 - r9}
++		blt	13f
++
++	PLD(	subs	r2, r2, #97		)
++	PLD(	blt	12f			)
++	PLD(	pld	[r1, #32]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	rsb	ip, r1, #36		)
++	PLD(	pld	[r1, #64]		)
++	PLD(	ands	ip, ip, #31		)
++	PLD(	pld	[r1, #96]		)
++	PLD(	beq	11f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #128]		)
++	PLD(	blt	11f			)
++	PLD(	sub	r2, r2, ip		)
++10:	PLD(	mov	r3, lr, pull #\pull	)
++	PLD(	ldr	lr, [r1], #4		)
++	PLD(	subs	ip, ip, #4		)
++	PLD(	orr	r3, r3, lr, push #\push	)
++	PLD(	str	r3, [r0], #4		)
++	PLD(	bgt	10b			)
++
++11:	PLD(	pld	[r1, #128]		)
++12:		mov	r3, lr, pull #\pull
++		ldmia	r1!, {r4 - r9, ip, lr}
++		subs	r2, r2, #32
++		orr	r3, r3, r4, push #\push
++		mov	r4, r4, pull #\pull
++		orr	r4, r4, r5, push #\push
++		mov	r5, r5, pull #\pull
++		orr	r5, r5, r6, push #\push
++		mov	r6, r6, pull #\pull
++		orr	r6, r6, r7, push #\push
++		mov	r7, r7, pull #\pull
++		orr	r7, r7, r8, push #\push
++		mov	r8, r8, pull #\pull
++		orr	r8, r8, r9, push #\push
++		mov	r9, r9, pull #\pull
++		orr	r9, r9, ip, push #\push
++		mov	ip, ip, pull #\pull
++		orr	ip, ip, lr, push #\push
++		stmia	r0!, {r3 - r9, ip}
++		bge	11b
++	PLD(	cmn	r2, #97			)
++	PLD(	bge	12b			)
++	PLD(	add	r2, r2, #97		)
++		cmn	r2, #16
++		blt	14f
++13:		mov	r3, lr, pull #\pull
++		ldmia	r1!, {r4 - r6, lr}
++		sub	r2, r2, #16
++		orr	r3, r3, r4, push #\push
++		mov	r4, r4, pull #\pull
++		orr	r4, r4, r5, push #\push
++		mov	r5, r5, pull #\pull
++		orr	r5, r5, r6, push #\push
++		mov	r6, r6, pull #\pull
++		orr	r6, r6, lr, push #\push
++		stmia	r0!, {r3 - r6}
++14:		adds	r2, r2, #28
++		ldmfd	sp!, {r5 - r9}
++		blt	16f
++15:		mov	r3, lr, pull #\pull
++		ldr	lr, [r1], #4
++		subs	r2, r2, #4
++		orr	r3, r3, lr, push #\push
++		str	r3, [r0], #4
++		bge	15b
++16:
++		.endm
++
++
++		forward_copy_shift	pull=8	push=24
++		sub	r1, r1, #3
++		b	7b
++
++17:		forward_copy_shift	pull=16	push=16
++		sub	r1, r1, #2
++		b	7b
++
++18:		forward_copy_shift	pull=24	push=8
++		sub	r1, r1, #1
++		b	7b
++
++		.size	memcpy, . - memcpy
++END(memcpy)
++libc_hidden_builtin_def (memcpy)
++
diff --git a/recipes/glibc/glibc-2.9/dl-cache-libcmp.patch b/recipes/glibc/glibc-2.9/dl-cache-libcmp.patch
new file mode 100644
index 0000000..2fedfa6
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/dl-cache-libcmp.patch
@@ -0,0 +1,10 @@
+--- glibc-2.4/elf/Versions.ark	2006-03-11 23:30:09.000000000 +0100
++++ glibc-2.4/elf/Versions	2006-03-11 23:31:44.000000000 +0100
+@@ -63,5 +63,7 @@
+     _dl_debug_state;
+     # Pointer protection.
+     __pointer_chk_guard;
++    # for ldconfig
++    _dl_cache_libcmp;
+   }
+ }
diff --git a/recipes/glibc/glibc-2.9/fhs-linux-paths.patch b/recipes/glibc/glibc-2.9/fhs-linux-paths.patch
new file mode 100644
index 0000000..1f32f6d
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/fhs-linux-paths.patch
@@ -0,0 +1,11 @@
+--- glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h~	Thu May 27 13:16:33 1999
++++ glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h	Thu May 27 13:17:55 1999
+@@ -71,7 +71,7 @@
+ /* Provide trailing slash, since mostly used for building pathnames. */
+ #define	_PATH_DEV	"/dev/"
+ #define	_PATH_TMP	"/tmp/"
+-#define	_PATH_VARDB	"/var/db/"
++#define	_PATH_VARDB	"/var/lib/misc/"
+ #define	_PATH_VARRUN	"/var/run/"
+ #define	_PATH_VARTMP	"/var/tmp/"
+ 
diff --git a/recipes/glibc/glibc-2.9/generate-supported.mk b/recipes/glibc/glibc-2.9/generate-supported.mk
new file mode 100644
index 0000000..d2a28c2
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/generate-supported.mk
@@ -0,0 +1,11 @@
+#!/usr/bin/make
+
+include $(IN)
+
+all:
+	rm -f $(OUT)
+	touch $(OUT)
+	for locale in $(SUPPORTED-LOCALES); do \
+		[ $$locale = true ] && continue; \
+		echo $$locale | sed 's,/, ,' >> $(OUT); \
+	done
diff --git a/recipes/glibc/glibc-2.9/generic-bits_select.h b/recipes/glibc/glibc-2.9/generic-bits_select.h
new file mode 100644
index 0000000..47e7ded
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/generic-bits_select.h
@@ -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/recipes/glibc/glibc-2.9/generic-bits_time.h b/recipes/glibc/glibc-2.9/generic-bits_time.h
new file mode 100644
index 0000000..b3184d1
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/generic-bits_time.h
@@ -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/recipes/glibc/glibc-2.9/generic-bits_types.h b/recipes/glibc/glibc-2.9/generic-bits_types.h
new file mode 100644
index 0000000..65c8a9f
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/generic-bits_types.h
@@ -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/recipes/glibc/glibc-2.9/generic-bits_typesizes.h b/recipes/glibc/glibc-2.9/generic-bits_typesizes.h
new file mode 100644
index 0000000..e9226c4
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/generic-bits_typesizes.h
@@ -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/recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff b/recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff
new file mode 100644
index 0000000..a552cf0
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff
@@ -0,0 +1,13 @@
+Arm needs a similar fix as http://sourceware.org/ml/libc-ports/2007-12/msg00000.html
+
+--- /tmp/stdio-lock.h	2008-03-04 18:51:15.555038993 +0100
++++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/bits/stdio-lock.h	2008-03-04 18:51:28.445035052 +0100
+@@ -50,6 +50,8 @@
+   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp));      \
+   _IO_flockfile (_fp)
+ 
++# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
++
+ # define _IO_release_lock(_fp) \
+   _IO_funlockfile (_fp);						      \
+   _IO_cleanup_region_end (0)
diff --git a/recipes/glibc/glibc-2.9/glibc-check_pf.patch b/recipes/glibc/glibc-2.9/glibc-check_pf.patch
new file mode 100644
index 0000000..3cff6bb
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/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: <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/recipes/glibc/glibc-2.9/ldd-unbash.patch b/recipes/glibc/glibc-2.9/ldd-unbash.patch
new file mode 100644
index 0000000..2fb8854
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/ldd-unbash.patch
@@ -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/recipes/glibc/glibc-2.9/ldsocache-varrun.patch b/recipes/glibc/glibc-2.9/ldsocache-varrun.patch
new file mode 100644
index 0000000..9994d4f
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/ldsocache-varrun.patch
@@ -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/recipes/glibc/glibc-2.9/march-i686.patch b/recipes/glibc/glibc-2.9/march-i686.patch
new file mode 100644
index 0000000..0461603
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/march-i686.patch
@@ -0,0 +1,38 @@
+2007-02-15  Khem Raj  <kraj@xxxxxxxxxx>
+
+       * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
+       * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
+
+
+
+Index: sysdeps/unix/sysv/linux/i386/sysdep.h
+===================================================================
+--- sysdeps/unix/sysv/linux/i386/sysdep.h	(revision 1469)
++++ sysdeps/unix/sysv/linux/i386/sysdep.h	(working copy)
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+ 
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+ 
+ /* For Linux we can use the system call table in the header file
+ 	/usr/include/asm/unistd.h
+Index: nptl/sysdeps/pthread/pt-initfini.c
+===================================================================
+--- nptl/sysdeps/pthread/pt-initfini.c	(revision 1469)
++++ nptl/sysdeps/pthread/pt-initfini.c	(working copy)
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+ 
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+ 
diff --git a/recipes/glibc/glibc-2.9/no-z-defs.patch b/recipes/glibc/glibc-2.9/no-z-defs.patch
new file mode 100644
index 0000000..48c6a41
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/no-z-defs.patch
@@ -0,0 +1,9 @@
+Create a configparms file which disabled no-z-defs.
+This is required to build a working glibs for sh4,
+without there will be a lot linker errors during the build.
+
+diff -duNr libc.orig/configparms libc/configparms
+--- libc.orig/configparms	1970-01-01 10:00:00.000000000 +1000
++++ libc/configparms	2006-02-23 14:08:18.000000000 +1100
+@@ -0,0 +1 @@
++no-z-defs=yes
diff --git a/recipes/glibc/glibc-2.9/nptl-crosscompile.patch b/recipes/glibc/glibc-2.9/nptl-crosscompile.patch
new file mode 100644
index 0000000..18a46ad
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/nptl-crosscompile.patch
@@ -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/recipes/glibc/glibc-2.9/nscd-init.patch b/recipes/glibc/glibc-2.9/nscd-init.patch
new file mode 100644
index 0000000..884609a
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/nscd-init.patch
@@ -0,0 +1,39 @@
+--- nscd/nscd.init
++++ nscd/nscd.init
+@@ -48,9 +48,8 @@
+ 
+ start () {
+     [ -d /var/run/nscd ] || mkdir /var/run/nscd
+-    [ -d /var/db/nscd ] || mkdir /var/db/nscd
+     echo -n $"Starting $prog: "
+-    daemon /usr/sbin/nscd
++    /usr/sbin/nscd
+     RETVAL=$?
+     echo
+     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
+@@ -67,12 +66,10 @@
+ 	# a non-privileged user
+ 	rm -f /var/run/nscd/nscd.pid
+ 	rm -f /var/run/nscd/socket
+-       	success $"$prog shutdown"
+-    else
+-       	failure $"$prog shutdown"
+     fi
+-    echo
+-    return $RETVAL
++    echo "Done."
++    # If nscd did not run, return 0 according to LSB.
++    return 0
+ }
+ 
+ restart() {
+@@ -104,7 +101,8 @@
+ 	;;
+     force-reload | reload)
+     	echo -n $"Reloading $prog: "
+-	killproc /usr/sbin/nscd -HUP
++	# Use killall, initscripts-1.0-r115 don't support -HUP yet.
++	killall -HUP /usr/sbin/nscd
+ 	RETVAL=$?
+ 	echo
+ 	;;
diff --git a/recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff b/recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff
new file mode 100644
index 0000000..1046efb
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/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 <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 };
diff --git a/recipes/glibc/glibc-2.9/tls_i486.patch b/recipes/glibc/glibc-2.9/tls_i486.patch
new file mode 100644
index 0000000..69a1fdf
--- /dev/null
+++ b/recipes/glibc/glibc-2.9/tls_i486.patch
@@ -0,0 +1,14 @@
+Index: glibc-2.9/sysdeps/i386/dl-tlsdesc.S
+===================================================================
+--- glibc-2.9.orig/sysdeps/i386/dl-tlsdesc.S	2009-07-07 23:21:11.647664128 +0200
++++ glibc-2.9/sysdeps/i386/dl-tlsdesc.S	2009-07-07 23:21:32.802555992 +0200
+@@ -128,8 +128,7 @@
+ .Lslow:
+ 	cfi_adjust_cfa_offset (28)
+ 	movl	%ebx, 16(%esp)
+-	call	__i686.get_pc_thunk.bx
+-	addl	$_GLOBAL_OFFSET_TABLE_, %ebx
++	LOAD_PIC_REG (bx)
+ 	call	___tls_get_addr@PLT
+ 	movl	16(%esp), %ebx
+ 	jmp	.Lret
diff --git a/recipes/glibc/glibc_2.9.bb b/recipes/glibc/glibc_2.9.bb
index e7ab63d..33326f3 100644
--- a/recipes/glibc/glibc_2.9.bb
+++ b/recipes/glibc/glibc_2.9.bb
@@ -11,9 +11,6 @@ PR = "${INC_PR}.3"
 BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
 TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
 
-
-FILESPATHPKG =. "glibc-2.4:"
-
 GLIBC_ADDONS ?= "ports,nptl,libidn"
 
 GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
-- 
1.6.4.2




^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local dir
  2010-07-15 20:46 [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir Frans Meulenbroeks
@ 2010-07-15 20:46 ` Frans Meulenbroeks
  2010-07-15 20:46   ` [PATCH 3/3] glibc: remove old/obsolete versions Frans Meulenbroeks
  2010-07-15 21:50   ` [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local dir Khem Raj
  2010-07-15 21:49 ` [PATCH 1/3] glibc 2.9: " Khem Raj
  2010-07-17  7:56 ` Khem Raj
  2 siblings, 2 replies; 9+ messages in thread
From: Frans Meulenbroeks @ 2010-07-15 20:46 UTC (permalink / raw)
  To: openembedded-devel

moved all patches to glibc-2.10.1
removed references to other dirs.

Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
---
 recipes/glibc/glibc-2.10.1/arm-longlong.patch      |   58 ++
 .../arm-lowlevellock-include-tls.patch             |   12 +
 recipes/glibc/glibc-2.10.1/arm-memcpy.patch        |  758 ++++++++++++++++++++
 .../glibc/glibc-2.10.1/armv4t-interworking.patch   |   47 ++
 recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch   |   10 +
 recipes/glibc/glibc-2.10.1/etc/ld.so.conf          |    2 +
 recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch   |   11 +
 recipes/glibc/glibc-2.10.1/generate-supported.mk   |   11 +
 recipes/glibc/glibc-2.10.1/generic-bits_select.h   |   35 +
 recipes/glibc/glibc-2.10.1/generic-bits_time.h     |   75 ++
 recipes/glibc/glibc-2.10.1/generic-bits_types.h    |  200 +++++
 .../glibc/glibc-2.10.1/generic-bits_typesizes.h    |   66 ++
 .../glibc-arm-IO-acquire-lock-fix.diff             |   13 +
 recipes/glibc/glibc-2.10.1/glibc-check_pf.patch    |  343 +++++++++
 recipes/glibc/glibc-2.10.1/ldd-unbash.patch        |   11 +
 recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch  |   18 +
 recipes/glibc/glibc-2.10.1/march-i686.patch        |   38 +
 recipes/glibc/glibc-2.10.1/no-z-defs.patch         |    9 +
 recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch |   26 +
 recipes/glibc/glibc-2.10.1/nscd-init.patch         |   39 +
 recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff  |   25 +
 recipes/glibc/glibc_2.10.1.bb                      |    3 -
 22 files changed, 1807 insertions(+), 3 deletions(-)
 create mode 100644 recipes/glibc/glibc-2.10.1/arm-longlong.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/arm-memcpy.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/etc/ld.so.conf
 create mode 100644 recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/generate-supported.mk
 create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_select.h
 create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_time.h
 create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_types.h
 create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
 create mode 100644 recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
 create mode 100644 recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/ldd-unbash.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/march-i686.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/no-z-defs.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/nscd-init.patch
 create mode 100644 recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff

diff --git a/recipes/glibc/glibc-2.10.1/arm-longlong.patch b/recipes/glibc/glibc-2.10.1/arm-longlong.patch
new file mode 100644
index 0000000..28aca83
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/arm-longlong.patch
@@ -0,0 +1,58 @@
+--- glibc-2.4/stdlib/longlong.h.ark	2006-03-11 22:49:27.000000000 +0100
++++ glibc-2.4/stdlib/longlong.h	2006-03-11 22:55:12.000000000 +0100
+@@ -206,6 +206,14 @@
+ 	     "rI" ((USItype) (bh)),					\
+ 	     "r" ((USItype) (al)),					\
+ 	     "rI" ((USItype) (bl)) __CLOBBER_CC)
++/* v3m and all higher arches have long multiply support.  */
++#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
++#define umul_ppmm(xh, xl, a, b) \
++  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
++#define UMUL_TIME 5
++#define smul_ppmm(xh, xl, a, b) \
++  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
++#else							   
+ #define umul_ppmm(xh, xl, a, b) \
+ {register USItype __t0, __t1, __t2;					\
+   __asm__ ("%@ Inlined umul_ppmm\n"					\
+@@ -227,7 +235,13 @@
+ 	   : "r" ((USItype) (a)),					\
+ 	     "r" ((USItype) (b)) __CLOBBER_CC );}
+ #define UMUL_TIME 20
++#endif
+ #define UDIV_TIME 100
++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
++#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
++#define COUNT_LEADING_ZEROS_0 32
++#endif
++							   
+ #endif /* __arm__ */
+ 
+ #if defined (__hppa) && W_TYPE_SIZE == 32
+--- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark	2006-03-11 22:56:43.000000000 +0100
++++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c	2006-03-11 22:58:19.000000000 +0100
+@@ -0,0 +1,24 @@
++/* __clz_tab -- support for longlong.h
++   Copyright (C) 2004 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.  */
++
++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
++/* Nothing required.  */
++#else
++#include <stdlib/mp_clz_tab.c>
++#endif
diff --git a/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch b/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
new file mode 100644
index 0000000..5c8062e
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
@@ -0,0 +1,12 @@
+Index: glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+===================================================================
+--- glibc-2.9.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h	2009-06-19 20:54:35.446686910 +0400
++++ glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h	2009-06-19 20:54:43.774683370 +0400
+@@ -25,6 +25,7 @@
+ #include <atomic.h>
+ #include <sysdep.h>
+ #include <kernel-features.h>
++#include <tls.h>
+ 
+ #define FUTEX_WAIT		0
+ #define FUTEX_WAKE		1
diff --git a/recipes/glibc/glibc-2.10.1/arm-memcpy.patch b/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
new file mode 100644
index 0000000..bc2b3da
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
@@ -0,0 +1,758 @@
+--- /dev/null	2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/memmove.S	2004-03-20 18:37:23.000000000 +0000
+@@ -0,0 +1,251 @@
++/*
++ *   Optimized memmove implementation for ARM processors
++ *
++ *	Author: 	Nicolas Pitre
++ *	Created:	Dec 23, 2003
++ *	Copyright:	(C) MontaVista Software, Inc.
++ *
++ *   This file 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.
++ *
++ *   This file 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.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)	code
++#else
++#define PLD(code...)
++#endif
++
++
++/* char * memmove (char *dst, const char *src) */
++ENTRY(memmove)
++		subs	ip, r0, r1
++		cmphi	r2, ip
++		bls	memcpy(PLT)
++
++		stmfd	sp!, {r0, r4, lr}
++		add	r1, r1, r2
++		add	r0, r0, r2
++		subs	r2, r2, #4
++		blt	25f
++		ands	ip, r0, #3
++	PLD(	pld	[r1, #-4]		)
++		bne	26f
++		ands	ip, r1, #3
++		bne	27f
++
++19:		subs	r2, r2, #4
++		blt	24f
++		subs	r2, r2, #8
++		blt	23f
++		subs	r2, r2, #16
++		blt	22f
++
++	PLD(	pld	[r1, #-32]		)
++	PLD(	subs	r2, r2, #96		)
++		stmfd	sp!, {r5 - r8}
++	PLD(	blt	21f			)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, r1, #31		)
++	PLD(	pld	[r1, #-64]		)
++	PLD(	beq	20f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #-96]		)
++	PLD(	blt	20f			)
++	PLD(	cmp	ip, #16			)
++	PLD(	sub	r2, r2, ip		)
++	PLD(	ldmgedb	r1!, {r3 - r6}		)
++	PLD(	stmgedb	r0!, {r3 - r6}		)
++	PLD(	beq	20f			)
++	PLD(	and	ip, ip, #15		)
++	PLD(	cmp	ip, #8			)
++	PLD(	ldr	r3, [r1, #-4]!		)
++	PLD(	ldrge	r4, [r1, #-4]!		)
++	PLD(	ldrgt	r5, [r1, #-4]!		)
++	PLD(	str	r3, [r0, #-4]!		)
++	PLD(	strge	r4, [r0, #-4]!		)
++	PLD(	strgt	r5, [r0, #-4]!		)
++
++20:	PLD(	pld	[r1, #-96]		)
++	PLD(	pld	[r1, #-128]		)
++21:		ldmdb	r1!, {r3, r4, ip, lr}
++		subs	r2, r2, #32
++		stmdb	r0!, {r3, r4, ip, lr}
++		ldmdb	r1!, {r3, r4, ip, lr}
++		stmgedb	r0!, {r3, r4, ip, lr}
++		ldmgedb	r1!, {r3, r4, ip, lr}
++		stmgedb	r0!, {r3, r4, ip, lr}
++		ldmgedb	r1!, {r3, r4, ip, lr}
++		subges	r2, r2, #32
++		stmdb	r0!, {r3, r4, ip, lr}
++		bge	20b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	21b			)
++	PLD(	add	r2, r2, #96		)
++		tst	r2, #31
++		ldmfd	sp!, {r5 - r8}
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		tst	r2, #16
++22:		ldmnedb	r1!, {r3, r4, ip, lr}
++		stmnedb	r0!, {r3, r4, ip, lr}
++
++		tst	r2, #8
++23:		ldmnedb	r1!, {r3, r4}
++		stmnedb	r0!, {r3, r4}
++
++		tst	r2, #4
++24:		ldrne	r3, [r1, #-4]!
++		strne	r3, [r0, #-4]!
++
++25:		ands	r2, r2, #3
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		cmp	r2, #2
++		ldrb	r3, [r1, #-1]
++		ldrgeb	r4, [r1, #-2]
++		ldrgtb	ip, [r1, #-3]
++		strb	r3, [r0, #-1]
++		strgeb	r4, [r0, #-2]
++		strgtb	ip, [r0, #-3]
++		ldmfd	sp!, {r0, r4, pc}
++
++26:		cmp	ip, #2
++		ldrb	r3, [r1, #-1]!
++		ldrgeb	r4, [r1, #-1]!
++		ldrgtb	lr, [r1, #-1]!
++		strb	r3, [r0, #-1]!
++		strgeb	r4, [r0, #-1]!
++		strgtb	lr, [r0, #-1]!
++		subs	r2, r2, ip
++		blt	25b
++		ands	ip, r1, #3
++		beq	19b
++
++27:		bic	r1, r1, #3
++		cmp	ip, #2
++		ldr	r3, [r1]
++		beq	35f
++		blt	36f
++
++
++		.macro	backward_copy_shift push pull
++
++		cmp	r2, #12
++	PLD(	pld	[r1, #-4]		)
++		blt	33f
++		subs	r2, r2, #28
++		stmfd	sp!, {r5 - r9}
++		blt	31f
++
++	PLD(	subs	r2, r2, #96		)
++	PLD(	pld	[r1, #-32]		)
++	PLD(	blt	30f			)
++	PLD(	pld	[r1, #-64]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, r1, #31		)
++	PLD(	pld	[r1, #-96]		)
++	PLD(	beq	29f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #-128]		)
++	PLD(	blt	29f			)
++	PLD(	sub	r2, r2, ip		)
++28:	PLD(	mov	r4, r3, push #\push	)
++	PLD(	ldr	r3, [r1, #-4]!		)
++	PLD(	subs	ip, ip, #4		)
++	PLD(	orr	r4, r4, r3, pull #\pull	)
++	PLD(	str	r4, [r0, #-4]!		)
++	PLD(	bgt	28b			)
++
++29:	PLD(	pld	[r1, #-128]		)
++30:		mov	lr, r3, push #\push
++		ldmdb	r1!, {r3 - r9, ip}
++		subs	r2, r2, #32
++		orr	lr, lr, ip, pull #\pull
++		mov	ip, ip, push #\push
++		orr	ip, ip, r9, pull #\pull
++		mov	r9, r9, push #\push
++		orr	r9, r9, r8, pull #\pull
++		mov	r8, r8, push #\push
++		orr	r8, r8, r7, pull #\pull
++		mov	r7, r7, push #\push
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	r0!, {r4 - r9, ip, lr}
++		bge	29b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	30b			)
++	PLD(	add	r2, r2, #96		)
++		cmn	r2, #16
++		blt	32f
++31:		mov	r7, r3, push #\push
++		ldmdb	r1!, {r3 - r6}
++		sub	r2, r2, #16
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	r0!, {r4 - r7}
++32:		adds	r2, r2, #28
++		ldmfd	sp!, {r5 - r9}
++		blt	34f
++33:		mov	r4, r3, push #\push
++		ldr	r3, [r1, #-4]!
++		subs	r2, r2, #4
++		orr	r4, r4, r3, pull #\pull
++		str	r4, [r0, #-4]!
++		bge	33b
++34:
++		.endm
++
++
++		backward_copy_shift	push=8	pull=24
++		add	r1, r1, #3
++		b	25b
++
++35:		backward_copy_shift	push=16	pull=16
++		add	r1, r1, #2
++		b	25b
++
++36:		backward_copy_shift	push=24	pull=8
++		add	r1, r1, #1
++		b	25b
++
++		.size	memmove, . - memmove
++END(memmove)
++libc_hidden_builtin_def (memmove)
+--- /dev/null	2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/bcopy.S	2004-03-20 18:37:48.000000000 +0000
+@@ -0,0 +1,255 @@
++/*
++ *   Optimized memmove implementation for ARM processors
++ *
++ *	Author: 	Nicolas Pitre
++ *	Created:	Dec 23, 2003
++ *	Copyright:	(C) MontaVista Software, Inc.
++ *
++ *   This file 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.
++ *
++ *   This file 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.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)	code
++#else
++#define PLD(code...)
++#endif
++
++dst		.req	r1
++src		.req	r0
++
++/* void *bcopy (const char *src, char *dst, size_t size) */
++ENTRY(bcopy)
++		subs	ip, dst, src
++		cmphi	r2, ip
++		movls	r3, r0
++		movls	r0, r1
++		movls	r1, r3
++		bls	memcpy(PLT)
++
++		stmfd	sp!, {r4, lr}
++		add	src, src, r2
++		add	dst, dst, r2
++		subs	r2, r2, #4
++		blt	25f
++		ands	ip, dst, #3
++	PLD(	pld	[src, #-4]		)
++		bne	26f
++		ands	ip, src, #3
++		bne	27f
++
++19:		subs	r2, r2, #4
++		blt	24f
++		subs	r2, r2, #8
++		blt	23f
++		subs	r2, r2, #16
++		blt	22f
++
++	PLD(	pld	[src, #-32]		)
++	PLD(	subs	r2, r2, #96		)
++		stmfd	sp!, {r5 - r8}
++	PLD(	blt	21f			)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, src, #31		)
++	PLD(	pld	[src, #-64]		)
++	PLD(	beq	20f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[src, #-96]		)
++	PLD(	blt	20f			)
++	PLD(	cmp	ip, #16			)
++	PLD(	sub	r2, r2, ip		)
++	PLD(	ldmgedb	src!, {r3 - r6}		)
++	PLD(	stmgedb	dst!, {r3 - r6}		)
++	PLD(	beq	20f			)
++	PLD(	and	ip, ip, #15		)
++	PLD(	cmp	ip, #8			)
++	PLD(	ldr	r3, [src, #-4]!		)
++	PLD(	ldrge	r4, [src, #-4]!		)
++	PLD(	ldrgt	r5, [src, #-4]!		)
++	PLD(	str	r3, [dst, #-4]!		)
++	PLD(	strge	r4, [dst, #-4]!		)
++	PLD(	strgt	r5, [dst, #-4]!		)
++
++20:	PLD(	pld	[src, #-96]		)
++	PLD(	pld	[src, #-128]		)
++21:		ldmdb	src!, {r3, r4, ip, lr}
++		subs	r2, r2, #32
++		stmdb	dst!, {r3, r4, ip, lr}
++		ldmdb	src!, {r3, r4, ip, lr}
++		stmgedb	dst!, {r3, r4, ip, lr}
++		ldmgedb	src!, {r3, r4, ip, lr}
++		stmgedb	dst!, {r3, r4, ip, lr}
++		ldmgedb	src!, {r3, r4, ip, lr}
++		subges	r2, r2, #32
++		stmdb	dst!, {r3, r4, ip, lr}
++		bge	20b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	21b			)
++	PLD(	add	r2, r2, #96		)
++		tst	r2, #31
++		ldmfd	sp!, {r5 - r8}
++		ldmeqfd	sp!, {r4, pc}
++
++		tst	r2, #16
++22:		ldmnedb	src!, {r3, r4, ip, lr}
++		stmnedb	dst!, {r3, r4, ip, lr}
++
++		tst	r2, #8
++23:		ldmnedb	src!, {r3, r4}
++		stmnedb	dst!, {r3, r4}
++
++		tst	r2, #4
++24:		ldrne	r3, [src, #-4]!
++		strne	r3, [dst, #-4]!
++
++25:		ands	r2, r2, #3
++		ldmeqfd	sp!, {dst, r4, pc}
++
++		cmp	r2, #2
++		ldrb	r3, [src, #-1]
++		ldrgeb	r4, [src, #-2]
++		ldrgtb	ip, [src, #-3]
++		strb	r3, [dst, #-1]
++		strgeb	r4, [dst, #-2]
++		strgtb	ip, [dst, #-3]
++		ldmfd	sp!, {dst, r4, pc}
++
++26:		cmp	ip, #2
++		ldrb	r3, [src, #-1]!
++		ldrgeb	r4, [src, #-1]!
++		ldrgtb	lr, [src, #-1]!
++		strb	r3, [dst, #-1]!
++		strgeb	r4, [dst, #-1]!
++		strgtb	lr, [dst, #-1]!
++		subs	r2, r2, ip
++		blt	25b
++		ands	ip, src, #3
++		beq	19b
++
++27:		bic	src, src, #3
++		cmp	ip, #2
++		ldr	r3, [src]
++		beq	35f
++		blt	36f
++
++
++		.macro	backward_copy_shift push pull
++
++		cmp	r2, #12
++	PLD(	pld	[src, #-4]		)
++		blt	33f
++		subs	r2, r2, #28
++		stmfd	sp!, {r5 - r9}
++		blt	31f
++
++	PLD(	subs	r2, r2, #96		)
++	PLD(	pld	[src, #-32]		)
++	PLD(	blt	30f			)
++	PLD(	pld	[src, #-64]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, src, #31		)
++	PLD(	pld	[src, #-96]		)
++	PLD(	beq	29f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[src, #-128]		)
++	PLD(	blt	29f			)
++	PLD(	sub	r2, r2, ip		)
++28:	PLD(	mov	r4, r3, push #\push	)
++	PLD(	ldr	r3, [src, #-4]!		)
++	PLD(	subs	ip, ip, #4		)
++	PLD(	orr	r4, r4, r3, pull #\pull	)
++	PLD(	str	r4, [dst, #-4]!		)
++	PLD(	bgt	28b			)
++
++29:	PLD(	pld	[src, #-128]		)
++30:		mov	lr, r3, push #\push
++		ldmdb	src!, {r3 - r9, ip}
++		subs	r2, r2, #32
++		orr	lr, lr, ip, pull #\pull
++		mov	ip, ip, push #\push
++		orr	ip, ip, r9, pull #\pull
++		mov	r9, r9, push #\push
++		orr	r9, r9, r8, pull #\pull
++		mov	r8, r8, push #\push
++		orr	r8, r8, r7, pull #\pull
++		mov	r7, r7, push #\push
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	dst!, {r4 - r9, ip, lr}
++		bge	29b
++	PLD(	cmn	r2, #96			)
++	PLD(	bge	30b			)
++	PLD(	add	r2, r2, #96		)
++		cmn	r2, #16
++		blt	32f
++31:		mov	r7, r3, push #\push
++		ldmdb	src!, {r3 - r6}
++		sub	r2, r2, #16
++		orr	r7, r7, r6, pull #\pull
++		mov	r6, r6, push #\push
++		orr	r6, r6, r5, pull #\pull
++		mov	r5, r5, push #\push
++		orr	r5, r5, r4, pull #\pull
++		mov	r4, r4, push #\push
++		orr	r4, r4, r3, pull #\pull
++		stmdb	dst!, {r4 - r7}
++32:		adds	r2, r2, #28
++		ldmfd	sp!, {r5 - r9}
++		blt	34f
++33:		mov	r4, r3, push #\push
++		ldr	r3, [src, #-4]!
++		subs	r2, r2, #4
++		orr	r4, r4, r3, pull #\pull
++		str	r4, [dst, #-4]!
++		bge	33b
++34:
++		.endm
++
++
++		backward_copy_shift	push=8	pull=24
++		add	src, src, #3
++		b	25b
++
++35:		backward_copy_shift	push=16	pull=16
++		add	src, src, #2
++		b	25b
++
++36:		backward_copy_shift	push=24	pull=8
++		add	src, src, #1
++		b	25b
++
++		.size	bcopy, . - bcopy
++END(bcopy)
+
+--- /dev/null	2004-02-02 20:32:13.000000000 +0000
++++ sysdeps/arm/memcpy.S	2004-05-02 14:33:22.000000000 +0100
+@@ -0,0 +1,242 @@
++/*
++ *   Optimized memcpy implementation for ARM processors
++ *
++ *	Author: 	Nicolas Pitre
++ *	Created:	Dec 23, 2003
++ *	Copyright:	(C) MontaVista Software, Inc.
++ *
++ *   This file 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.
++ *
++ *   This file 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.
++ */
++
++#include <sysdep.h>
++
++
++/*
++ * Endian independent macros for shifting bytes within registers.
++ */
++#ifndef __ARMEB__
++#define pull            lsr
++#define push            lsl
++#else
++#define pull            lsl
++#define push            lsr
++#endif
++
++/*
++ * Enable data preload for architectures that support it (ARMv5 and above)
++ */
++#if defined(__ARM_ARCH_5__) || \
++    defined(__ARM_ARCH_5T__) || \
++    defined(__ARM_ARCH_5TE__)
++#define PLD(code...)	code
++#else
++#define PLD(code...)
++#endif
++
++
++/* char * memcpy (char *dst, const char *src) */
++
++ENTRY(memcpy)
++		subs	r2, r2, #4
++		stmfd	sp!, {r0, r4, lr}
++		blt	7f
++		ands	ip, r0, #3
++	PLD(	pld	[r1, #0]		)
++		bne	8f
++		ands	ip, r1, #3
++		bne	9f
++
++1:		subs	r2, r2, #4
++		blt	6f
++		subs	r2, r2, #8
++		blt	5f
++		subs	r2, r2, #16
++		blt	4f
++
++	PLD(	subs	r2, r2, #65		)
++		stmfd	sp!, {r5 - r8}
++	PLD(	blt	3f			)
++	PLD(	pld	[r1, #32]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	ands	ip, r1, #31		)
++	PLD(	pld	[r1, #64]		)
++	PLD(	beq	2f			)
++	PLD(	rsb	ip, ip, #32		)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #96]		)
++	PLD(	blt	2f			)
++	PLD(	cmp	ip, #16			)
++	PLD(	sub	r2, r2, ip		)
++	PLD(	ldmgeia	r1!, {r3 - r6}		)
++	PLD(	stmgeia	r0!, {r3 - r6}		)
++	PLD(	beq	2f			)
++	PLD(	and	ip, ip, #15		)
++	PLD(	cmp	ip, #8			)
++	PLD(	ldr	r3, [r1], #4		)
++	PLD(	ldrge	r4, [r1], #4		)
++	PLD(	ldrgt	r5, [r1], #4		)
++	PLD(	str	r3, [r0], #4		)
++	PLD(	strge	r4, [r0], #4		)
++	PLD(	strgt	r5, [r0], #4		)
++
++2:	PLD(	pld	[r1, #96]		)
++3:		ldmia	r1!, {r3 - r8, ip, lr}
++		subs	r2, r2, #32
++		stmia	r0!, {r3 - r8, ip, lr}
++		bge	2b
++	PLD(	cmn	r2, #65			)
++	PLD(	bge	3b			)
++	PLD(	add	r2, r2, #65		)
++		tst	r2, #31
++		ldmfd	sp!, {r5 - r8}
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		tst	r2, #16
++4:		ldmneia	r1!, {r3, r4, ip, lr}
++		stmneia	r0!, {r3, r4, ip, lr}
++
++		tst	r2, #8
++5:		ldmneia	r1!, {r3, r4}
++		stmneia	r0!, {r3, r4}
++
++		tst	r2, #4
++6:		ldrne	r3, [r1], #4
++		strne	r3, [r0], #4
++
++7:		ands	r2, r2, #3
++		ldmeqfd	sp!, {r0, r4, pc}
++
++		cmp	r2, #2
++		ldrb	r3, [r1], #1
++		ldrgeb	r4, [r1], #1
++		ldrgtb	ip, [r1]
++		strb	r3, [r0], #1
++		strgeb	r4, [r0], #1
++		strgtb	ip, [r0]
++		ldmfd	sp!, {r0, r4, pc}
++
++8:		rsb	ip, ip, #4
++		cmp	ip, #2
++		ldrb	r3, [r1], #1
++		ldrgeb	r4, [r1], #1
++		ldrgtb	lr, [r1], #1
++		strb	r3, [r0], #1
++		strgeb	r4, [r0], #1
++		strgtb	lr, [r0], #1
++		subs	r2, r2, ip
++		blt	7b
++		ands	ip, r1, #3
++		beq	1b
++
++9:		bic	r1, r1, #3
++		cmp	ip, #2
++		ldr	lr, [r1], #4
++		beq	17f
++		bgt	18f
++
++
++		.macro	forward_copy_shift pull push
++
++		cmp	r2, #12
++	PLD(	pld	[r1, #0]		)
++		blt	15f
++		subs	r2, r2, #28
++		stmfd	sp!, {r5 - r9}
++		blt	13f
++
++	PLD(	subs	r2, r2, #97		)
++	PLD(	blt	12f			)
++	PLD(	pld	[r1, #32]		)
++
++	PLD(	@ cache alignment		)
++	PLD(	rsb	ip, r1, #36		)
++	PLD(	pld	[r1, #64]		)
++	PLD(	ands	ip, ip, #31		)
++	PLD(	pld	[r1, #96]		)
++	PLD(	beq	11f			)
++	PLD(	cmp	r2, ip			)
++	PLD(	pld	[r1, #128]		)
++	PLD(	blt	11f			)
++	PLD(	sub	r2, r2, ip		)
++10:	PLD(	mov	r3, lr, pull #\pull	)
++	PLD(	ldr	lr, [r1], #4		)
++	PLD(	subs	ip, ip, #4		)
++	PLD(	orr	r3, r3, lr, push #\push	)
++	PLD(	str	r3, [r0], #4		)
++	PLD(	bgt	10b			)
++
++11:	PLD(	pld	[r1, #128]		)
++12:		mov	r3, lr, pull #\pull
++		ldmia	r1!, {r4 - r9, ip, lr}
++		subs	r2, r2, #32
++		orr	r3, r3, r4, push #\push
++		mov	r4, r4, pull #\pull
++		orr	r4, r4, r5, push #\push
++		mov	r5, r5, pull #\pull
++		orr	r5, r5, r6, push #\push
++		mov	r6, r6, pull #\pull
++		orr	r6, r6, r7, push #\push
++		mov	r7, r7, pull #\pull
++		orr	r7, r7, r8, push #\push
++		mov	r8, r8, pull #\pull
++		orr	r8, r8, r9, push #\push
++		mov	r9, r9, pull #\pull
++		orr	r9, r9, ip, push #\push
++		mov	ip, ip, pull #\pull
++		orr	ip, ip, lr, push #\push
++		stmia	r0!, {r3 - r9, ip}
++		bge	11b
++	PLD(	cmn	r2, #97			)
++	PLD(	bge	12b			)
++	PLD(	add	r2, r2, #97		)
++		cmn	r2, #16
++		blt	14f
++13:		mov	r3, lr, pull #\pull
++		ldmia	r1!, {r4 - r6, lr}
++		sub	r2, r2, #16
++		orr	r3, r3, r4, push #\push
++		mov	r4, r4, pull #\pull
++		orr	r4, r4, r5, push #\push
++		mov	r5, r5, pull #\pull
++		orr	r5, r5, r6, push #\push
++		mov	r6, r6, pull #\pull
++		orr	r6, r6, lr, push #\push
++		stmia	r0!, {r3 - r6}
++14:		adds	r2, r2, #28
++		ldmfd	sp!, {r5 - r9}
++		blt	16f
++15:		mov	r3, lr, pull #\pull
++		ldr	lr, [r1], #4
++		subs	r2, r2, #4
++		orr	r3, r3, lr, push #\push
++		str	r3, [r0], #4
++		bge	15b
++16:
++		.endm
++
++
++		forward_copy_shift	pull=8	push=24
++		sub	r1, r1, #3
++		b	7b
++
++17:		forward_copy_shift	pull=16	push=16
++		sub	r1, r1, #2
++		b	7b
++
++18:		forward_copy_shift	pull=24	push=8
++		sub	r1, r1, #1
++		b	7b
++
++		.size	memcpy, . - memcpy
++END(memcpy)
++libc_hidden_builtin_def (memcpy)
++
diff --git a/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch b/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
new file mode 100644
index 0000000..ce91ad6
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
@@ -0,0 +1,47 @@
+--- libc/ports/sysdeps/arm/memcpy.S~	2006-10-31 17:07:54.000000000 +0000
++++ libc/ports/sysdeps/arm/memcpy.S	2008-10-24 11:09:34.000000000 +0100
+@@ -130,7 +130,12 @@
+ 		strcsb	r4, [r0], #1
+ 		strcsb	ip, [r0]
+ 
++#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
++		ldmfd	sp!, {r0, r4, lr}
++                bx      lr
++#else
+ 		ldmfd	sp!, {r0, r4, pc}
++#endif
+ 
+ 9:		rsb	ip, ip, #4
+ 		cmp	ip, #2
+--- libc/ports/sysdeps/arm/memmove.S~	2006-10-31 17:07:54.000000000 +0000
++++ libc/ports/sysdeps/arm/memmove.S	2008-10-24 11:09:44.000000000 +0100
+@@ -140,7 +140,12 @@
+ 		strneb	r3, [r0, #-1]!
+ 		strcsb	r4, [r0, #-1]!
+ 		strcsb	ip, [r0, #-1]
++#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
++		ldmfd	sp!, {r0, r4, lr}
++                bx      lr
++#else
+ 		ldmfd	sp!, {r0, r4, pc}
++#endif
+ 
+ 9:		cmp	ip, #2
+ 		ldrgtb	r3, [r1, #-1]!
+--- libc/ports/sysdeps/unix/sysv/linux/arm/clone.S~	2005-11-16 19:03:42.000000000 +0000
++++ libc/ports/sysdeps/unix/sysv/linux/arm/clone.S	2008-10-24 11:11:05.000000000 +0100
+@@ -96,8 +96,14 @@
+ #endif
+ 	@ pick the function arg and call address off the stack and execute
+ 	ldr	r0, [sp, #4]
++#if defined(__ARM_ARCH_V4T__) && defined(__THUMB_INTERWORK__)
++	ldr 	ip, [sp], #8
++	mov	lr, pc
++        bx      ip
++#else
+ 	mov	lr, pc
+ 	ldr 	pc, [sp], #8
++#endif
+ 
+ 	@ and we are done, passing the return value through r0
+ 	b	PLTJMP(_exit)
diff --git a/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch b/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
new file mode 100644
index 0000000..2fedfa6
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
@@ -0,0 +1,10 @@
+--- glibc-2.4/elf/Versions.ark	2006-03-11 23:30:09.000000000 +0100
++++ glibc-2.4/elf/Versions	2006-03-11 23:31:44.000000000 +0100
+@@ -63,5 +63,7 @@
+     _dl_debug_state;
+     # Pointer protection.
+     __pointer_chk_guard;
++    # for ldconfig
++    _dl_cache_libcmp;
+   }
+ }
diff --git a/recipes/glibc/glibc-2.10.1/etc/ld.so.conf b/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
new file mode 100644
index 0000000..46e06d3
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
@@ -0,0 +1,2 @@
+/usr/local/lib
+
diff --git a/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch b/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
new file mode 100644
index 0000000..1f32f6d
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
@@ -0,0 +1,11 @@
+--- glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h~	Thu May 27 13:16:33 1999
++++ glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h	Thu May 27 13:17:55 1999
+@@ -71,7 +71,7 @@
+ /* Provide trailing slash, since mostly used for building pathnames. */
+ #define	_PATH_DEV	"/dev/"
+ #define	_PATH_TMP	"/tmp/"
+-#define	_PATH_VARDB	"/var/db/"
++#define	_PATH_VARDB	"/var/lib/misc/"
+ #define	_PATH_VARRUN	"/var/run/"
+ #define	_PATH_VARTMP	"/var/tmp/"
+ 
diff --git a/recipes/glibc/glibc-2.10.1/generate-supported.mk b/recipes/glibc/glibc-2.10.1/generate-supported.mk
new file mode 100644
index 0000000..d2a28c2
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/generate-supported.mk
@@ -0,0 +1,11 @@
+#!/usr/bin/make
+
+include $(IN)
+
+all:
+	rm -f $(OUT)
+	touch $(OUT)
+	for locale in $(SUPPORTED-LOCALES); do \
+		[ $$locale = true ] && continue; \
+		echo $$locale | sed 's,/, ,' >> $(OUT); \
+	done
diff --git a/recipes/glibc/glibc-2.10.1/generic-bits_select.h b/recipes/glibc/glibc-2.10.1/generic-bits_select.h
new file mode 100644
index 0000000..47e7ded
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/generic-bits_select.h
@@ -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/recipes/glibc/glibc-2.10.1/generic-bits_time.h b/recipes/glibc/glibc-2.10.1/generic-bits_time.h
new file mode 100644
index 0000000..b3184d1
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/generic-bits_time.h
@@ -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/recipes/glibc/glibc-2.10.1/generic-bits_types.h b/recipes/glibc/glibc-2.10.1/generic-bits_types.h
new file mode 100644
index 0000000..65c8a9f
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/generic-bits_types.h
@@ -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/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h b/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
new file mode 100644
index 0000000..e9226c4
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
@@ -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/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff b/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
new file mode 100644
index 0000000..a552cf0
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
@@ -0,0 +1,13 @@
+Arm needs a similar fix as http://sourceware.org/ml/libc-ports/2007-12/msg00000.html
+
+--- /tmp/stdio-lock.h	2008-03-04 18:51:15.555038993 +0100
++++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/bits/stdio-lock.h	2008-03-04 18:51:28.445035052 +0100
+@@ -50,6 +50,8 @@
+   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp));      \
+   _IO_flockfile (_fp)
+ 
++# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
++
+ # define _IO_release_lock(_fp) \
+   _IO_funlockfile (_fp);						      \
+   _IO_cleanup_region_end (0)
diff --git a/recipes/glibc/glibc-2.10.1/glibc-check_pf.patch b/recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
new file mode 100644
index 0000000..3cff6bb
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/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: <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/recipes/glibc/glibc-2.10.1/ldd-unbash.patch b/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
new file mode 100644
index 0000000..2fb8854
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
@@ -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/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch b/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
new file mode 100644
index 0000000..9994d4f
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
@@ -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/recipes/glibc/glibc-2.10.1/march-i686.patch b/recipes/glibc/glibc-2.10.1/march-i686.patch
new file mode 100644
index 0000000..0461603
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/march-i686.patch
@@ -0,0 +1,38 @@
+2007-02-15  Khem Raj  <kraj@xxxxxxxxxx>
+
+       * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
+       * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
+
+
+
+Index: sysdeps/unix/sysv/linux/i386/sysdep.h
+===================================================================
+--- sysdeps/unix/sysv/linux/i386/sysdep.h	(revision 1469)
++++ sysdeps/unix/sysv/linux/i386/sysdep.h	(working copy)
+@@ -29,6 +29,10 @@
+ #include <dl-sysdep.h>
+ #include <tls.h>
+ 
++#if defined __i686 && defined __ASSEMBLER__
++#undef __i686
++#define __i686 __i686
++#endif
+ 
+ /* For Linux we can use the system call table in the header file
+ 	/usr/include/asm/unistd.h
+Index: nptl/sysdeps/pthread/pt-initfini.c
+===================================================================
+--- nptl/sysdeps/pthread/pt-initfini.c	(revision 1469)
++++ nptl/sysdeps/pthread/pt-initfini.c	(working copy)
+@@ -45,6 +45,11 @@
+ /* Embed an #include to pull in the alignment and .end directives. */
+ asm ("\n#include \"defs.h\"");
+ 
++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
++asm ("\n#undef __i686");
++asm ("\n#define __i686 __i686");
++asm ("\n#endif");
++
+ /* The initial common code ends here. */
+ asm ("\n/*@HEADER_ENDS*/");
+ 
diff --git a/recipes/glibc/glibc-2.10.1/no-z-defs.patch b/recipes/glibc/glibc-2.10.1/no-z-defs.patch
new file mode 100644
index 0000000..48c6a41
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/no-z-defs.patch
@@ -0,0 +1,9 @@
+Create a configparms file which disabled no-z-defs.
+This is required to build a working glibs for sh4,
+without there will be a lot linker errors during the build.
+
+diff -duNr libc.orig/configparms libc/configparms
+--- libc.orig/configparms	1970-01-01 10:00:00.000000000 +1000
++++ libc/configparms	2006-02-23 14:08:18.000000000 +1100
+@@ -0,0 +1 @@
++no-z-defs=yes
diff --git a/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch b/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
new file mode 100644
index 0000000..18a46ad
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
@@ -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/recipes/glibc/glibc-2.10.1/nscd-init.patch b/recipes/glibc/glibc-2.10.1/nscd-init.patch
new file mode 100644
index 0000000..884609a
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/nscd-init.patch
@@ -0,0 +1,39 @@
+--- nscd/nscd.init
++++ nscd/nscd.init
+@@ -48,9 +48,8 @@
+ 
+ start () {
+     [ -d /var/run/nscd ] || mkdir /var/run/nscd
+-    [ -d /var/db/nscd ] || mkdir /var/db/nscd
+     echo -n $"Starting $prog: "
+-    daemon /usr/sbin/nscd
++    /usr/sbin/nscd
+     RETVAL=$?
+     echo
+     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
+@@ -67,12 +66,10 @@
+ 	# a non-privileged user
+ 	rm -f /var/run/nscd/nscd.pid
+ 	rm -f /var/run/nscd/socket
+-       	success $"$prog shutdown"
+-    else
+-       	failure $"$prog shutdown"
+     fi
+-    echo
+-    return $RETVAL
++    echo "Done."
++    # If nscd did not run, return 0 according to LSB.
++    return 0
+ }
+ 
+ restart() {
+@@ -104,7 +101,8 @@
+ 	;;
+     force-reload | reload)
+     	echo -n $"Reloading $prog: "
+-	killproc /usr/sbin/nscd -HUP
++	# Use killall, initscripts-1.0-r115 don't support -HUP yet.
++	killall -HUP /usr/sbin/nscd
+ 	RETVAL=$?
+ 	echo
+ 	;;
diff --git a/recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff b/recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
new file mode 100644
index 0000000..1046efb
--- /dev/null
+++ b/recipes/glibc/glibc-2.10.1/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 <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 };
diff --git a/recipes/glibc/glibc_2.10.1.bb b/recipes/glibc/glibc_2.10.1.bb
index 3c2fce8..b29e36a 100644
--- a/recipes/glibc/glibc_2.10.1.bb
+++ b/recipes/glibc/glibc_2.10.1.bb
@@ -11,9 +11,6 @@ RPROVIDES_${PN}-dev = "libc6-dev virtual-libc-dev"
 BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
 TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
 
-
-FILESPATHPKG =. "glibc-2.4:"
-
 GLIBC_ADDONS ?= "ports,nptl,libidn"
 
 GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
-- 
1.6.4.2




^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 3/3] glibc: remove old/obsolete versions
  2010-07-15 20:46 ` [PATCH 2/3] glibc 2.10.1: " Frans Meulenbroeks
@ 2010-07-15 20:46   ` Frans Meulenbroeks
  2010-07-16  6:41     ` Graham Gower
  2010-07-15 21:50   ` [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local dir Khem Raj
  1 sibling, 1 reply; 9+ messages in thread
From: Frans Meulenbroeks @ 2010-07-15 20:46 UTC (permalink / raw)
  To: openembedded-devel

as mentioned before on the OE ML.
removing some old versions which are not pinned by any distro
and are fairly old:
glibc-initial_2.3.2+cvs20040726.bb
glibc-initial_2.3.6.bb
glibc-initial_2.4.bb
glibc-initial_2.7.bb
glibc_2.3.2+cvs20040726.bb
glibc_2.3.3+cvs20041128.bb
glibc_2.3.3+cvs20050221.bb
glibc_2.3.3+cvs20050420.bb
glibc_2.3.6.bb
glibc_2.4.bb
glibc_2.7.bb

Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
---
 recipes/glibc/glibc-2.3.6/etc/ld.so.conf           |    2 -
 ...-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch |   28 -
 ...ibc-2.3.6-bind-already-defined-on-powerpc.patch |   65 --
 ...hreads-allow-gcc-4.1-powerpc32-initfini.s.patch |   28 -
 .../glibc-2.3.6-linuxthreads-pthread-raise.patch   |   37 -
 .../glibc-2.3.6/glibc-arm-socket-weakalias.patch   |   45 --
 recipes/glibc/glibc-2.3.6/glibc-cross_sunrpc.patch |   79 --
 recipes/glibc/glibc-2.3.6/glibc-memusage.patch     |   44 --
 .../glibc/glibc-2.3.6/glibc-rtld-libcc-eh.patch    |   25 -
 .../glibc-2.3.6/late-install-loop-break.patch      |   29 -
 recipes/glibc/glibc-2.4/arm-longlong.patch         |   58 --
 recipes/glibc/glibc-2.4/arm-memcpy.patch           |  758 --------------------
 recipes/glibc/glibc-2.4/arm_eabi_ipc_fix.patch     |   94 ---
 recipes/glibc/glibc-2.4/dl-cache-libcmp.patch      |   10 -
 .../glibc/glibc-2.4/dyn-ldconfig-20041128.patch    |   22 -
 recipes/glibc/glibc-2.4/dyn-ldconfig.patch         |   62 --
 recipes/glibc/glibc-2.4/etc/ld.so.conf             |    2 -
 recipes/glibc/glibc-2.4/fixup-aeabi-syscalls.patch |  329 ---------
 recipes/glibc/glibc-2.4/generic-bits_select.h      |   35 -
 recipes/glibc/glibc-2.4/generic-bits_time.h        |   75 --
 recipes/glibc/glibc-2.4/generic-bits_types.h       |  200 -----
 recipes/glibc/glibc-2.4/generic-bits_typesizes.h   |   66 --
 recipes/glibc/glibc-2.4/glibc-2.4-compile.patch    |   29 -
 recipes/glibc/glibc-2.4/glibc-2.4-openat-3.patch   |  133 ----
 .../glibc-2.4/glibc-arm-IO-acquire-lock-fix.diff   |   13 -
 .../glibc/glibc-2.4/glibc-arm-no-asm-page.patch    |   15 -
 recipes/glibc/glibc-2.4/glibc-check_pf.patch       |  343 ---------
 .../glibc/glibc-2.4/glibc-crunch-eabi-force.patch  |  133 ----
 .../glibc-2.4/glibc-crunch-eabi-fraiseexcpt.patch  |   88 ---
 .../glibc-crunch-eabi-setjmp_longjmp.patch         |  112 ---
 .../glibc/glibc-2.4/glibc-crunch-eabi-unwind.patch |   12 -
 recipes/glibc/glibc-2.4/glibc-crunch-eabi.patch    |  461 ------------
 .../glibc-crunch-endian-bigword-littlebyte.patch   |   40 -
 ...glibc-crunch-endian-littleword-littlebyte.patch |   40 -
 recipes/glibc/glibc-2.4/glibc-crunch-oabi.patch    |  310 --------
 recipes/glibc/glibc-2.4/glibc-crunch-oabi2.patch   |   18 -
 .../glibc-use-isystem-include-fixed.patch          |   46 --
 recipes/glibc/glibc-2.4/ldd-unbash.patch           |   11 -
 recipes/glibc/glibc-2.4/ldsocache-varrun.patch     |   18 -
 recipes/glibc/glibc-2.4/no-z-defs.patch            |    9 -
 recipes/glibc/glibc-2.4/nptl-crosscompile.patch    |   26 -
 recipes/glibc/glibc-2.4/powerpc-sqrt-hack.diff     |   25 -
 recipes/glibc/glibc-2.4/zecke-sane-readelf.patch   |  243 -------
 recipes/glibc/glibc-2.7/all_glibc-i586-chk.patch   |   33 -
 recipes/glibc/glibc-initial_2.3.2+cvs20040726.bb   |    4 -
 recipes/glibc/glibc-initial_2.3.6.bb               |    2 -
 recipes/glibc/glibc-initial_2.4.bb                 |    2 -
 recipes/glibc/glibc-initial_2.7.bb                 |    6 -
 recipes/glibc/glibc_2.3.2+cvs20040726.bb           |   78 --
 recipes/glibc/glibc_2.3.3+cvs20041128.bb           |  100 ---
 recipes/glibc/glibc_2.3.3+cvs20050221.bb           |   83 ---
 recipes/glibc/glibc_2.3.3+cvs20050420.bb           |   84 ---
 recipes/glibc/glibc_2.3.6.bb                       |  118 ---
 recipes/glibc/glibc_2.4.bb                         |  156 ----
 recipes/glibc/glibc_2.7.bb                         |  169 -----
 55 files changed, 0 insertions(+), 5053 deletions(-)
 delete mode 100644 recipes/glibc/glibc-2.3.6/etc/ld.so.conf
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-2.3.6-bind-already-defined-on-powerpc.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-allow-gcc-4.1-powerpc32-initfini.s.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-pthread-raise.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-arm-socket-weakalias.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-cross_sunrpc.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-memusage.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/glibc-rtld-libcc-eh.patch
 delete mode 100644 recipes/glibc/glibc-2.3.6/late-install-loop-break.patch
 delete mode 100644 recipes/glibc/glibc-2.4/arm-longlong.patch
 delete mode 100644 recipes/glibc/glibc-2.4/arm-memcpy.patch
 delete mode 100644 recipes/glibc/glibc-2.4/arm_eabi_ipc_fix.patch
 delete mode 100644 recipes/glibc/glibc-2.4/dl-cache-libcmp.patch
 delete mode 100644 recipes/glibc/glibc-2.4/dyn-ldconfig-20041128.patch
 delete mode 100644 recipes/glibc/glibc-2.4/dyn-ldconfig.patch
 delete mode 100644 recipes/glibc/glibc-2.4/etc/ld.so.conf
 delete mode 100644 recipes/glibc/glibc-2.4/fixup-aeabi-syscalls.patch
 delete mode 100644 recipes/glibc/glibc-2.4/generic-bits_select.h
 delete mode 100644 recipes/glibc/glibc-2.4/generic-bits_time.h
 delete mode 100644 recipes/glibc/glibc-2.4/generic-bits_types.h
 delete mode 100644 recipes/glibc/glibc-2.4/generic-bits_typesizes.h
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-2.4-compile.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-2.4-openat-3.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-arm-IO-acquire-lock-fix.diff
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-arm-no-asm-page.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-check_pf.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-eabi-force.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-eabi-fraiseexcpt.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-eabi-setjmp_longjmp.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-eabi-unwind.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-eabi.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-endian-bigword-littlebyte.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-endian-littleword-littlebyte.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-oabi.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-crunch-oabi2.patch
 delete mode 100644 recipes/glibc/glibc-2.4/glibc-use-isystem-include-fixed.patch
 delete mode 100644 recipes/glibc/glibc-2.4/ldd-unbash.patch
 delete mode 100644 recipes/glibc/glibc-2.4/ldsocache-varrun.patch
 delete mode 100644 recipes/glibc/glibc-2.4/no-z-defs.patch
 delete mode 100644 recipes/glibc/glibc-2.4/nptl-crosscompile.patch
 delete mode 100644 recipes/glibc/glibc-2.4/powerpc-sqrt-hack.diff
 delete mode 100644 recipes/glibc/glibc-2.4/zecke-sane-readelf.patch
 delete mode 100644 recipes/glibc/glibc-2.7/all_glibc-i586-chk.patch
 delete mode 100644 recipes/glibc/glibc-initial_2.3.2+cvs20040726.bb
 delete mode 100644 recipes/glibc/glibc-initial_2.3.6.bb
 delete mode 100644 recipes/glibc/glibc-initial_2.4.bb
 delete mode 100644 recipes/glibc/glibc-initial_2.7.bb
 delete mode 100644 recipes/glibc/glibc_2.3.2+cvs20040726.bb
 delete mode 100644 recipes/glibc/glibc_2.3.3+cvs20041128.bb
 delete mode 100644 recipes/glibc/glibc_2.3.3+cvs20050221.bb
 delete mode 100644 recipes/glibc/glibc_2.3.3+cvs20050420.bb
 delete mode 100644 recipes/glibc/glibc_2.3.6.bb
 delete mode 100644 recipes/glibc/glibc_2.4.bb
 delete mode 100644 recipes/glibc/glibc_2.7.bb

diff --git a/recipes/glibc/glibc-2.3.6/etc/ld.so.conf b/recipes/glibc/glibc-2.3.6/etc/ld.so.conf
deleted file mode 100644
index 46e06d3..0000000
--- a/recipes/glibc/glibc-2.3.6/etc/ld.so.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-/usr/local/lib
-
diff --git a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch b/recipes/glibc/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
deleted file mode 100644
index 4348d6f..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-fixes
-
-{BUILD_DIR}/build-glibc/csu/crtn.o: In function "dummy":
-{BUILD_DIR}/build-glibc/csu/crtn.S:14: multiple definition of "dummy"
-{BUILD_DIR}/build-glibc/csu/crti.o:{BUILD_DIR}/build-glibc/csu/crti.S:33: first defined here
-{BUILD_DIR}/build-glibc/csu/crtn.o: In function "_init":
-{BUILD_DIR}/build-glibc/csu/crtn.S:30: multiple definition of "_init"
-{BUILD_DIR}/build-glibc/csu/crti.o:{BUILD_DIR}/build-glibc/csu/crti.S:65: first defined here
-{BUILD_DIR}/build-glibc/csu/crtn.o: In function "_fini":
-{BUILD_DIR}/build-glibc/csu/crtn.S:25: multiple definition of "_fini"
-{BUILD_DIR}/build-glibc/csu/crti.o:{BUILD_DIR}/build-glibc/csu/crti.S:38: first defined here
-{BUILD_DIR}/build-glibc/csu/crti.o: In function "_fini":
-{BUILD_DIR}/build-glibc/csu/crti.S:(.init+0x20): undefined reference to "i_am_not_a_leaf"
-{BUILD_DIR}/build-glibc/csu/crtn.o: In function "_fini":
-{BUILD_DIR}/build-glibc/csu/crtn.S:(.init+0x40): undefined reference to "i_am_not_a_leaf"
-{BUILD_DIR}/build-glibc/csu/crtn.S:(.init+0x44): undefined reference to "i_am_not_a_leaf"
-
---- glibc-2.3.6/sysdeps/powerpc/powerpc32/Makefile.org  2006-08-21 19:03:01.000000000 -0700
-+++ glibc-2.3.6/sysdeps/powerpc/powerpc32/Makefile      2006-08-21 19:03:19.000000000 -0700
-@@ -21,7 +21,7 @@
- ifneq ($(elf),no)
- # The initfini generation code doesn't work in the presence of -fPIC, so
- # we use -fpic instead which is much better.
--CFLAGS-initfini.s = -g0 -fpic -O1
-+CFLAGS-initfini.s = -g0 -fpic -O1 $(fno-unit-at-a-time)
-
- # There is no benefit to using sdata for these objects, and the user
- # of the library should be able to control what goes into sdata.
diff --git a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-bind-already-defined-on-powerpc.patch b/recipes/glibc/glibc-2.3.6/glibc-2.3.6-bind-already-defined-on-powerpc.patch
deleted file mode 100644
index 9938ef6..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-bind-already-defined-on-powerpc.patch
+++ /dev/null
@@ -1,65 +0,0 @@
-Fixes "Error: symbol `__bind' is already defined" error when building for PowerPC
-
-Patch taken from http://bugs.debian.org/343571
-
-
---- x/sysdeps/powerpc/powerpc32/fpu/s_lround.S	2004-06-30 17:29:12.000000000 -0500
-+++ x/sysdeps/powerpc/powerpc32/fpu/s_lround.S	2005-11-18 16:48:11.000000000 -0600
-@@ -88,7 +79,6 @@
- 	b	.L9
- 	END (__lround)
- 
--strong_alias (__lround, __lround)
- weak_alias (__lround, lround)
- 
- strong_alias (__lround, __lroundf)
---- x/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S	2005-12-16 01:04:21.000000000 -0600
-+++ x/sysdeps/unix/sysv/linux/powerpc/powerpc32/socket.S	2005-12-16 01:06:26.000000000 -0600
-@@ -42,7 +42,11 @@
- #define stackblock 20
- 
- #ifndef __socket
--#define __socket P(__,socket)
-+# ifndef NO_WEAK_ALIAS
-+#  define __socket P(__,socket)
-+# else
-+#  define __socket socket
-+# endif
- #endif
- 
- 	.text
-@@ -116,4 +120,6 @@
- 
- PSEUDO_END (__socket)
- 
-+#ifndef NO_WEAK_ALIAS
- weak_alias (__socket, socket)
-+#endif
---- x/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S	2005-12-16 01:08:45.000000000 -0600
-+++ x/sysdeps/unix/sysv/linux/powerpc/powerpc64/socket.S	2005-12-16 01:09:32.000000000 -0600
-@@ -41,12 +41,12 @@
- 
- #define stackblock 80 /* offset to socket parm area.  */
- 
--#ifndef socket
--/* If this is just socket.S leave it alone! */
--#else
- #ifndef __socket
--#define __socket P(__,socket)
--#endif
-+# ifndef NO_WEAK_ALIAS
-+#  define __socket P(__,socket)
-+# else
-+#  define __socket socket
-+# endif
- #endif
- 
- 	.text
-@@ -120,4 +120,6 @@
- 	cfi_endproc
- PSEUDO_END (__socket)
- 
-+#ifndef NO_WEAK_ALIAS
- weak_alias (__socket, socket)
-+#endif
-
diff --git a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-allow-gcc-4.1-powerpc32-initfini.s.patch b/recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-allow-gcc-4.1-powerpc32-initfini.s.patch
deleted file mode 100644
index 9976ecc..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-allow-gcc-4.1-powerpc32-initfini.s.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-fixes
-
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "dummy":
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:14: multiple definition of "dummy"
-{BUILD_DIR}/build-glibc/linuxthreads/crti.o:{BUILD_DIR}/build-glibc/linuxthreads/crti.S:33: first defined here
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "_fini":
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:30: multiple definition of "_fini"
-{BUILD_DIR}/build-glibc/linuxthreads/crti.o:{BUILD_DIR}/build-glibc/linuxthreads/crti.S:65: first defined here
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "_init":
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:23: multiple definition of "_init"
-{BUILD_DIR}/build-glibc/linuxthreads/crti.o:{BUILD_DIR}/build-glibc/linuxthreads/crti.S:37: first defined here
-{BUILD_DIR}/build-glibc/linuxthreads/crti.o: In function "_fini":
-{BUILD_DIR}/build-glibc/linuxthreads/crti.S:(.text+0x70): undefined reference to "i_am_not_a_leaf"
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.o: In function "_fini":
-{BUILD_DIR}/build-glibc/linuxthreads/crtn.S:(.text+0x38): undefined reference to "i_am_not_a_leaf"
-collect2: ld returned 1 exit status
-
---- glibc-2.3.6/linuxthreads/sysdeps/powerpc/Makefile.org      2003-02-17 20:33:17.000000000 +0000
-+++ glibc-2.3.6/linuxthreads/sysdeps/powerpc/Makefile  2007-04-04 16:26:01.969067632 +0100
-@@ -1,6 +1,6 @@
- ifeq ($(subdir):$(elf),linuxthreads:yes)
- # See CFLAGS-initfini.s above; this is the same code.
--CFLAGS-pt-initfini.s = -g0 -fpic -O1
-+CFLAGS-pt-initfini.s = -g0 -fpic -O1 $(fno-unit-at-a-time)
- endif
- ifeq ($(subdir),csu)
- gen-as-const-headers += tcb-offsets.sym
-
diff --git a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-pthread-raise.patch b/recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-pthread-raise.patch
deleted file mode 100644
index dae5db3..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-2.3.6-linuxthreads-pthread-raise.patch
+++ /dev/null
@@ -1,37 +0,0 @@
---- glibc-2.3.6/linuxthreads/sysdeps/unix/sysv/linux/raise.c.org	2008-07-16 22:57:58.000000000 -0700
-+++ glibc-2.3.6/linuxthreads/sysdeps/unix/sysv/linux/raise.c	2008-07-16 22:58:26.000000000 -0700
-@@ -1,4 +1,4 @@
--/* Copyright (C) 1991, 1996, 2002, 2003 Free Software Foundation, Inc.
-+/* Copyright (C) 1991, 1996, 2002, 2003, 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
-@@ -18,10 +18,13 @@
- 
- #include <signal.h>
- #include <unistd.h>
--#include <bits/libc-lock.h>
- 
--#ifndef SHARED
-+#ifndef IS_IN_rtld
-+# include <bits/libc-lock.h>
-+
-+# ifndef SHARED
- weak_extern (__pthread_raise)
-+# endif
- #endif
- 
- /* Raise the signal SIG.  */
-@@ -29,8 +32,12 @@ int
- raise (sig)
-      int sig;
- {
-+#ifdef IS_IN_rtld
-+  return __kill (__getpid (), sig);
-+#else
-   return __libc_maybe_call2 (pthread_raise, (sig),
- 			     __kill (__getpid (), sig));
-+#endif
- }
- libc_hidden_def (raise)
- weak_alias (raise, gsignal)
diff --git a/recipes/glibc/glibc-2.3.6/glibc-arm-socket-weakalias.patch b/recipes/glibc/glibc-2.3.6/glibc-arm-socket-weakalias.patch
deleted file mode 100644
index 722365f..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-arm-socket-weakalias.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-This one was taken from debian.
-
-# DP: Description: Fix __bind redefinition problem
-# DP: Related bugs: 
-# DP: Dpatch author: Phil Blundell
-# DP: Patch author: Daniel Jacobowitz
-# DP: Upstream status: In CVS
-# DP: Status Details:
-# DP: Date: 2005-12-25
-
-Index: sysdeps/unix/sysv/linux/arm/socket.S
-===================================================================
-RCS file: /cvs/glibc/ports/sysdeps/unix/sysv/linux/arm/socket.S,v
-retrieving revision 1.12
-retrieving revision 1.13
-diff -u -r1.12 -r1.13
---- glibc-2.3.6.ds1.orig/sysdeps/unix/sysv/linux/arm/socket.S	4 Dec 2004 21:20:16 -0000	1.12
-+++ glibc-2.3.6.ds1/sysdeps/unix/sysv/linux/arm/socket.S	27 Oct 2005 18:50:12 -0000	1.13
-@@ -1,4 +1,6 @@
--/* Copyright (C) 1995, 1996, 1997, 1998, 2003 Free Software Foundation, Inc.
-+/* Copyright (C) 1995, 1996, 1997, 1998, 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
-@@ -32,7 +34,11 @@
-    The .S files for the other calls just #define socket and #include this.  */
- 
- #ifndef __socket
-+#ifndef NO_WEAK_ALIAS
- #define __socket P(__,socket)
-+#else
-+#define __socket socket
-+#endif
- #endif
- 
- #define PUSHARGS_1	str a1, [sp, $-4]!
-@@ -120,4 +126,6 @@
- 
- PSEUDO_END (__socket)
- 
-+#ifndef NO_WEAK_ALIAS
- weak_alias (__socket, socket)
-+#endif
diff --git a/recipes/glibc/glibc-2.3.6/glibc-cross_sunrpc.patch b/recipes/glibc/glibc-2.3.6/glibc-cross_sunrpc.patch
deleted file mode 100644
index 8e24a83..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-cross_sunrpc.patch
+++ /dev/null
@@ -1,79 +0,0 @@
-Fix rpcsvc headers missing from glibc, also
-allows glibc to produce the rpc headers when cross compiling,
-And fix for glibc-bootstrap package doesn't currently build because the
-generated sunrpc headers are not available
-    
-
----
- sunrpc/Makefile |   28 ++++++++++++++++++++++++----
- 1 file changed, 24 insertions(+), 4 deletions(-)
-
-Index: glibc-2.3.6/sunrpc/Makefile
-===================================================================
---- glibc-2.3.6.orig/sunrpc/Makefile	2005-07-17 20:03:49.000000000 -0700
-+++ glibc-2.3.6/sunrpc/Makefile	2008-07-17 15:28:04.000000000 -0700
-@@ -75,6 +75,8 @@ install-sbin := rpcinfo
- rpcgen-objs = rpc_main.o rpc_hout.o rpc_cout.o rpc_parse.o \
- 	      rpc_scan.o rpc_util.o rpc_svcout.o rpc_clntout.o \
- 	      rpc_tblout.o rpc_sample.o
-+host-rpcgen-objs = $(addprefix host-,$(rpcgen-objs))
-+
- # These headers are part of rpcgen.
- distribute := proto.h rpc_util.h rpc_parse.h rpc_scan.h \
- 	      $(rpcgen-objs:.o=.c) etc.rpc \
-@@ -98,8 +100,8 @@ otherlibs += $(nssobjdir)/libnss_files.a
- 	     $(resolvobjdir)/libresolv.a
- endif
- 
--ifeq (no,$(cross-compiling))
--# We can only build this library if we can run the rpcgen we build.
-+ifneq (,$(findstring subdir_install,$(MAKECMDGOALS)))
-+## We can only build this library if we can run the rpcgen we build.
- headers += $(rpcsvc:%.x=rpcsvc/%.h)
- extra-libs := librpcsvc
- extra-libs-others := librpcsvc # Make it in `others' pass, not `lib' pass.
-@@ -144,8 +146,26 @@ cpp-srcs-left := $(rpcgen-objs:.o=.c)
- lib := nonlib
- include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left))
- 
-+# Rely on the target rpcgen objects for dependency information.
-+$(objpfx)host-%.o: %.c $(objpfx)%.o
-+	$(patsubst %/,cd % &&,$(objpfx)) \
-+	$(BUILD_CC) $($(basename $(<F))-CFLAGS) \
-+		-I$(shell cd .. && pwd) \
-+		-Dattribute_hidden= \
-+		-include $(shell cd ../include && pwd)/libintl.h \
-+		-O2 $(ALL_BUILD_CFLAGS) $(shell pwd)/$(<F) -c -o $(@F)
-+
-+$(objpfx)host-rpcgen: $(addprefix $(objpfx),$(host-rpcgen-objs))
-+	$(BUILD_CC) $(BUILD_CFLAGS) $+ -o $(objpfx)host-rpcgen
-+
- # Tell rpcgen where to find the C preprocessor.
-+ifeq ($(cross-compiling),no)
- rpcgen-cmd = CPP='$(CC) -E -x c-header' $(built-program-cmd) -Y ../scripts
-+rpcgen-prog = $(objpfx)rpcgen
-+else
-+rpcgen-cmd = CPP='$(CC) -E -x c-header' $(objpfx)host-rpcgen -Y ../scripts
-+rpcgen-prog = $(objpfx)host-rpcgen
-+endif
- 
- # Install the rpc data base file.
- $(inst_sysconfdir)/rpc: etc.rpc $(+force)
-@@ -156,7 +176,7 @@ $(inst_sysconfdir)/rpc: etc.rpc $(+force
- # relinked.
- $(rpcsvc:%.x=$(objpfx)rpcsvc/%.h): $(objpfx)rpcsvc/%.h: $(objpfx)rpcsvc/%.stmp
- 	@:
--$(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(objpfx)rpcgen
-+$(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(rpcgen-prog)
- 	$(make-target-directory)
- 	-@rm -f ${@:stmp=T} $@
- 	$(rpcgen-cmd) -h $< -o ${@:stmp=T}
-@@ -166,7 +186,7 @@ $(objpfx)rpcsvc/%.stmp: rpcsvc/%.x $(obj
- # Generate the rpcsvc XDR functions with rpcgen.
- $(rpcsvc:%.x=$(objpfx)x%.c): $(objpfx)x%.c: $(objpfx)x%.stmp
- 	@:
--$(objpfx)x%.stmp: rpcsvc/%.x $(objpfx)rpcgen
-+$(objpfx)x%.stmp: rpcsvc/%.x $(rpcgen-prog)
- 	-@rm -f ${@:stmp=T} $@
- 	$(rpcgen-cmd) -c $< -o ${@:stmp=T}
- 	$(move-if-change) $(@:stmp=T) $(@:stmp=c)
diff --git a/recipes/glibc/glibc-2.3.6/glibc-memusage.patch b/recipes/glibc/glibc-2.3.6/glibc-memusage.patch
deleted file mode 100644
index 39ca1a7..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-memusage.patch
+++ /dev/null
@@ -1,44 +0,0 @@
----
- malloc/Makefile    |    4 +++-
- malloc/memusage.sh |    6 ++++++
- 2 files changed, 9 insertions(+), 1 deletion(-)
-
-Index: glibc-2.3.6/malloc/Makefile
-===================================================================
---- glibc-2.3.6.orig/malloc/Makefile	2008-07-17 14:40:54.000000000 -0700
-+++ glibc-2.3.6/malloc/Makefile	2008-07-17 14:42:07.000000000 -0700
-@@ -80,7 +80,7 @@ ifneq ($(cross-compiling),yes)
- ifneq ($(LIBGD),no)
- install-bin = memusagestat
- install-bin-script += memusage
--generated += memusagestat memusage
-+generated += memusagestat
- extra-objs += memusagestat.o
- 
- # The configure.in check for libgd and its headers did not use $SYSINCLUDES.
-@@ -90,6 +90,8 @@ extra-objs += memusagestat.o
- $(objpfx)memusagestat.o: sysincludes = # nothing
- endif
- endif
-+install-bin-script += memusage
-+generated += memusage
- 
- # Another goal which can be used to override the configure decision.
- .PHONY: do-memusagestat
-Index: glibc-2.3.6/malloc/memusage.sh
-===================================================================
---- glibc-2.3.6.orig/malloc/memusage.sh	2008-07-17 14:42:17.000000000 -0700
-+++ glibc-2.3.6/malloc/memusage.sh	2008-07-17 14:42:54.000000000 -0700
-@@ -205,6 +205,12 @@ if test $# -eq 0; then
-   do_usage
- fi
- 
-+# Find memusagestat.
-+if test -n "$png" -a ! -x $memusagestat; then
-+  echo >&2 $"PNG generation is not supported."
-+  png=""
-+fi
-+
- # This will be in the environment.
- add_env="LD_PRELOAD=$memusageso"
- 
diff --git a/recipes/glibc/glibc-2.3.6/glibc-rtld-libcc-eh.patch b/recipes/glibc/glibc-2.3.6/glibc-rtld-libcc-eh.patch
deleted file mode 100644
index a3658f4..0000000
--- a/recipes/glibc/glibc-2.3.6/glibc-rtld-libcc-eh.patch
+++ /dev/null
@@ -1,25 +0,0 @@
----
- elf/Makefile |    3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-Index: glibc-2.3.6/elf/Makefile
-===================================================================
---- glibc-2.3.6.orig/elf/Makefile	2008-07-17 01:10:39.000000000 -0700
-+++ glibc-2.3.6/elf/Makefile	2008-07-17 01:17:18.000000000 -0700
-@@ -279,7 +279,7 @@ $(objpfx)rtld-libc.a: $(objpfx)librtld.m
- 	$(MAKE) -f $< -f rtld-Rules
- 
- $(objpfx)librtld.os: $(objpfx)dl-allobjs.os $(objpfx)rtld-libc.a
--	$(LINK.o) -nostdlib -nostartfiles -r -o $@ '-Wl,-(' $^ -lgcc '-Wl,-)' \
-+	$(LINK.o) -nostdlib -nostartfiles -r -o $@ '-Wl,-(' $^ -lgcc -lgcc_eh '-Wl,-)' \
- 		  -Wl,-Map,$@.map
- 
- generated += librtld.map librtld.mk rtld-libc.a librtld.os.map
-@@ -295,6 +295,7 @@ $(objpfx)ld.so: $(objpfx)librtld.os $(ld
- 		      -e 's/\. = 0 + SIZEOF_HEADERS;/& _begin = . - SIZEOF_HEADERS;/' \
- 		  > $@.lds
- 	$(LINK.o) -nostdlib -nostartfiles -shared -o $@			\
-+		  -lgcc -lgcc_eh					\
- 		  $(LDFLAGS-rtld) -Wl,-z,defs $(z-now-$(bind-now))	\
- 		  $(filter-out $(map-file),$^) $(load-map-file)		\
- 		  -Wl,-soname=$(rtld-installed-name) -T $@.lds
diff --git a/recipes/glibc/glibc-2.3.6/late-install-loop-break.patch b/recipes/glibc/glibc-2.3.6/late-install-loop-break.patch
deleted file mode 100644
index fc7d8b3..0000000
--- a/recipes/glibc/glibc-2.3.6/late-install-loop-break.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- glibc-2.3.6/Makerules	Sat Sep  8 22:59:54 2007
-+++ glibc-2.3.6/Makerules	Sun Sep  9 01:04:29 2007
-@@ -154,26 +154,6 @@
- common-before-compile = $(before-compile)
- endif
- 
--ifndef subdir
--# If a makefile needs to do something conditional on something that
--# can only be figured out from headers, write a FOO.make.c input
--# file that uses cpp contructs and contains @@@ LINE @@@ for each LINE
--# to emit in the generated makefile, and use -include $(common-objpfx)FOO.make.
--#
--# We only generate these in the top-level makefile, to avoid any weirdness
--# from subdir-specific makefile tweaks creeping in on an update.
--$(common-objpfx)%.make: $(..)%.make.c $(..)Makerules $(common-before-compile)
--	rm -f $@T $@.dT
--	(echo '# Generated from $*.make.c by Makerules.'; \
--	 $(CC) $(CFLAGS) $(CPPFLAGS) -E $< \
--	       -MD -MP -MT '$$(common-objpfx)$*.make' -MF $@.dT \
--	 | sed -n '/@@@/{s/@@@[	 ]*\(.*\)@@@/\1/;s/[	 ]*$$//p;}'; \
--	 echo 'common-generated += $(@F)'; \
--	 sed $(sed-remove-objpfx) $(sed-remove-dotdot) $@.dT; \
--	 rm -f $@.dT) > $@T
--	mv -f $@T $@
--endif
--
- ifdef subdir
- sed-remove-dotdot := -e 's@  *\.\.\/\([^ 	\]*\)@ $$(..)\1@g' \
- 		     -e 's@^\.\.\/\([^ 	\]*\)@$$(..)\1@g'
diff --git a/recipes/glibc/glibc-2.4/arm-longlong.patch b/recipes/glibc/glibc-2.4/arm-longlong.patch
deleted file mode 100644
index 28aca83..0000000
--- a/recipes/glibc/glibc-2.4/arm-longlong.patch
+++ /dev/null
@@ -1,58 +0,0 @@
---- glibc-2.4/stdlib/longlong.h.ark	2006-03-11 22:49:27.000000000 +0100
-+++ glibc-2.4/stdlib/longlong.h	2006-03-11 22:55:12.000000000 +0100
-@@ -206,6 +206,14 @@
- 	     "rI" ((USItype) (bh)),					\
- 	     "r" ((USItype) (al)),					\
- 	     "rI" ((USItype) (bl)) __CLOBBER_CC)
-+/* v3m and all higher arches have long multiply support.  */
-+#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
-+#define umul_ppmm(xh, xl, a, b) \
-+  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
-+#define UMUL_TIME 5
-+#define smul_ppmm(xh, xl, a, b) \
-+  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
-+#else							   
- #define umul_ppmm(xh, xl, a, b) \
- {register USItype __t0, __t1, __t2;					\
-   __asm__ ("%@ Inlined umul_ppmm\n"					\
-@@ -227,7 +235,13 @@
- 	   : "r" ((USItype) (a)),					\
- 	     "r" ((USItype) (b)) __CLOBBER_CC );}
- #define UMUL_TIME 20
-+#endif
- #define UDIV_TIME 100
-+#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
-+#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
-+#define COUNT_LEADING_ZEROS_0 32
-+#endif
-+							   
- #endif /* __arm__ */
- 
- #if defined (__hppa) && W_TYPE_SIZE == 32
---- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark	2006-03-11 22:56:43.000000000 +0100
-+++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c	2006-03-11 22:58:19.000000000 +0100
-@@ -0,0 +1,24 @@
-+/* __clz_tab -- support for longlong.h
-+   Copyright (C) 2004 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.  */
-+
-+#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
-+/* Nothing required.  */
-+#else
-+#include <stdlib/mp_clz_tab.c>
-+#endif
diff --git a/recipes/glibc/glibc-2.4/arm-memcpy.patch b/recipes/glibc/glibc-2.4/arm-memcpy.patch
deleted file mode 100644
index bc2b3da..0000000
--- a/recipes/glibc/glibc-2.4/arm-memcpy.patch
+++ /dev/null
@@ -1,758 +0,0 @@
---- /dev/null	2004-02-02 20:32:13.000000000 +0000
-+++ sysdeps/arm/memmove.S	2004-03-20 18:37:23.000000000 +0000
-@@ -0,0 +1,251 @@
-+/*
-+ *   Optimized memmove implementation for ARM processors
-+ *
-+ *	Author: 	Nicolas Pitre
-+ *	Created:	Dec 23, 2003
-+ *	Copyright:	(C) MontaVista Software, Inc.
-+ *
-+ *   This file 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.
-+ *
-+ *   This file 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.
-+ */
-+
-+#include <sysdep.h>
-+
-+
-+/*
-+ * Endian independent macros for shifting bytes within registers.
-+ */
-+#ifndef __ARMEB__
-+#define pull            lsr
-+#define push            lsl
-+#else
-+#define pull            lsl
-+#define push            lsr
-+#endif
-+
-+/*
-+ * Enable data preload for architectures that support it (ARMv5 and above)
-+ */
-+#if defined(__ARM_ARCH_5__) || \
-+    defined(__ARM_ARCH_5T__) || \
-+    defined(__ARM_ARCH_5TE__)
-+#define PLD(code...)	code
-+#else
-+#define PLD(code...)
-+#endif
-+
-+
-+/* char * memmove (char *dst, const char *src) */
-+ENTRY(memmove)
-+		subs	ip, r0, r1
-+		cmphi	r2, ip
-+		bls	memcpy(PLT)
-+
-+		stmfd	sp!, {r0, r4, lr}
-+		add	r1, r1, r2
-+		add	r0, r0, r2
-+		subs	r2, r2, #4
-+		blt	25f
-+		ands	ip, r0, #3
-+	PLD(	pld	[r1, #-4]		)
-+		bne	26f
-+		ands	ip, r1, #3
-+		bne	27f
-+
-+19:		subs	r2, r2, #4
-+		blt	24f
-+		subs	r2, r2, #8
-+		blt	23f
-+		subs	r2, r2, #16
-+		blt	22f
-+
-+	PLD(	pld	[r1, #-32]		)
-+	PLD(	subs	r2, r2, #96		)
-+		stmfd	sp!, {r5 - r8}
-+	PLD(	blt	21f			)
-+
-+	PLD(	@ cache alignment		)
-+	PLD(	ands	ip, r1, #31		)
-+	PLD(	pld	[r1, #-64]		)
-+	PLD(	beq	20f			)
-+	PLD(	cmp	r2, ip			)
-+	PLD(	pld	[r1, #-96]		)
-+	PLD(	blt	20f			)
-+	PLD(	cmp	ip, #16			)
-+	PLD(	sub	r2, r2, ip		)
-+	PLD(	ldmgedb	r1!, {r3 - r6}		)
-+	PLD(	stmgedb	r0!, {r3 - r6}		)
-+	PLD(	beq	20f			)
-+	PLD(	and	ip, ip, #15		)
-+	PLD(	cmp	ip, #8			)
-+	PLD(	ldr	r3, [r1, #-4]!		)
-+	PLD(	ldrge	r4, [r1, #-4]!		)
-+	PLD(	ldrgt	r5, [r1, #-4]!		)
-+	PLD(	str	r3, [r0, #-4]!		)
-+	PLD(	strge	r4, [r0, #-4]!		)
-+	PLD(	strgt	r5, [r0, #-4]!		)
-+
-+20:	PLD(	pld	[r1, #-96]		)
-+	PLD(	pld	[r1, #-128]		)
-+21:		ldmdb	r1!, {r3, r4, ip, lr}
-+		subs	r2, r2, #32
-+		stmdb	r0!, {r3, r4, ip, lr}
-+		ldmdb	r1!, {r3, r4, ip, lr}
-+		stmgedb	r0!, {r3, r4, ip, lr}
-+		ldmgedb	r1!, {r3, r4, ip, lr}
-+		stmgedb	r0!, {r3, r4, ip, lr}
-+		ldmgedb	r1!, {r3, r4, ip, lr}
-+		subges	r2, r2, #32
-+		stmdb	r0!, {r3, r4, ip, lr}
-+		bge	20b
-+	PLD(	cmn	r2, #96			)
-+	PLD(	bge	21b			)
-+	PLD(	add	r2, r2, #96		)
-+		tst	r2, #31
-+		ldmfd	sp!, {r5 - r8}
-+		ldmeqfd	sp!, {r0, r4, pc}
-+
-+		tst	r2, #16
-+22:		ldmnedb	r1!, {r3, r4, ip, lr}
-+		stmnedb	r0!, {r3, r4, ip, lr}
-+
-+		tst	r2, #8
-+23:		ldmnedb	r1!, {r3, r4}
-+		stmnedb	r0!, {r3, r4}
-+
-+		tst	r2, #4
-+24:		ldrne	r3, [r1, #-4]!
-+		strne	r3, [r0, #-4]!
-+
-+25:		ands	r2, r2, #3
-+		ldmeqfd	sp!, {r0, r4, pc}
-+
-+		cmp	r2, #2
-+		ldrb	r3, [r1, #-1]
-+		ldrgeb	r4, [r1, #-2]
-+		ldrgtb	ip, [r1, #-3]
-+		strb	r3, [r0, #-1]
-+		strgeb	r4, [r0, #-2]
-+		strgtb	ip, [r0, #-3]
-+		ldmfd	sp!, {r0, r4, pc}
-+
-+26:		cmp	ip, #2
-+		ldrb	r3, [r1, #-1]!
-+		ldrgeb	r4, [r1, #-1]!
-+		ldrgtb	lr, [r1, #-1]!
-+		strb	r3, [r0, #-1]!
-+		strgeb	r4, [r0, #-1]!
-+		strgtb	lr, [r0, #-1]!
-+		subs	r2, r2, ip
-+		blt	25b
-+		ands	ip, r1, #3
-+		beq	19b
-+
-+27:		bic	r1, r1, #3
-+		cmp	ip, #2
-+		ldr	r3, [r1]
-+		beq	35f
-+		blt	36f
-+
-+
-+		.macro	backward_copy_shift push pull
-+
-+		cmp	r2, #12
-+	PLD(	pld	[r1, #-4]		)
-+		blt	33f
-+		subs	r2, r2, #28
-+		stmfd	sp!, {r5 - r9}
-+		blt	31f
-+
-+	PLD(	subs	r2, r2, #96		)
-+	PLD(	pld	[r1, #-32]		)
-+	PLD(	blt	30f			)
-+	PLD(	pld	[r1, #-64]		)
-+
-+	PLD(	@ cache alignment		)
-+	PLD(	ands	ip, r1, #31		)
-+	PLD(	pld	[r1, #-96]		)
-+	PLD(	beq	29f			)
-+	PLD(	cmp	r2, ip			)
-+	PLD(	pld	[r1, #-128]		)
-+	PLD(	blt	29f			)
-+	PLD(	sub	r2, r2, ip		)
-+28:	PLD(	mov	r4, r3, push #\push	)
-+	PLD(	ldr	r3, [r1, #-4]!		)
-+	PLD(	subs	ip, ip, #4		)
-+	PLD(	orr	r4, r4, r3, pull #\pull	)
-+	PLD(	str	r4, [r0, #-4]!		)
-+	PLD(	bgt	28b			)
-+
-+29:	PLD(	pld	[r1, #-128]		)
-+30:		mov	lr, r3, push #\push
-+		ldmdb	r1!, {r3 - r9, ip}
-+		subs	r2, r2, #32
-+		orr	lr, lr, ip, pull #\pull
-+		mov	ip, ip, push #\push
-+		orr	ip, ip, r9, pull #\pull
-+		mov	r9, r9, push #\push
-+		orr	r9, r9, r8, pull #\pull
-+		mov	r8, r8, push #\push
-+		orr	r8, r8, r7, pull #\pull
-+		mov	r7, r7, push #\push
-+		orr	r7, r7, r6, pull #\pull
-+		mov	r6, r6, push #\push
-+		orr	r6, r6, r5, pull #\pull
-+		mov	r5, r5, push #\push
-+		orr	r5, r5, r4, pull #\pull
-+		mov	r4, r4, push #\push
-+		orr	r4, r4, r3, pull #\pull
-+		stmdb	r0!, {r4 - r9, ip, lr}
-+		bge	29b
-+	PLD(	cmn	r2, #96			)
-+	PLD(	bge	30b			)
-+	PLD(	add	r2, r2, #96		)
-+		cmn	r2, #16
-+		blt	32f
-+31:		mov	r7, r3, push #\push
-+		ldmdb	r1!, {r3 - r6}
-+		sub	r2, r2, #16
-+		orr	r7, r7, r6, pull #\pull
-+		mov	r6, r6, push #\push
-+		orr	r6, r6, r5, pull #\pull
-+		mov	r5, r5, push #\push
-+		orr	r5, r5, r4, pull #\pull
-+		mov	r4, r4, push #\push
-+		orr	r4, r4, r3, pull #\pull
-+		stmdb	r0!, {r4 - r7}
-+32:		adds	r2, r2, #28
-+		ldmfd	sp!, {r5 - r9}
-+		blt	34f
-+33:		mov	r4, r3, push #\push
-+		ldr	r3, [r1, #-4]!
-+		subs	r2, r2, #4
-+		orr	r4, r4, r3, pull #\pull
-+		str	r4, [r0, #-4]!
-+		bge	33b
-+34:
-+		.endm
-+
-+
-+		backward_copy_shift	push=8	pull=24
-+		add	r1, r1, #3
-+		b	25b
-+
-+35:		backward_copy_shift	push=16	pull=16
-+		add	r1, r1, #2
-+		b	25b
-+
-+36:		backward_copy_shift	push=24	pull=8
-+		add	r1, r1, #1
-+		b	25b
-+
-+		.size	memmove, . - memmove
-+END(memmove)
-+libc_hidden_builtin_def (memmove)
---- /dev/null	2004-02-02 20:32:13.000000000 +0000
-+++ sysdeps/arm/bcopy.S	2004-03-20 18:37:48.000000000 +0000
-@@ -0,0 +1,255 @@
-+/*
-+ *   Optimized memmove implementation for ARM processors
-+ *
-+ *	Author: 	Nicolas Pitre
-+ *	Created:	Dec 23, 2003
-+ *	Copyright:	(C) MontaVista Software, Inc.
-+ *
-+ *   This file 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.
-+ *
-+ *   This file 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.
-+ */
-+
-+#include <sysdep.h>
-+
-+
-+/*
-+ * Endian independent macros for shifting bytes within registers.
-+ */
-+#ifndef __ARMEB__
-+#define pull            lsr
-+#define push            lsl
-+#else
-+#define pull            lsl
-+#define push            lsr
-+#endif
-+
-+/*
-+ * Enable data preload for architectures that support it (ARMv5 and above)
-+ */
-+#if defined(__ARM_ARCH_5__) || \
-+    defined(__ARM_ARCH_5T__) || \
-+    defined(__ARM_ARCH_5TE__)
-+#define PLD(code...)	code
-+#else
-+#define PLD(code...)
-+#endif
-+
-+dst		.req	r1
-+src		.req	r0
-+
-+/* void *bcopy (const char *src, char *dst, size_t size) */
-+ENTRY(bcopy)
-+		subs	ip, dst, src
-+		cmphi	r2, ip
-+		movls	r3, r0
-+		movls	r0, r1
-+		movls	r1, r3
-+		bls	memcpy(PLT)
-+
-+		stmfd	sp!, {r4, lr}
-+		add	src, src, r2
-+		add	dst, dst, r2
-+		subs	r2, r2, #4
-+		blt	25f
-+		ands	ip, dst, #3
-+	PLD(	pld	[src, #-4]		)
-+		bne	26f
-+		ands	ip, src, #3
-+		bne	27f
-+
-+19:		subs	r2, r2, #4
-+		blt	24f
-+		subs	r2, r2, #8
-+		blt	23f
-+		subs	r2, r2, #16
-+		blt	22f
-+
-+	PLD(	pld	[src, #-32]		)
-+	PLD(	subs	r2, r2, #96		)
-+		stmfd	sp!, {r5 - r8}
-+	PLD(	blt	21f			)
-+
-+	PLD(	@ cache alignment		)
-+	PLD(	ands	ip, src, #31		)
-+	PLD(	pld	[src, #-64]		)
-+	PLD(	beq	20f			)
-+	PLD(	cmp	r2, ip			)
-+	PLD(	pld	[src, #-96]		)
-+	PLD(	blt	20f			)
-+	PLD(	cmp	ip, #16			)
-+	PLD(	sub	r2, r2, ip		)
-+	PLD(	ldmgedb	src!, {r3 - r6}		)
-+	PLD(	stmgedb	dst!, {r3 - r6}		)
-+	PLD(	beq	20f			)
-+	PLD(	and	ip, ip, #15		)
-+	PLD(	cmp	ip, #8			)
-+	PLD(	ldr	r3, [src, #-4]!		)
-+	PLD(	ldrge	r4, [src, #-4]!		)
-+	PLD(	ldrgt	r5, [src, #-4]!		)
-+	PLD(	str	r3, [dst, #-4]!		)
-+	PLD(	strge	r4, [dst, #-4]!		)
-+	PLD(	strgt	r5, [dst, #-4]!		)
-+
-+20:	PLD(	pld	[src, #-96]		)
-+	PLD(	pld	[src, #-128]		)
-+21:		ldmdb	src!, {r3, r4, ip, lr}
-+		subs	r2, r2, #32
-+		stmdb	dst!, {r3, r4, ip, lr}
-+		ldmdb	src!, {r3, r4, ip, lr}
-+		stmgedb	dst!, {r3, r4, ip, lr}
-+		ldmgedb	src!, {r3, r4, ip, lr}
-+		stmgedb	dst!, {r3, r4, ip, lr}
-+		ldmgedb	src!, {r3, r4, ip, lr}
-+		subges	r2, r2, #32
-+		stmdb	dst!, {r3, r4, ip, lr}
-+		bge	20b
-+	PLD(	cmn	r2, #96			)
-+	PLD(	bge	21b			)
-+	PLD(	add	r2, r2, #96		)
-+		tst	r2, #31
-+		ldmfd	sp!, {r5 - r8}
-+		ldmeqfd	sp!, {r4, pc}
-+
-+		tst	r2, #16
-+22:		ldmnedb	src!, {r3, r4, ip, lr}
-+		stmnedb	dst!, {r3, r4, ip, lr}
-+
-+		tst	r2, #8
-+23:		ldmnedb	src!, {r3, r4}
-+		stmnedb	dst!, {r3, r4}
-+
-+		tst	r2, #4
-+24:		ldrne	r3, [src, #-4]!
-+		strne	r3, [dst, #-4]!
-+
-+25:		ands	r2, r2, #3
-+		ldmeqfd	sp!, {dst, r4, pc}
-+
-+		cmp	r2, #2
-+		ldrb	r3, [src, #-1]
-+		ldrgeb	r4, [src, #-2]
-+		ldrgtb	ip, [src, #-3]
-+		strb	r3, [dst, #-1]
-+		strgeb	r4, [dst, #-2]
-+		strgtb	ip, [dst, #-3]
-+		ldmfd	sp!, {dst, r4, pc}
-+
-+26:		cmp	ip, #2
-+		ldrb	r3, [src, #-1]!
-+		ldrgeb	r4, [src, #-1]!
-+		ldrgtb	lr, [src, #-1]!
-+		strb	r3, [dst, #-1]!
-+		strgeb	r4, [dst, #-1]!
-+		strgtb	lr, [dst, #-1]!
-+		subs	r2, r2, ip
-+		blt	25b
-+		ands	ip, src, #3
-+		beq	19b
-+
-+27:		bic	src, src, #3
-+		cmp	ip, #2
-+		ldr	r3, [src]
-+		beq	35f
-+		blt	36f
-+
-+
-+		.macro	backward_copy_shift push pull
-+
-+		cmp	r2, #12
-+	PLD(	pld	[src, #-4]		)
-+		blt	33f
-+		subs	r2, r2, #28
-+		stmfd	sp!, {r5 - r9}
-+		blt	31f
-+
-+	PLD(	subs	r2, r2, #96		)
-+	PLD(	pld	[src, #-32]		)
-+	PLD(	blt	30f			)
-+	PLD(	pld	[src, #-64]		)
-+
-+	PLD(	@ cache alignment		)
-+	PLD(	ands	ip, src, #31		)
-+	PLD(	pld	[src, #-96]		)
-+	PLD(	beq	29f			)
-+	PLD(	cmp	r2, ip			)
-+	PLD(	pld	[src, #-128]		)
-+	PLD(	blt	29f			)
-+	PLD(	sub	r2, r2, ip		)
-+28:	PLD(	mov	r4, r3, push #\push	)
-+	PLD(	ldr	r3, [src, #-4]!		)
-+	PLD(	subs	ip, ip, #4		)
-+	PLD(	orr	r4, r4, r3, pull #\pull	)
-+	PLD(	str	r4, [dst, #-4]!		)
-+	PLD(	bgt	28b			)
-+
-+29:	PLD(	pld	[src, #-128]		)
-+30:		mov	lr, r3, push #\push
-+		ldmdb	src!, {r3 - r9, ip}
-+		subs	r2, r2, #32
-+		orr	lr, lr, ip, pull #\pull
-+		mov	ip, ip, push #\push
-+		orr	ip, ip, r9, pull #\pull
-+		mov	r9, r9, push #\push
-+		orr	r9, r9, r8, pull #\pull
-+		mov	r8, r8, push #\push
-+		orr	r8, r8, r7, pull #\pull
-+		mov	r7, r7, push #\push
-+		orr	r7, r7, r6, pull #\pull
-+		mov	r6, r6, push #\push
-+		orr	r6, r6, r5, pull #\pull
-+		mov	r5, r5, push #\push
-+		orr	r5, r5, r4, pull #\pull
-+		mov	r4, r4, push #\push
-+		orr	r4, r4, r3, pull #\pull
-+		stmdb	dst!, {r4 - r9, ip, lr}
-+		bge	29b
-+	PLD(	cmn	r2, #96			)
-+	PLD(	bge	30b			)
-+	PLD(	add	r2, r2, #96		)
-+		cmn	r2, #16
-+		blt	32f
-+31:		mov	r7, r3, push #\push
-+		ldmdb	src!, {r3 - r6}
-+		sub	r2, r2, #16
-+		orr	r7, r7, r6, pull #\pull
-+		mov	r6, r6, push #\push
-+		orr	r6, r6, r5, pull #\pull
-+		mov	r5, r5, push #\push
-+		orr	r5, r5, r4, pull #\pull
-+		mov	r4, r4, push #\push
-+		orr	r4, r4, r3, pull #\pull
-+		stmdb	dst!, {r4 - r7}
-+32:		adds	r2, r2, #28
-+		ldmfd	sp!, {r5 - r9}
-+		blt	34f
-+33:		mov	r4, r3, push #\push
-+		ldr	r3, [src, #-4]!
-+		subs	r2, r2, #4
-+		orr	r4, r4, r3, pull #\pull
-+		str	r4, [dst, #-4]!
-+		bge	33b
-+34:
-+		.endm
-+
-+
-+		backward_copy_shift	push=8	pull=24
-+		add	src, src, #3
-+		b	25b
-+
-+35:		backward_copy_shift	push=16	pull=16
-+		add	src, src, #2
-+		b	25b
-+
-+36:		backward_copy_shift	push=24	pull=8
-+		add	src, src, #1
-+		b	25b
-+
-+		.size	bcopy, . - bcopy
-+END(bcopy)
-
---- /dev/null	2004-02-02 20:32:13.000000000 +0000
-+++ sysdeps/arm/memcpy.S	2004-05-02 14:33:22.000000000 +0100
-@@ -0,0 +1,242 @@
-+/*
-+ *   Optimized memcpy implementation for ARM processors
-+ *
-+ *	Author: 	Nicolas Pitre
-+ *	Created:	Dec 23, 2003
-+ *	Copyright:	(C) MontaVista Software, Inc.
-+ *
-+ *   This file 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.
-+ *
-+ *   This file 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.
-+ */
-+
-+#include <sysdep.h>
-+
-+
-+/*
-+ * Endian independent macros for shifting bytes within registers.
-+ */
-+#ifndef __ARMEB__
-+#define pull            lsr
-+#define push            lsl
-+#else
-+#define pull            lsl
-+#define push            lsr
-+#endif
-+
-+/*
-+ * Enable data preload for architectures that support it (ARMv5 and above)
-+ */
-+#if defined(__ARM_ARCH_5__) || \
-+    defined(__ARM_ARCH_5T__) || \
-+    defined(__ARM_ARCH_5TE__)
-+#define PLD(code...)	code
-+#else
-+#define PLD(code...)
-+#endif
-+
-+
-+/* char * memcpy (char *dst, const char *src) */
-+
-+ENTRY(memcpy)
-+		subs	r2, r2, #4
-+		stmfd	sp!, {r0, r4, lr}
-+		blt	7f
-+		ands	ip, r0, #3
-+	PLD(	pld	[r1, #0]		)
-+		bne	8f
-+		ands	ip, r1, #3
-+		bne	9f
-+
-+1:		subs	r2, r2, #4
-+		blt	6f
-+		subs	r2, r2, #8
-+		blt	5f
-+		subs	r2, r2, #16
-+		blt	4f
-+
-+	PLD(	subs	r2, r2, #65		)
-+		stmfd	sp!, {r5 - r8}
-+	PLD(	blt	3f			)
-+	PLD(	pld	[r1, #32]		)
-+
-+	PLD(	@ cache alignment		)
-+	PLD(	ands	ip, r1, #31		)
-+	PLD(	pld	[r1, #64]		)
-+	PLD(	beq	2f			)
-+	PLD(	rsb	ip, ip, #32		)
-+	PLD(	cmp	r2, ip			)
-+	PLD(	pld	[r1, #96]		)
-+	PLD(	blt	2f			)
-+	PLD(	cmp	ip, #16			)
-+	PLD(	sub	r2, r2, ip		)
-+	PLD(	ldmgeia	r1!, {r3 - r6}		)
-+	PLD(	stmgeia	r0!, {r3 - r6}		)
-+	PLD(	beq	2f			)
-+	PLD(	and	ip, ip, #15		)
-+	PLD(	cmp	ip, #8			)
-+	PLD(	ldr	r3, [r1], #4		)
-+	PLD(	ldrge	r4, [r1], #4		)
-+	PLD(	ldrgt	r5, [r1], #4		)
-+	PLD(	str	r3, [r0], #4		)
-+	PLD(	strge	r4, [r0], #4		)
-+	PLD(	strgt	r5, [r0], #4		)
-+
-+2:	PLD(	pld	[r1, #96]		)
-+3:		ldmia	r1!, {r3 - r8, ip, lr}
-+		subs	r2, r2, #32
-+		stmia	r0!, {r3 - r8, ip, lr}
-+		bge	2b
-+	PLD(	cmn	r2, #65			)
-+	PLD(	bge	3b			)
-+	PLD(	add	r2, r2, #65		)
-+		tst	r2, #31
-+		ldmfd	sp!, {r5 - r8}
-+		ldmeqfd	sp!, {r0, r4, pc}
-+
-+		tst	r2, #16
-+4:		ldmneia	r1!, {r3, r4, ip, lr}
-+		stmneia	r0!, {r3, r4, ip, lr}
-+
-+		tst	r2, #8
-+5:		ldmneia	r1!, {r3, r4}
-+		stmneia	r0!, {r3, r4}
-+
-+		tst	r2, #4
-+6:		ldrne	r3, [r1], #4
-+		strne	r3, [r0], #4
-+
-+7:		ands	r2, r2, #3
-+		ldmeqfd	sp!, {r0, r4, pc}
-+
-+		cmp	r2, #2
-+		ldrb	r3, [r1], #1
-+		ldrgeb	r4, [r1], #1
-+		ldrgtb	ip, [r1]
-+		strb	r3, [r0], #1
-+		strgeb	r4, [r0], #1
-+		strgtb	ip, [r0]
-+		ldmfd	sp!, {r0, r4, pc}
-+
-+8:		rsb	ip, ip, #4
-+		cmp	ip, #2
-+		ldrb	r3, [r1], #1
-+		ldrgeb	r4, [r1], #1
-+		ldrgtb	lr, [r1], #1
-+		strb	r3, [r0], #1
-+		strgeb	r4, [r0], #1
-+		strgtb	lr, [r0], #1
-+		subs	r2, r2, ip
-+		blt	7b
-+		ands	ip, r1, #3
-+		beq	1b
-+
-+9:		bic	r1, r1, #3
-+		cmp	ip, #2
-+		ldr	lr, [r1], #4
-+		beq	17f
-+		bgt	18f
-+
-+
-+		.macro	forward_copy_shift pull push
-+
-+		cmp	r2, #12
-+	PLD(	pld	[r1, #0]		)
-+		blt	15f
-+		subs	r2, r2, #28
-+		stmfd	sp!, {r5 - r9}
-+		blt	13f
-+
-+	PLD(	subs	r2, r2, #97		)
-+	PLD(	blt	12f			)
-+	PLD(	pld	[r1, #32]		)
-+
-+	PLD(	@ cache alignment		)
-+	PLD(	rsb	ip, r1, #36		)
-+	PLD(	pld	[r1, #64]		)
-+	PLD(	ands	ip, ip, #31		)
-+	PLD(	pld	[r1, #96]		)
-+	PLD(	beq	11f			)
-+	PLD(	cmp	r2, ip			)
-+	PLD(	pld	[r1, #128]		)
-+	PLD(	blt	11f			)
-+	PLD(	sub	r2, r2, ip		)
-+10:	PLD(	mov	r3, lr, pull #\pull	)
-+	PLD(	ldr	lr, [r1], #4		)
-+	PLD(	subs	ip, ip, #4		)
-+	PLD(	orr	r3, r3, lr, push #\push	)
-+	PLD(	str	r3, [r0], #4		)
-+	PLD(	bgt	10b			)
-+
-+11:	PLD(	pld	[r1, #128]		)
-+12:		mov	r3, lr, pull #\pull
-+		ldmia	r1!, {r4 - r9, ip, lr}
-+		subs	r2, r2, #32
-+		orr	r3, r3, r4, push #\push
-+		mov	r4, r4, pull #\pull
-+		orr	r4, r4, r5, push #\push
-+		mov	r5, r5, pull #\pull
-+		orr	r5, r5, r6, push #\push
-+		mov	r6, r6, pull #\pull
-+		orr	r6, r6, r7, push #\push
-+		mov	r7, r7, pull #\pull
-+		orr	r7, r7, r8, push #\push
-+		mov	r8, r8, pull #\pull
-+		orr	r8, r8, r9, push #\push
-+		mov	r9, r9, pull #\pull
-+		orr	r9, r9, ip, push #\push
-+		mov	ip, ip, pull #\pull
-+		orr	ip, ip, lr, push #\push
-+		stmia	r0!, {r3 - r9, ip}
-+		bge	11b
-+	PLD(	cmn	r2, #97			)
-+	PLD(	bge	12b			)
-+	PLD(	add	r2, r2, #97		)
-+		cmn	r2, #16
-+		blt	14f
-+13:		mov	r3, lr, pull #\pull
-+		ldmia	r1!, {r4 - r6, lr}
-+		sub	r2, r2, #16
-+		orr	r3, r3, r4, push #\push
-+		mov	r4, r4, pull #\pull
-+		orr	r4, r4, r5, push #\push
-+		mov	r5, r5, pull #\pull
-+		orr	r5, r5, r6, push #\push
-+		mov	r6, r6, pull #\pull
-+		orr	r6, r6, lr, push #\push
-+		stmia	r0!, {r3 - r6}
-+14:		adds	r2, r2, #28
-+		ldmfd	sp!, {r5 - r9}
-+		blt	16f
-+15:		mov	r3, lr, pull #\pull
-+		ldr	lr, [r1], #4
-+		subs	r2, r2, #4
-+		orr	r3, r3, lr, push #\push
-+		str	r3, [r0], #4
-+		bge	15b
-+16:
-+		.endm
-+
-+
-+		forward_copy_shift	pull=8	push=24
-+		sub	r1, r1, #3
-+		b	7b
-+
-+17:		forward_copy_shift	pull=16	push=16
-+		sub	r1, r1, #2
-+		b	7b
-+
-+18:		forward_copy_shift	pull=24	push=8
-+		sub	r1, r1, #1
-+		b	7b
-+
-+		.size	memcpy, . - memcpy
-+END(memcpy)
-+libc_hidden_builtin_def (memcpy)
-+
diff --git a/recipes/glibc/glibc-2.4/arm_eabi_ipc_fix.patch b/recipes/glibc/glibc-2.4/arm_eabi_ipc_fix.patch
deleted file mode 100644
index 8b36960..0000000
--- a/recipes/glibc/glibc-2.4/arm_eabi_ipc_fix.patch
+++ /dev/null
@@ -1,94 +0,0 @@
-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: <libc-ports-return-430-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 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 <drow at false dot org>
-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: <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
-
-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  <dan@codesourcery.com>
-
-	* 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 <sysdeps/unix/sysv/linux/alpha/semctl.c>
-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 <sysdeps/unix/sysv/linux/alpha/msgctl.c>
-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 <sysdeps/unix/sysv/linux/alpha/shmctl.c>
-
diff --git a/recipes/glibc/glibc-2.4/dl-cache-libcmp.patch b/recipes/glibc/glibc-2.4/dl-cache-libcmp.patch
deleted file mode 100644
index 2fedfa6..0000000
--- a/recipes/glibc/glibc-2.4/dl-cache-libcmp.patch
+++ /dev/null
@@ -1,10 +0,0 @@
---- glibc-2.4/elf/Versions.ark	2006-03-11 23:30:09.000000000 +0100
-+++ glibc-2.4/elf/Versions	2006-03-11 23:31:44.000000000 +0100
-@@ -63,5 +63,7 @@
-     _dl_debug_state;
-     # Pointer protection.
-     __pointer_chk_guard;
-+    # for ldconfig
-+    _dl_cache_libcmp;
-   }
- }
diff --git a/recipes/glibc/glibc-2.4/dyn-ldconfig-20041128.patch b/recipes/glibc/glibc-2.4/dyn-ldconfig-20041128.patch
deleted file mode 100644
index 451b6d4..0000000
--- a/recipes/glibc/glibc-2.4/dyn-ldconfig-20041128.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-
-#
-# Patch managed by http://www.holgerschurig.de/patcher.html
-#
-
---- libc/elf/Makefile~dyn-ldconfig-20041128
-+++ libc/elf/Makefile
-@@ -118,12 +118,13 @@
- 
- ifeq (yes,$(use-ldconfig))
- ifeq (yes,$(build-shared))
--others-static	+= ldconfig
-+#others-static	+= ldconfig
- others		+= ldconfig
- install-rootsbin += ldconfig
- 
- ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
- extra-objs	+= $(ldconfig-modules:=.o)
-+CPPFLAGS-readlib.c = -DNOT_IN_libc=1
- 
- # To find xmalloc.c and xstrdup.c
- vpath %.c ../locale/programs
diff --git a/recipes/glibc/glibc-2.4/dyn-ldconfig.patch b/recipes/glibc/glibc-2.4/dyn-ldconfig.patch
deleted file mode 100644
index 1041965..0000000
--- a/recipes/glibc/glibc-2.4/dyn-ldconfig.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- elf/Makefile	13 Mar 2003 21:50:57 -0000	1.258
-+++ elf/Makefile	27 Mar 2003 20:36:07 -0000
-@@ -109,12 +109,13 @@
- 
- ifeq (yes,$(use-ldconfig))
- ifeq (yes,$(build-shared))
--others-static	+= ldconfig
-+#others-static	+= ldconfig
- others		+= ldconfig
- install-rootsbin += ldconfig
- 
- ldconfig-modules := cache readlib xmalloc xstrdup chroot_canon
- extra-objs	+= $(ldconfig-modules:=.o)
-+CPPFLAGS-readlib.c = -DNOT_IN_libc=1
- 
- # To find xmalloc.c and xstrdup.c
- vpath %.c ../locale/programs
---- elf/ldconfig.c	13 Jan 2003 08:53:14 -0000	1.31
-+++ elf/ldconfig.c	27 Mar 2003 20:36:09 -0000
-@@ -149,6 +149,9 @@
- static int
- is_hwcap_platform (const char *name)
- {
-+#if 1
-+  return 0;
-+#else
-   int hwcap_idx = _dl_string_hwcap (name);
- 
-   if (hwcap_idx != -1 && ((1 << hwcap_idx) & hwcap_mask))
-@@ -164,6 +167,7 @@
- #endif
- 
-   return 0;
-+#endif
- }
- 
- /* Get hwcap (including platform) encoding of path.  */
-@@ -175,6 +179,7 @@
-   uint64_t hwcap = 0;
-   uint64_t h;
- 
-+#if 0
-   size_t len;
- 
-   len = strlen (str);
-@@ -210,6 +215,7 @@
-       *ptr = '\0';
-     }
- 
-+#endif
-   free (str);
-   return hwcap;
- }
---- elf/Versions.old	2004-06-26 13:18:35.000000000 +0100
-+++ elf/Versions	2004-06-26 14:41:09.000000000 +0100
-@@ -54,5 +54,6 @@
-     _dl_get_tls_static_info; _dl_allocate_tls_init;
-     _dl_tls_setup; _dl_rtld_di_serinfo;
-     _dl_make_stack_executable;
-+    _dl_cache_libcmp;
-   }
- }
diff --git a/recipes/glibc/glibc-2.4/etc/ld.so.conf b/recipes/glibc/glibc-2.4/etc/ld.so.conf
deleted file mode 100644
index 46e06d3..0000000
--- a/recipes/glibc/glibc-2.4/etc/ld.so.conf
+++ /dev/null
@@ -1,2 +0,0 @@
-/usr/local/lib
-
diff --git a/recipes/glibc/glibc-2.4/fixup-aeabi-syscalls.patch b/recipes/glibc/glibc-2.4/fixup-aeabi-syscalls.patch
deleted file mode 100644
index fb733b9..0000000
--- a/recipes/glibc/glibc-2.4/fixup-aeabi-syscalls.patch
+++ /dev/null
@@ -1,329 +0,0 @@
-Fix up ARM EABI for removed syscalls
-http://sourceware.org/ml/libc-ports/2006-03/msg00029.html
-
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/socket.S
-===================================================================
---- glibc.orig/ports/sysdeps/unix/sysv/linux/arm/eabi/socket.S	2006-03-21 15:58:10.000000000 -0500
-+++ /dev/null	1970-01-01 00:00:00.000000000 +0000
-@@ -1,131 +0,0 @@
--/* Copyright (C) 1995, 1996, 1997, 1998, 2003, 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.  */
--
--#include <sysdep-cancel.h>
--#include <socketcall.h>
--
--#define P(a, b) P2(a, b)
--#define P2(a, b) a##b
--
--	.text
--/* The socket-oriented system calls are handled unusally in Linux.
--   They are all gated through the single `socketcall' system call number.
--   `socketcall' takes two arguments: the first is the subcode, specifying
--   which socket function is being called; and the second is a pointer to
--   the arguments to the specific function.
--
--   The .S files for the other calls just #define socket and #include this.  */
--
--#ifndef __socket
--# ifndef NO_WEAK_ALIAS
--#  define __socket P(__,socket)
--# else
--#  define __socket socket
--# endif
--#endif
--
--#define PUSHARGS_1	str a1, [sp, $-8]!; .pad #8
--#define PUSHARGS_2	stmfd sp!, {a1, a2}; .pad #8
--#define PUSHARGS_3	stmfd sp!, {a1, a2, a3, a4}; .pad #16	/* a4 pushed for padding */
--#define PUSHARGS_4	stmfd sp!, {a1, a2, a3, a4}; .pad #16
--#define PUSHARGS_5	stmfd sp!, {a1, a2, a3, a4}; .pad #16	/* Caller has already pushed arg 5 */
--#define PUSHARGS_6	stmfd sp!, {a1, a2, a3, a4}; .pad #16
--
--#define POPARGS_1	add sp, sp, #8
--#define POPARGS_2	add sp, sp, #8
--#define POPARGS_3	add sp, sp, #16
--#define POPARGS_4	add sp, sp, #16
--#define POPARGS_5	add sp, sp, #16
--#define POPARGS_6	add sp, sp, #16
--
--#ifndef NARGS
--#define NARGS 3			/* If we were called with no wrapper, this is really socket() */
--#endif
--
--#if defined NEED_CANCELLATION && defined CENABLE
--	PSEUDO_PROLOGUE
--#endif
--
--.globl __socket
--ENTRY (__socket)
--	.fnstart
--
--	/* This code previously moved sp into ip and stored the args using
--	   stmdb ip!, {a1-a4}.  It did not modify sp, so the stack never had
--	   to be restored after the syscall completed.  It saved an
--	   instruction and meant no stack cleanup work was required.
--
--	   This will not work in the case of a socket call being interrupted
--	   by a signal.  If the signal handler uses any stack the arguments
--	   to socket will be trashed.  The results of a restart of any
--	   socket call are then unpredictable. */
--
--	/* Push args onto the stack.  */
--	P(PUSHARGS_,NARGS)
--
--#if defined NEED_CANCELLATION && defined CENABLE
--	SINGLE_THREAD_P
--	bne 1f
--#endif
--
--        /* Do the system call trap.  */
--	mov a1, $P(SOCKOP_,socket)
--	mov a2, sp
--	DO_CALL (socketcall, 0)
--
--	/* Pop args off the stack */
--	P(POPARGS_,NARGS)
--
--	/* r0 is < 0 if there was an error.  */
--	cmn r0, $124
--	RETINSTR(cc, r14)
--	b PLTJMP(SYSCALL_ERROR)
--
--#if defined NEED_CANCELLATION && defined CENABLE
--1:
--	stmfd sp!, {r7, lr}
--	.save {r7, lr}
--	CENABLE
--	mov ip, r0
--
--	mov r0, #P(SOCKOP_,socket)
--	add r1, sp, #8
--	mov r7, #SYS_ify(socketcall)
--	swi 0x0
--
--	mov r7, r0
--	mov r0, ip
--	CDISABLE
--	mov r0, r7
--	ldmfd sp!, {r7, lr}
--
--	P(POPARGS_,NARGS)
--
--	/* r0 is < 0 if there was an error.  */
--	cmn r0, $124
--	RETINSTR(cc, r14)
--	b PLTJMP(SYSCALL_ERROR)
--#endif
--
--	.fnend
--PSEUDO_END (__socket)
--
--#ifndef NO_WEAK_ALIAS
--weak_alias (__socket, socket)
--#endif
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/syscalls.list	2006-03-21 15:58:46.000000000 -0500
-@@ -0,0 +1,34 @@
-+# File name	Caller	Syscall name	# args	Strong name	Weak names
-+
-+# semaphore and shm system calls
-+msgctl		-	msgctl		i:iip	__msgctl	msgctl
-+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
-+bind		-	bind		i:ipi	__bind		bind
-+connect		-	connect		Ci:ipi	__libc_connect	__connect_internal __connect connect
-+getpeername	-	getpeername	i:ipp	__getpeername	getpeername
-+getsockname	-	getsockname	i:ipp	__getsockname	getsockname
-+getsockopt	-	getsockopt	i:iiiBN	__getsockopt	getsockopt
-+listen		-	listen		i:ii	__listen	listen
-+recv		-	recv		Ci:ibni	__libc_recv	__recv recv
-+recvfrom	-	recvfrom	Ci:ibniBN	__libc_recvfrom	__recvfrom recvfrom
-+recvmsg		-	recvmsg		Ci:ipi	__libc_recvmsg	__recvmsg recvmsg
-+send		-	send		Ci:ibni	__libc_send	__send send
-+sendmsg		-	sendmsg		Ci:ipi	__libc_sendmsg	__sendmsg sendmsg
-+sendto		-	sendto		Ci:ibnibn	__libc_sendto	__sendto sendto
-+setsockopt	-	setsockopt	i:iiibn	__setsockopt	setsockopt
-+shutdown	-	shutdown	i:ii	__shutdown	shutdown
-+socket		-	socket		i:iii	__socket	socket
-+socketpair	-	socketpair	i:iiif	__socketpair	socketpair
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h
-===================================================================
---- glibc.orig/ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h	2006-03-21 15:58:10.000000000 -0500
-+++ glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/linuxthreads/sysdep-cancel.h	2006-03-21 15:58:46.000000000 -0500
-@@ -53,9 +53,9 @@
-     UNDOARGS_##args;							\
-     cmn r0, $4096;
- 
--/* DOARGS pushes four bytes on the stack for five arguments, and nothing
--   otherwise.  In order to preserve doubleword alignment, sometimes we must
--   save an extra register.  */
-+/* DOARGS pushes four bytes on the stack for five arguments, eight bytes for
-+   six arguments, and nothing for fewer.  In order to preserve doubleword
-+   alignment, sometimes we must save an extra register.  */
- 
- # define DOCARGS_0	stmfd sp!, {r7, lr}
- # define UNDOCARGS_0
-@@ -81,6 +81,10 @@
- # define UNDOCARGS_5	ldmfd sp!, {r0, r1, r2, r3}
- # define RESTORE_LR_5	ldmfd sp!, {r4, r7, lr}
- 
-+# define DOCARGS_6	stmfd sp!, {r0, r1, r2, r3, r7, lr}
-+# define UNDOCARGS_6	ldmfd sp!, {r0, r1, r2, r3}
-+# define RESTORE_LR_6	RESTORE_LR_0
-+
- # ifdef IS_IN_libpthread
- #  define CENABLE	bl PLTJMP(__pthread_enable_asynccancel)
- #  define CDISABLE	bl PLTJMP(__pthread_disable_asynccancel)
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h
-===================================================================
---- glibc.orig/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h	2006-03-21 15:58:10.000000000 -0500
-+++ glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/sysdep-cancel.h	2006-03-21 15:58:46.000000000 -0500
-@@ -64,9 +64,9 @@
-     UNDOARGS_##args;							\
-     cmn r0, $4096;
- 
--/* DOARGS pushes four bytes on the stack for five arguments, and nothing
--   otherwise.  In order to preserve doubleword alignment, sometimes we must
--   save an extra register.  */
-+/* DOARGS pushes four bytes on the stack for five arguments, eight bytes for
-+   six arguments, and nothing for fewer.  In order to preserve doubleword
-+   alignment, sometimes we must save an extra register.  */
- 
- # define RESTART_UNWIND .fnend; .fnstart; .save {r7, lr}
- 
-@@ -94,6 +94,10 @@
- # define UNDOCARGS_5	ldmfd sp!, {r0, r1, r2, r3}; .fnend; .fnstart; .save {r4}; .save {r7, lr}; .pad #4
- # define RESTORE_LR_5	ldmfd sp!, {r4, r7, lr}
- 
-+# define DOCARGS_6	.save {r4, r5}; stmfd sp!, {r0, r1, r2, r3, r7, lr}; .save {r7, lr}; .pad #20
-+# define UNDOCARGS_6	ldmfd sp!, {r0, r1, r2, r3}; .fnend; .fnstart; .save {r4, r5}; .save {r7, lr}
-+# define RESTORE_LR_6	RESTORE_LR_0
-+
- # ifdef IS_IN_libpthread
- #  define CENABLE	bl PLTJMP(__pthread_enable_asynccancel)
- #  define CDISABLE	bl PLTJMP(__pthread_disable_asynccancel)
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h
-===================================================================
---- glibc.orig/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h	2006-03-21 15:58:10.000000000 -0500
-+++ glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/sysdep.h	2006-03-21 15:58:46.000000000 -0500
-@@ -1,4 +1,4 @@
--/* Copyright (C) 2005
-+/* Copyright (C) 2005, 2006
-    Free Software Foundation, Inc.
- 
-    This file is part of the GNU C Library.
-@@ -29,6 +29,12 @@
- # error Kernel headers are too old
- #endif
- 
-+/* Don't use stime, even if the kernel headers define it.  We have
-+   settimeofday, and some EABI kernels have removed stime.  Similarly
-+   use setitimer to implement alarm.  */
-+#undef __NR_stime
-+#undef __NR_alarm
-+
- /* The ARM EABI user interface passes the syscall number in r7, instead
-    of in the swi.  This is more efficient, because the kernel does not need
-    to fetch the swi from memory to find out the number; which can be painful
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/umount.c
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ glibc/ports/sysdeps/unix/sysv/linux/arm/eabi/umount.c	2006-03-21 15:58:46.000000000 -0500
-@@ -0,0 +1,31 @@
-+/* Copyright (C) 2000, 2001 Free Software Foundation, Inc.
-+   This file is part of the GNU C Library.
-+   Contributed by David Huggins-Daines <dhd@debian.org>, 2000.
-+
-+   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.  */
-+
-+/* Since we don't have an oldumount system call, do what the kernel
-+   does down here.  */
-+
-+extern long int __umount2 (const char *name, int flags);
-+
-+long int
-+__umount (const char *name)
-+{
-+  return __umount2 (name, 0);
-+}
-+
-+weak_alias (__umount, umount);
-Index: glibc/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h
-===================================================================
---- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ glibc/ports/sysdeps/unix/sysv/linux/arm/kernel-features.h	2006-03-20 17:26:58.000000000 -0500
-@@ -0,0 +1,31 @@
-+/* Set flags signalling availability of kernel features based on given
-+   kernel version number.
-+   Copyright (C) 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.  */
-+
-+/* The utimes syscall was added before 2.6.1.  */
-+#if __LINUX_KERNEL_VERSION >= 132609
-+# define __ASSUME_UTIMES	1
-+#endif
-+
-+/* The new getrlimit syscall was added sometime before 2.4.6.  */
-+#if __LINUX_KERNEL_VERSION >= 132102
-+#define __ASSUME_NEW_GETRLIMIT_SYSCALL	1
-+#endif
-+
-+#include_next <kernel-features.h>
diff --git a/recipes/glibc/glibc-2.4/generic-bits_select.h b/recipes/glibc/glibc-2.4/generic-bits_select.h
deleted file mode 100644
index 47e7ded..0000000
--- a/recipes/glibc/glibc-2.4/generic-bits_select.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* 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/recipes/glibc/glibc-2.4/generic-bits_time.h b/recipes/glibc/glibc-2.4/generic-bits_time.h
deleted file mode 100644
index b3184d1..0000000
--- a/recipes/glibc/glibc-2.4/generic-bits_time.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/* 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/recipes/glibc/glibc-2.4/generic-bits_types.h b/recipes/glibc/glibc-2.4/generic-bits_types.h
deleted file mode 100644
index 65c8a9f..0000000
--- a/recipes/glibc/glibc-2.4/generic-bits_types.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/* 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/recipes/glibc/glibc-2.4/generic-bits_typesizes.h b/recipes/glibc/glibc-2.4/generic-bits_typesizes.h
deleted file mode 100644
index e9226c4..0000000
--- a/recipes/glibc/glibc-2.4/generic-bits_typesizes.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* 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/recipes/glibc/glibc-2.4/glibc-2.4-compile.patch b/recipes/glibc/glibc-2.4/glibc-2.4-compile.patch
deleted file mode 100644
index ea9f55a..0000000
--- a/recipes/glibc/glibc-2.4/glibc-2.4-compile.patch
+++ /dev/null
@@ -1,29 +0,0 @@
---- glibc-2.4/csu/libc-start.c.ark	2006-03-13 03:07:15.000000000 +0100
-+++ glibc-2.4/csu/libc-start.c	2006-03-13 03:08:51.000000000 +0100
-@@ -59,6 +59,11 @@
- # define LIBC_START_MAIN BP_SYM (__libc_start_main)
- #endif
- 
-+#ifdef SHARED
-+#include <pthread-functions.h>
-+extern struct pthread_functions __libc_pthread_functions;
-+#endif
-+
- #ifdef MAIN_AUXVEC_ARG
- /* main gets passed a pointer to the auxiliary.  */
- # define MAIN_AUXVEC_DECL	, void *
---- glibc-2.4/nscd/Makefile.ark	2006-03-13 14:05:47.000000000 +0100
-+++ glibc-2.4/nscd/Makefile	2006-03-13 14:06:12.000000000 +0100
-@@ -67,8 +67,10 @@
- # contains only the basic kernel interface headers, not something like
- # libselinux.  So the simplest thing is to presume that the standard
- # system headers will be ok for this file.
--$(objpfx)nscd_stat.o: sysincludes = # nothing
--$(objpfx)selinux.o: sysincludes = # nothing
-+# Except, of course, this breaks crosscompiling with kernel headers in
-+# a nonstandard location...
-+#$(objpfx)nscd_stat.o: sysincludes = # nothing
-+#$(objpfx)selinux.o: sysincludes = # nothing
- 
- distribute := nscd.h nscd-client.h dbg_log.h \
- 	      $(addsuffix .c, $(filter-out xmalloc,$(all-nscd-modules))) \
diff --git a/recipes/glibc/glibc-2.4/glibc-2.4-openat-3.patch b/recipes/glibc/glibc-2.4/glibc-2.4-openat-3.patch
deleted file mode 100644
index d3f37f6..0000000
--- a/recipes/glibc/glibc-2.4/glibc-2.4-openat-3.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-Submitted By: Jim Gifford (patches at jg555 dot com)
-Date: 2006-08-18
-Initial Package Version: 2.4
-Origin: http://sourceware.org/bugzilla/show_bug.cgi?id=2873
-Upstream Status: Applied
-Description: Fixes http://sourceware.org/bugzilla/show_bug.cgi?id=2873
-	     http://sourceware.org/bugzilla/show_bug.cgi?id=3040
-             http://linuxfromscratch.org/pipermail/lfs-dev/2006-June/057562.html
-	     Updated by Joe Ciccone
-
-diff -Naur glibc-2.4.orig/sysdeps/unix/sysv/linux/i386/fchownat.c glibc-2.4/sysdeps/unix/sysv/linux/i386/fchownat.c
---- glibc-2.4.orig/sysdeps/unix/sysv/linux/i386/fchownat.c	2006-02-23 14:50:21.000000000 -0800
-+++ glibc-2.4/sysdeps/unix/sysv/linux/i386/fchownat.c	2006-08-18 20:38:21.773288795 -0700
-@@ -61,6 +61,24 @@
- int
- fchownat (int fd, const char *file, uid_t owner, gid_t group, int flag)
- {
-+  int result;
-+
-+#ifdef __NR_fchownat
-+# ifndef __ASSUME_ATFCTS
-+  if (__have_atfcts >= 0)
-+# endif
-+    {
-+      result = INLINE_SYSCALL (fchownat, 5, fd, file, owner, group, flag);
-+# ifndef __ASSUME_ATFCTS
-+      if (result == -1 && errno == ENOSYS)
-+	__have_atfcts = -1;
-+      else
-+# endif
-+	return result;
-+    }
-+#endif
-+
-+#ifndef __ASSUME_ATFCTS
-   if (flag & ~AT_SYMLINK_NOFOLLOW)
-     {
-       __set_errno (EINVAL);
-@@ -87,14 +105,13 @@
-       file = buf;
-     }
- 
--  int result;
-   INTERNAL_SYSCALL_DECL (err);
- 
--#if defined __NR_lchown || __ASSUME_LCHOWN_SYSCALL > 0
--# if __ASSUME_LCHOWN_SYSCALL == 0
-+# if defined __NR_lchown || __ASSUME_LCHOWN_SYSCALL > 0
-+#  if __ASSUME_LCHOWN_SYSCALL == 0
-   static int __libc_old_chown;
- 
--#  ifdef __NR_chown32
-+#   ifdef __NR_chown32
-   if (__libc_missing_32bit_uids <= 0)
-     {
-       if (flag & AT_SYMLINK_NOFOLLOW)
-@@ -111,7 +128,7 @@
- 
-       __libc_missing_32bit_uids = 1;
-     }
--#  endif /* __NR_chown32 */
-+#   endif /* __NR_chown32 */
- 
-   if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
-       || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
-@@ -135,13 +152,13 @@
- 
-   result = INTERNAL_SYSCALL (lchown, err, 3, CHECK_STRING (file), owner,
- 			     group);
--# elif __ASSUME_32BITUIDS
-+#  elif __ASSUME_32BITUIDS
-   /* This implies __ASSUME_LCHOWN_SYSCALL.  */
-   result = INTERNAL_SYSCALL (chown32, err, 3, CHECK_STRING (file), owner,
- 			     group);
--# else
-+#  else
-   /* !__ASSUME_32BITUIDS && ASSUME_LCHOWN_SYSCALL  */
--#  ifdef __NR_chown32
-+#   ifdef __NR_chown32
-   if (__libc_missing_32bit_uids <= 0)
-     {
-       result = INTERNAL_SYSCALL (chown32, err, 3, CHECK_STRING (file), owner,
-@@ -153,7 +170,7 @@
- 
-       __libc_missing_32bit_uids = 1;
-     }
--#  endif /* __NR_chown32 */
-+#   endif /* __NR_chown32 */
-   if (((owner + 1) > (uid_t) ((__kernel_uid_t) -1U))
-       || ((group + 1) > (gid_t) ((__kernel_gid_t) -1U)))
-     {
-@@ -162,10 +179,10 @@
-     }
- 
-   result = INTERNAL_SYSCALL (chown, err, 3, CHECK_STRING (file), owner, group);
--# endif
--#else
-+#  endif
-+# else
-   result = INTERNAL_SYSCALL (chown, err, 3, CHECK_STRING (file), owner, group);
--#endif
-+# endif
- 
-   if (__builtin_expect (INTERNAL_SYSCALL_ERROR_P (result, err), 0))
-     goto fail;
-@@ -175,4 +192,5 @@
-  fail:
-   __atfct_seterrno (INTERNAL_SYSCALL_ERRNO (result, err), fd, buf);
-   return -1;
-+#endif
- }
-diff -Naur glibc-2.4.orig/sysdeps/unix/sysv/linux/openat.c glibc-2.4/sysdeps/unix/sysv/linux/openat.c
---- glibc-2.4.orig/sysdeps/unix/sysv/linux/openat.c	2006-02-28 21:32:42.000000000 -0800
-+++ glibc-2.4/sysdeps/unix/sysv/linux/openat.c	2006-08-18 20:39:14.360012706 -0700
-@@ -29,8 +29,6 @@
- 
- 
- #if !defined OPENAT && !defined __ASSUME_ATFCTS
--# define OPENAT openat
--
- /* Set errno after a failed call.  If BUF is not null,
-    it is a /proc/self/fd/ path name we just tried to use.  */
- void
-@@ -63,6 +61,9 @@
- int __have_atfcts;
- #endif
- 
-+#ifndef OPENAT
-+# define OPENAT openat
-+#endif
- 
- #define OPENAT_NOT_CANCEL CONCAT (OPENAT)
- #define CONCAT(name) CONCAT2 (name)
diff --git a/recipes/glibc/glibc-2.4/glibc-arm-IO-acquire-lock-fix.diff b/recipes/glibc/glibc-2.4/glibc-arm-IO-acquire-lock-fix.diff
deleted file mode 100644
index a552cf0..0000000
--- a/recipes/glibc/glibc-2.4/glibc-arm-IO-acquire-lock-fix.diff
+++ /dev/null
@@ -1,13 +0,0 @@
-Arm needs a similar fix as http://sourceware.org/ml/libc-ports/2007-12/msg00000.html
-
---- /tmp/stdio-lock.h	2008-03-04 18:51:15.555038993 +0100
-+++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/bits/stdio-lock.h	2008-03-04 18:51:28.445035052 +0100
-@@ -50,6 +50,8 @@
-   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp));      \
-   _IO_flockfile (_fp)
- 
-+# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
-+
- # define _IO_release_lock(_fp) \
-   _IO_funlockfile (_fp);						      \
-   _IO_cleanup_region_end (0)
diff --git a/recipes/glibc/glibc-2.4/glibc-arm-no-asm-page.patch b/recipes/glibc/glibc-2.4/glibc-arm-no-asm-page.patch
deleted file mode 100644
index 7eb1717..0000000
--- a/recipes/glibc/glibc-2.4/glibc-arm-no-asm-page.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-http://sourceware.org/ml/libc-ports/2008-04/msg00005.html
-
-
-Index: glibc-2.6.1/ports/sysdeps/unix/sysv/linux/arm/ioperm.c
-===================================================================
---- glibc-2.6.1.orig/ports/sysdeps/unix/sysv/linux/arm/ioperm.c	2008-09-12 18:08:18.000000000 -0700
-+++ glibc-2.6.1/ports/sysdeps/unix/sysv/linux/arm/ioperm.c	2008-09-12 18:08:28.000000000 -0700
-@@ -45,7 +45,6 @@
- #include <sys/mman.h>
- 
- #include <linux/version.h>
--#include <asm/page.h>
- #include <sys/sysctl.h>
- 
- #define PATH_ARM_SYSTYPE	"/etc/arm_systype"
diff --git a/recipes/glibc/glibc-2.4/glibc-check_pf.patch b/recipes/glibc/glibc-2.4/glibc-check_pf.patch
deleted file mode 100644
index 3cff6bb..0000000
--- a/recipes/glibc/glibc-2.4/glibc-check_pf.patch
+++ /dev/null
@@ -1,343 +0,0 @@
-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/recipes/glibc/glibc-2.4/glibc-crunch-eabi-force.patch b/recipes/glibc/glibc-2.4/glibc-crunch-eabi-force.patch
deleted file mode 100644
index b509b13..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-force.patch
+++ /dev/null
@@ -1,133 +0,0 @@
-diff -urN glibc-2.6.1/ports/sysdeps/arm/eabi/bits/fenv.h glibc-2.6.1/ports/sysdeps/arm/eabi/bits/fenv.h
---- glibc-2.6.1/ports/sysdeps/arm/eabi/bits/fenv.h	2008-04-04 18:32:58.000000000 +1000
-+++ glibc-2.6.1/ports/sysdeps/arm/eabi/bits/fenv.h	2008-04-07 10:40:28.000000000 +1000
-@@ -20,6 +20,8 @@
- # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
- #endif
- 
-+#if 0
-+
- /* Define bits representing exceptions in the VFP FPU status word.  */
- enum
-   {
-@@ -55,37 +57,50 @@
- #define FE_TOWARDZERO FE_TOWARDZERO
-   };
- 
-+#endif
-+
- /* Define bits representing exceptions in the CRUNCH FPU status word.  */
- enum
-   {
-     FE_CRUNCH_INVALID = (1),
- #define FE_CRUNCH_INVALID FE_CRUNCH_INVALID
-+#define FE_INVALID FE_CRUNCH_INVALID
-+#define FE_DIVBYZERO 0
-     FE_CRUNCH_OVERFLOW = (4),
- #define FE_CRUNCH_OVERFLOW FE_CRUNCH_OVERFLOW
-+#define FE_OVERFLOW FE_CRUNCH_OVERFLOW
-     FE_CRUNCH_UNDERFLOW = (8),
- #define FE_CRUNCH_UNDERFLOW FE_CRUNCH_UNDERFLOW
-+#define FE_UNDERFLOW FE_CRUNCH_UNDERFLOW
-     FE_CRUNCH_INEXACT = (16),
- #define FE_CRUNCH_INEXACT FE_CRUNCH_INEXACT
-+#define FE_INEXACT FE_CRUNCH_INEXACT
-   };
- 
- /* Amount to shift by to convert an exception to a mask bit.  */
- #define FE_CRUNCH_EXCEPT_SHIFT	5
-+#define FE_EXCEPT_SHIFT FE_CRUNCH_EXCEPT_SHIFT
- 
- /* All supported exceptions, except DIVBYZERO.  */
- #define FE_CRUNCH_ALL_EXCEPT	\
- 	(FE_CRUNCH_INVALID | FE_CRUNCH_OVERFLOW | FE_CRUNCH_UNDERFLOW | FE_CRUNCH_INEXACT)
-+#define FE_ALL_EXCEPT FE_CRUNCH_ALL_EXCEPT
- 
- /* CRUNCH supports all of the four defined rounding modes.  */
- enum
-   {
-     FE_CRUNCH_TONEAREST = 0,
- #define FE_CRUNCH_TONEAREST FE_CRUNCH_TONEAREST
-+#define FE_TONEAREST FE_CRUNCH_TONEAREST
-     FE_CRUNCH_TOWARDZERO = 0x400,
- #define FE_CRUNCH_TOWARDZERO FE_CRUNCH_TOWARDZERO
-+#define FE_TOWARDZERO FE_CRUNCH_TOWARDZERO
-     FE_CRUNCH_DOWNWARD = 0x800,
- #define FE_CRUNCH_DOWNWARD FE_CRUNCH_DOWNWARD
-+#define FE_DOWNWARD FE_CRUNCH_DOWNWARD
-     FE_CRUNCH_UPWARD = 0xc00
- #define FE_CRUNCH_UPWARD FE_CRUNCH_UPWARD
-+#define FE_UPWARD FE_CRUNCH_UPWARD
-   };
- 
- 
-diff -urN glibc-2.6.1/ports/sysdeps/arm/eabi/fpu_control.h glibc-2.6.1/ports/sysdeps/arm/eabi/fpu_control.h
---- glibc-2.6.1/ports/sysdeps/arm/eabi/fpu_control.h	2008-04-04 18:32:58.000000000 +1000
-+++ glibc-2.6.1/ports/sysdeps/arm/eabi/fpu_control.h	2008-04-07 11:02:13.000000000 +1000
-@@ -20,6 +20,8 @@
- #ifndef _FPU_CONTROL_H
- #define _FPU_CONTROL_H
- 
-+#if 0
-+
- /* masking of interrupts */
- #define _FPU_MASK_IM	0x00000100	/* invalid operation */
- #define _FPU_MASK_ZM	0x00000200	/* divide by zero */
-@@ -45,6 +47,11 @@
- #define _FPU_SETCW(cw) \
-   __asm__ __volatile__ ("mcr p10, 7, %0, cr1, cr0, 0" : : "r" (cw))
- 
-+#endif
-+
- /* CRUNCH SECTION */
-
-+/* Type of the control word.  */
-+typedef unsigned int fpu_control_t;
-+ 
- /* DSPSC register: (from EP9312 User's Guide)
-@@ -69,19 +73,27 @@
- 
- /* masking of interrupts */
- #define _FPU_CRUNCH_MASK_IM	(1 << 5)	/* invalid operation */
-+#define _FPU_MASK_IM _FPU_CRUNCH_MASK_IM
- #define _FPU_CRUNCH_MASK_ZM	0       	/* divide by zero */ 
-+#define _FPU_MASK_ZM _FPU_CRUNCH_MASK_ZM
- #define _FPU_CRUNCH_MASK_OM	(1 << 7)    /* overflow */
-+#define _FPU_MASK_OM _FPU_CRUNCH_MASK_OM
- #define _FPU_CRUNCH_MASK_UM    (1 << 8)	/* underflow */
-+#define _FPU_MASK_UM _FPU_CRUNCH_MASK_UM
- #define _FPU_CRUNCH_MASK_PM	(1 << 9)	/* inexact */
-+#define _FPU_MASK_PM _FPU_CRUNCH_MASK_PM
- #define _FPU_CRUNCH_MASK_DM    0           /* denormalized operation */
-+#undef _FPU_MASK_DM
- 
- /* Some bits in the FPSCR are not yet defined.  They must be preserved when
-    modifying the contents.  */
- #define _FPU_CRUNCH_RESERVED	0x03000042
-+#define _FPU_RESERVED _FPU_CRUNCH_RESERVED
- #define _FPU_CRUNCH_DEFAULT    0x00b00000
-+#define _FPU_DEFAULT _FPU_CRUNCH_DEFAULT
- /* Default + exceptions enabled. */
- #define _FPU_CRUNCH_IEEE	(_FPU_CRUNCH_DEFAULT | 0x000003a0)
--
-+#define _FPU_IEEE _FPU_CRUNCH_IEEE
- 
- /* Macros for accessing the hardware control word.  */
- /*	cfmvr64l	%1, mvdx0    */
-@@ -103,6 +115,7 @@
- 	: "=r" (cw), "=r" (__t1), "=r" (__t2)	\
- 	);					\
- })
-+#define _FPU_GETCW(cw) _FPU_CRUNCH_GETCW(cw)
- 
- /* cfmvr64l	%1, mvdx0    */
- /* cfmvr64h	%2, mvdx0    */
-@@ -123,7 +136,7 @@
- 	: "=r" (__t1), "=r" (__t2) : "r" (cw)	\
- 	);					\
- })
--
-+#define _FPU_SETCW(cw) _FPU_CRUNCH_SETCW(cw)
- 
- /* Default control word set at startup.  */
- extern fpu_control_t __fpu_control;
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-fraiseexcpt.patch b/recipes/glibc/glibc-2.4/glibc-crunch-eabi-fraiseexcpt.patch
deleted file mode 100644
index dcee3fa..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-fraiseexcpt.patch
+++ /dev/null
@@ -1,88 +0,0 @@
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fraiseexcpt.c glibc-2.5/ports/sysdeps/arm/eabi-new/fraiseexcpt.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fraiseexcpt.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi-new/fraiseexcpt.c	2008-04-14 17:21:09.000000000 +1000
-@@ -25,6 +25,7 @@
- #include <ldsodefs.h>
- #include <dl-procinfo.h>
- #include <sysdep.h>
-+#include <math.h>
- 
- int
- feraiseexcept (int excepts)
-@@ -105,8 +105,74 @@
- 
-   if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-     {
--      /* Unsupported, for now.  */
--      return 1;
-+      unsigned int dspsc;
-+      const float fp_zero = 0.0, fp_one = 1.0, fp_max = FLT_MAX,
-+                  fp_min = FLT_MIN, fp_1e32 = 1.0e32f, fp_two = 2.0,
-+		  fp_three = 3.0, fp_inf = HUGE_VALF;
-+
-+      /* Raise exceptions represented by EXPECTS.  But we must raise only
-+	 one signal at a time.  It is important that if the overflow/underflow
-+	 exception and the inexact exception are given at the same time,
-+	 the overflow/underflow exception follows the inexact exception.  After
-+	 each exception we read from the dspsc, to force the exception to be
-+	 raised immediately.  */
-+
-+      /* There are additional complications because this file may be compiled
-+         without CRUNCH support enabled, and we also can't assume that the
-+	 assembler has CRUNCH instructions enabled. To get around this we use the
-+	 generic coprocessor mnemonics and avoid asking GCC to put float values
-+	 in CRUNCH registers.  */
-+
-+      /* First: invalid exception.  */
-+      if (FE_CRUNCH_INVALID & excepts)
-+	/* (ZERO * INFINITY) */
-+	__asm__ __volatile__ (
-+	  "ldc p4, cr0, %1\n\t"                        /* cflds mvf0, %1  */
-+	  "ldc p4, cr1, %2\n\t"                        /* cflds mvf1, %2  */
-+	  "cdp p4, 1, cr0, cr0, cr1, 0\n\t"            /* cfmuls mvf0, mvf0, mvf1  */
-+	  "cdp p4, 0, cr0, cr0, cr0, 7\n\t"            /* cfmv32sc mvdx0, dspsc */
-+      "mrc p5, 0, %0, cr0, cr0, 0" : "=r" (dspsc) /* cfmvr64l dspsc, mvdx0 */
-+			                : "m" (fp_zero), "m" (fp_inf)
-+					: "s0", "s1");
-+
-+      /* Next: overflow.  */
-+      if (FE_CRUNCH_OVERFLOW & excepts)
-+	/* There's no way to raise overflow without also raising inexact.  */
-+	__asm__ __volatile__ (
-+	  "ldc p4, cr0, %1\n\t"                        /* cflds mvf0, %1  */
-+	  "ldc p4, cr1, %2\n\t"                        /* cflds mvf1, %2  */
-+	  "cdp p4, 3, cr0, cr0, cr1, 4\n\t"            /* cfadds mvf0, mvf0, mvf1  */
-+	  "cdp p4, 0, cr0, cr0, cr0, 7\n\t"            /* cfmv32sc mvdx0, dspsc */
-+      "mrc p5, 0, %0, cr0, cr0, 0" : "=r" (dspsc) /* cfmvr64l dspsc, mvdx0  */
-+			                : "m" (fp_max), "m" (fp_1e32)
-+					: "s0", "s1");
-+
-+      /* Next: underflow.  */
-+      if (FE_CRUNCH_UNDERFLOW & excepts)
-+	/* (FLT_MIN * FLT_MIN) */
-+	__asm__ __volatile__ (
-+	  "ldc p4, cr0, %1\n\t"                        /* cflds mvf0, %1  */
-+	  "ldc p4, cr1, %2\n\t"                        /* cflds mvf1, %2  */
-+	  "cdp p4, 1, cr0, cr0, cr1, 0\n\t"            /* cfmul mvf0, mvf0, mvf1  */
-+	  "cdp p4, 0, cr0, cr0, cr0, 7\n\t"            /* cfmv32sc mvdx0, dspsc */
-+      "mrc p5, 0, %0, cr0, cr0, 0" : "=r" (dspsc) /* cfmvr64l dspsc, mvdx0 */
-+			                : "m" (fp_min), "m" (fp_min)
-+					: "s0", "s1");
-+
-+      /* Last: inexact.  */
-+      if (FE_CRUNCH_INEXACT & excepts)
-+	/* There's no way to raise inexact without also raising overflow.  */
-+	__asm__ __volatile__ (
-+	  "ldc p4, cr0, %1\n\t"                        /* cflds mvf0, %1  */
-+	  "ldc p4, cr1, %2\n\t"                        /* cflds mvf1, %2  */
-+	  "cdp p4, 3, cr0, cr0, cr1, 4\n\t"            /* cfadds mvf0, mvf0, mvf1  */
-+	  "cdp p4, 0, cr0, cr0, cr0, 7\n\t"            /* cfmv32sc mvdx0, dspsc */
-+      "mrc p5, 0, %0, cr0, cr0, 0" : "=r" (dspsc) /* cfmvr64l dspsc, mvdx0 */
-+			                : "m" (fp_max), "m" (fp_1e32)
-+					: "s0", "s1");
-+
-+      /* Success.  */
-+      return 0;
-     }
- 
-   /* Unsupported, so fail.  */
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-setjmp_longjmp.patch b/recipes/glibc/glibc-2.4/glibc-crunch-eabi-setjmp_longjmp.patch
deleted file mode 100644
index cf4ed60..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-setjmp_longjmp.patch
+++ /dev/null
@@ -1,112 +0,0 @@
---- glibc-2.5/ports/sysdeps/arm/eabi/setjmp.S	2006-09-22 04:39:51.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/setjmp.S	2007-05-24 13:31:20.000000000 +1000
-@@ -74,6 +74,34 @@
- 	stcl	p1, cr15, [r12], #8
- Lno_iwmmxt:
- 
-+	tst	a3, #HWCAP_ARM_CRUNCH
-+	beq	Lno_crunch
-+
-+	/* Save the call-preserved crunch registers.  */
-+	/* Following instructions are cfstrd cr10, [ip], #8 (etc.)  */
-+	/* stcl	p4, cr4,  [r12], #8 */
-+	/* stcl	p4, cr5,  [r12], #8 */
-+	/* stcl	p4, cr6,  [r12], #8 */
-+	/* stcl	p4, cr7,  [r12], #8 */
-+	stcl	p4, cr8,  [r12], #8
-+	stcl	p4, cr9,  [r12], #8
-+	stcl	p4, cr10, [r12], #8
-+	stcl	p4, cr11, [r12], #8
-+	stcl	p4, cr12, [r12], #8
-+	stcl	p4, cr13, [r12], #8
-+	stcl	p4, cr14, [r12], #8
-+	stcl	p4, cr15, [r12], #8
-+	/* Store the floating-point status register.
-+	/* Following 6 instructions are FPU_CRUNCH_GETCW (r2) clob (r3, r4) */
-+	/* mrc p5, 0, r3, cr0, cr0, 0 */
-+	/* mrc p5, 0, r4, cr0, cr0, 1 */
-+	/* cdp p4, 0, cr0, cr0, cr0, 7 */
-+	/* mrc p5, 0, r2, cr0, cr0, 0 */
-+	/* mcr p5, 0, r3, cr0, cr0, 0 */
-+	/* mcr p5, 0, r4, cr0, cr0, 1 */
-+	/* str	r2, [ip], #4 */
-+Lno_crunch:
-+
- 	/* Make a tail call to __sigjmp_save; it takes the same args.  */
- 	B	PLTJMP(C_SYMBOL_NAME(__sigjmp_save))
- 
---- glibc-2.5/ports/sysdeps/arm/eabi/__longjmp.S	2006-09-22 04:39:51.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/__longjmp.S	2007-05-24 13:31:23.000000000 +1000
-@@ -76,6 +76,34 @@
- 	ldcl	p1, cr15, [r12], #8
- Lno_iwmmxt:
- 
-+	tst	a2, #HWCAP_ARM_CRUNCH
-+	beq	Lno_crunch
-+
-+	/* Restore the call-preserved crunch registers.  */
-+	/* Following instructions are cfldrd cr10, [ip], #8 (etc.)  */
-+	/* ldcl	p4, cr4,  [r12], #8 */
-+	/* ldcl	p4, cr5,  [r12], #8 */
-+	/* ldcl	p4, cr6,  [r12], #8 */
-+	/* ldcl	p4, cr7,  [r12], #8 */
-+	ldcl	p4, cr8,  [r12], #8
-+	ldcl	p4, cr9,  [r12], #8
-+	ldcl	p4, cr10, [r12], #8
-+	ldcl	p4, cr11, [r12], #8
-+	ldcl	p4, cr12, [r12], #8
-+	ldcl	p4, cr13, [r12], #8
-+	ldcl	p4, cr14, [r12], #8
-+	ldcl	p4, cr15, [r12], #8
-+	/* Restore the floating-point status register.  */
-+	ldr     r1, [ip], #4
-+	/* Following 6 instructions are FPU_CRUNCH_SETCW (r1) clob (r2, r3).  */
-+	/* mrc p5, 0, r2, cr0, cr0, 0 */
-+	/* mrc p5, 0, r3, cr0, cr0, 1 */
-+	/* mcr p5, 0, r1, cr0, cr0, 0 */
-+	/* cdp p4, 1, cr0, cr0, cr0, 7 */
-+	/* mcr p5, 0, r2, cr0, cr0, 0 */
-+	/* mcr p5, 0, r3, cr0, cr0, 1 */
-+Lno_crunch:
-+
- 	DO_RET(lr)
- 
- #ifdef IS_IN_rtld
---- glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/sysdep.h	2006-09-22 04:39:51.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/sysdep.h	2007-05-24 12:59:03.000000000 +1000
-@@ -48,6 +48,7 @@
- #define HWCAP_ARM_EDSP		128
- #define HWCAP_ARM_JAVA		256
- #define HWCAP_ARM_IWMMXT	512
-+#define HWCAP_ARM_CRUNCH  1024
- 
- #ifdef __ASSEMBLER__
- 
---- glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.c	2007-07-02 13:20:36.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.c	2007-07-02 13:23:19.000000000 +1000
-@@ -47,12 +47,12 @@
- #if !defined PROCINFO_DECL && defined SHARED
-   ._dl_arm_cap_flags
- #else
--PROCINFO_CLASS const char _dl_arm_cap_flags[10][10]
-+PROCINFO_CLASS const char _dl_arm_cap_flags[11][10]
- #endif
- #ifndef PROCINFO_DECL
- = {
-     "swp", "half", "thumb", "26bit", "fast-mult", "fpa", "vfp", "edsp",
--    "java", "iwmmxt",
-+    "java", "iwmmxt", "crunch",
-   }
- #endif
- #if !defined SHARED || defined PROCINFO_DECL
---- glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h	2007-07-02 13:25:23.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/unix/sysv/linux/arm/dl-procinfo.h	2007-07-02 13:25:38.000000000 +1000
-@@ -24,7 +24,7 @@
- #include <ldsodefs.h>
- #include <sysdep.h>
- 
--#define _DL_HWCAP_COUNT 10
-+#define _DL_HWCAP_COUNT 11
- 
- /* The kernel provides platform data but it is not interesting.  */
- #define _DL_HWCAP_PLATFORM 	0
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-unwind.patch b/recipes/glibc/glibc-2.4/glibc-crunch-eabi-unwind.patch
deleted file mode 100644
index d91d4fd..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-eabi-unwind.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h	2008-04-04 15:57:19.000000000 +1000
-+++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind.h	2008-04-04 16:00:41.000000000 +1000
-@@ -138,7 +138,8 @@
-       _UVRSC_VFP = 1,       /* vfp */
-       _UVRSC_FPA = 2,       /* fpa */
-       _UVRSC_WMMXD = 3,     /* Intel WMMX data register */
--      _UVRSC_WMMXC = 4      /* Intel WMMX control register */
-+      _UVRSC_WMMXC = 4,     /* Intel WMMX control register */
-+      _UVRSC_CRUNCH = 5     /* Maverick crunch register */
-     }
-   _Unwind_VRS_RegClass;
- 
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-eabi.patch b/recipes/glibc/glibc-2.4/glibc-crunch-eabi.patch
deleted file mode 100644
index 8af4baf..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-eabi.patch
+++ /dev/null
@@ -1,461 +0,0 @@
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/bits/fenv.h glibc-2.5/ports/sysdeps/arm/eabi/bits/fenv.h
---- glibc-2.5/ports/sysdeps/arm/eabi/bits/fenv.h	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/bits/fenv.h	2008-04-02 13:35:39.000000000 +1000
-@@ -20,7 +20,7 @@
- # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
- #endif
- 
--/* Define bits representing exceptions in the FPU status word.  */
-+/* Define bits representing exceptions in the VFP FPU status word.  */
- enum
-   {
-     FE_INVALID = 1,
-@@ -55,6 +55,40 @@
- #define FE_TOWARDZERO FE_TOWARDZERO
-   };
- 
-+/* Define bits representing exceptions in the CRUNCH FPU status word.  */
-+enum
-+  {
-+    FE_CRUNCH_INVALID = (1),
-+#define FE_CRUNCH_INVALID FE_CRUNCH_INVALID
-+    FE_CRUNCH_OVERFLOW = (4),
-+#define FE_CRUNCH_OVERFLOW FE_CRUNCH_OVERFLOW
-+    FE_CRUNCH_UNDERFLOW = (8),
-+#define FE_CRUNCH_UNDERFLOW FE_CRUNCH_UNDERFLOW
-+    FE_CRUNCH_INEXACT = (16),
-+#define FE_CRUNCH_INEXACT FE_CRUNCH_INEXACT
-+  };
-+
-+/* Amount to shift by to convert an exception to a mask bit.  */
-+#define FE_CRUNCH_EXCEPT_SHIFT	5
-+
-+/* All supported exceptions, except DIVBYZERO.  */
-+#define FE_CRUNCH_ALL_EXCEPT	\
-+	(FE_CRUNCH_INVALID | FE_CRUNCH_OVERFLOW | FE_CRUNCH_UNDERFLOW | FE_CRUNCH_INEXACT)
-+
-+/* CRUNCH supports all of the four defined rounding modes.  */
-+enum
-+  {
-+    FE_CRUNCH_TONEAREST = 0,
-+#define FE_CRUNCH_TONEAREST FE_CRUNCH_TONEAREST
-+    FE_CRUNCH_TOWARDZERO = 0x400,
-+#define FE_CRUNCH_TOWARDZERO FE_CRUNCH_TOWARDZERO
-+    FE_CRUNCH_DOWNWARD = 0x800,
-+#define FE_CRUNCH_DOWNWARD FE_CRUNCH_DOWNWARD
-+    FE_CRUNCH_UPWARD = 0xc00
-+#define FE_CRUNCH_UPWARD FE_CRUNCH_UPWARD
-+  };
-+
-+
- /* Type representing exception flags. */
- typedef unsigned int fexcept_t;
- 
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fclrexcpt.c glibc-2.5/ports/sysdeps/arm/eabi/fclrexcpt.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fclrexcpt.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fclrexcpt.c	2008-04-02 13:25:09.000000000 +1000
-@@ -48,6 +48,26 @@
-       return 0;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned long int temp;
-+
-+      /* Mask out unsupported bits/exceptions.  */
-+      excepts &= FE_CRUNCH_ALL_EXCEPT;
-+
-+      /* Get the current floating point status. */
-+      _FPU_CRUNCH_GETCW (temp);
-+
-+      /* Clear the relevant bits.  */
-+      temp = (temp & ~FE_CRUNCH_ALL_EXCEPT) | (temp & FE_CRUNCH_ALL_EXCEPT & ~excepts);
-+
-+      /* Put the new data in effect.  */
-+      _FPU_CRUNCH_SETCW (temp);
-+
-+      /* Success.  */
-+      return 0;
-+    }
-+
-   /* Unsupported, so fail.  */
-   return 1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fedisblxcpt.c glibc-2.5/ports/sysdeps/arm/eabi/fedisblxcpt.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fedisblxcpt.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fedisblxcpt.c	2008-04-02 13:29:44.000000000 +1000
-@@ -46,6 +46,23 @@
-       return old_exc;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned long int new_exc, old_exc;
-+
-+      _FPU_CRUNCH_GETCW(new_exc);
-+
-+      old_exc = (new_exc >> FE_CRUNCH_EXCEPT_SHIFT) & FE_CRUNCH_ALL_EXCEPT;
-+
-+      excepts &= FE_CRUNCH_ALL_EXCEPT;
-+
-+      new_exc &= ~(excepts << FE_CRUNCH_EXCEPT_SHIFT);
-+
-+      _FPU_CRUNCH_SETCW(new_exc);
-+
-+      return old_exc;
-+    }
-+
-   /* Unsupported, so return -1 for failure.  */
-   return -1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/feenablxcpt.c glibc-2.5/ports/sysdeps/arm/eabi/feenablxcpt.c
---- glibc-2.5/ports/sysdeps/arm/eabi/feenablxcpt.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/feenablxcpt.c	2008-04-02 13:30:30.000000000 +1000
-@@ -46,6 +46,23 @@
-       return old_exc;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned long int new_exc, old_exc;
-+
-+      _FPU_CRUNCH_GETCW(new_exc);
-+
-+      old_exc = (new_exc >> FE_CRUNCH_EXCEPT_SHIFT) & FE_CRUNCH_ALL_EXCEPT;
-+
-+      excepts &= FE_CRUNCH_ALL_EXCEPT;
-+
-+      new_exc |= (excepts << FE_CRUNCH_EXCEPT_SHIFT);
-+
-+      _FPU_CRUNCH_SETCW(new_exc);
-+
-+      return old_exc;
-+    }
-+
-   /* Unsupported, so return -1 for failure.  */
-   return -1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fegetenv.c glibc-2.5/ports/sysdeps/arm/eabi/fegetenv.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fegetenv.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fegetenv.c	2008-04-02 13:31:08.000000000 +1000
-@@ -38,6 +38,16 @@
-       return 0;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned long int temp;
-+      _FPU_CRUNCH_GETCW (temp);
-+      envp->__cw = temp;
-+
-+      /* Success.  */
-+      return 0;
-+    }
-+
-   /* Unsupported, so fail.  */
-   return 1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fegetexcept.c glibc-2.5/ports/sysdeps/arm/eabi/fegetexcept.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fegetexcept.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fegetexcept.c	2008-04-02 13:31:40.000000000 +1000
-@@ -38,6 +38,15 @@
-       return (temp >> FE_EXCEPT_SHIFT) & FE_ALL_EXCEPT;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned long temp;
-+
-+      _FPU_CRUNCH_GETCW (temp);
-+
-+      return (temp >> FE_CRUNCH_EXCEPT_SHIFT) & FE_CRUNCH_ALL_EXCEPT;
-+    }
-+
-   /* Unsupported. Return all exceptions disabled.  */
-   return 0;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fegetround.c glibc-2.5/ports/sysdeps/arm/eabi/fegetround.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fegetround.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fegetround.c	2008-04-02 13:32:18.000000000 +1000
-@@ -38,6 +38,16 @@
-       return temp & FE_TOWARDZERO;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned int temp;
-+
-+      /* Get the current environment.  */
-+      _FPU_CRUNCH_GETCW (temp);
-+
-+      return temp & FE_CRUNCH_UPWARD;
-+    }
-+
-   /* The current soft-float implementation only handles TONEAREST.  */
-   return FE_TONEAREST;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/feholdexcpt.c glibc-2.5/ports/sysdeps/arm/eabi/feholdexcpt.c
---- glibc-2.5/ports/sysdeps/arm/eabi/feholdexcpt.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/feholdexcpt.c	2008-04-02 13:36:24.000000000 +1000
-@@ -47,6 +47,25 @@
-       return 0;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned long int temp;
-+
-+      /* Store the environment.  */
-+      _FPU_CRUNCH_GETCW(temp);
-+      envp->__cw = temp;
-+
-+      /* Now set all exceptions to non-stop.  */
-+      temp &= ~(FE_CRUNCH_ALL_EXCEPT << FE_CRUNCH_EXCEPT_SHIFT);
-+
-+      /* And clear all exception flags.  */
-+      temp &= ~FE_CRUNCH_ALL_EXCEPT;
-+
-+      _FPU_CRUNCH_SETCW(temp);
-+
-+      return 0;
-+    }
-+
-   /* Unsupported, so fail.  */
-   return 1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fesetenv.c glibc-2.5/ports/sysdeps/arm/eabi/fesetenv.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fesetenv.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fesetenv.c	2008-04-02 13:43:31.000000000 +1000
-@@ -48,6 +48,26 @@
-       return 0;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      unsigned int temp;
-+
-+      _FPU_CRUNCH_GETCW (temp);
-+      temp &= _FPU_CRUNCH_RESERVED;
-+
-+      if (envp == FE_DFL_ENV)
-+	temp |= _FPU_CRUNCH_DEFAULT;
-+      else if (envp == FE_NOMASK_ENV)
-+	temp |= _FPU_CRUNCH_IEEE;
-+      else
-+	temp |= envp->__cw & ~_FPU_CRUNCH_RESERVED;
-+
-+      _FPU_CRUNCH_SETCW (temp);
-+
-+      /* Success.  */
-+      return 0;
-+    }
-+
-   /* Unsupported, so fail.  */
-   return 1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fesetround.c glibc-2.5/ports/sysdeps/arm/eabi/fesetround.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fesetround.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fesetround.c	2008-04-02 13:57:35.000000000 +1000
-@@ -45,6 +45,24 @@
- 	default:
- 	  return 1;
- 	}
-     }
-+  else if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      fpu_control_t temp;
-+
-+      switch (round)
-+	{
-+	case FE_CRUNCH_TONEAREST:
-+	case FE_CRUNCH_UPWARD:
-+	case FE_CRUNCH_DOWNWARD:
-+	case FE_CRUNCH_TOWARDZERO:
-+	  _FPU_CRUNCH_GETCW (temp);
-+	  temp = (temp & ~FE_CRUNCH_UPWARD) | round;
-+	  _FPU_CRUNCH_SETCW (temp);
-+	  return 0;
-+	default:
-+	  return 1;
-+	}
-+   }
-   else if (round == FE_TONEAREST)
-     /* This is the only supported rounding mode for soft-fp.  */
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fpu_control.h glibc-2.5/ports/sysdeps/arm/eabi/fpu_control.h
---- glibc-2.5/ports/sysdeps/arm/eabi/fpu_control.h	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fpu_control.h	2008-04-02 13:43:05.000000000 +1000
-@@ -45,6 +45,86 @@
- #define _FPU_SETCW(cw) \
-   __asm__ __volatile__ ("mcr p10, 7, %0, cr1, cr0, 0" : : "r" (cw))
- 
-+/* CRUNCH SECTION */
-+
-+/* DSPSC register: (from EP9312 User's Guide)
-+ *
-+ * bits 31..29	- DAID
-+ * bits 28..26	- HVID
-+ * bits 25..24	- RSVD
-+ * bit  23	- ISAT
-+ * bit  22	- UI
-+ * bit  21	- INT
-+ * bit  20	- AEXC
-+ * bits 19..18	- SAT
-+ * bits 17..16	- FCC
-+ * bit  15	- V
-+ * bit  14	- FWDEN
-+ * bit  13	- Invalid
-+ * bit	12	- Denorm
-+ * bits 11..10	- RM
-+ * bits 9..5	- IXE, UFE, OFE, RSVD, IOE
-+ * bits 4..0	- IX, UF, OF, RSVD, IO
-+ */
-+
-+/* masking of interrupts */
-+#define _FPU_CRUNCH_MASK_IM	(1 << 5)	/* invalid operation */
-+#define _FPU_CRUNCH_MASK_ZM	0       	/* divide by zero */ 
-+#define _FPU_CRUNCH_MASK_OM	(1 << 7)    /* overflow */
-+#define _FPU_CRUNCH_MASK_UM    (1 << 8)	/* underflow */
-+#define _FPU_CRUNCH_MASK_PM	(1 << 9)	/* inexact */
-+#define _FPU_CRUNCH_MASK_DM    0           /* denormalized operation */
-+
-+/* Some bits in the FPSCR are not yet defined.  They must be preserved when
-+   modifying the contents.  */
-+#define _FPU_CRUNCH_RESERVED	0x03000042
-+#define _FPU_CRUNCH_DEFAULT    0x00b00000
-+/* Default + exceptions enabled. */
-+#define _FPU_CRUNCH_IEEE	(_FPU_CRUNCH_DEFAULT | 0x000003a0)
-+
-+
-+/* Macros for accessing the hardware control word.  */
-+/*	cfmvr64l	%1, mvdx0    */
-+/*	cfmvr64h	%2, mvdx0    */
-+/*	cfmv32sc	mvdx0, dspsc */
-+/*	cfmvr64l	%0, mvdx0    */
-+/*	cfmv64lr	mvdx0, %1    */
-+/*	cfmv64hr	mvdx0, %2    */
-+#define _FPU_CRUNCH_GETCW(cw) ({			\
-+	register int __t1, __t2;		\
-+						\
-+	__asm__ volatile (			        \
-+	"mrc p5, 0, %1, cr0, cr0, 0\n\t"		\
-+	"mrc p5, 0, %2, cr0, cr0, 1\n\t"		\
-+	"cdp p4, 0, cr0, cr0, cr0, 7\n\t"	    \
-+	"mrc p5, 0, %0, cr0, cr0, 0\n\t"		\
-+	"mcr p5, 0, %1, cr0, cr0, 0\n\t"	    \
-+	"mcr p5, 0, %2, cr0, cr0, 1"		    \
-+	: "=r" (cw), "=r" (__t1), "=r" (__t2)	\
-+	);					\
-+})
-+
-+/* cfmvr64l	%1, mvdx0    */
-+/* cfmvr64h	%2, mvdx0    */
-+/* cfmv64lr	mvdx0, %0    */
-+/* cfmvsc32	dspsc, mvdx0 */
-+/* cfmv64lr	mvdx0, %1    */
-+/* cfmv64hr	mvdx0, %2    */
-+#define _FPU_CRUNCH_SETCW(cw) ({		\
-+	register int __t1, __t2;		\
-+						\
-+	__asm__ volatile (			\
-+	"mrc p5, 0, %0, cr0, cr0, 0\n\t"		\
-+	"mrc p5, 0, %1, cr0, cr0, 1\n\t"		\
-+	"mcr p5, 0, %2, cr0, cr0, 0\n\t"		\
-+	"cdp p4, 1, cr0, cr0, cr0, 7\n\t"	    \
-+	"mcr p5, 0, %0, cr0, cr0, 0\n\t"		\
-+	"mcr p5, 0, %1, cr0, cr0, 1\n\t"		\
-+	: "=r" (__t1), "=r" (__t2) : "r" (cw)	\
-+	);					\
-+})
-+
-+
- /* Default control word set at startup.  */
- extern fpu_control_t __fpu_control;
- 
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fraiseexcpt.c glibc-2.5/ports/sysdeps/arm/eabi/fraiseexcpt.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fraiseexcpt.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fraiseexcpt.c	2008-04-07 16:48:09.000000000 +1000
-@@ -103,6 +103,12 @@
-       return 0;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      /* Unsupported, for now.  */
-+      return 1;
-+    }
-+
-   /* Unsupported, so fail.  */
-   return 1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/fsetexcptflg.c glibc-2.5/ports/sysdeps/arm/eabi/fsetexcptflg.c
---- glibc-2.5/ports/sysdeps/arm/eabi/fsetexcptflg.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/fsetexcptflg.c	2008-04-02 13:49:34.000000000 +1000
-@@ -47,6 +47,24 @@
-       return 0;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      fexcept_t temp;
-+
-+      /* Get the current environment.  */
-+      _FPU_CRUNCH_GETCW (temp);
-+
-+      /* Set the desired exception mask.  */
-+      temp &= ~((excepts & FE_CRUNCH_ALL_EXCEPT) << FE_CRUNCH_EXCEPT_SHIFT);
-+      temp |= (*flagp & excepts & FE_CRUNCH_ALL_EXCEPT) << FE_CRUNCH_EXCEPT_SHIFT;
-+
-+      /* Save state back to the FPU.  */
-+      _FPU_CRUNCH_SETCW (temp);
-+
-+      /* Success.  */
-+      return 0;
-+    }
-+
-   /* Unsupported, so fail.  */
-   return 1;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/ftestexcept.c glibc-2.5/ports/sysdeps/arm/eabi/ftestexcept.c
---- glibc-2.5/ports/sysdeps/arm/eabi/ftestexcept.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/ftestexcept.c	2008-04-02 13:50:10.000000000 +1000
-@@ -38,6 +38,16 @@
-       return temp & excepts & FE_ALL_EXCEPT;
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      fexcept_t temp;
-+
-+      /* Get current exceptions.  */
-+      _FPU_CRUNCH_GETCW(temp);
-+
-+      return temp & excepts & FE_CRUNCH_ALL_EXCEPT;
-+    }
-+
-   /* Unsupported, return 0.  */
-   return 0;
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/eabi/setfpucw.c glibc-2.5/ports/sysdeps/arm/eabi/setfpucw.c
---- glibc-2.5/ports/sysdeps/arm/eabi/setfpucw.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/eabi/setfpucw.c	2008-04-02 13:51:28.000000000 +1000
-@@ -43,5 +43,20 @@
-       _FPU_SETCW (cw);
-     }
- 
-+  if (GLRO (dl_hwcap) & HWCAP_ARM_CRUNCH)
-+    {
-+      fpu_control_t cw;
-+
-+      /* Fetch the current control word.  */
-+      _FPU_CRUNCH_GETCW (cw);
-+
-+      /* Preserve the reserved bits, and set the rest as the user
-+	 specified (or the default, if the user gave zero).  */
-+      cw &= _FPU_CRUNCH_RESERVED;
-+      cw |= set & ~_FPU_CRUNCH_RESERVED;
-+
-+      _FPU_CRUNCH_SETCW (cw);
-+    }
-+
-   /* Do nothing if a VFP unit isn't present.  */
- }
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-endian-bigword-littlebyte.patch b/recipes/glibc/glibc-2.4/glibc-crunch-endian-bigword-littlebyte.patch
deleted file mode 100644
index e181e97..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-endian-bigword-littlebyte.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-diff -urN glibc-2.5/ports/sysdeps/arm/bits/endian.h glibc-2.5/ports/sysdeps/arm/bits/endian.h
---- glibc-2.5/ports/sysdeps/arm/bits/endian.h	2005-06-13 20:11:47.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/bits/endian.h	2007-05-18 08:41:52.000000000 +1000
-@@ -15,5 +15,9 @@
- #ifdef __VFP_FP__
- #define __FLOAT_WORD_ORDER __BYTE_ORDER
- #else
-+#ifdef __MAVERICK__
-+#define __FLOAT_WORD_ORDER __BIG_ENDIAN
-+#else
- #define __FLOAT_WORD_ORDER __BIG_ENDIAN
- #endif
-+#endif
-diff -urN glibc-2.5/ports/sysdeps/arm/gccframe.h glibc-2.5/ports/sysdeps/arm/gccframe.h
---- glibc-2.5/ports/sysdeps/arm/gccframe.h	2001-11-16 11:07:20.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/gccframe.h	2007-05-18 08:53:38.000000000 +1000
-@@ -17,6 +17,10 @@
-    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.  */
- 
-+#ifdef __MAVERICK__
-+#define FIRST_PSEUDO_REGISTER 43
-+#else
- #define FIRST_PSEUDO_REGISTER 27
-+#endif
- 
- #include <sysdeps/generic/gccframe.h>
-diff -urN glibc-2.5/ports/sysdeps/arm/gmp-mparam.h glibc-2.5/ports/sysdeps/arm/gmp-mparam.h
---- glibc-2.5/ports/sysdeps/arm/gmp-mparam.h	2005-06-13 20:11:47.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/gmp-mparam.h	2007-05-18 08:54:21.000000000 +1000
-@@ -29,6 +29,9 @@
- #if defined(__ARMEB__)
- # define IEEE_DOUBLE_MIXED_ENDIAN 0
- # define IEEE_DOUBLE_BIG_ENDIAN 1
-+#elif defined(__MAVERICK__)
-+#define IEEE_DOUBLE_MIXED_ENDIAN 0
-+#define IEEE_DOUBLE_BIG_ENDIAN 1
- #elif defined(__VFP_FP__)
- # define IEEE_DOUBLE_MIXED_ENDIAN 0
- # define IEEE_DOUBLE_BIG_ENDIAN 0
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-endian-littleword-littlebyte.patch b/recipes/glibc/glibc-2.4/glibc-crunch-endian-littleword-littlebyte.patch
deleted file mode 100644
index e8559d4..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-endian-littleword-littlebyte.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-diff -urN glibc-2.5/ports/sysdeps/arm/bits/endian.h glibc-2.5/ports/sysdeps/arm/bits/endian.h
---- glibc-2.5/ports/sysdeps/arm/bits/endian.h	2005-06-13 20:11:47.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/bits/endian.h	2007-05-18 08:41:52.000000000 +1000
-@@ -15,5 +15,9 @@
- #ifdef __VFP_FP__
- #define __FLOAT_WORD_ORDER __BYTE_ORDER
- #else
-+#ifdef __MAVERICK__
-+#define __FLOAT_WORD_ORDER __LITTLE_ENDIAN
-+#else
- #define __FLOAT_WORD_ORDER __BIG_ENDIAN
- #endif
-+#endif
-diff -urN glibc-2.5/ports/sysdeps/arm/gccframe.h glibc-2.5/ports/sysdeps/arm/gccframe.h
---- glibc-2.5/ports/sysdeps/arm/gccframe.h	2001-11-16 11:07:20.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/gccframe.h	2007-05-18 08:53:38.000000000 +1000
-@@ -17,6 +17,10 @@
-    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-    02111-1307 USA.  */
- 
-+#ifdef __MAVERICK__
-+#define FIRST_PSEUDO_REGISTER 43
-+#else
- #define FIRST_PSEUDO_REGISTER 27
-+#endif
- 
- #include <sysdeps/generic/gccframe.h>
-diff -urN glibc-2.5/ports/sysdeps/arm/gmp-mparam.h glibc-2.5/ports/sysdeps/arm/gmp-mparam.h
---- glibc-2.5/ports/sysdeps/arm/gmp-mparam.h	2005-06-13 20:11:47.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/gmp-mparam.h	2007-05-18 08:54:21.000000000 +1000
-@@ -29,6 +29,9 @@
- #if defined(__ARMEB__)
- # define IEEE_DOUBLE_MIXED_ENDIAN 0
- # define IEEE_DOUBLE_BIG_ENDIAN 1
-+#elif defined(__MAVERICK__)
-+#define IEEE_DOUBLE_MIXED_ENDIAN 0
-+#define IEEE_DOUBLE_BIG_ENDIAN 0
- #elif defined(__VFP_FP__)
- # define IEEE_DOUBLE_MIXED_ENDIAN 0
- # define IEEE_DOUBLE_BIG_ENDIAN 0
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-oabi.patch b/recipes/glibc/glibc-2.4/glibc-crunch-oabi.patch
deleted file mode 100644
index 964abb4..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-oabi.patch
+++ /dev/null
@@ -1,310 +0,0 @@
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/bits/fenv.h glibc-2.5/ports/sysdeps/arm/fpu/bits/fenv.h
---- glibc-2.5/ports/sysdeps/arm/fpu/bits/fenv.h	2001-07-06 14:55:48.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/bits/fenv.h	2007-05-18 08:44:33.000000000 +1000
-@@ -20,6 +20,45 @@
- # error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
- #endif
- 
-+#if defined(__MAVERICK__)
-+
-+/* Define bits representing exceptions in the FPU status word.  */
-+enum
-+  {
-+    FE_INVALID = 1,
-+#define FE_INVALID FE_INVALID
-+    FE_OVERFLOW = 4,
-+#define FE_OVERFLOW FE_OVERFLOW
-+    FE_UNDERFLOW = 8,
-+#define FE_UNDERFLOW FE_UNDERFLOW
-+    FE_INEXACT = 16,
-+#define FE_INEXACT FE_INEXACT
-+  };
-+
-+/* Amount to shift by to convert an exception to a mask bit.  */
-+#define FE_EXCEPT_SHIFT	5
-+
-+/* All supported exceptions.  */
-+#define FE_ALL_EXCEPT	\
-+	(FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
-+
-+/* IEEE rounding modes.  */
-+enum
-+  {
-+    FE_TONEAREST = 0,
-+#define FE_TONEAREST    FE_TONEAREST
-+    FE_TOWARDZERO = 0x400,
-+#define FE_TOWARDZERO   FE_TOWARDZERO
-+    FE_DOWNWARD = 0x800,
-+#define FE_DOWNWARD     FE_DOWNWARD
-+    FE_UPWARD = 0xc00,
-+#define FE_UPWARD       FE_UPWARD
-+  };
-+
-+#define FE_ROUND_MASK (FE_UPWARD)
-+
-+#else /* FPA */
-+
- /* Define bits representing exceptions in the FPU status word.  */
- enum
-   {
-@@ -31,6 +70,7 @@
- #define FE_OVERFLOW FE_OVERFLOW
-     FE_UNDERFLOW = 8,
- #define FE_UNDERFLOW FE_UNDERFLOW
-+
-   };
- 
- /* Amount to shift by to convert an exception to a mask bit.  */
-@@ -44,6 +84,8 @@
-    modes exist, but you have to encode them in the actual instruction.  */
- #define FE_TONEAREST	0
- 
-+#endif /* FPA */
-+
- /* Type representing exception flags. */
- typedef unsigned long int fexcept_t;
- 
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/bits/setjmp.h glibc-2.5/ports/sysdeps/arm/fpu/bits/setjmp.h
---- glibc-2.5/ports/sysdeps/arm/fpu/bits/setjmp.h	2006-01-10 19:22:16.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/bits/setjmp.h	2007-05-18 08:45:22.000000000 +1000
-@@ -28,7 +28,11 @@
- #ifndef _ASM
- /* Jump buffer contains v1-v6, sl, fp, sp and pc.  Other registers are not
-    saved.  */
-+#ifdef __MAVERICK__
-+typedef int __jmp_buf[34];
-+#else
- typedef int __jmp_buf[22];
- #endif
-+#endif 
- 
- #endif
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/fegetround.c glibc-2.5/ports/sysdeps/arm/fpu/fegetround.c
---- glibc-2.5/ports/sysdeps/arm/fpu/fegetround.c	2001-07-06 14:55:48.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/fegetround.c	2007-05-18 08:47:52.000000000 +1000
-@@ -18,9 +18,21 @@
-    02111-1307 USA.  */
- 
- #include <fenv.h>
-+#include <fpu_control.h>
- 
- int
- fegetround (void)
- {
-+#if defined(__MAVERICK__)
-+
-+  unsigned long temp;
-+
-+  _FPU_GETCW (temp);
-+  return temp & FE_ROUND_MASK;
-+
-+#else /* FPA */
-+
-   return FE_TONEAREST;		/* Easy. :-) */
-+
-+#endif
- }
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/fesetround.c glibc-2.5/ports/sysdeps/arm/fpu/fesetround.c
---- glibc-2.5/ports/sysdeps/arm/fpu/fesetround.c	2005-10-11 01:29:32.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/fesetround.c	2007-05-18 08:48:32.000000000 +1000
-@@ -20,10 +20,26 @@
- #include <fenv.h>
-+#include <fpu_control.h>
-
- int
- fesetround (int round)
- {
-+#if defined(__MAVERICK__)
-+  unsigned long temp;
-+
-+  if (round & ~FE_ROUND_MASK)
-+    return 1;
-+
-+  _FPU_GETCW (temp);
-+  temp = (temp & ~FE_ROUND_MASK) | round;
-+  _FPU_SETCW (temp);
-+  return 0;
-+
-+#else /* FPA */
-+
-   /* We only support FE_TONEAREST, so there is no need for any work.  */
-   return (round == FE_TONEAREST)?0:1;
-+
-+#endif
- }
- 
- libm_hidden_def (fesetround)
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/fpu_control.h glibc-2.5/ports/sysdeps/arm/fpu/fpu_control.h
---- glibc-2.5/ports/sysdeps/arm/fpu/fpu_control.h	2001-07-06 14:55:48.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/fpu_control.h	2007-05-18 08:50:28.000000000 +1000
-@@ -20,6 +20,81 @@
- #ifndef _FPU_CONTROL_H
- #define _FPU_CONTROL_H
- 
-+#if defined(__MAVERICK__)
-+
-+/* DSPSC register: (from EP9312 User's Guide)
-+ *
-+ * bits 31..29	- DAID
-+ * bits 28..26	- HVID
-+ * bits 25..24	- RSVD
-+ * bit  23	- ISAT
-+ * bit  22	- UI
-+ * bit  21	- INT
-+ * bit  20	- AEXC
-+ * bits 19..18	- SAT
-+ * bits 17..16	- FCC
-+ * bit  15	- V
-+ * bit  14	- FWDEN
-+ * bit  13	- Invalid
-+ * bit	12	- Denorm
-+ * bits 11..10	- RM
-+ * bits 9..5	- IXE, UFE, OFE, RSVD, IOE
-+ * bits 4..0	- IX, UF, OF, RSVD, IO
-+ */
-+
-+/* masking of interrupts */
-+#define _FPU_MASK_IM	(1 << 5)	/* invalid operation */
-+#define _FPU_MASK_ZM	0		/* divide by zero */
-+#define _FPU_MASK_OM	(1 << 7)	/* overflow */
-+#define _FPU_MASK_UM	(1 << 8)	/* underflow */
-+#define _FPU_MASK_PM	(1 << 9)	/* inexact */
-+#define _FPU_MASK_DM	0		/* denormalized operation */
-+
-+#define _FPU_RESERVED	0xfffff000	/* These bits are reserved.  */
-+
-+#define _FPU_DEFAULT	0x00b00000	/* Default value.  */
-+#define _FPU_IEEE	    0x00b003a0	/* Default + exceptions enabled. */
-+
-+/* Type of the control word.  */
-+typedef unsigned int fpu_control_t;
-+
-+/* Macros for accessing the hardware control word.  */
-+#define _FPU_GETCW(cw) ({			\
-+	register int __t1, __t2;		\
-+						\
-+	__asm__ volatile (			\
-+	"cfmvr64l	%1, mvdx0\n\t"		\
-+	"cfmvr64h	%2, mvdx0\n\t"		\
-+	"cfmv32sc	mvdx0, dspsc\n\t"	\
-+	"cfmvr64l	%0, mvdx0\n\t"		\
-+	"cfmv64lr	mvdx0, %1\n\t"		\
-+	"cfmv64hr	mvdx0, %2"		\
-+	: "=r" (cw), "=r" (__t1), "=r" (__t2)	\
-+	);					\
-+})
-+
-+#define _FPU_SETCW(cw) ({			\
-+	register int __t0, __t1, __t2;		\
-+						\
-+	__asm__ volatile (			\
-+	"cfmvr64l	%1, mvdx0\n\t"		\
-+	"cfmvr64h	%2, mvdx0\n\t"		\
-+	"cfmv64lr	mvdx0, %0\n\t"		\
-+	"cfmvsc32	dspsc, mvdx0\n\t"	\
-+	"cfmv64lr	mvdx0, %1\n\t"		\
-+	"cfmv64hr	mvdx0, %2"		\
-+	: "=r" (__t0), "=r" (__t1), "=r" (__t2)	\
-+	: "0" (cw)				\
-+	);					\
-+})
-+
-+/* Default control word set at startup.  */
-+extern fpu_control_t __fpu_control;
-+
-+#else /* FPA */
-+
-+
-+
- /* We have a slight terminology confusion here.  On the ARM, the register
-  * we're interested in is actually the FPU status word - the FPU control
-  * word is something different (which is implementation-defined and only
-@@ -99,4 +174,6 @@
- /* Default control word set at startup.  */
- extern fpu_control_t __fpu_control;
- 
-+#endif /* FPA */
-+
- #endif /* _FPU_CONTROL_H */
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/__longjmp.S glibc-2.5/ports/sysdeps/arm/fpu/__longjmp.S
---- glibc-2.5/ports/sysdeps/arm/fpu/__longjmp.S	2001-07-06 14:55:48.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/__longjmp.S	2007-05-18 08:51:36.000000000 +1000
-@@ -30,7 +30,33 @@
- 	movs	r0, r1		/* get the return value in place */
- 	moveq	r0, #1		/* can't let setjmp() return zero! */
- 
-+#ifdef __MAVERICK__
-+	cfldrd	mvd4,  [ip], #8
-+	nop
-+	cfldrd	mvd5,  [ip], #8
-+	nop
-+	cfldrd	mvd6,  [ip], #8
-+	nop
-+	cfldrd	mvd7,  [ip], #8
-+	nop
-+	cfldrd	mvd8,  [ip], #8
-+	nop
-+	cfldrd	mvd9,  [ip], #8
-+	nop
-+	cfldrd	mvd10, [ip], #8
-+	nop
-+	cfldrd	mvd11, [ip], #8
-+	nop
-+	cfldrd	mvd12, [ip], #8
-+	nop
-+	cfldrd	mvd13, [ip], #8
-+	nop
-+	cfldrd	mvd14, [ip], #8
-+	nop
-+	cfldrd	mvd15, [ip], #8
-+#else
- 	lfmfd	f4, 4, [ip] !	/* load the floating point regs */
-+#endif
- 
- 	LOADREGS(ia, ip, {v1-v6, sl, fp, sp, pc})
- END (__longjmp)
-diff -urN glibc-2.5/ports/sysdeps/arm/fpu/setjmp.S glibc-2.5/ports/sysdeps/arm/fpu/setjmp.S
---- glibc-2.5/ports/sysdeps/arm/fpu/setjmp.S	2001-07-06 14:55:48.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/fpu/setjmp.S	2007-05-18 08:53:00.000000000 +1000
-@@ -24,11 +24,41 @@
- 
- ENTRY (__sigsetjmp)
- 	/* Save registers */
-+#ifdef __MAVERICK__
-+	cfstrd	mvd4,  [r0], #8
-+	nop
-+	cfstrd	mvd5,  [r0], #8
-+	nop
-+	cfstrd	mvd6,  [r0], #8
-+	nop
-+	cfstrd	mvd7,  [r0], #8
-+	nop
-+	cfstrd	mvd8,  [r0], #8
-+	nop
-+	cfstrd	mvd9,  [r0], #8
-+	nop
-+	cfstrd	mvd10, [r0], #8
-+	nop
-+	cfstrd	mvd11, [r0], #8
-+	nop
-+	cfstrd	mvd12, [r0], #8
-+	nop
-+	cfstrd	mvd13, [r0], #8
-+	nop
-+	cfstrd	mvd14, [r0], #8
-+	nop
-+	cfstrd	mvd15, [r0], #8
-+#else
- 	sfmea	f4, 4, [r0]!
-+#endif
- 	stmia	r0, {v1-v6, sl, fp, sp, lr}
- 
- 	/* Restore pointer to jmp_buf */
-+#ifdef __MAVERICK__
-+	sub	r0, r0, #96
-+#else
- 	sub	r0, r0, #48
-+#endif
- 
- 	/* Make a tail call to __sigjmp_save; it takes the same args.  */
- 	B	PLTJMP(C_SYMBOL_NAME(__sigjmp_save))
diff --git a/recipes/glibc/glibc-2.4/glibc-crunch-oabi2.patch b/recipes/glibc/glibc-2.4/glibc-crunch-oabi2.patch
deleted file mode 100644
index fe5a050..0000000
--- a/recipes/glibc/glibc-2.4/glibc-crunch-oabi2.patch
+++ /dev/null
@@ -1,18 +0,0 @@
---- glibc-2.5/ports/sysdeps/arm/sysdep.h	2007-07-02 13:05:53.000000000 +1000
-+++ glibc-2.5/ports/sysdeps/arm/sysdep.h	2007-07-02 13:06:26.000000000 +1000
-@@ -51,6 +51,7 @@
- 
- #endif
- 
-+#if 0 // ndef __MAVERICK__
- /* APCS-32 doesn't preserve the condition codes across function call. */
- #ifdef __APCS_32__
- #define LOADREGS(cond, base, reglist...)\
-@@ -74,6 +75,7 @@
- #define DO_RET(_reg)		\
- 	movs pc, _reg
- #endif
-+#endif
- 
- /* Define an entry point visible from C.  */
- #define	ENTRY(name)							      \
diff --git a/recipes/glibc/glibc-2.4/glibc-use-isystem-include-fixed.patch b/recipes/glibc/glibc-2.4/glibc-use-isystem-include-fixed.patch
deleted file mode 100644
index d9ed12a..0000000
--- a/recipes/glibc/glibc-2.4/glibc-use-isystem-include-fixed.patch
+++ /dev/null
@@ -1,46 +0,0 @@
-http://sourceware.org/ml/libc-alpha/2007-03/msg00017.html
-
-GCC trunk now has multiple internal headers directories, one
-containing the self-contained GCC-provided headers and one containing
-the <limits.h> (not self-contained but including libc's <limits.h> or
-a fixed version thereof) and the fixed headers; more such directories
-may be added in future.
-
-When glibc uses -nostdinc, it needs to use -isystem options for all
-these internal directories.  This patch teaches it about the
-include-fixed directory (and is harmless with old GCC versions without
-that directory).
-
-2007-03-18  Joseph Myers  <joseph@codesourcery.com>
-
-	* configure.in: Also pass -isystem option for GCC's include-fixed
-	directory.
-	* configure: Regenerate.
-
-
-Index: glibc-2.6.1/configure
-===================================================================
---- glibc-2.6.1.orig/configure	2008-09-12 16:38:06.000000000 -0700
-+++ glibc-2.6.1/configure	2008-09-12 16:39:22.000000000 -0700
-@@ -4563,7 +4563,7 @@
- # thing on a system that doesn't need fixincludes.  (Not presently a problem.)
- if test -n "$sysheaders"; then
-   ccheaders=`$CC -print-file-name=include`
--  SYSINCLUDES="-nostdinc -isystem $ccheaders \
-+  SYSINCLUDES="-nostdinc -isystem $ccheaders -isystem $ccheaders-fixed \
- -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
-   if test -n "$CXX"; then
-     cxxversion=`$CXX -dumpversion 2>&5` &&
-Index: glibc-2.6.1/configure.in
-===================================================================
---- glibc-2.6.1.orig/configure.in	2008-09-12 16:38:26.000000000 -0700
-+++ glibc-2.6.1/configure.in	2008-09-12 16:39:01.000000000 -0700
-@@ -912,7 +912,7 @@
- # thing on a system that doesn't need fixincludes.  (Not presently a problem.)
- if test -n "$sysheaders"; then
-   ccheaders=`$CC -print-file-name=include`
--  SYSINCLUDES="-nostdinc -isystem $ccheaders \
-+  SYSINCLUDES="-nostdinc -isystem $ccheaders -isystem $ccheaders-fixed \
- -isystem `echo $sysheaders | sed 's/:/ -isystem /g'`"
-   if test -n "$CXX"; then
-     cxxversion=`$CXX -dumpversion 2>&AS_MESSAGE_LOG_FD` &&
diff --git a/recipes/glibc/glibc-2.4/ldd-unbash.patch b/recipes/glibc/glibc-2.4/ldd-unbash.patch
deleted file mode 100644
index 2fb8854..0000000
--- a/recipes/glibc/glibc-2.4/ldd-unbash.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- 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/recipes/glibc/glibc-2.4/ldsocache-varrun.patch b/recipes/glibc/glibc-2.4/ldsocache-varrun.patch
deleted file mode 100644
index 9994d4f..0000000
--- a/recipes/glibc/glibc-2.4/ldsocache-varrun.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-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/recipes/glibc/glibc-2.4/no-z-defs.patch b/recipes/glibc/glibc-2.4/no-z-defs.patch
deleted file mode 100644
index 48c6a41..0000000
--- a/recipes/glibc/glibc-2.4/no-z-defs.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-Create a configparms file which disabled no-z-defs.
-This is required to build a working glibs for sh4,
-without there will be a lot linker errors during the build.
-
-diff -duNr libc.orig/configparms libc/configparms
---- libc.orig/configparms	1970-01-01 10:00:00.000000000 +1000
-+++ libc/configparms	2006-02-23 14:08:18.000000000 +1100
-@@ -0,0 +1 @@
-+no-z-defs=yes
diff --git a/recipes/glibc/glibc-2.4/nptl-crosscompile.patch b/recipes/glibc/glibc-2.4/nptl-crosscompile.patch
deleted file mode 100644
index 18a46ad..0000000
--- a/recipes/glibc/glibc-2.4/nptl-crosscompile.patch
+++ /dev/null
@@ -1,26 +0,0 @@
---- 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/recipes/glibc/glibc-2.4/powerpc-sqrt-hack.diff b/recipes/glibc/glibc-2.4/powerpc-sqrt-hack.diff
deleted file mode 100644
index 1046efb..0000000
--- a/recipes/glibc/glibc-2.4/powerpc-sqrt-hack.diff
+++ /dev/null
@@ -1,25 +0,0 @@
-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 };
diff --git a/recipes/glibc/glibc-2.4/zecke-sane-readelf.patch b/recipes/glibc/glibc-2.4/zecke-sane-readelf.patch
deleted file mode 100644
index 2bc8797..0000000
--- a/recipes/glibc/glibc-2.4/zecke-sane-readelf.patch
+++ /dev/null
@@ -1,243 +0,0 @@
-upstream: http://sources.redhat.com/bugzilla/show_bug.cgi?id=3004
-status: WONTFIX
-comment: Use OEs version of the readelf version. There might be no
-host system version (e.g. on OSX) or it is not multiarch.
-
-Index: glibc-2.6.1/configure
-===================================================================
---- glibc-2.6.1.orig/configure	2007-07-31 06:46:12.000000000 -0700
-+++ glibc-2.6.1/configure	2008-09-12 16:38:06.000000000 -0700
-@@ -5478,6 +5478,96 @@
-     fi
-   fi
- 
-+###  AC_CHECK_TARGET_TOOL([READELF],[readelf],[readelf],[$PATH])
-+### XXXX copy and pasted
-+# Check for readelf
-+# Extract the first word of "$target_alias-readelf", so it can be a program name with args.
-+set dummy $target_alias-readelf; ac_word=$2
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-+if test "${ac_cv_prog_READELF+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  if test -n "$READELF"; then
-+  ac_cv_prog_READELF="$READELF" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+  for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_prog_READELF="$target_alias-readelf"
-+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+READELF=$ac_cv_prog_READELF
-+if test -n "$READELF"; then
-+  { echo "$as_me:$LINENO: result: $READELF" >&5
-+echo "${ECHO_T}$READELF" >&6; }
-+else
-+  { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
-+fi
-+
-+
-+if test -z "$ac_cv_prog_READELF"; then
-+  if test "$build" = "$target"; then
-+    ac_ct_READELF=$READELF
-+    # Extract the first word of "readelf", so it can be a program name with args.
-+set dummy readelf; ac_word=$2
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-+if test "${ac_cv_prog_ac_ct_READELF+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  if test -n "$ac_ct_READELF"; then
-+  ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+  for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_prog_ac_ct_READELF="readelf"
-+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+done
-+IFS=$as_save_IFS
-+
-+  test -z "$ac_cv_prog_ac_ct_READELF" && ac_cv_prog_ac_ct_READELF="readelf"
-+fi
-+fi
-+ac_ct_READELF=$ac_cv_prog_ac_ct_READELF
-+if test -n "$ac_ct_READELF"; then
-+  { echo "$as_me:$LINENO: result: $ac_ct_READELF" >&5
-+echo "${ECHO_T}$ac_ct_READELF" >&6; }
-+else
-+  { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
-+fi
-+
-+    READELF=ac_ct_READELF
-+  else
-+    READELF="readelf"
-+  fi
-+else
-+  READELF="$ac_cv_prog_READELF"
-+fi
-+
-+### XXXX copy and pasted
-+
-   echo "$as_me:$LINENO: checking for .preinit_array/.init_array/.fini_array support" >&5
- echo $ECHO_N "checking for .preinit_array/.init_array/.fini_array support... $ECHO_C" >&6
- if test "${libc_cv_initfini_array+set}" = set; then
-@@ -5497,7 +5587,7 @@
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); }; }
-   then
--    if readelf -S conftest | fgrep INIT_ARRAY > /dev/null; then
-+    if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
-       libc_cv_initfini_array=yes
-     else
-       libc_cv_initfini_array=no
-@@ -5797,7 +5887,7 @@
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); }; }
-   then
--    if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
-+    if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
-       libc_cv_z_combreloc=yes
-     else
-       libc_cv_z_combreloc=no
-Index: glibc-2.6.1/configure.in
-===================================================================
---- glibc-2.6.1.orig/configure.in	2007-03-20 05:11:23.000000000 -0700
-+++ glibc-2.6.1/configure.in	2008-09-12 16:38:26.000000000 -0700
-@@ -1347,6 +1347,96 @@
-     fi
-   fi
- 
-+###  AC_CHECK_TARGET_TOOL([READELF],[readelf],[readelf],[$PATH])
-+### XXXX copy and pasted
-+# Check for readelf
-+# Extract the first word of "$target_alias-readelf", so it can be a program name with args.
-+set dummy $target_alias-readelf; ac_word=$2
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-+if test "${ac_cv_prog_READELF+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  if test -n "$READELF"; then
-+  ac_cv_prog_READELF="$READELF" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+  for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_prog_READELF="$target_alias-readelf"
-+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+done
-+IFS=$as_save_IFS
-+
-+fi
-+fi
-+READELF=$ac_cv_prog_READELF
-+if test -n "$READELF"; then
-+  { echo "$as_me:$LINENO: result: $READELF" >&5
-+echo "${ECHO_T}$READELF" >&6; }
-+else
-+  { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
-+fi
-+
-+
-+if test -z "$ac_cv_prog_READELF"; then
-+  if test "$build" = "$target"; then
-+    ac_ct_READELF=$READELF
-+    # Extract the first word of "readelf", so it can be a program name with args.
-+set dummy readelf; ac_word=$2
-+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-+if test "${ac_cv_prog_ac_ct_READELF+set}" = set; then
-+  echo $ECHO_N "(cached) $ECHO_C" >&6
-+else
-+  if test -n "$ac_ct_READELF"; then
-+  ac_cv_prog_ac_ct_READELF="$ac_ct_READELF" # Let the user override the test.
-+else
-+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-+for as_dir in $PATH
-+do
-+  IFS=$as_save_IFS
-+  test -z "$as_dir" && as_dir=.
-+  for ac_exec_ext in '' $ac_executable_extensions; do
-+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; }; then
-+    ac_cv_prog_ac_ct_READELF="readelf"
-+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
-+    break 2
-+  fi
-+done
-+done
-+IFS=$as_save_IFS
-+
-+  test -z "$ac_cv_prog_ac_ct_READELF" && ac_cv_prog_ac_ct_READELF="readelf"
-+fi
-+fi
-+ac_ct_READELF=$ac_cv_prog_ac_ct_READELF
-+if test -n "$ac_ct_READELF"; then
-+  { echo "$as_me:$LINENO: result: $ac_ct_READELF" >&5
-+echo "${ECHO_T}$ac_ct_READELF" >&6; }
-+else
-+  { echo "$as_me:$LINENO: result: no" >&5
-+echo "${ECHO_T}no" >&6; }
-+fi
-+
-+    READELF=ac_ct_READELF
-+  else
-+    READELF="readelf"
-+  fi
-+else
-+  READELF="$ac_cv_prog_READELF"
-+fi
-+
-+### XXXX copy and pasted
-+
-   AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support,
- 		 libc_cv_initfini_array, [dnl
-   cat > conftest.c <<EOF
-@@ -1358,7 +1448,7 @@
-   if AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS $LDFLAGS -o conftest conftest.c
- 		     -static -nostartfiles -nostdlib 1>&AS_MESSAGE_LOG_FD])
-   then
--    if readelf -S conftest | fgrep INIT_ARRAY > /dev/null; then
-+    if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then
-       libc_cv_initfini_array=yes
-     else
-       libc_cv_initfini_array=no
-@@ -1543,7 +1633,7 @@
- dnl introducing new options this is not easily doable.  Instead use a tool
- dnl which always is cross-platform: readelf.  To detect whether -z combreloc
- dnl look for a section named .rel.dyn.
--    if readelf -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
-+    if $READELF -S conftest.so | grep '\.rel\(a\|\)\.dyn' > /dev/null; then
-       libc_cv_z_combreloc=yes
-     else
-       libc_cv_z_combreloc=no
diff --git a/recipes/glibc/glibc-2.7/all_glibc-i586-chk.patch b/recipes/glibc/glibc-2.7/all_glibc-i586-chk.patch
deleted file mode 100644
index 9362bca..0000000
--- a/recipes/glibc/glibc-2.7/all_glibc-i586-chk.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-http://bugs.gentoo.org/199479
-
-2007-09-13  H.J. Lu  <hongjiu.lu@intel.com>
-
-	* sysdeps/i386/i586/memcpy_chk.S: New file.
-	* sysdeps/i386/i586/mempcpy_chk.S: Likewise.
-	* sysdeps/i386/i586/memset_chk.S: Likewise.
-
-Index: glibc/sysdeps/i386/i586/memcpy_chk.S
-===================================================================
-RCS file: sysdeps/i386/i586/memcpy_chk.S
-diff -N sysdeps/i386/i586/memcpy_chk.S
---- /dev/null	1 Jan 1970 00:00:00 -0000
-+++ glibc/sysdeps/i386/i586/memcpy_chk.S	13 Nov 2007 01:56:18 -0000	1.1
-@@ -0,0 +1 @@
-+#include <sysdeps/i386/i686/memcpy_chk.S>
-Index: glibc/sysdeps/i386/i586/mempcpy_chk.S
-===================================================================
-RCS file: sysdeps/i386/i586/mempcpy_chk.S
-diff -N sysdeps/i386/i586/mempcpy_chk.S
---- /dev/null	1 Jan 1970 00:00:00 -0000
-+++ glibc/sysdeps/i386/i586/mempcpy_chk.S	13 Nov 2007 01:56:18 -0000	1.1
-@@ -0,0 +1 @@
-+#include <sysdeps/i386/i686/mempcpy_chk.S>
-Index: glibc/sysdeps/i386/i586/memset_chk.S
-===================================================================
-RCS file: sysdeps/i386/i586/memset_chk.S
-diff -N sysdeps/i386/i586/memset_chk.S
---- /dev/null	1 Jan 1970 00:00:00 -0000
-+++ glibc/sysdeps/i386/i586/memset_chk.S	13 Nov 2007 01:56:18 -0000	1.1
-@@ -0,0 +1 @@
-+#include <sysdeps/i386/i686/memset_chk.S>
-
diff --git a/recipes/glibc/glibc-initial_2.3.2+cvs20040726.bb b/recipes/glibc/glibc-initial_2.3.2+cvs20040726.bb
deleted file mode 100644
index c7dde23..0000000
--- a/recipes/glibc/glibc-initial_2.3.2+cvs20040726.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require glibc_${PV}.bb
-require glibc-initial.inc
-
-DEFAULT_PREFERENCE_sh3 = "-99"
diff --git a/recipes/glibc/glibc-initial_2.3.6.bb b/recipes/glibc/glibc-initial_2.3.6.bb
deleted file mode 100644
index fa7836a..0000000
--- a/recipes/glibc/glibc-initial_2.3.6.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require glibc_${PV}.bb
-require glibc-initial.inc
diff --git a/recipes/glibc/glibc-initial_2.4.bb b/recipes/glibc/glibc-initial_2.4.bb
deleted file mode 100644
index fa7836a..0000000
--- a/recipes/glibc/glibc-initial_2.4.bb
+++ /dev/null
@@ -1,2 +0,0 @@
-require glibc_${PV}.bb
-require glibc-initial.inc
diff --git a/recipes/glibc/glibc-initial_2.7.bb b/recipes/glibc/glibc-initial_2.7.bb
deleted file mode 100644
index d662970..0000000
--- a/recipes/glibc/glibc-initial_2.7.bb
+++ /dev/null
@@ -1,6 +0,0 @@
-require glibc_${PV}.bb
-require glibc-initial.inc
-
-do_configure_prepend () {
-	unset CFLAGS
-}
diff --git a/recipes/glibc/glibc_2.3.2+cvs20040726.bb b/recipes/glibc/glibc_2.3.2+cvs20040726.bb
deleted file mode 100644
index 712ad3f..0000000
--- a/recipes/glibc/glibc_2.3.2+cvs20040726.bb
+++ /dev/null
@@ -1,78 +0,0 @@
-require glibc.inc
-
-DEFAULT_PREFERENCE_sh3 = "-99"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
-PR = "${INC_PR}.0"
-
-GLIBC_ADDONS ?= "linuxthreads"
-
-#	   file://noinfo.patch
-#	   file://ldconfig.patch;striplevel=0
-SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
-	   file://arm-ioperm.patch;striplevel=0 \
-	   file://makeconfig.patch;striplevel=0 \
-	   file://ldd.patch;striplevel=0 \
-	   file://fhs-linux-paths.patch \
-	   file://arm-no-hwcap.patch;striplevel=0 \
-	   file://arm-memcpy.patch;striplevel=0 \
-	   file://arm-longlong.patch;striplevel=0 \
-	   file://arm-machine-gmon.patch;striplevel=0 \
-	   file://glibc-fp-byteorder.patch \
-	   \
-           file://etc/ld.so.conf \
-	   file://generate-supported.mk"
-
-# seems to fail on tls platforms
-SRC_URI_append_arm = " file://dyn-ldconfig.patch;striplevel=0"
-
-SRC_URI_append_openmn = " file://ldsocache-varrun.patch"
-
-S = "${WORKDIR}/libc"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		${GLIBC_EXTRA_OECONF}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# this really is arm specific
-	touch ${S}/sysdeps/arm/framestate.c
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
diff --git a/recipes/glibc/glibc_2.3.3+cvs20041128.bb b/recipes/glibc/glibc_2.3.3+cvs20041128.bb
deleted file mode 100644
index b1e5509..0000000
--- a/recipes/glibc/glibc_2.3.3+cvs20041128.bb
+++ /dev/null
@@ -1,100 +0,0 @@
-require glibc.inc
-
-DEFAULT_PREFERENCE_sh3 = "-99"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
-PR = "${INC_PR}.0"
-
-GLIBC_ADDONS ?= "linuxthreads"
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_i686 = "0"
-DEFAULT_PREFERENCE_sh3 = "0"
-DEFAULT_PREFERENCE_sh4 = "0"
-
-#
-# For now, we will skip building of a gcc package if it is a uclibc one
-# and our build is not a uclibc one, and we skip a glibc one if our build
-# is a uclibc build.
-#
-# See the note in gcc/gcc_3.4.0.oe
-#
-
-python __anonymous () {
-    import bb, re
-    uc_os = (re.match('.*uclibc$', bb.data.getVar('TARGET_OS', d, 1)) != None)
-    if uc_os:
-        raise bb.parse.SkipPackage("incompatible with target %s" %
-                                   bb.data.getVar('TARGET_OS', d, 1))
-}
-
-#	   file://noinfo.patch
-#	   file://ldconfig.patch;striplevel=0
-SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
-	   file://arm-ioperm.patch;striplevel=0 \
-	   file://ldd.patch;striplevel=0 \
-	   file://fhs-linux-paths.patch \
-	   file://arm-no-hwcap.patch;striplevel=0 \
-	   file://arm-memcpy.patch;striplevel=0 \
-	   file://arm-longlong.patch;striplevel=0 \
-	   file://arm-machine-gmon.patch;striplevel=0 \
-	   \
-           file://etc/ld.so.conf \
-	   file://generate-supported.mk"
-
-# seems to fail on tls platforms
-SRC_URI_append_arm = " file://dyn-ldconfig-20041128.patch"
-
-SRC_URI_append_openmn = " file://ldsocache-varrun.patch"
-
-S = "${WORKDIR}/libc"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		--without-selinux \
-		${GLIBC_EXTRA_OECONF}"
-
-EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# this really is arm specific
-	touch ${S}/sysdeps/arm/framestate.c
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
diff --git a/recipes/glibc/glibc_2.3.3+cvs20050221.bb b/recipes/glibc/glibc_2.3.3+cvs20050221.bb
deleted file mode 100644
index 3164a57..0000000
--- a/recipes/glibc/glibc_2.3.3+cvs20050221.bb
+++ /dev/null
@@ -1,83 +0,0 @@
-require glibc.inc
-
-DEFAULT_PREFERENCE_sh3 = "-99"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
-PR = "${INC_PR}.0"
-
-GLIBC_ADDONS ?= "linuxthreads"
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_i686 = "0"
-DEFAULT_PREFERENCE_sh3 = "0"
-DEFAULT_PREFERENCE_sh4 = "0"
-
-#	   file://noinfo.patch
-#	   file://ldconfig.patch;striplevel=0
-SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
-	   file://arm-ioperm.patch;striplevel=0 \
-	   file://fhs-linux-paths.patch \
-	   file://arm-no-hwcap.patch;striplevel=0 \
-	   file://arm-memcpy.patch;striplevel=0 \
-	   file://arm-longlong.patch;striplevel=0 \
-	   file://arm-machine-gmon.patch;striplevel=0 \
-	   file://trampoline.patch;striplevel=0 \
-	   file://dl-cache-libcmp.patch \
-	   \
-           file://etc/ld.so.conf \
-	   file://generate-supported.mk"
-
-# seems to fail on tls platforms
-SRC_URI_append_arm = " file://dyn-ldconfig-20041128.patch"
-
-SRC_URI_append_openmn = " file://ldsocache-varrun.patch"
-
-S = "${WORKDIR}/libc"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		--without-selinux \
-		${GLIBC_EXTRA_OECONF}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# this really is arm specific
-	touch ${S}/sysdeps/arm/framestate.c
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
diff --git a/recipes/glibc/glibc_2.3.3+cvs20050420.bb b/recipes/glibc/glibc_2.3.3+cvs20050420.bb
deleted file mode 100644
index 1169d42..0000000
--- a/recipes/glibc/glibc_2.3.3+cvs20050420.bb
+++ /dev/null
@@ -1,84 +0,0 @@
-require glibc.inc
-
-DEFAULT_PREFERENCE_i586 = "0"
-
-DEFAULT_PREFERENCE_sh3 = "-99"
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-cvs"
-PR = "${INC_PR}.0"
-
-GLIBC_ADDONS ?= "linuxthreads"
-
-DEFAULT_PREFERENCE = "-1"
-
-#	   file://noinfo.patch
-#	   file://ldconfig.patch;striplevel=0
-SRC_URI = "cvs://anoncvs@sources.redhat.com/cvs/glibc;module=libc;date=${@bb.data.getVar('PV', d, 1)[9:]} \
-	   file://arm-ioperm.patch;striplevel=0 \
-	   file://fhs-linux-paths.patch \
-	   file://arm-no-hwcap.patch;striplevel=0 \
-	   file://arm-memcpy.patch;striplevel=0 \
-	   file://arm-longlong.patch;striplevel=0 \
-	   file://arm-machine-gmon.patch;striplevel=0 \
-	   file://trampoline.patch;striplevel=0 \
-	   file://eabi-patch-1;apply=yes \
-	   file://eabi-patch-2;apply=yes \
-	   file://eabi-patch-3;apply=yes \
-	   file://5090_all_stubs-rule-fix.patch \
-           file://etc/ld.so.conf \
-	   file://generate-supported.mk"
-
-# seems to fail on tls platforms
-SRC_URI_append_arm = " file://dyn-ldconfig-20041128.patch"
-
-SRC_URI_append_openmn = " file://ldsocache-varrun.patch"
-
-S = "${WORKDIR}/libc"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		--without-selinux \
-		${GLIBC_EXTRA_OECONF}"
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# this really is arm specific
-	touch ${S}/sysdeps/arm/framestate.c
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
diff --git a/recipes/glibc/glibc_2.3.6.bb b/recipes/glibc/glibc_2.3.6.bb
deleted file mode 100644
index a2b2953..0000000
--- a/recipes/glibc/glibc_2.3.6.bb
+++ /dev/null
@@ -1,118 +0,0 @@
-require glibc.inc
-
-PR = "${INC_PR}.0"
-
-GLIBC_ADDONS ?= "linuxthreads"
-
-#           ${CROSSTOOL_PATCH_URL}glibc-2.3.5-cygwin.patch
-
-CROSSTOOL_PATCH_URL = "http://www.kegel.com/crosstool/crosstool-0.43/patches/glibc-2.3.6/"
-SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2;name=archive \
-           ftp://ftp.gnu.org/pub/gnu/glibc/glibc-linuxthreads-${PV}.tar.bz2;name=linuxthreads \
-           ${CROSSTOOL_PATCH_URL}glibc-2.3.5-sh-lowlevellock.patch;name=crosspatch1 \
-           ${CROSSTOOL_PATCH_URL}glibc-2.3.5-sh-memset.patch;name=crosspatch2 \
-           ${CROSSTOOL_PATCH_URL}glibc-2.3.6-allow-gcc-4.0-arm.patch;name=crosspatch3 \
-           ${CROSSTOOL_PATCH_URL}glibc-2.3.6-allow-gcc-4.0-elf.patch;name=crosspatch4 \
-           ${CROSSTOOL_PATCH_URL}glibc-2.3.6-configure-apple-as.patch;name=crosspatch5 \
-           ${CROSSTOOL_PATCH_URL}glibc-2.3.6-fix-pr631.patch;name=crosspatch6 \
-           ${CROSSTOOL_PATCH_URL}glibc-fp-byteorder.patch;name=crosspatch7 \
-           ${CROSSTOOL_PATCH_URL}glibc-mips-bootstrap-gcc-header-install.patch;name=crosspatch8 \
-           ${CROSSTOOL_PATCH_URL}arm-ctl_bus_isa.patch;name=crosspatch9 \
-           ${CROSSTOOL_PATCH_URL}make-install-lib-all.patch;name=crosspatch10 \
-           ${CROSSTOOL_PATCH_URL}maybe/glibc-2.3.6-allow-gcc-4.0-powerpc32.patch;name=crosspatch11 \
-           file://glibc-2.3.6-bind-already-defined-on-powerpc.patch \
-           file://glibc-2.3.6-allow-gcc-4.1-powerpc32-initfini.s.patch \
-           file://glibc-2.3.6-linuxthreads-allow-gcc-4.1-powerpc32-initfini.s.patch \
-           file://late-install-loop-break.patch \
-           file://glibc-arm-socket-weakalias.patch \
-           file://glibc-2.3.6-linuxthreads-pthread-raise.patch \
-           file://glibc-cross_sunrpc.patch \
-           file://etc/ld.so.conf \
-	   file://generate-supported.mk"
-
-S = "${WORKDIR}/glibc-${PV}"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		${GLIBC_EXTRA_OECONF}"
-
-EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
-
-glibc_do_unpack () {
-        mv "${WORKDIR}/linuxthreads" "${WORKDIR}/linuxthreads_db" "${S}/"
-}
-
-python do_unpack () {
-        bb.build.exec_func('base_do_unpack', d)
-        bb.build.exec_func('glibc_do_unpack', d)
-}
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# this really is arm specific
-	touch ${S}/sysdeps/arm/framestate.c
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
-
-SRC_URI[archive.md5sum] = "bfdce99f82d6dbcb64b7f11c05d6bc96"
-SRC_URI[archive.sha256sum] = "e73ff5eddea95d09238b41d3c9c4d9ccddcf99fcc93d04956599c91c704f4a8e"
-SRC_URI[linuxthreads.md5sum] = "d4eeda37472666a15cc1f407e9c987a9"
-SRC_URI[linuxthreads.sha256sum] = "6c3bc4a247d1e5308fb14f81956802f09095d3683219859fcad5795aa3aea638"
-SRC_URI[crosspatch1.md5sum] = "bb8da838930b8c6d06bafdbaad5dab1a"
-SRC_URI[crosspatch1.sha256sum] = "43cb2a382f30d189f0cacb71cbfa0b153a45a49e5fd73330893d24731fca4eb6"
-SRC_URI[crosspatch2.md5sum] = "1acb1e6c444ad45bb1390e7800dc4d7c"
-SRC_URI[crosspatch2.sha256sum] = "b301918536819d00b824e134fbdeba3cf4048da060e70e75c8ea56fd92689ad9"
-SRC_URI[crosspatch3.md5sum] = "709cb2283068145e557912b0907341a3"
-SRC_URI[crosspatch3.sha256sum] = "9dba644da5db0ec5104698706854dcd4ae8d6a10e9419eb049e3d6fcad9d81fe"
-SRC_URI[crosspatch4.md5sum] = "79ddbf5e5721442c5753344e4ecdda1c"
-SRC_URI[crosspatch4.sha256sum] = "c1ab6923fa4388407cd1dcb2ed441f25c2b9fa18cacf6aad549c31fed3c08f8c"
-SRC_URI[crosspatch5.md5sum] = "c4d41a712bf40dfb852e7bc18e1b6c52"
-SRC_URI[crosspatch5.sha256sum] = "81611592bf30b4c1fa0c58d170d74c970dbc145127e16cb90d648663e2970cbf"
-SRC_URI[crosspatch6.md5sum] = "336ce18c81fe8d7c17d2f7a0dbd62766"
-SRC_URI[crosspatch6.sha256sum] = "9487f1d4c05b9c94d94f8bcb34541ef04b77cfc0526dbb0b344c67f2ab388c5b"
-SRC_URI[crosspatch7.md5sum] = "c89aac92d100761a767b9d5619fe582f"
-SRC_URI[crosspatch7.sha256sum] = "3033d84fd9a62d20a8cb0d42645d7cd5a28d2d108afcb4cc2d89db3dc1e328df"
-SRC_URI[crosspatch8.md5sum] = "dc31c9e01df62cba9457af7e9b9c968e"
-SRC_URI[crosspatch8.sha256sum] = "a69760ed0ea54b66c31d58cb32c7b23185a6b1d16f38dab8380ec4f2183b122d"
-SRC_URI[crosspatch9.md5sum] = "88fa901c9a85633ab62365b0ee9df3b1"
-SRC_URI[crosspatch9.sha256sum] = "6651eb15c9f6dabf21af4067b723cb29a87827f66570bfab74fdc00d80cab129"
-SRC_URI[crosspatch10.md5sum] = "b94605c3b7ba90bc01648ca6e5cc1aaf"
-SRC_URI[crosspatch10.sha256sum] = "16ff3ea972065925338da1a1f37322dc4d8774f6d34d2dde2ce85121c08c99e0"
-SRC_URI[crosspatch11.md5sum] = "b89be3e1653ec6df317e30a10a0933b5"
-SRC_URI[crosspatch11.sha256sum] = "0b5dd58a5240440ab6dcc0e2278bb99ebb20d0b558578652da59007bf27ae2fe"
diff --git a/recipes/glibc/glibc_2.4.bb b/recipes/glibc/glibc_2.4.bb
deleted file mode 100644
index cba0fb3..0000000
--- a/recipes/glibc/glibc_2.4.bb
+++ /dev/null
@@ -1,156 +0,0 @@
-require glibc.inc
-
-PR = "${INC_PR}.0"
-
-#add the hosts that are confirmed to be working to COMPATIBLE_HOSTi
-COMPATIBLE_HOST = '(i.86.*-linux|sh.*-linux)'
-DEFAULT_PREFERENCE_arm = "-1"
-
-# the -isystem in bitbake.conf screws up glibc do_stage
-BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
-TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
-
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/glibc-2.4"
-
-GLIBC_ADDONS ?= "ports,nptl,libidn"
-
-GLIBC_BROKEN_LOCALES = "sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
-
-#
-# For now, we will skip building of a gcc package if it is a uclibc one
-# and our build is not a uclibc one, and we skip a glibc one if our build
-# is a uclibc build.
-#
-# See the note in gcc/gcc_3.4.0.oe
-#
-
-python __anonymous () {
-    import bb, re
-    uc_os = (re.match('.*uclibc$', bb.data.getVar('TARGET_OS', d, 1)) != None)
-    if uc_os:
-        raise bb.parse.SkipPackage("incompatible with target %s" %
-                                   bb.data.getVar('TARGET_OS', d, 1))
-}
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-RPROVIDES_${PN}-dev += "libc-dev virtual-libc-dev"
-
-#	   file://noinfo.patch
-#	   file://ldconfig.patch;striplevel=0
-#	   file://arm-machine-gmon.patch;striplevel=0 \
-#	   \
-#	   file://arm-ioperm.patch;striplevel=0 \
-#	   file://ldd.patch;striplevel=0 \
-SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.4.tar.bz2;name=archive \
-	   ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-2.4.tar.bz2;name=ports \
-	   ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-2.4.tar.bz2;name=libidn \
-           file://arm-memcpy.patch \
-           file://arm-longlong.patch \
-           file://fhs-linux-paths.patch \
-           file://dl-cache-libcmp.patch \
-           file://ldsocache-varrun.patch \
-           file://nptl-crosscompile.patch \
-	   file://glibc-2.4-compile.patch \
-	   file://glibc-2.4-openat-3.patch \
-	   file://fixup-aeabi-syscalls.patch \
-	   file://zecke-sane-readelf.patch \
-	   file://arm_eabi_ipc_fix.patch \
-	   file://generic-bits_select.h \
-	   file://generic-bits_types.h \
-	   file://generic-bits_typesizes.h \
-	   file://generic-bits_time.h \
-           file://etc/ld.so.conf \
-           file://generate-supported.mk"
-
-
-# Build fails on sh3 and sh4 without additional patches
-SRC_URI_append_sh3 = " file://no-z-defs.patch"
-SRC_URI_append_sh4 = " file://no-z-defs.patch"
-
-S = "${WORKDIR}/glibc-2.4"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		--without-selinux \
-		${GLIBC_EXTRA_OECONF}"
-
-EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
-
-do_munge() {
-	# Integrate ports and libidn into tree
-	mv ${WORKDIR}/glibc-ports-${PV} ${S}/ports
-	mv ${WORKDIR}/glibc-libidn-${PV} ${S}/libidn
-
-	# Ports isn't really working... Fix it
-	# Some of this is rather dirty, but it seems to be the only
-	# quick way to get this cruft to compile
-	rm -rf ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
-	ln -s nptl ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
-	cp ${S}/sysdeps/unix/sysv/linux/i386/bits/wchar.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	cp ${S}/sysdeps/wordsize-32/bits/wordsize.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	cp ${WORKDIR}/generic-bits_select.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/select.h
-	cp ${WORKDIR}/generic-bits_types.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/types.h
-	cp ${WORKDIR}/generic-bits_typesizes.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/typesizes.h
-	cp ${WORKDIR}/generic-bits_time.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/time.h
-	# Copy in generic stuff for not yet implemented headers
-	for i in ${S}/bits/*.h; do
-		F=`basename $i`
-		[ "$F" = "local_lim.h" ] && continue
-		[ "$F" = "errno.h" ] && continue
-		test -e ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/$F || test -e ${S}/ports/sysdeps/arm/bits/$F || test -e ${S}/sysdeps/unix/sysv/linux/bits/$F || test -e ${S}/sysdeps/ieee754/bits/$F || cp $i ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	done
-	# This is harmful; we need to get the one from nptl/sysdeps/pthreads
-	rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/libc-lock.h
-	# Obsoleted by sysdeps/arm/{fpu,eabi}/bits/fenv.h
-	rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/fenv.h
-	# Obsoleted by sysdeps/gnu/bits/utmp.h
-	rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/utmp.h
-}
-
-addtask munge before do_patch after do_unpack
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
-
-SRC_URI[archive.md5sum] = "7e9a88dcd41fbc53801dbe5bdacaf245"
-SRC_URI[archive.sha256sum] = "27aaaaa78b4ab5da76bb29385dc9be087ba7b855a9102eaaa78ce3ec5e2e7fcd"
-SRC_URI[ports.md5sum] = "7bb1b35654e94994925e66676acabd4e"
-SRC_URI[ports.sha256sum] = "2fbbcaad8a9f8560485c398a9066959fe2713c8bc7e653ec476fb56fed21d19a"
-SRC_URI[libidn.md5sum] = "e2d892b40d654c523ab26a26b7dd86a1"
-SRC_URI[libidn.sha256sum] = "2f29ec2b2b2f75f787a1eed8fdea20aff212dc3bad97651ca376914c49181977"
diff --git a/recipes/glibc/glibc_2.7.bb b/recipes/glibc/glibc_2.7.bb
deleted file mode 100644
index 2f2fc36..0000000
--- a/recipes/glibc/glibc_2.7.bb
+++ /dev/null
@@ -1,169 +0,0 @@
-require glibc.inc
-
-ARM_INSTRUCTION_SET = "arm"
-
-PACKAGES_DYNAMIC = "libc6*"
-RPROVIDES_${PN}-dev = "libc6-dev virtual-libc-dev"
-
-PR = "${INC_PR}.1"
-
-# the -isystem in bitbake.conf screws up glibc do_stage
-BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
-TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
-
-
-FILESPATHPKG =. "glibc-2.4:"
-
-GLIBC_ADDONS ?= "ports,nptl,libidn"
-
-GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
-
-#
-# For now, we will skip building of a gcc package if it is a uclibc one
-# and our build is not a uclibc one, and we skip a glibc one if our build
-# is a uclibc build.
-#
-# See the note in gcc/gcc_3.4.0.oe
-#
-
-python __anonymous () {
-    import bb, re
-    uc_os = (re.match('.*uclibc$', bb.data.getVar('TARGET_OS', d, 1)) != None)
-    if uc_os:
-        raise bb.parse.SkipPackage("incompatible with target %s" %
-                                   bb.data.getVar('TARGET_OS', d, 1))
-}
-
-RDEPENDS_${PN}-dev = "linux-libc-headers-dev"
-
-#	   file://noinfo.patch
-#	   file://ldconfig.patch;striplevel=0
-#	   file://arm-machine-gmon.patch;striplevel=0 \
-#	   \
-#	   file://arm-ioperm.patch;striplevel=0 \
-#	   file://ldd.patch;striplevel=0 \
-SRC_URI = "ftp://ftp.gnu.org/pub/gnu/glibc/glibc-${PV}.tar.bz2;name=archive \
-	   ftp://ftp.gnu.org/pub/gnu/glibc/glibc-ports-${PV}.tar.bz2;name=ports \
-	   ftp://ftp.gnu.org/pub/gnu/glibc/glibc-libidn-${PV}.tar.bz2;name=libidn \
-           file://arm-memcpy.patch \
-           file://arm-longlong.patch \
-           file://fhs-linux-paths.patch \
-           file://dl-cache-libcmp.patch \
-           file://ldsocache-varrun.patch \
-           file://nptl-crosscompile.patch \
-	   file://glibc-check_pf.patch;striplevel=0 \
-#	   file://glibc-2.4-compile.patch \
-#	   file://glibc-2.4-openat-3.patch \
-#	   file://fixup-aeabi-syscalls.patch \
-#	   file://zecke-sane-readelf.patch \
-           file://ldd-unbash.patch \
-	   file://glibc-arm-IO-acquire-lock-fix.diff \
-	   file://all_glibc-i586-chk.patch \
-	   file://glibc-2.6.1-use-short-for-fnstsw.patch \
-           file://glibc-use-isystem-include-fixed.patch \
-	   file://generic-bits_select.h \
-	   file://generic-bits_types.h \
-	   file://generic-bits_typesizes.h \
-	   file://generic-bits_time.h \
-           file://etc/ld.so.conf \
-           file://generate-supported.mk \
-           file://march-i686.patch;striplevel=0 \
-	   file://glibc-arm-no-asm-page.patch \
-           "
-
-
-# Build fails on sh3 and sh4 without additional patches
-SRC_URI_append_sh3 = " file://no-z-defs.patch"
-SRC_URI_append_sh4 = " file://no-z-defs.patch"
-
-#powerpc patches to add support for soft-float
-SRC_URI_append_powerpc= " file://powerpc-sqrt-hack.diff"
-
-S = "${WORKDIR}/glibc-${PV}"
-B = "${WORKDIR}/build-${TARGET_SYS}"
-
-EXTRA_OECONF = "--enable-kernel=${OLDEST_KERNEL} \
-	        --without-cvs --disable-profile --disable-debug --without-gd \
-		--enable-clocale=gnu \
-	        --enable-add-ons=${GLIBC_ADDONS} \
-		--with-headers=${STAGING_INCDIR} \
-		--without-selinux \
-		${GLIBC_EXTRA_OECONF}"
-
-EXTRA_OECONF += "${@get_glibc_fpu_setting(bb, d)}"
-
-do_munge() {
-	# Integrate ports and libidn into tree
-	mv ${WORKDIR}/glibc-ports-${PV} ${S}/ports
-	mv ${WORKDIR}/glibc-libidn-${PV} ${S}/libidn
-
-	# Ports isn't really working... Fix it
-	# Some of this is rather dirty, but it seems to be the only
-	# quick way to get this cruft to compile
-	rm -rf ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
-	ln -s nptl ${S}/ports/sysdeps/unix/sysv/linux/arm/linuxthreads
-	cp ${S}/nptl/sysdeps/pthread/bits/sigthread.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	cp ${S}/sysdeps/unix/sysv/linux/i386/bits/wchar.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	cp ${S}/sysdeps/wordsize-32/bits/wordsize.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	cp ${WORKDIR}/generic-bits_select.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/select.h
-	cp ${WORKDIR}/generic-bits_types.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/types.h
-	cp ${WORKDIR}/generic-bits_typesizes.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/typesizes.h
-	cp ${WORKDIR}/generic-bits_time.h ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/time.h
-	# Copy in generic stuff for not yet implemented headers
-	for i in ${S}/bits/*.h; do
-		F=`basename $i`
-		[ "$F" = "local_lim.h" ] && continue
-		[ "$F" = "errno.h" ] && continue
-		test -e ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/$F || test -e ${S}/ports/sysdeps/arm/bits/$F || test -e ${S}/sysdeps/unix/sysv/linux/bits/$F || test -e ${S}/sysdeps/ieee754/bits/$F || cp $i ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/
-	done
-	# This is harmful; we need to get the one from nptl/sysdeps/pthreads
-	rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/libc-lock.h
-	# Obsoleted by sysdeps/arm/{fpu,eabi}/bits/fenv.h
-	rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/fenv.h
-	# Obsoleted by sysdeps/gnu/bits/utmp.h
-	rm -f ${S}/ports/sysdeps/unix/sysv/linux/arm/bits/utmp.h
-}
-
-addtask munge before do_patch after do_unpack
-
-
-do_configure () {
-# override this function to avoid the autoconf/automake/aclocal/autoheader
-# calls for now
-# don't pass CPPFLAGS into configure, since it upsets the kernel-headers
-# version check and doesn't really help with anything
-	if [ -z "`which rpcgen`" ]; then
-		echo "rpcgen not found.  Install glibc-devel."
-		exit 1
-	fi
-	(cd ${S} && gnu-configize) || die "failure in running gnu-configize"
-	CPPFLAGS="" oe_runconf
-}
-
-rpcsvc = "bootparam_prot.x nlm_prot.x rstat.x \
-	  yppasswd.x klm_prot.x rex.x sm_inter.x mount.x \
-	  rusers.x spray.x nfs_prot.x rquota.x key_prot.x"
-
-do_compile () {
-	# -Wl,-rpath-link <staging>/lib in LDFLAGS can cause breakage if another glibc is in staging
-	unset LDFLAGS
-	base_do_compile
-	(
-		cd ${S}/sunrpc/rpcsvc
-		for r in ${rpcsvc}; do
-			h=`echo $r|sed -e's,\.x$,.h,'`
-			rpcgen -h $r -o $h || oewarn "unable to generate header for $r"
-		done
-	)
-}
-
-require glibc-stage.inc
-
-require glibc-package.inc
-
-SRC_URI[archive.md5sum] = "065c5952b439deba40083ccd67bcc8f7"
-SRC_URI[archive.sha256sum] = "4224a522ac4ee0fd89eb337e7505e280dfb05e2fe1ad44339ba8874081c0451a"
-SRC_URI[ports.md5sum] = "eaeb8527b8fa286c2d887157214f9998"
-SRC_URI[ports.sha256sum] = "3e481996259af87c3581da23481970a27de679e3c87cfa9a5a59751cd20c7b44"
-SRC_URI[libidn.md5sum] = "226809992fb1f3dc6ea23e0f26952ea4"
-SRC_URI[libidn.sha256sum] = "07de78810a5320d696792b67131c4cf3d6654aee015a6b74820d66fb00799000"
-- 
1.6.4.2




^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir
  2010-07-15 20:46 [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir Frans Meulenbroeks
  2010-07-15 20:46 ` [PATCH 2/3] glibc 2.10.1: " Frans Meulenbroeks
@ 2010-07-15 21:49 ` Khem Raj
  2010-07-17  7:56 ` Khem Raj
  2 siblings, 0 replies; 9+ messages in thread
From: Khem Raj @ 2010-07-15 21:49 UTC (permalink / raw)
  To: openembedded-devel

On Thu, Jul 15, 2010 at 1:46 PM, Frans Meulenbroeks
<fransmeulenbroeks@gmail.com> wrote:
> moved all patches to glibc-2.9
> removed references to other dirs.
>
> Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>

Acked-by: Khem Raj <raj.khem@gmail.com>


> ---
>  recipes/glibc/glibc-2.9/arm-longlong.patch         |   58 ++
>  .../glibc-2.9/arm-lowlevellock-include-tls.patch   |   12 +
>  recipes/glibc/glibc-2.9/arm-memcpy.patch           |  758 ++++++++++++++++++++
>  recipes/glibc/glibc-2.9/dl-cache-libcmp.patch      |   10 +
>  recipes/glibc/glibc-2.9/fhs-linux-paths.patch      |   11 +
>  recipes/glibc/glibc-2.9/generate-supported.mk      |   11 +
>  recipes/glibc/glibc-2.9/generic-bits_select.h      |   35 +
>  recipes/glibc/glibc-2.9/generic-bits_time.h        |   75 ++
>  recipes/glibc/glibc-2.9/generic-bits_types.h       |  200 +++++
>  recipes/glibc/glibc-2.9/generic-bits_typesizes.h   |   66 ++
>  .../glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff   |   13 +
>  recipes/glibc/glibc-2.9/glibc-check_pf.patch       |  343 +++++++++
>  recipes/glibc/glibc-2.9/ldd-unbash.patch           |   11 +
>  recipes/glibc/glibc-2.9/ldsocache-varrun.patch     |   18 +
>  recipes/glibc/glibc-2.9/march-i686.patch           |   38 +
>  recipes/glibc/glibc-2.9/no-z-defs.patch            |    9 +
>  recipes/glibc/glibc-2.9/nptl-crosscompile.patch    |   26 +
>  recipes/glibc/glibc-2.9/nscd-init.patch            |   39 +
>  recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff     |   25 +
>  recipes/glibc/glibc-2.9/tls_i486.patch             |   14 +
>  recipes/glibc/glibc_2.9.bb                         |    3 -
>  21 files changed, 1772 insertions(+), 3 deletions(-)
>  create mode 100644 recipes/glibc/glibc-2.9/arm-longlong.patch
>  create mode 100644 recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch
>  create mode 100644 recipes/glibc/glibc-2.9/arm-memcpy.patch
>  create mode 100644 recipes/glibc/glibc-2.9/dl-cache-libcmp.patch
>  create mode 100644 recipes/glibc/glibc-2.9/fhs-linux-paths.patch
>  create mode 100644 recipes/glibc/glibc-2.9/generate-supported.mk
>  create mode 100644 recipes/glibc/glibc-2.9/generic-bits_select.h
>  create mode 100644 recipes/glibc/glibc-2.9/generic-bits_time.h
>  create mode 100644 recipes/glibc/glibc-2.9/generic-bits_types.h
>  create mode 100644 recipes/glibc/glibc-2.9/generic-bits_typesizes.h
>  create mode 100644 recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff
>  create mode 100644 recipes/glibc/glibc-2.9/glibc-check_pf.patch
>  create mode 100644 recipes/glibc/glibc-2.9/ldd-unbash.patch
>  create mode 100644 recipes/glibc/glibc-2.9/ldsocache-varrun.patch
>  create mode 100644 recipes/glibc/glibc-2.9/march-i686.patch
>  create mode 100644 recipes/glibc/glibc-2.9/no-z-defs.patch
>  create mode 100644 recipes/glibc/glibc-2.9/nptl-crosscompile.patch
>  create mode 100644 recipes/glibc/glibc-2.9/nscd-init.patch
>  create mode 100644 recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff
>  create mode 100644 recipes/glibc/glibc-2.9/tls_i486.patch
>
> diff --git a/recipes/glibc/glibc-2.9/arm-longlong.patch b/recipes/glibc/glibc-2.9/arm-longlong.patch
> new file mode 100644
> index 0000000..28aca83
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/arm-longlong.patch
> @@ -0,0 +1,58 @@
> +--- glibc-2.4/stdlib/longlong.h.ark    2006-03-11 22:49:27.000000000 +0100
> ++++ glibc-2.4/stdlib/longlong.h        2006-03-11 22:55:12.000000000 +0100
> +@@ -206,6 +206,14 @@
> +            "rI" ((USItype) (bh)),                                     \
> +            "r" ((USItype) (al)),                                      \
> +            "rI" ((USItype) (bl)) __CLOBBER_CC)
> ++/* v3m and all higher arches have long multiply support.  */
> ++#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
> ++#define umul_ppmm(xh, xl, a, b) \
> ++  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
> ++#define UMUL_TIME 5
> ++#define smul_ppmm(xh, xl, a, b) \
> ++  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
> ++#else
> + #define umul_ppmm(xh, xl, a, b) \
> + {register USItype __t0, __t1, __t2;                                   \
> +   __asm__ ("%@ Inlined umul_ppmm\n"                                   \
> +@@ -227,7 +235,13 @@
> +          : "r" ((USItype) (a)),                                       \
> +            "r" ((USItype) (b)) __CLOBBER_CC );}
> + #define UMUL_TIME 20
> ++#endif
> + #define UDIV_TIME 100
> ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
> ++#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
> ++#define COUNT_LEADING_ZEROS_0 32
> ++#endif
> ++
> + #endif /* __arm__ */
> +
> + #if defined (__hppa) && W_TYPE_SIZE == 32
> +--- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark       2006-03-11 22:56:43.000000000 +0100
> ++++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c   2006-03-11 22:58:19.000000000 +0100
> +@@ -0,0 +1,24 @@
> ++/* __clz_tab -- support for longlong.h
> ++   Copyright (C) 2004 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.  */
> ++
> ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
> ++/* Nothing required.  */
> ++#else
> ++#include <stdlib/mp_clz_tab.c>
> ++#endif
> diff --git a/recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch b/recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch
> new file mode 100644
> index 0000000..5c8062e
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/arm-lowlevellock-include-tls.patch
> @@ -0,0 +1,12 @@
> +Index: glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
> +===================================================================
> +--- glibc-2.9.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h       2009-06-19 20:54:35.446686910 +0400
> ++++ glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h    2009-06-19 20:54:43.774683370 +0400
> +@@ -25,6 +25,7 @@
> + #include <atomic.h>
> + #include <sysdep.h>
> + #include <kernel-features.h>
> ++#include <tls.h>
> +
> + #define FUTEX_WAIT            0
> + #define FUTEX_WAKE            1
> diff --git a/recipes/glibc/glibc-2.9/arm-memcpy.patch b/recipes/glibc/glibc-2.9/arm-memcpy.patch
> new file mode 100644
> index 0000000..bc2b3da
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/arm-memcpy.patch
> @@ -0,0 +1,758 @@
> +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> ++++ sysdeps/arm/memmove.S      2004-03-20 18:37:23.000000000 +0000
> +@@ -0,0 +1,251 @@
> ++/*
> ++ *   Optimized memmove implementation for ARM processors
> ++ *
> ++ *    Author:         Nicolas Pitre
> ++ *    Created:        Dec 23, 2003
> ++ *    Copyright:      (C) MontaVista Software, Inc.
> ++ *
> ++ *   This file 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.
> ++ *
> ++ *   This file 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.
> ++ */
> ++
> ++#include <sysdep.h>
> ++
> ++
> ++/*
> ++ * Endian independent macros for shifting bytes within registers.
> ++ */
> ++#ifndef __ARMEB__
> ++#define pull            lsr
> ++#define push            lsl
> ++#else
> ++#define pull            lsl
> ++#define push            lsr
> ++#endif
> ++
> ++/*
> ++ * Enable data preload for architectures that support it (ARMv5 and above)
> ++ */
> ++#if defined(__ARM_ARCH_5__) || \
> ++    defined(__ARM_ARCH_5T__) || \
> ++    defined(__ARM_ARCH_5TE__)
> ++#define PLD(code...)  code
> ++#else
> ++#define PLD(code...)
> ++#endif
> ++
> ++
> ++/* char * memmove (char *dst, const char *src) */
> ++ENTRY(memmove)
> ++              subs    ip, r0, r1
> ++              cmphi   r2, ip
> ++              bls     memcpy(PLT)
> ++
> ++              stmfd   sp!, {r0, r4, lr}
> ++              add     r1, r1, r2
> ++              add     r0, r0, r2
> ++              subs    r2, r2, #4
> ++              blt     25f
> ++              ands    ip, r0, #3
> ++      PLD(    pld     [r1, #-4]               )
> ++              bne     26f
> ++              ands    ip, r1, #3
> ++              bne     27f
> ++
> ++19:           subs    r2, r2, #4
> ++              blt     24f
> ++              subs    r2, r2, #8
> ++              blt     23f
> ++              subs    r2, r2, #16
> ++              blt     22f
> ++
> ++      PLD(    pld     [r1, #-32]              )
> ++      PLD(    subs    r2, r2, #96             )
> ++              stmfd   sp!, {r5 - r8}
> ++      PLD(    blt     21f                     )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, r1, #31             )
> ++      PLD(    pld     [r1, #-64]              )
> ++      PLD(    beq     20f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #-96]              )
> ++      PLD(    blt     20f                     )
> ++      PLD(    cmp     ip, #16                 )
> ++      PLD(    sub     r2, r2, ip              )
> ++      PLD(    ldmgedb r1!, {r3 - r6}          )
> ++      PLD(    stmgedb r0!, {r3 - r6}          )
> ++      PLD(    beq     20f                     )
> ++      PLD(    and     ip, ip, #15             )
> ++      PLD(    cmp     ip, #8                  )
> ++      PLD(    ldr     r3, [r1, #-4]!          )
> ++      PLD(    ldrge   r4, [r1, #-4]!          )
> ++      PLD(    ldrgt   r5, [r1, #-4]!          )
> ++      PLD(    str     r3, [r0, #-4]!          )
> ++      PLD(    strge   r4, [r0, #-4]!          )
> ++      PLD(    strgt   r5, [r0, #-4]!          )
> ++
> ++20:   PLD(    pld     [r1, #-96]              )
> ++      PLD(    pld     [r1, #-128]             )
> ++21:           ldmdb   r1!, {r3, r4, ip, lr}
> ++              subs    r2, r2, #32
> ++              stmdb   r0!, {r3, r4, ip, lr}
> ++              ldmdb   r1!, {r3, r4, ip, lr}
> ++              stmgedb r0!, {r3, r4, ip, lr}
> ++              ldmgedb r1!, {r3, r4, ip, lr}
> ++              stmgedb r0!, {r3, r4, ip, lr}
> ++              ldmgedb r1!, {r3, r4, ip, lr}
> ++              subges  r2, r2, #32
> ++              stmdb   r0!, {r3, r4, ip, lr}
> ++              bge     20b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     21b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              tst     r2, #31
> ++              ldmfd   sp!, {r5 - r8}
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              tst     r2, #16
> ++22:           ldmnedb r1!, {r3, r4, ip, lr}
> ++              stmnedb r0!, {r3, r4, ip, lr}
> ++
> ++              tst     r2, #8
> ++23:           ldmnedb r1!, {r3, r4}
> ++              stmnedb r0!, {r3, r4}
> ++
> ++              tst     r2, #4
> ++24:           ldrne   r3, [r1, #-4]!
> ++              strne   r3, [r0, #-4]!
> ++
> ++25:           ands    r2, r2, #3
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              cmp     r2, #2
> ++              ldrb    r3, [r1, #-1]
> ++              ldrgeb  r4, [r1, #-2]
> ++              ldrgtb  ip, [r1, #-3]
> ++              strb    r3, [r0, #-1]
> ++              strgeb  r4, [r0, #-2]
> ++              strgtb  ip, [r0, #-3]
> ++              ldmfd   sp!, {r0, r4, pc}
> ++
> ++26:           cmp     ip, #2
> ++              ldrb    r3, [r1, #-1]!
> ++              ldrgeb  r4, [r1, #-1]!
> ++              ldrgtb  lr, [r1, #-1]!
> ++              strb    r3, [r0, #-1]!
> ++              strgeb  r4, [r0, #-1]!
> ++              strgtb  lr, [r0, #-1]!
> ++              subs    r2, r2, ip
> ++              blt     25b
> ++              ands    ip, r1, #3
> ++              beq     19b
> ++
> ++27:           bic     r1, r1, #3
> ++              cmp     ip, #2
> ++              ldr     r3, [r1]
> ++              beq     35f
> ++              blt     36f
> ++
> ++
> ++              .macro  backward_copy_shift push pull
> ++
> ++              cmp     r2, #12
> ++      PLD(    pld     [r1, #-4]               )
> ++              blt     33f
> ++              subs    r2, r2, #28
> ++              stmfd   sp!, {r5 - r9}
> ++              blt     31f
> ++
> ++      PLD(    subs    r2, r2, #96             )
> ++      PLD(    pld     [r1, #-32]              )
> ++      PLD(    blt     30f                     )
> ++      PLD(    pld     [r1, #-64]              )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, r1, #31             )
> ++      PLD(    pld     [r1, #-96]              )
> ++      PLD(    beq     29f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #-128]             )
> ++      PLD(    blt     29f                     )
> ++      PLD(    sub     r2, r2, ip              )
> ++28:   PLD(    mov     r4, r3, push #\push     )
> ++      PLD(    ldr     r3, [r1, #-4]!          )
> ++      PLD(    subs    ip, ip, #4              )
> ++      PLD(    orr     r4, r4, r3, pull #\pull )
> ++      PLD(    str     r4, [r0, #-4]!          )
> ++      PLD(    bgt     28b                     )
> ++
> ++29:   PLD(    pld     [r1, #-128]             )
> ++30:           mov     lr, r3, push #\push
> ++              ldmdb   r1!, {r3 - r9, ip}
> ++              subs    r2, r2, #32
> ++              orr     lr, lr, ip, pull #\pull
> ++              mov     ip, ip, push #\push
> ++              orr     ip, ip, r9, pull #\pull
> ++              mov     r9, r9, push #\push
> ++              orr     r9, r9, r8, pull #\pull
> ++              mov     r8, r8, push #\push
> ++              orr     r8, r8, r7, pull #\pull
> ++              mov     r7, r7, push #\push
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   r0!, {r4 - r9, ip, lr}
> ++              bge     29b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     30b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              cmn     r2, #16
> ++              blt     32f
> ++31:           mov     r7, r3, push #\push
> ++              ldmdb   r1!, {r3 - r6}
> ++              sub     r2, r2, #16
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   r0!, {r4 - r7}
> ++32:           adds    r2, r2, #28
> ++              ldmfd   sp!, {r5 - r9}
> ++              blt     34f
> ++33:           mov     r4, r3, push #\push
> ++              ldr     r3, [r1, #-4]!
> ++              subs    r2, r2, #4
> ++              orr     r4, r4, r3, pull #\pull
> ++              str     r4, [r0, #-4]!
> ++              bge     33b
> ++34:
> ++              .endm
> ++
> ++
> ++              backward_copy_shift     push=8  pull=24
> ++              add     r1, r1, #3
> ++              b       25b
> ++
> ++35:           backward_copy_shift     push=16 pull=16
> ++              add     r1, r1, #2
> ++              b       25b
> ++
> ++36:           backward_copy_shift     push=24 pull=8
> ++              add     r1, r1, #1
> ++              b       25b
> ++
> ++              .size   memmove, . - memmove
> ++END(memmove)
> ++libc_hidden_builtin_def (memmove)
> +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> ++++ sysdeps/arm/bcopy.S        2004-03-20 18:37:48.000000000 +0000
> +@@ -0,0 +1,255 @@
> ++/*
> ++ *   Optimized memmove implementation for ARM processors
> ++ *
> ++ *    Author:         Nicolas Pitre
> ++ *    Created:        Dec 23, 2003
> ++ *    Copyright:      (C) MontaVista Software, Inc.
> ++ *
> ++ *   This file 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.
> ++ *
> ++ *   This file 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.
> ++ */
> ++
> ++#include <sysdep.h>
> ++
> ++
> ++/*
> ++ * Endian independent macros for shifting bytes within registers.
> ++ */
> ++#ifndef __ARMEB__
> ++#define pull            lsr
> ++#define push            lsl
> ++#else
> ++#define pull            lsl
> ++#define push            lsr
> ++#endif
> ++
> ++/*
> ++ * Enable data preload for architectures that support it (ARMv5 and above)
> ++ */
> ++#if defined(__ARM_ARCH_5__) || \
> ++    defined(__ARM_ARCH_5T__) || \
> ++    defined(__ARM_ARCH_5TE__)
> ++#define PLD(code...)  code
> ++#else
> ++#define PLD(code...)
> ++#endif
> ++
> ++dst           .req    r1
> ++src           .req    r0
> ++
> ++/* void *bcopy (const char *src, char *dst, size_t size) */
> ++ENTRY(bcopy)
> ++              subs    ip, dst, src
> ++              cmphi   r2, ip
> ++              movls   r3, r0
> ++              movls   r0, r1
> ++              movls   r1, r3
> ++              bls     memcpy(PLT)
> ++
> ++              stmfd   sp!, {r4, lr}
> ++              add     src, src, r2
> ++              add     dst, dst, r2
> ++              subs    r2, r2, #4
> ++              blt     25f
> ++              ands    ip, dst, #3
> ++      PLD(    pld     [src, #-4]              )
> ++              bne     26f
> ++              ands    ip, src, #3
> ++              bne     27f
> ++
> ++19:           subs    r2, r2, #4
> ++              blt     24f
> ++              subs    r2, r2, #8
> ++              blt     23f
> ++              subs    r2, r2, #16
> ++              blt     22f
> ++
> ++      PLD(    pld     [src, #-32]             )
> ++      PLD(    subs    r2, r2, #96             )
> ++              stmfd   sp!, {r5 - r8}
> ++      PLD(    blt     21f                     )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, src, #31            )
> ++      PLD(    pld     [src, #-64]             )
> ++      PLD(    beq     20f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [src, #-96]             )
> ++      PLD(    blt     20f                     )
> ++      PLD(    cmp     ip, #16                 )
> ++      PLD(    sub     r2, r2, ip              )
> ++      PLD(    ldmgedb src!, {r3 - r6}         )
> ++      PLD(    stmgedb dst!, {r3 - r6}         )
> ++      PLD(    beq     20f                     )
> ++      PLD(    and     ip, ip, #15             )
> ++      PLD(    cmp     ip, #8                  )
> ++      PLD(    ldr     r3, [src, #-4]!         )
> ++      PLD(    ldrge   r4, [src, #-4]!         )
> ++      PLD(    ldrgt   r5, [src, #-4]!         )
> ++      PLD(    str     r3, [dst, #-4]!         )
> ++      PLD(    strge   r4, [dst, #-4]!         )
> ++      PLD(    strgt   r5, [dst, #-4]!         )
> ++
> ++20:   PLD(    pld     [src, #-96]             )
> ++      PLD(    pld     [src, #-128]            )
> ++21:           ldmdb   src!, {r3, r4, ip, lr}
> ++              subs    r2, r2, #32
> ++              stmdb   dst!, {r3, r4, ip, lr}
> ++              ldmdb   src!, {r3, r4, ip, lr}
> ++              stmgedb dst!, {r3, r4, ip, lr}
> ++              ldmgedb src!, {r3, r4, ip, lr}
> ++              stmgedb dst!, {r3, r4, ip, lr}
> ++              ldmgedb src!, {r3, r4, ip, lr}
> ++              subges  r2, r2, #32
> ++              stmdb   dst!, {r3, r4, ip, lr}
> ++              bge     20b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     21b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              tst     r2, #31
> ++              ldmfd   sp!, {r5 - r8}
> ++              ldmeqfd sp!, {r4, pc}
> ++
> ++              tst     r2, #16
> ++22:           ldmnedb src!, {r3, r4, ip, lr}
> ++              stmnedb dst!, {r3, r4, ip, lr}
> ++
> ++              tst     r2, #8
> ++23:           ldmnedb src!, {r3, r4}
> ++              stmnedb dst!, {r3, r4}
> ++
> ++              tst     r2, #4
> ++24:           ldrne   r3, [src, #-4]!
> ++              strne   r3, [dst, #-4]!
> ++
> ++25:           ands    r2, r2, #3
> ++              ldmeqfd sp!, {dst, r4, pc}
> ++
> ++              cmp     r2, #2
> ++              ldrb    r3, [src, #-1]
> ++              ldrgeb  r4, [src, #-2]
> ++              ldrgtb  ip, [src, #-3]
> ++              strb    r3, [dst, #-1]
> ++              strgeb  r4, [dst, #-2]
> ++              strgtb  ip, [dst, #-3]
> ++              ldmfd   sp!, {dst, r4, pc}
> ++
> ++26:           cmp     ip, #2
> ++              ldrb    r3, [src, #-1]!
> ++              ldrgeb  r4, [src, #-1]!
> ++              ldrgtb  lr, [src, #-1]!
> ++              strb    r3, [dst, #-1]!
> ++              strgeb  r4, [dst, #-1]!
> ++              strgtb  lr, [dst, #-1]!
> ++              subs    r2, r2, ip
> ++              blt     25b
> ++              ands    ip, src, #3
> ++              beq     19b
> ++
> ++27:           bic     src, src, #3
> ++              cmp     ip, #2
> ++              ldr     r3, [src]
> ++              beq     35f
> ++              blt     36f
> ++
> ++
> ++              .macro  backward_copy_shift push pull
> ++
> ++              cmp     r2, #12
> ++      PLD(    pld     [src, #-4]              )
> ++              blt     33f
> ++              subs    r2, r2, #28
> ++              stmfd   sp!, {r5 - r9}
> ++              blt     31f
> ++
> ++      PLD(    subs    r2, r2, #96             )
> ++      PLD(    pld     [src, #-32]             )
> ++      PLD(    blt     30f                     )
> ++      PLD(    pld     [src, #-64]             )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, src, #31            )
> ++      PLD(    pld     [src, #-96]             )
> ++      PLD(    beq     29f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [src, #-128]            )
> ++      PLD(    blt     29f                     )
> ++      PLD(    sub     r2, r2, ip              )
> ++28:   PLD(    mov     r4, r3, push #\push     )
> ++      PLD(    ldr     r3, [src, #-4]!         )
> ++      PLD(    subs    ip, ip, #4              )
> ++      PLD(    orr     r4, r4, r3, pull #\pull )
> ++      PLD(    str     r4, [dst, #-4]!         )
> ++      PLD(    bgt     28b                     )
> ++
> ++29:   PLD(    pld     [src, #-128]            )
> ++30:           mov     lr, r3, push #\push
> ++              ldmdb   src!, {r3 - r9, ip}
> ++              subs    r2, r2, #32
> ++              orr     lr, lr, ip, pull #\pull
> ++              mov     ip, ip, push #\push
> ++              orr     ip, ip, r9, pull #\pull
> ++              mov     r9, r9, push #\push
> ++              orr     r9, r9, r8, pull #\pull
> ++              mov     r8, r8, push #\push
> ++              orr     r8, r8, r7, pull #\pull
> ++              mov     r7, r7, push #\push
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   dst!, {r4 - r9, ip, lr}
> ++              bge     29b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     30b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              cmn     r2, #16
> ++              blt     32f
> ++31:           mov     r7, r3, push #\push
> ++              ldmdb   src!, {r3 - r6}
> ++              sub     r2, r2, #16
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   dst!, {r4 - r7}
> ++32:           adds    r2, r2, #28
> ++              ldmfd   sp!, {r5 - r9}
> ++              blt     34f
> ++33:           mov     r4, r3, push #\push
> ++              ldr     r3, [src, #-4]!
> ++              subs    r2, r2, #4
> ++              orr     r4, r4, r3, pull #\pull
> ++              str     r4, [dst, #-4]!
> ++              bge     33b
> ++34:
> ++              .endm
> ++
> ++
> ++              backward_copy_shift     push=8  pull=24
> ++              add     src, src, #3
> ++              b       25b
> ++
> ++35:           backward_copy_shift     push=16 pull=16
> ++              add     src, src, #2
> ++              b       25b
> ++
> ++36:           backward_copy_shift     push=24 pull=8
> ++              add     src, src, #1
> ++              b       25b
> ++
> ++              .size   bcopy, . - bcopy
> ++END(bcopy)
> +
> +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> ++++ sysdeps/arm/memcpy.S       2004-05-02 14:33:22.000000000 +0100
> +@@ -0,0 +1,242 @@
> ++/*
> ++ *   Optimized memcpy implementation for ARM processors
> ++ *
> ++ *    Author:         Nicolas Pitre
> ++ *    Created:        Dec 23, 2003
> ++ *    Copyright:      (C) MontaVista Software, Inc.
> ++ *
> ++ *   This file 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.
> ++ *
> ++ *   This file 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.
> ++ */
> ++
> ++#include <sysdep.h>
> ++
> ++
> ++/*
> ++ * Endian independent macros for shifting bytes within registers.
> ++ */
> ++#ifndef __ARMEB__
> ++#define pull            lsr
> ++#define push            lsl
> ++#else
> ++#define pull            lsl
> ++#define push            lsr
> ++#endif
> ++
> ++/*
> ++ * Enable data preload for architectures that support it (ARMv5 and above)
> ++ */
> ++#if defined(__ARM_ARCH_5__) || \
> ++    defined(__ARM_ARCH_5T__) || \
> ++    defined(__ARM_ARCH_5TE__)
> ++#define PLD(code...)  code
> ++#else
> ++#define PLD(code...)
> ++#endif
> ++
> ++
> ++/* char * memcpy (char *dst, const char *src) */
> ++
> ++ENTRY(memcpy)
> ++              subs    r2, r2, #4
> ++              stmfd   sp!, {r0, r4, lr}
> ++              blt     7f
> ++              ands    ip, r0, #3
> ++      PLD(    pld     [r1, #0]                )
> ++              bne     8f
> ++              ands    ip, r1, #3
> ++              bne     9f
> ++
> ++1:            subs    r2, r2, #4
> ++              blt     6f
> ++              subs    r2, r2, #8
> ++              blt     5f
> ++              subs    r2, r2, #16
> ++              blt     4f
> ++
> ++      PLD(    subs    r2, r2, #65             )
> ++              stmfd   sp!, {r5 - r8}
> ++      PLD(    blt     3f                      )
> ++      PLD(    pld     [r1, #32]               )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, r1, #31             )
> ++      PLD(    pld     [r1, #64]               )
> ++      PLD(    beq     2f                      )
> ++      PLD(    rsb     ip, ip, #32             )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #96]               )
> ++      PLD(    blt     2f                      )
> ++      PLD(    cmp     ip, #16                 )
> ++      PLD(    sub     r2, r2, ip              )
> ++      PLD(    ldmgeia r1!, {r3 - r6}          )
> ++      PLD(    stmgeia r0!, {r3 - r6}          )
> ++      PLD(    beq     2f                      )
> ++      PLD(    and     ip, ip, #15             )
> ++      PLD(    cmp     ip, #8                  )
> ++      PLD(    ldr     r3, [r1], #4            )
> ++      PLD(    ldrge   r4, [r1], #4            )
> ++      PLD(    ldrgt   r5, [r1], #4            )
> ++      PLD(    str     r3, [r0], #4            )
> ++      PLD(    strge   r4, [r0], #4            )
> ++      PLD(    strgt   r5, [r0], #4            )
> ++
> ++2:    PLD(    pld     [r1, #96]               )
> ++3:            ldmia   r1!, {r3 - r8, ip, lr}
> ++              subs    r2, r2, #32
> ++              stmia   r0!, {r3 - r8, ip, lr}
> ++              bge     2b
> ++      PLD(    cmn     r2, #65                 )
> ++      PLD(    bge     3b                      )
> ++      PLD(    add     r2, r2, #65             )
> ++              tst     r2, #31
> ++              ldmfd   sp!, {r5 - r8}
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              tst     r2, #16
> ++4:            ldmneia r1!, {r3, r4, ip, lr}
> ++              stmneia r0!, {r3, r4, ip, lr}
> ++
> ++              tst     r2, #8
> ++5:            ldmneia r1!, {r3, r4}
> ++              stmneia r0!, {r3, r4}
> ++
> ++              tst     r2, #4
> ++6:            ldrne   r3, [r1], #4
> ++              strne   r3, [r0], #4
> ++
> ++7:            ands    r2, r2, #3
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              cmp     r2, #2
> ++              ldrb    r3, [r1], #1
> ++              ldrgeb  r4, [r1], #1
> ++              ldrgtb  ip, [r1]
> ++              strb    r3, [r0], #1
> ++              strgeb  r4, [r0], #1
> ++              strgtb  ip, [r0]
> ++              ldmfd   sp!, {r0, r4, pc}
> ++
> ++8:            rsb     ip, ip, #4
> ++              cmp     ip, #2
> ++              ldrb    r3, [r1], #1
> ++              ldrgeb  r4, [r1], #1
> ++              ldrgtb  lr, [r1], #1
> ++              strb    r3, [r0], #1
> ++              strgeb  r4, [r0], #1
> ++              strgtb  lr, [r0], #1
> ++              subs    r2, r2, ip
> ++              blt     7b
> ++              ands    ip, r1, #3
> ++              beq     1b
> ++
> ++9:            bic     r1, r1, #3
> ++              cmp     ip, #2
> ++              ldr     lr, [r1], #4
> ++              beq     17f
> ++              bgt     18f
> ++
> ++
> ++              .macro  forward_copy_shift pull push
> ++
> ++              cmp     r2, #12
> ++      PLD(    pld     [r1, #0]                )
> ++              blt     15f
> ++              subs    r2, r2, #28
> ++              stmfd   sp!, {r5 - r9}
> ++              blt     13f
> ++
> ++      PLD(    subs    r2, r2, #97             )
> ++      PLD(    blt     12f                     )
> ++      PLD(    pld     [r1, #32]               )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    rsb     ip, r1, #36             )
> ++      PLD(    pld     [r1, #64]               )
> ++      PLD(    ands    ip, ip, #31             )
> ++      PLD(    pld     [r1, #96]               )
> ++      PLD(    beq     11f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #128]              )
> ++      PLD(    blt     11f                     )
> ++      PLD(    sub     r2, r2, ip              )
> ++10:   PLD(    mov     r3, lr, pull #\pull     )
> ++      PLD(    ldr     lr, [r1], #4            )
> ++      PLD(    subs    ip, ip, #4              )
> ++      PLD(    orr     r3, r3, lr, push #\push )
> ++      PLD(    str     r3, [r0], #4            )
> ++      PLD(    bgt     10b                     )
> ++
> ++11:   PLD(    pld     [r1, #128]              )
> ++12:           mov     r3, lr, pull #\pull
> ++              ldmia   r1!, {r4 - r9, ip, lr}
> ++              subs    r2, r2, #32
> ++              orr     r3, r3, r4, push #\push
> ++              mov     r4, r4, pull #\pull
> ++              orr     r4, r4, r5, push #\push
> ++              mov     r5, r5, pull #\pull
> ++              orr     r5, r5, r6, push #\push
> ++              mov     r6, r6, pull #\pull
> ++              orr     r6, r6, r7, push #\push
> ++              mov     r7, r7, pull #\pull
> ++              orr     r7, r7, r8, push #\push
> ++              mov     r8, r8, pull #\pull
> ++              orr     r8, r8, r9, push #\push
> ++              mov     r9, r9, pull #\pull
> ++              orr     r9, r9, ip, push #\push
> ++              mov     ip, ip, pull #\pull
> ++              orr     ip, ip, lr, push #\push
> ++              stmia   r0!, {r3 - r9, ip}
> ++              bge     11b
> ++      PLD(    cmn     r2, #97                 )
> ++      PLD(    bge     12b                     )
> ++      PLD(    add     r2, r2, #97             )
> ++              cmn     r2, #16
> ++              blt     14f
> ++13:           mov     r3, lr, pull #\pull
> ++              ldmia   r1!, {r4 - r6, lr}
> ++              sub     r2, r2, #16
> ++              orr     r3, r3, r4, push #\push
> ++              mov     r4, r4, pull #\pull
> ++              orr     r4, r4, r5, push #\push
> ++              mov     r5, r5, pull #\pull
> ++              orr     r5, r5, r6, push #\push
> ++              mov     r6, r6, pull #\pull
> ++              orr     r6, r6, lr, push #\push
> ++              stmia   r0!, {r3 - r6}
> ++14:           adds    r2, r2, #28
> ++              ldmfd   sp!, {r5 - r9}
> ++              blt     16f
> ++15:           mov     r3, lr, pull #\pull
> ++              ldr     lr, [r1], #4
> ++              subs    r2, r2, #4
> ++              orr     r3, r3, lr, push #\push
> ++              str     r3, [r0], #4
> ++              bge     15b
> ++16:
> ++              .endm
> ++
> ++
> ++              forward_copy_shift      pull=8  push=24
> ++              sub     r1, r1, #3
> ++              b       7b
> ++
> ++17:           forward_copy_shift      pull=16 push=16
> ++              sub     r1, r1, #2
> ++              b       7b
> ++
> ++18:           forward_copy_shift      pull=24 push=8
> ++              sub     r1, r1, #1
> ++              b       7b
> ++
> ++              .size   memcpy, . - memcpy
> ++END(memcpy)
> ++libc_hidden_builtin_def (memcpy)
> ++
> diff --git a/recipes/glibc/glibc-2.9/dl-cache-libcmp.patch b/recipes/glibc/glibc-2.9/dl-cache-libcmp.patch
> new file mode 100644
> index 0000000..2fedfa6
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/dl-cache-libcmp.patch
> @@ -0,0 +1,10 @@
> +--- glibc-2.4/elf/Versions.ark 2006-03-11 23:30:09.000000000 +0100
> ++++ glibc-2.4/elf/Versions     2006-03-11 23:31:44.000000000 +0100
> +@@ -63,5 +63,7 @@
> +     _dl_debug_state;
> +     # Pointer protection.
> +     __pointer_chk_guard;
> ++    # for ldconfig
> ++    _dl_cache_libcmp;
> +   }
> + }
> diff --git a/recipes/glibc/glibc-2.9/fhs-linux-paths.patch b/recipes/glibc/glibc-2.9/fhs-linux-paths.patch
> new file mode 100644
> index 0000000..1f32f6d
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/fhs-linux-paths.patch
> @@ -0,0 +1,11 @@
> +--- glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h~       Thu May 27 13:16:33 1999
> ++++ glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h        Thu May 27 13:17:55 1999
> +@@ -71,7 +71,7 @@
> + /* Provide trailing slash, since mostly used for building pathnames. */
> + #define       _PATH_DEV       "/dev/"
> + #define       _PATH_TMP       "/tmp/"
> +-#define       _PATH_VARDB     "/var/db/"
> ++#define       _PATH_VARDB     "/var/lib/misc/"
> + #define       _PATH_VARRUN    "/var/run/"
> + #define       _PATH_VARTMP    "/var/tmp/"
> +
> diff --git a/recipes/glibc/glibc-2.9/generate-supported.mk b/recipes/glibc/glibc-2.9/generate-supported.mk
> new file mode 100644
> index 0000000..d2a28c2
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/generate-supported.mk
> @@ -0,0 +1,11 @@
> +#!/usr/bin/make
> +
> +include $(IN)
> +
> +all:
> +       rm -f $(OUT)
> +       touch $(OUT)
> +       for locale in $(SUPPORTED-LOCALES); do \
> +               [ $$locale = true ] && continue; \
> +               echo $$locale | sed 's,/, ,' >> $(OUT); \
> +       done
> diff --git a/recipes/glibc/glibc-2.9/generic-bits_select.h b/recipes/glibc/glibc-2.9/generic-bits_select.h
> new file mode 100644
> index 0000000..47e7ded
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/generic-bits_select.h
> @@ -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/recipes/glibc/glibc-2.9/generic-bits_time.h b/recipes/glibc/glibc-2.9/generic-bits_time.h
> new file mode 100644
> index 0000000..b3184d1
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/generic-bits_time.h
> @@ -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/recipes/glibc/glibc-2.9/generic-bits_types.h b/recipes/glibc/glibc-2.9/generic-bits_types.h
> new file mode 100644
> index 0000000..65c8a9f
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/generic-bits_types.h
> @@ -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/recipes/glibc/glibc-2.9/generic-bits_typesizes.h b/recipes/glibc/glibc-2.9/generic-bits_typesizes.h
> new file mode 100644
> index 0000000..e9226c4
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/generic-bits_typesizes.h
> @@ -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/recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff b/recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff
> new file mode 100644
> index 0000000..a552cf0
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/glibc-arm-IO-acquire-lock-fix.diff
> @@ -0,0 +1,13 @@
> +Arm needs a similar fix as http://sourceware.org/ml/libc-ports/2007-12/msg00000.html
> +
> +--- /tmp/stdio-lock.h  2008-03-04 18:51:15.555038993 +0100
> ++++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/bits/stdio-lock.h      2008-03-04 18:51:28.445035052 +0100
> +@@ -50,6 +50,8 @@
> +   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp));      \
> +   _IO_flockfile (_fp)
> +
> ++# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
> ++
> + # define _IO_release_lock(_fp) \
> +   _IO_funlockfile (_fp);                                                    \
> +   _IO_cleanup_region_end (0)
> diff --git a/recipes/glibc/glibc-2.9/glibc-check_pf.patch b/recipes/glibc/glibc-2.9/glibc-check_pf.patch
> new file mode 100644
> index 0000000..3cff6bb
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/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: <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/recipes/glibc/glibc-2.9/ldd-unbash.patch b/recipes/glibc/glibc-2.9/ldd-unbash.patch
> new file mode 100644
> index 0000000..2fb8854
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/ldd-unbash.patch
> @@ -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/recipes/glibc/glibc-2.9/ldsocache-varrun.patch b/recipes/glibc/glibc-2.9/ldsocache-varrun.patch
> new file mode 100644
> index 0000000..9994d4f
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/ldsocache-varrun.patch
> @@ -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/recipes/glibc/glibc-2.9/march-i686.patch b/recipes/glibc/glibc-2.9/march-i686.patch
> new file mode 100644
> index 0000000..0461603
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/march-i686.patch
> @@ -0,0 +1,38 @@
> +2007-02-15  Khem Raj  <kraj@xxxxxxxxxx>
> +
> +       * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
> +       * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
> +
> +
> +
> +Index: sysdeps/unix/sysv/linux/i386/sysdep.h
> +===================================================================
> +--- sysdeps/unix/sysv/linux/i386/sysdep.h      (revision 1469)
> ++++ sysdeps/unix/sysv/linux/i386/sysdep.h      (working copy)
> +@@ -29,6 +29,10 @@
> + #include <dl-sysdep.h>
> + #include <tls.h>
> +
> ++#if defined __i686 && defined __ASSEMBLER__
> ++#undef __i686
> ++#define __i686 __i686
> ++#endif
> +
> + /* For Linux we can use the system call table in the header file
> +       /usr/include/asm/unistd.h
> +Index: nptl/sysdeps/pthread/pt-initfini.c
> +===================================================================
> +--- nptl/sysdeps/pthread/pt-initfini.c (revision 1469)
> ++++ nptl/sysdeps/pthread/pt-initfini.c (working copy)
> +@@ -45,6 +45,11 @@
> + /* Embed an #include to pull in the alignment and .end directives. */
> + asm ("\n#include \"defs.h\"");
> +
> ++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
> ++asm ("\n#undef __i686");
> ++asm ("\n#define __i686 __i686");
> ++asm ("\n#endif");
> ++
> + /* The initial common code ends here. */
> + asm ("\n/*@HEADER_ENDS*/");
> +
> diff --git a/recipes/glibc/glibc-2.9/no-z-defs.patch b/recipes/glibc/glibc-2.9/no-z-defs.patch
> new file mode 100644
> index 0000000..48c6a41
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/no-z-defs.patch
> @@ -0,0 +1,9 @@
> +Create a configparms file which disabled no-z-defs.
> +This is required to build a working glibs for sh4,
> +without there will be a lot linker errors during the build.
> +
> +diff -duNr libc.orig/configparms libc/configparms
> +--- libc.orig/configparms      1970-01-01 10:00:00.000000000 +1000
> ++++ libc/configparms   2006-02-23 14:08:18.000000000 +1100
> +@@ -0,0 +1 @@
> ++no-z-defs=yes
> diff --git a/recipes/glibc/glibc-2.9/nptl-crosscompile.patch b/recipes/glibc/glibc-2.9/nptl-crosscompile.patch
> new file mode 100644
> index 0000000..18a46ad
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/nptl-crosscompile.patch
> @@ -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/recipes/glibc/glibc-2.9/nscd-init.patch b/recipes/glibc/glibc-2.9/nscd-init.patch
> new file mode 100644
> index 0000000..884609a
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/nscd-init.patch
> @@ -0,0 +1,39 @@
> +--- nscd/nscd.init
> ++++ nscd/nscd.init
> +@@ -48,9 +48,8 @@
> +
> + start () {
> +     [ -d /var/run/nscd ] || mkdir /var/run/nscd
> +-    [ -d /var/db/nscd ] || mkdir /var/db/nscd
> +     echo -n $"Starting $prog: "
> +-    daemon /usr/sbin/nscd
> ++    /usr/sbin/nscd
> +     RETVAL=$?
> +     echo
> +     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
> +@@ -67,12 +66,10 @@
> +       # a non-privileged user
> +       rm -f /var/run/nscd/nscd.pid
> +       rm -f /var/run/nscd/socket
> +-              success $"$prog shutdown"
> +-    else
> +-              failure $"$prog shutdown"
> +     fi
> +-    echo
> +-    return $RETVAL
> ++    echo "Done."
> ++    # If nscd did not run, return 0 according to LSB.
> ++    return 0
> + }
> +
> + restart() {
> +@@ -104,7 +101,8 @@
> +       ;;
> +     force-reload | reload)
> +       echo -n $"Reloading $prog: "
> +-      killproc /usr/sbin/nscd -HUP
> ++      # Use killall, initscripts-1.0-r115 don't support -HUP yet.
> ++      killall -HUP /usr/sbin/nscd
> +       RETVAL=$?
> +       echo
> +       ;;
> diff --git a/recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff b/recipes/glibc/glibc-2.9/powerpc-sqrt-hack.diff
> new file mode 100644
> index 0000000..1046efb
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/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 <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 };
> diff --git a/recipes/glibc/glibc-2.9/tls_i486.patch b/recipes/glibc/glibc-2.9/tls_i486.patch
> new file mode 100644
> index 0000000..69a1fdf
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.9/tls_i486.patch
> @@ -0,0 +1,14 @@
> +Index: glibc-2.9/sysdeps/i386/dl-tlsdesc.S
> +===================================================================
> +--- glibc-2.9.orig/sysdeps/i386/dl-tlsdesc.S   2009-07-07 23:21:11.647664128 +0200
> ++++ glibc-2.9/sysdeps/i386/dl-tlsdesc.S        2009-07-07 23:21:32.802555992 +0200
> +@@ -128,8 +128,7 @@
> + .Lslow:
> +       cfi_adjust_cfa_offset (28)
> +       movl    %ebx, 16(%esp)
> +-      call    __i686.get_pc_thunk.bx
> +-      addl    $_GLOBAL_OFFSET_TABLE_, %ebx
> ++      LOAD_PIC_REG (bx)
> +       call    ___tls_get_addr@PLT
> +       movl    16(%esp), %ebx
> +       jmp     .Lret
> diff --git a/recipes/glibc/glibc_2.9.bb b/recipes/glibc/glibc_2.9.bb
> index e7ab63d..33326f3 100644
> --- a/recipes/glibc/glibc_2.9.bb
> +++ b/recipes/glibc/glibc_2.9.bb
> @@ -11,9 +11,6 @@ PR = "${INC_PR}.3"
>  BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
>  TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
>
> -
> -FILESPATHPKG =. "glibc-2.4:"
> -
>  GLIBC_ADDONS ?= "ports,nptl,libidn"
>
>  GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
> --
> 1.6.4.2
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local  dir
  2010-07-15 20:46 ` [PATCH 2/3] glibc 2.10.1: " Frans Meulenbroeks
  2010-07-15 20:46   ` [PATCH 3/3] glibc: remove old/obsolete versions Frans Meulenbroeks
@ 2010-07-15 21:50   ` Khem Raj
  2010-07-16  6:07     ` Frans Meulenbroeks
  1 sibling, 1 reply; 9+ messages in thread
From: Khem Raj @ 2010-07-15 21:50 UTC (permalink / raw)
  To: openembedded-devel

On Thu, Jul 15, 2010 at 1:46 PM, Frans Meulenbroeks
<fransmeulenbroeks@gmail.com> wrote:
> moved all patches to glibc-2.10.1
> removed references to other dirs.
>
> Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>

Please run bitbake -c configure atleast for all recipes you touched.

Acked-by: Khem Raj <raj.khem@gmail.com>


> ---
>  recipes/glibc/glibc-2.10.1/arm-longlong.patch      |   58 ++
>  .../arm-lowlevellock-include-tls.patch             |   12 +
>  recipes/glibc/glibc-2.10.1/arm-memcpy.patch        |  758 ++++++++++++++++++++
>  .../glibc/glibc-2.10.1/armv4t-interworking.patch   |   47 ++
>  recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch   |   10 +
>  recipes/glibc/glibc-2.10.1/etc/ld.so.conf          |    2 +
>  recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch   |   11 +
>  recipes/glibc/glibc-2.10.1/generate-supported.mk   |   11 +
>  recipes/glibc/glibc-2.10.1/generic-bits_select.h   |   35 +
>  recipes/glibc/glibc-2.10.1/generic-bits_time.h     |   75 ++
>  recipes/glibc/glibc-2.10.1/generic-bits_types.h    |  200 +++++
>  .../glibc/glibc-2.10.1/generic-bits_typesizes.h    |   66 ++
>  .../glibc-arm-IO-acquire-lock-fix.diff             |   13 +
>  recipes/glibc/glibc-2.10.1/glibc-check_pf.patch    |  343 +++++++++
>  recipes/glibc/glibc-2.10.1/ldd-unbash.patch        |   11 +
>  recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch  |   18 +
>  recipes/glibc/glibc-2.10.1/march-i686.patch        |   38 +
>  recipes/glibc/glibc-2.10.1/no-z-defs.patch         |    9 +
>  recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch |   26 +
>  recipes/glibc/glibc-2.10.1/nscd-init.patch         |   39 +
>  recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff  |   25 +
>  recipes/glibc/glibc_2.10.1.bb                      |    3 -
>  22 files changed, 1807 insertions(+), 3 deletions(-)
>  create mode 100644 recipes/glibc/glibc-2.10.1/arm-longlong.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/arm-memcpy.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/etc/ld.so.conf
>  create mode 100644 recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/generate-supported.mk
>  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_select.h
>  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_time.h
>  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_types.h
>  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
>  create mode 100644 recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
>  create mode 100644 recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/ldd-unbash.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/march-i686.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/no-z-defs.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/nscd-init.patch
>  create mode 100644 recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
>
> diff --git a/recipes/glibc/glibc-2.10.1/arm-longlong.patch b/recipes/glibc/glibc-2.10.1/arm-longlong.patch
> new file mode 100644
> index 0000000..28aca83
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/arm-longlong.patch
> @@ -0,0 +1,58 @@
> +--- glibc-2.4/stdlib/longlong.h.ark    2006-03-11 22:49:27.000000000 +0100
> ++++ glibc-2.4/stdlib/longlong.h        2006-03-11 22:55:12.000000000 +0100
> +@@ -206,6 +206,14 @@
> +            "rI" ((USItype) (bh)),                                     \
> +            "r" ((USItype) (al)),                                      \
> +            "rI" ((USItype) (bl)) __CLOBBER_CC)
> ++/* v3m and all higher arches have long multiply support.  */
> ++#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
> ++#define umul_ppmm(xh, xl, a, b) \
> ++  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
> ++#define UMUL_TIME 5
> ++#define smul_ppmm(xh, xl, a, b) \
> ++  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r" (b))
> ++#else
> + #define umul_ppmm(xh, xl, a, b) \
> + {register USItype __t0, __t1, __t2;                                   \
> +   __asm__ ("%@ Inlined umul_ppmm\n"                                   \
> +@@ -227,7 +235,13 @@
> +          : "r" ((USItype) (a)),                                       \
> +            "r" ((USItype) (b)) __CLOBBER_CC );}
> + #define UMUL_TIME 20
> ++#endif
> + #define UDIV_TIME 100
> ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
> ++#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
> ++#define COUNT_LEADING_ZEROS_0 32
> ++#endif
> ++
> + #endif /* __arm__ */
> +
> + #if defined (__hppa) && W_TYPE_SIZE == 32
> +--- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark       2006-03-11 22:56:43.000000000 +0100
> ++++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c   2006-03-11 22:58:19.000000000 +0100
> +@@ -0,0 +1,24 @@
> ++/* __clz_tab -- support for longlong.h
> ++   Copyright (C) 2004 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.  */
> ++
> ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) || defined(__ARM_ARCH_5TE__)
> ++/* Nothing required.  */
> ++#else
> ++#include <stdlib/mp_clz_tab.c>
> ++#endif
> diff --git a/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch b/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
> new file mode 100644
> index 0000000..5c8062e
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
> @@ -0,0 +1,12 @@
> +Index: glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
> +===================================================================
> +--- glibc-2.9.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h       2009-06-19 20:54:35.446686910 +0400
> ++++ glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h    2009-06-19 20:54:43.774683370 +0400
> +@@ -25,6 +25,7 @@
> + #include <atomic.h>
> + #include <sysdep.h>
> + #include <kernel-features.h>
> ++#include <tls.h>
> +
> + #define FUTEX_WAIT            0
> + #define FUTEX_WAKE            1
> diff --git a/recipes/glibc/glibc-2.10.1/arm-memcpy.patch b/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
> new file mode 100644
> index 0000000..bc2b3da
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
> @@ -0,0 +1,758 @@
> +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> ++++ sysdeps/arm/memmove.S      2004-03-20 18:37:23.000000000 +0000
> +@@ -0,0 +1,251 @@
> ++/*
> ++ *   Optimized memmove implementation for ARM processors
> ++ *
> ++ *    Author:         Nicolas Pitre
> ++ *    Created:        Dec 23, 2003
> ++ *    Copyright:      (C) MontaVista Software, Inc.
> ++ *
> ++ *   This file 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.
> ++ *
> ++ *   This file 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.
> ++ */
> ++
> ++#include <sysdep.h>
> ++
> ++
> ++/*
> ++ * Endian independent macros for shifting bytes within registers.
> ++ */
> ++#ifndef __ARMEB__
> ++#define pull            lsr
> ++#define push            lsl
> ++#else
> ++#define pull            lsl
> ++#define push            lsr
> ++#endif
> ++
> ++/*
> ++ * Enable data preload for architectures that support it (ARMv5 and above)
> ++ */
> ++#if defined(__ARM_ARCH_5__) || \
> ++    defined(__ARM_ARCH_5T__) || \
> ++    defined(__ARM_ARCH_5TE__)
> ++#define PLD(code...)  code
> ++#else
> ++#define PLD(code...)
> ++#endif
> ++
> ++
> ++/* char * memmove (char *dst, const char *src) */
> ++ENTRY(memmove)
> ++              subs    ip, r0, r1
> ++              cmphi   r2, ip
> ++              bls     memcpy(PLT)
> ++
> ++              stmfd   sp!, {r0, r4, lr}
> ++              add     r1, r1, r2
> ++              add     r0, r0, r2
> ++              subs    r2, r2, #4
> ++              blt     25f
> ++              ands    ip, r0, #3
> ++      PLD(    pld     [r1, #-4]               )
> ++              bne     26f
> ++              ands    ip, r1, #3
> ++              bne     27f
> ++
> ++19:           subs    r2, r2, #4
> ++              blt     24f
> ++              subs    r2, r2, #8
> ++              blt     23f
> ++              subs    r2, r2, #16
> ++              blt     22f
> ++
> ++      PLD(    pld     [r1, #-32]              )
> ++      PLD(    subs    r2, r2, #96             )
> ++              stmfd   sp!, {r5 - r8}
> ++      PLD(    blt     21f                     )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, r1, #31             )
> ++      PLD(    pld     [r1, #-64]              )
> ++      PLD(    beq     20f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #-96]              )
> ++      PLD(    blt     20f                     )
> ++      PLD(    cmp     ip, #16                 )
> ++      PLD(    sub     r2, r2, ip              )
> ++      PLD(    ldmgedb r1!, {r3 - r6}          )
> ++      PLD(    stmgedb r0!, {r3 - r6}          )
> ++      PLD(    beq     20f                     )
> ++      PLD(    and     ip, ip, #15             )
> ++      PLD(    cmp     ip, #8                  )
> ++      PLD(    ldr     r3, [r1, #-4]!          )
> ++      PLD(    ldrge   r4, [r1, #-4]!          )
> ++      PLD(    ldrgt   r5, [r1, #-4]!          )
> ++      PLD(    str     r3, [r0, #-4]!          )
> ++      PLD(    strge   r4, [r0, #-4]!          )
> ++      PLD(    strgt   r5, [r0, #-4]!          )
> ++
> ++20:   PLD(    pld     [r1, #-96]              )
> ++      PLD(    pld     [r1, #-128]             )
> ++21:           ldmdb   r1!, {r3, r4, ip, lr}
> ++              subs    r2, r2, #32
> ++              stmdb   r0!, {r3, r4, ip, lr}
> ++              ldmdb   r1!, {r3, r4, ip, lr}
> ++              stmgedb r0!, {r3, r4, ip, lr}
> ++              ldmgedb r1!, {r3, r4, ip, lr}
> ++              stmgedb r0!, {r3, r4, ip, lr}
> ++              ldmgedb r1!, {r3, r4, ip, lr}
> ++              subges  r2, r2, #32
> ++              stmdb   r0!, {r3, r4, ip, lr}
> ++              bge     20b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     21b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              tst     r2, #31
> ++              ldmfd   sp!, {r5 - r8}
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              tst     r2, #16
> ++22:           ldmnedb r1!, {r3, r4, ip, lr}
> ++              stmnedb r0!, {r3, r4, ip, lr}
> ++
> ++              tst     r2, #8
> ++23:           ldmnedb r1!, {r3, r4}
> ++              stmnedb r0!, {r3, r4}
> ++
> ++              tst     r2, #4
> ++24:           ldrne   r3, [r1, #-4]!
> ++              strne   r3, [r0, #-4]!
> ++
> ++25:           ands    r2, r2, #3
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              cmp     r2, #2
> ++              ldrb    r3, [r1, #-1]
> ++              ldrgeb  r4, [r1, #-2]
> ++              ldrgtb  ip, [r1, #-3]
> ++              strb    r3, [r0, #-1]
> ++              strgeb  r4, [r0, #-2]
> ++              strgtb  ip, [r0, #-3]
> ++              ldmfd   sp!, {r0, r4, pc}
> ++
> ++26:           cmp     ip, #2
> ++              ldrb    r3, [r1, #-1]!
> ++              ldrgeb  r4, [r1, #-1]!
> ++              ldrgtb  lr, [r1, #-1]!
> ++              strb    r3, [r0, #-1]!
> ++              strgeb  r4, [r0, #-1]!
> ++              strgtb  lr, [r0, #-1]!
> ++              subs    r2, r2, ip
> ++              blt     25b
> ++              ands    ip, r1, #3
> ++              beq     19b
> ++
> ++27:           bic     r1, r1, #3
> ++              cmp     ip, #2
> ++              ldr     r3, [r1]
> ++              beq     35f
> ++              blt     36f
> ++
> ++
> ++              .macro  backward_copy_shift push pull
> ++
> ++              cmp     r2, #12
> ++      PLD(    pld     [r1, #-4]               )
> ++              blt     33f
> ++              subs    r2, r2, #28
> ++              stmfd   sp!, {r5 - r9}
> ++              blt     31f
> ++
> ++      PLD(    subs    r2, r2, #96             )
> ++      PLD(    pld     [r1, #-32]              )
> ++      PLD(    blt     30f                     )
> ++      PLD(    pld     [r1, #-64]              )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, r1, #31             )
> ++      PLD(    pld     [r1, #-96]              )
> ++      PLD(    beq     29f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #-128]             )
> ++      PLD(    blt     29f                     )
> ++      PLD(    sub     r2, r2, ip              )
> ++28:   PLD(    mov     r4, r3, push #\push     )
> ++      PLD(    ldr     r3, [r1, #-4]!          )
> ++      PLD(    subs    ip, ip, #4              )
> ++      PLD(    orr     r4, r4, r3, pull #\pull )
> ++      PLD(    str     r4, [r0, #-4]!          )
> ++      PLD(    bgt     28b                     )
> ++
> ++29:   PLD(    pld     [r1, #-128]             )
> ++30:           mov     lr, r3, push #\push
> ++              ldmdb   r1!, {r3 - r9, ip}
> ++              subs    r2, r2, #32
> ++              orr     lr, lr, ip, pull #\pull
> ++              mov     ip, ip, push #\push
> ++              orr     ip, ip, r9, pull #\pull
> ++              mov     r9, r9, push #\push
> ++              orr     r9, r9, r8, pull #\pull
> ++              mov     r8, r8, push #\push
> ++              orr     r8, r8, r7, pull #\pull
> ++              mov     r7, r7, push #\push
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   r0!, {r4 - r9, ip, lr}
> ++              bge     29b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     30b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              cmn     r2, #16
> ++              blt     32f
> ++31:           mov     r7, r3, push #\push
> ++              ldmdb   r1!, {r3 - r6}
> ++              sub     r2, r2, #16
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   r0!, {r4 - r7}
> ++32:           adds    r2, r2, #28
> ++              ldmfd   sp!, {r5 - r9}
> ++              blt     34f
> ++33:           mov     r4, r3, push #\push
> ++              ldr     r3, [r1, #-4]!
> ++              subs    r2, r2, #4
> ++              orr     r4, r4, r3, pull #\pull
> ++              str     r4, [r0, #-4]!
> ++              bge     33b
> ++34:
> ++              .endm
> ++
> ++
> ++              backward_copy_shift     push=8  pull=24
> ++              add     r1, r1, #3
> ++              b       25b
> ++
> ++35:           backward_copy_shift     push=16 pull=16
> ++              add     r1, r1, #2
> ++              b       25b
> ++
> ++36:           backward_copy_shift     push=24 pull=8
> ++              add     r1, r1, #1
> ++              b       25b
> ++
> ++              .size   memmove, . - memmove
> ++END(memmove)
> ++libc_hidden_builtin_def (memmove)
> +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> ++++ sysdeps/arm/bcopy.S        2004-03-20 18:37:48.000000000 +0000
> +@@ -0,0 +1,255 @@
> ++/*
> ++ *   Optimized memmove implementation for ARM processors
> ++ *
> ++ *    Author:         Nicolas Pitre
> ++ *    Created:        Dec 23, 2003
> ++ *    Copyright:      (C) MontaVista Software, Inc.
> ++ *
> ++ *   This file 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.
> ++ *
> ++ *   This file 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.
> ++ */
> ++
> ++#include <sysdep.h>
> ++
> ++
> ++/*
> ++ * Endian independent macros for shifting bytes within registers.
> ++ */
> ++#ifndef __ARMEB__
> ++#define pull            lsr
> ++#define push            lsl
> ++#else
> ++#define pull            lsl
> ++#define push            lsr
> ++#endif
> ++
> ++/*
> ++ * Enable data preload for architectures that support it (ARMv5 and above)
> ++ */
> ++#if defined(__ARM_ARCH_5__) || \
> ++    defined(__ARM_ARCH_5T__) || \
> ++    defined(__ARM_ARCH_5TE__)
> ++#define PLD(code...)  code
> ++#else
> ++#define PLD(code...)
> ++#endif
> ++
> ++dst           .req    r1
> ++src           .req    r0
> ++
> ++/* void *bcopy (const char *src, char *dst, size_t size) */
> ++ENTRY(bcopy)
> ++              subs    ip, dst, src
> ++              cmphi   r2, ip
> ++              movls   r3, r0
> ++              movls   r0, r1
> ++              movls   r1, r3
> ++              bls     memcpy(PLT)
> ++
> ++              stmfd   sp!, {r4, lr}
> ++              add     src, src, r2
> ++              add     dst, dst, r2
> ++              subs    r2, r2, #4
> ++              blt     25f
> ++              ands    ip, dst, #3
> ++      PLD(    pld     [src, #-4]              )
> ++              bne     26f
> ++              ands    ip, src, #3
> ++              bne     27f
> ++
> ++19:           subs    r2, r2, #4
> ++              blt     24f
> ++              subs    r2, r2, #8
> ++              blt     23f
> ++              subs    r2, r2, #16
> ++              blt     22f
> ++
> ++      PLD(    pld     [src, #-32]             )
> ++      PLD(    subs    r2, r2, #96             )
> ++              stmfd   sp!, {r5 - r8}
> ++      PLD(    blt     21f                     )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, src, #31            )
> ++      PLD(    pld     [src, #-64]             )
> ++      PLD(    beq     20f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [src, #-96]             )
> ++      PLD(    blt     20f                     )
> ++      PLD(    cmp     ip, #16                 )
> ++      PLD(    sub     r2, r2, ip              )
> ++      PLD(    ldmgedb src!, {r3 - r6}         )
> ++      PLD(    stmgedb dst!, {r3 - r6}         )
> ++      PLD(    beq     20f                     )
> ++      PLD(    and     ip, ip, #15             )
> ++      PLD(    cmp     ip, #8                  )
> ++      PLD(    ldr     r3, [src, #-4]!         )
> ++      PLD(    ldrge   r4, [src, #-4]!         )
> ++      PLD(    ldrgt   r5, [src, #-4]!         )
> ++      PLD(    str     r3, [dst, #-4]!         )
> ++      PLD(    strge   r4, [dst, #-4]!         )
> ++      PLD(    strgt   r5, [dst, #-4]!         )
> ++
> ++20:   PLD(    pld     [src, #-96]             )
> ++      PLD(    pld     [src, #-128]            )
> ++21:           ldmdb   src!, {r3, r4, ip, lr}
> ++              subs    r2, r2, #32
> ++              stmdb   dst!, {r3, r4, ip, lr}
> ++              ldmdb   src!, {r3, r4, ip, lr}
> ++              stmgedb dst!, {r3, r4, ip, lr}
> ++              ldmgedb src!, {r3, r4, ip, lr}
> ++              stmgedb dst!, {r3, r4, ip, lr}
> ++              ldmgedb src!, {r3, r4, ip, lr}
> ++              subges  r2, r2, #32
> ++              stmdb   dst!, {r3, r4, ip, lr}
> ++              bge     20b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     21b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              tst     r2, #31
> ++              ldmfd   sp!, {r5 - r8}
> ++              ldmeqfd sp!, {r4, pc}
> ++
> ++              tst     r2, #16
> ++22:           ldmnedb src!, {r3, r4, ip, lr}
> ++              stmnedb dst!, {r3, r4, ip, lr}
> ++
> ++              tst     r2, #8
> ++23:           ldmnedb src!, {r3, r4}
> ++              stmnedb dst!, {r3, r4}
> ++
> ++              tst     r2, #4
> ++24:           ldrne   r3, [src, #-4]!
> ++              strne   r3, [dst, #-4]!
> ++
> ++25:           ands    r2, r2, #3
> ++              ldmeqfd sp!, {dst, r4, pc}
> ++
> ++              cmp     r2, #2
> ++              ldrb    r3, [src, #-1]
> ++              ldrgeb  r4, [src, #-2]
> ++              ldrgtb  ip, [src, #-3]
> ++              strb    r3, [dst, #-1]
> ++              strgeb  r4, [dst, #-2]
> ++              strgtb  ip, [dst, #-3]
> ++              ldmfd   sp!, {dst, r4, pc}
> ++
> ++26:           cmp     ip, #2
> ++              ldrb    r3, [src, #-1]!
> ++              ldrgeb  r4, [src, #-1]!
> ++              ldrgtb  lr, [src, #-1]!
> ++              strb    r3, [dst, #-1]!
> ++              strgeb  r4, [dst, #-1]!
> ++              strgtb  lr, [dst, #-1]!
> ++              subs    r2, r2, ip
> ++              blt     25b
> ++              ands    ip, src, #3
> ++              beq     19b
> ++
> ++27:           bic     src, src, #3
> ++              cmp     ip, #2
> ++              ldr     r3, [src]
> ++              beq     35f
> ++              blt     36f
> ++
> ++
> ++              .macro  backward_copy_shift push pull
> ++
> ++              cmp     r2, #12
> ++      PLD(    pld     [src, #-4]              )
> ++              blt     33f
> ++              subs    r2, r2, #28
> ++              stmfd   sp!, {r5 - r9}
> ++              blt     31f
> ++
> ++      PLD(    subs    r2, r2, #96             )
> ++      PLD(    pld     [src, #-32]             )
> ++      PLD(    blt     30f                     )
> ++      PLD(    pld     [src, #-64]             )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, src, #31            )
> ++      PLD(    pld     [src, #-96]             )
> ++      PLD(    beq     29f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [src, #-128]            )
> ++      PLD(    blt     29f                     )
> ++      PLD(    sub     r2, r2, ip              )
> ++28:   PLD(    mov     r4, r3, push #\push     )
> ++      PLD(    ldr     r3, [src, #-4]!         )
> ++      PLD(    subs    ip, ip, #4              )
> ++      PLD(    orr     r4, r4, r3, pull #\pull )
> ++      PLD(    str     r4, [dst, #-4]!         )
> ++      PLD(    bgt     28b                     )
> ++
> ++29:   PLD(    pld     [src, #-128]            )
> ++30:           mov     lr, r3, push #\push
> ++              ldmdb   src!, {r3 - r9, ip}
> ++              subs    r2, r2, #32
> ++              orr     lr, lr, ip, pull #\pull
> ++              mov     ip, ip, push #\push
> ++              orr     ip, ip, r9, pull #\pull
> ++              mov     r9, r9, push #\push
> ++              orr     r9, r9, r8, pull #\pull
> ++              mov     r8, r8, push #\push
> ++              orr     r8, r8, r7, pull #\pull
> ++              mov     r7, r7, push #\push
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   dst!, {r4 - r9, ip, lr}
> ++              bge     29b
> ++      PLD(    cmn     r2, #96                 )
> ++      PLD(    bge     30b                     )
> ++      PLD(    add     r2, r2, #96             )
> ++              cmn     r2, #16
> ++              blt     32f
> ++31:           mov     r7, r3, push #\push
> ++              ldmdb   src!, {r3 - r6}
> ++              sub     r2, r2, #16
> ++              orr     r7, r7, r6, pull #\pull
> ++              mov     r6, r6, push #\push
> ++              orr     r6, r6, r5, pull #\pull
> ++              mov     r5, r5, push #\push
> ++              orr     r5, r5, r4, pull #\pull
> ++              mov     r4, r4, push #\push
> ++              orr     r4, r4, r3, pull #\pull
> ++              stmdb   dst!, {r4 - r7}
> ++32:           adds    r2, r2, #28
> ++              ldmfd   sp!, {r5 - r9}
> ++              blt     34f
> ++33:           mov     r4, r3, push #\push
> ++              ldr     r3, [src, #-4]!
> ++              subs    r2, r2, #4
> ++              orr     r4, r4, r3, pull #\pull
> ++              str     r4, [dst, #-4]!
> ++              bge     33b
> ++34:
> ++              .endm
> ++
> ++
> ++              backward_copy_shift     push=8  pull=24
> ++              add     src, src, #3
> ++              b       25b
> ++
> ++35:           backward_copy_shift     push=16 pull=16
> ++              add     src, src, #2
> ++              b       25b
> ++
> ++36:           backward_copy_shift     push=24 pull=8
> ++              add     src, src, #1
> ++              b       25b
> ++
> ++              .size   bcopy, . - bcopy
> ++END(bcopy)
> +
> +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> ++++ sysdeps/arm/memcpy.S       2004-05-02 14:33:22.000000000 +0100
> +@@ -0,0 +1,242 @@
> ++/*
> ++ *   Optimized memcpy implementation for ARM processors
> ++ *
> ++ *    Author:         Nicolas Pitre
> ++ *    Created:        Dec 23, 2003
> ++ *    Copyright:      (C) MontaVista Software, Inc.
> ++ *
> ++ *   This file 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.
> ++ *
> ++ *   This file 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.
> ++ */
> ++
> ++#include <sysdep.h>
> ++
> ++
> ++/*
> ++ * Endian independent macros for shifting bytes within registers.
> ++ */
> ++#ifndef __ARMEB__
> ++#define pull            lsr
> ++#define push            lsl
> ++#else
> ++#define pull            lsl
> ++#define push            lsr
> ++#endif
> ++
> ++/*
> ++ * Enable data preload for architectures that support it (ARMv5 and above)
> ++ */
> ++#if defined(__ARM_ARCH_5__) || \
> ++    defined(__ARM_ARCH_5T__) || \
> ++    defined(__ARM_ARCH_5TE__)
> ++#define PLD(code...)  code
> ++#else
> ++#define PLD(code...)
> ++#endif
> ++
> ++
> ++/* char * memcpy (char *dst, const char *src) */
> ++
> ++ENTRY(memcpy)
> ++              subs    r2, r2, #4
> ++              stmfd   sp!, {r0, r4, lr}
> ++              blt     7f
> ++              ands    ip, r0, #3
> ++      PLD(    pld     [r1, #0]                )
> ++              bne     8f
> ++              ands    ip, r1, #3
> ++              bne     9f
> ++
> ++1:            subs    r2, r2, #4
> ++              blt     6f
> ++              subs    r2, r2, #8
> ++              blt     5f
> ++              subs    r2, r2, #16
> ++              blt     4f
> ++
> ++      PLD(    subs    r2, r2, #65             )
> ++              stmfd   sp!, {r5 - r8}
> ++      PLD(    blt     3f                      )
> ++      PLD(    pld     [r1, #32]               )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    ands    ip, r1, #31             )
> ++      PLD(    pld     [r1, #64]               )
> ++      PLD(    beq     2f                      )
> ++      PLD(    rsb     ip, ip, #32             )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #96]               )
> ++      PLD(    blt     2f                      )
> ++      PLD(    cmp     ip, #16                 )
> ++      PLD(    sub     r2, r2, ip              )
> ++      PLD(    ldmgeia r1!, {r3 - r6}          )
> ++      PLD(    stmgeia r0!, {r3 - r6}          )
> ++      PLD(    beq     2f                      )
> ++      PLD(    and     ip, ip, #15             )
> ++      PLD(    cmp     ip, #8                  )
> ++      PLD(    ldr     r3, [r1], #4            )
> ++      PLD(    ldrge   r4, [r1], #4            )
> ++      PLD(    ldrgt   r5, [r1], #4            )
> ++      PLD(    str     r3, [r0], #4            )
> ++      PLD(    strge   r4, [r0], #4            )
> ++      PLD(    strgt   r5, [r0], #4            )
> ++
> ++2:    PLD(    pld     [r1, #96]               )
> ++3:            ldmia   r1!, {r3 - r8, ip, lr}
> ++              subs    r2, r2, #32
> ++              stmia   r0!, {r3 - r8, ip, lr}
> ++              bge     2b
> ++      PLD(    cmn     r2, #65                 )
> ++      PLD(    bge     3b                      )
> ++      PLD(    add     r2, r2, #65             )
> ++              tst     r2, #31
> ++              ldmfd   sp!, {r5 - r8}
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              tst     r2, #16
> ++4:            ldmneia r1!, {r3, r4, ip, lr}
> ++              stmneia r0!, {r3, r4, ip, lr}
> ++
> ++              tst     r2, #8
> ++5:            ldmneia r1!, {r3, r4}
> ++              stmneia r0!, {r3, r4}
> ++
> ++              tst     r2, #4
> ++6:            ldrne   r3, [r1], #4
> ++              strne   r3, [r0], #4
> ++
> ++7:            ands    r2, r2, #3
> ++              ldmeqfd sp!, {r0, r4, pc}
> ++
> ++              cmp     r2, #2
> ++              ldrb    r3, [r1], #1
> ++              ldrgeb  r4, [r1], #1
> ++              ldrgtb  ip, [r1]
> ++              strb    r3, [r0], #1
> ++              strgeb  r4, [r0], #1
> ++              strgtb  ip, [r0]
> ++              ldmfd   sp!, {r0, r4, pc}
> ++
> ++8:            rsb     ip, ip, #4
> ++              cmp     ip, #2
> ++              ldrb    r3, [r1], #1
> ++              ldrgeb  r4, [r1], #1
> ++              ldrgtb  lr, [r1], #1
> ++              strb    r3, [r0], #1
> ++              strgeb  r4, [r0], #1
> ++              strgtb  lr, [r0], #1
> ++              subs    r2, r2, ip
> ++              blt     7b
> ++              ands    ip, r1, #3
> ++              beq     1b
> ++
> ++9:            bic     r1, r1, #3
> ++              cmp     ip, #2
> ++              ldr     lr, [r1], #4
> ++              beq     17f
> ++              bgt     18f
> ++
> ++
> ++              .macro  forward_copy_shift pull push
> ++
> ++              cmp     r2, #12
> ++      PLD(    pld     [r1, #0]                )
> ++              blt     15f
> ++              subs    r2, r2, #28
> ++              stmfd   sp!, {r5 - r9}
> ++              blt     13f
> ++
> ++      PLD(    subs    r2, r2, #97             )
> ++      PLD(    blt     12f                     )
> ++      PLD(    pld     [r1, #32]               )
> ++
> ++      PLD(    @ cache alignment               )
> ++      PLD(    rsb     ip, r1, #36             )
> ++      PLD(    pld     [r1, #64]               )
> ++      PLD(    ands    ip, ip, #31             )
> ++      PLD(    pld     [r1, #96]               )
> ++      PLD(    beq     11f                     )
> ++      PLD(    cmp     r2, ip                  )
> ++      PLD(    pld     [r1, #128]              )
> ++      PLD(    blt     11f                     )
> ++      PLD(    sub     r2, r2, ip              )
> ++10:   PLD(    mov     r3, lr, pull #\pull     )
> ++      PLD(    ldr     lr, [r1], #4            )
> ++      PLD(    subs    ip, ip, #4              )
> ++      PLD(    orr     r3, r3, lr, push #\push )
> ++      PLD(    str     r3, [r0], #4            )
> ++      PLD(    bgt     10b                     )
> ++
> ++11:   PLD(    pld     [r1, #128]              )
> ++12:           mov     r3, lr, pull #\pull
> ++              ldmia   r1!, {r4 - r9, ip, lr}
> ++              subs    r2, r2, #32
> ++              orr     r3, r3, r4, push #\push
> ++              mov     r4, r4, pull #\pull
> ++              orr     r4, r4, r5, push #\push
> ++              mov     r5, r5, pull #\pull
> ++              orr     r5, r5, r6, push #\push
> ++              mov     r6, r6, pull #\pull
> ++              orr     r6, r6, r7, push #\push
> ++              mov     r7, r7, pull #\pull
> ++              orr     r7, r7, r8, push #\push
> ++              mov     r8, r8, pull #\pull
> ++              orr     r8, r8, r9, push #\push
> ++              mov     r9, r9, pull #\pull
> ++              orr     r9, r9, ip, push #\push
> ++              mov     ip, ip, pull #\pull
> ++              orr     ip, ip, lr, push #\push
> ++              stmia   r0!, {r3 - r9, ip}
> ++              bge     11b
> ++      PLD(    cmn     r2, #97                 )
> ++      PLD(    bge     12b                     )
> ++      PLD(    add     r2, r2, #97             )
> ++              cmn     r2, #16
> ++              blt     14f
> ++13:           mov     r3, lr, pull #\pull
> ++              ldmia   r1!, {r4 - r6, lr}
> ++              sub     r2, r2, #16
> ++              orr     r3, r3, r4, push #\push
> ++              mov     r4, r4, pull #\pull
> ++              orr     r4, r4, r5, push #\push
> ++              mov     r5, r5, pull #\pull
> ++              orr     r5, r5, r6, push #\push
> ++              mov     r6, r6, pull #\pull
> ++              orr     r6, r6, lr, push #\push
> ++              stmia   r0!, {r3 - r6}
> ++14:           adds    r2, r2, #28
> ++              ldmfd   sp!, {r5 - r9}
> ++              blt     16f
> ++15:           mov     r3, lr, pull #\pull
> ++              ldr     lr, [r1], #4
> ++              subs    r2, r2, #4
> ++              orr     r3, r3, lr, push #\push
> ++              str     r3, [r0], #4
> ++              bge     15b
> ++16:
> ++              .endm
> ++
> ++
> ++              forward_copy_shift      pull=8  push=24
> ++              sub     r1, r1, #3
> ++              b       7b
> ++
> ++17:           forward_copy_shift      pull=16 push=16
> ++              sub     r1, r1, #2
> ++              b       7b
> ++
> ++18:           forward_copy_shift      pull=24 push=8
> ++              sub     r1, r1, #1
> ++              b       7b
> ++
> ++              .size   memcpy, . - memcpy
> ++END(memcpy)
> ++libc_hidden_builtin_def (memcpy)
> ++
> diff --git a/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch b/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
> new file mode 100644
> index 0000000..ce91ad6
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
> @@ -0,0 +1,47 @@
> +--- libc/ports/sysdeps/arm/memcpy.S~   2006-10-31 17:07:54.000000000 +0000
> ++++ libc/ports/sysdeps/arm/memcpy.S    2008-10-24 11:09:34.000000000 +0100
> +@@ -130,7 +130,12 @@
> +               strcsb  r4, [r0], #1
> +               strcsb  ip, [r0]
> +
> ++#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
> ++              ldmfd   sp!, {r0, r4, lr}
> ++                bx      lr
> ++#else
> +               ldmfd   sp!, {r0, r4, pc}
> ++#endif
> +
> + 9:            rsb     ip, ip, #4
> +               cmp     ip, #2
> +--- libc/ports/sysdeps/arm/memmove.S~  2006-10-31 17:07:54.000000000 +0000
> ++++ libc/ports/sysdeps/arm/memmove.S   2008-10-24 11:09:44.000000000 +0100
> +@@ -140,7 +140,12 @@
> +               strneb  r3, [r0, #-1]!
> +               strcsb  r4, [r0, #-1]!
> +               strcsb  ip, [r0, #-1]
> ++#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
> ++              ldmfd   sp!, {r0, r4, lr}
> ++                bx      lr
> ++#else
> +               ldmfd   sp!, {r0, r4, pc}
> ++#endif
> +
> + 9:            cmp     ip, #2
> +               ldrgtb  r3, [r1, #-1]!
> +--- libc/ports/sysdeps/unix/sysv/linux/arm/clone.S~    2005-11-16 19:03:42.000000000 +0000
> ++++ libc/ports/sysdeps/unix/sysv/linux/arm/clone.S     2008-10-24 11:11:05.000000000 +0100
> +@@ -96,8 +96,14 @@
> + #endif
> +       @ pick the function arg and call address off the stack and execute
> +       ldr     r0, [sp, #4]
> ++#if defined(__ARM_ARCH_V4T__) && defined(__THUMB_INTERWORK__)
> ++      ldr     ip, [sp], #8
> ++      mov     lr, pc
> ++        bx      ip
> ++#else
> +       mov     lr, pc
> +       ldr     pc, [sp], #8
> ++#endif
> +
> +       @ and we are done, passing the return value through r0
> +       b       PLTJMP(_exit)
> diff --git a/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch b/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
> new file mode 100644
> index 0000000..2fedfa6
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
> @@ -0,0 +1,10 @@
> +--- glibc-2.4/elf/Versions.ark 2006-03-11 23:30:09.000000000 +0100
> ++++ glibc-2.4/elf/Versions     2006-03-11 23:31:44.000000000 +0100
> +@@ -63,5 +63,7 @@
> +     _dl_debug_state;
> +     # Pointer protection.
> +     __pointer_chk_guard;
> ++    # for ldconfig
> ++    _dl_cache_libcmp;
> +   }
> + }
> diff --git a/recipes/glibc/glibc-2.10.1/etc/ld.so.conf b/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
> new file mode 100644
> index 0000000..46e06d3
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
> @@ -0,0 +1,2 @@
> +/usr/local/lib
> +
> diff --git a/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch b/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
> new file mode 100644
> index 0000000..1f32f6d
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
> @@ -0,0 +1,11 @@
> +--- glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h~       Thu May 27 13:16:33 1999
> ++++ glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h        Thu May 27 13:17:55 1999
> +@@ -71,7 +71,7 @@
> + /* Provide trailing slash, since mostly used for building pathnames. */
> + #define       _PATH_DEV       "/dev/"
> + #define       _PATH_TMP       "/tmp/"
> +-#define       _PATH_VARDB     "/var/db/"
> ++#define       _PATH_VARDB     "/var/lib/misc/"
> + #define       _PATH_VARRUN    "/var/run/"
> + #define       _PATH_VARTMP    "/var/tmp/"
> +
> diff --git a/recipes/glibc/glibc-2.10.1/generate-supported.mk b/recipes/glibc/glibc-2.10.1/generate-supported.mk
> new file mode 100644
> index 0000000..d2a28c2
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/generate-supported.mk
> @@ -0,0 +1,11 @@
> +#!/usr/bin/make
> +
> +include $(IN)
> +
> +all:
> +       rm -f $(OUT)
> +       touch $(OUT)
> +       for locale in $(SUPPORTED-LOCALES); do \
> +               [ $$locale = true ] && continue; \
> +               echo $$locale | sed 's,/, ,' >> $(OUT); \
> +       done
> diff --git a/recipes/glibc/glibc-2.10.1/generic-bits_select.h b/recipes/glibc/glibc-2.10.1/generic-bits_select.h
> new file mode 100644
> index 0000000..47e7ded
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/generic-bits_select.h
> @@ -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/recipes/glibc/glibc-2.10.1/generic-bits_time.h b/recipes/glibc/glibc-2.10.1/generic-bits_time.h
> new file mode 100644
> index 0000000..b3184d1
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/generic-bits_time.h
> @@ -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/recipes/glibc/glibc-2.10.1/generic-bits_types.h b/recipes/glibc/glibc-2.10.1/generic-bits_types.h
> new file mode 100644
> index 0000000..65c8a9f
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/generic-bits_types.h
> @@ -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/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h b/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
> new file mode 100644
> index 0000000..e9226c4
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
> @@ -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/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff b/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
> new file mode 100644
> index 0000000..a552cf0
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
> @@ -0,0 +1,13 @@
> +Arm needs a similar fix as http://sourceware.org/ml/libc-ports/2007-12/msg00000.html
> +
> +--- /tmp/stdio-lock.h  2008-03-04 18:51:15.555038993 +0100
> ++++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/bits/stdio-lock.h      2008-03-04 18:51:28.445035052 +0100
> +@@ -50,6 +50,8 @@
> +   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile, (_fp));      \
> +   _IO_flockfile (_fp)
> +
> ++# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
> ++
> + # define _IO_release_lock(_fp) \
> +   _IO_funlockfile (_fp);                                                    \
> +   _IO_cleanup_region_end (0)
> diff --git a/recipes/glibc/glibc-2.10.1/glibc-check_pf.patch b/recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
> new file mode 100644
> index 0000000..3cff6bb
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/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: <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/recipes/glibc/glibc-2.10.1/ldd-unbash.patch b/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
> new file mode 100644
> index 0000000..2fb8854
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
> @@ -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/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch b/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
> new file mode 100644
> index 0000000..9994d4f
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
> @@ -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/recipes/glibc/glibc-2.10.1/march-i686.patch b/recipes/glibc/glibc-2.10.1/march-i686.patch
> new file mode 100644
> index 0000000..0461603
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/march-i686.patch
> @@ -0,0 +1,38 @@
> +2007-02-15  Khem Raj  <kraj@xxxxxxxxxx>
> +
> +       * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
> +       * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
> +
> +
> +
> +Index: sysdeps/unix/sysv/linux/i386/sysdep.h
> +===================================================================
> +--- sysdeps/unix/sysv/linux/i386/sysdep.h      (revision 1469)
> ++++ sysdeps/unix/sysv/linux/i386/sysdep.h      (working copy)
> +@@ -29,6 +29,10 @@
> + #include <dl-sysdep.h>
> + #include <tls.h>
> +
> ++#if defined __i686 && defined __ASSEMBLER__
> ++#undef __i686
> ++#define __i686 __i686
> ++#endif
> +
> + /* For Linux we can use the system call table in the header file
> +       /usr/include/asm/unistd.h
> +Index: nptl/sysdeps/pthread/pt-initfini.c
> +===================================================================
> +--- nptl/sysdeps/pthread/pt-initfini.c (revision 1469)
> ++++ nptl/sysdeps/pthread/pt-initfini.c (working copy)
> +@@ -45,6 +45,11 @@
> + /* Embed an #include to pull in the alignment and .end directives. */
> + asm ("\n#include \"defs.h\"");
> +
> ++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
> ++asm ("\n#undef __i686");
> ++asm ("\n#define __i686 __i686");
> ++asm ("\n#endif");
> ++
> + /* The initial common code ends here. */
> + asm ("\n/*@HEADER_ENDS*/");
> +
> diff --git a/recipes/glibc/glibc-2.10.1/no-z-defs.patch b/recipes/glibc/glibc-2.10.1/no-z-defs.patch
> new file mode 100644
> index 0000000..48c6a41
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/no-z-defs.patch
> @@ -0,0 +1,9 @@
> +Create a configparms file which disabled no-z-defs.
> +This is required to build a working glibs for sh4,
> +without there will be a lot linker errors during the build.
> +
> +diff -duNr libc.orig/configparms libc/configparms
> +--- libc.orig/configparms      1970-01-01 10:00:00.000000000 +1000
> ++++ libc/configparms   2006-02-23 14:08:18.000000000 +1100
> +@@ -0,0 +1 @@
> ++no-z-defs=yes
> diff --git a/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch b/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
> new file mode 100644
> index 0000000..18a46ad
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
> @@ -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/recipes/glibc/glibc-2.10.1/nscd-init.patch b/recipes/glibc/glibc-2.10.1/nscd-init.patch
> new file mode 100644
> index 0000000..884609a
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/nscd-init.patch
> @@ -0,0 +1,39 @@
> +--- nscd/nscd.init
> ++++ nscd/nscd.init
> +@@ -48,9 +48,8 @@
> +
> + start () {
> +     [ -d /var/run/nscd ] || mkdir /var/run/nscd
> +-    [ -d /var/db/nscd ] || mkdir /var/db/nscd
> +     echo -n $"Starting $prog: "
> +-    daemon /usr/sbin/nscd
> ++    /usr/sbin/nscd
> +     RETVAL=$?
> +     echo
> +     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
> +@@ -67,12 +66,10 @@
> +       # a non-privileged user
> +       rm -f /var/run/nscd/nscd.pid
> +       rm -f /var/run/nscd/socket
> +-              success $"$prog shutdown"
> +-    else
> +-              failure $"$prog shutdown"
> +     fi
> +-    echo
> +-    return $RETVAL
> ++    echo "Done."
> ++    # If nscd did not run, return 0 according to LSB.
> ++    return 0
> + }
> +
> + restart() {
> +@@ -104,7 +101,8 @@
> +       ;;
> +     force-reload | reload)
> +       echo -n $"Reloading $prog: "
> +-      killproc /usr/sbin/nscd -HUP
> ++      # Use killall, initscripts-1.0-r115 don't support -HUP yet.
> ++      killall -HUP /usr/sbin/nscd
> +       RETVAL=$?
> +       echo
> +       ;;
> diff --git a/recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff b/recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
> new file mode 100644
> index 0000000..1046efb
> --- /dev/null
> +++ b/recipes/glibc/glibc-2.10.1/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 <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 };
> diff --git a/recipes/glibc/glibc_2.10.1.bb b/recipes/glibc/glibc_2.10.1.bb
> index 3c2fce8..b29e36a 100644
> --- a/recipes/glibc/glibc_2.10.1.bb
> +++ b/recipes/glibc/glibc_2.10.1.bb
> @@ -11,9 +11,6 @@ RPROVIDES_${PN}-dev = "libc6-dev virtual-libc-dev"
>  BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
>  TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
>
> -
> -FILESPATHPKG =. "glibc-2.4:"
> -
>  GLIBC_ADDONS ?= "ports,nptl,libidn"
>
>  GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET gez_ER bn_BD te_IN"
> --
> 1.6.4.2
>
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local  dir
  2010-07-15 21:50   ` [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local dir Khem Raj
@ 2010-07-16  6:07     ` Frans Meulenbroeks
  0 siblings, 0 replies; 9+ messages in thread
From: Frans Meulenbroeks @ 2010-07-16  6:07 UTC (permalink / raw)
  To: openembedded-devel

2010/7/15 Khem Raj <raj.khem@gmail.com>

> On Thu, Jul 15, 2010 at 1:46 PM, Frans Meulenbroeks
> <fransmeulenbroeks@gmail.com> wrote:
> > moved all patches to glibc-2.10.1
> > removed references to other dirs.
> >
> > Signed-off-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
>
> Please run bitbake -c configure atleast for all recipes you touched.
>

I'll do that before committing (actually I already did a bitbake -c patch to
verify that all patch files are there and apply properly

>
> Acked-by: Khem Raj <raj.khem@gmail.com>
>

Thanks for the ack.
I assume you also agree with the 2.5 patches I send earlier this week.
(they are exactly the same except that it concerns 2.5)

Frans.

>
>
> > ---
> >  recipes/glibc/glibc-2.10.1/arm-longlong.patch      |   58 ++
> >  .../arm-lowlevellock-include-tls.patch             |   12 +
> >  recipes/glibc/glibc-2.10.1/arm-memcpy.patch        |  758
> ++++++++++++++++++++
> >  .../glibc/glibc-2.10.1/armv4t-interworking.patch   |   47 ++
> >  recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch   |   10 +
> >  recipes/glibc/glibc-2.10.1/etc/ld.so.conf          |    2 +
> >  recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch   |   11 +
> >  recipes/glibc/glibc-2.10.1/generate-supported.mk   |   11 +
> >  recipes/glibc/glibc-2.10.1/generic-bits_select.h   |   35 +
> >  recipes/glibc/glibc-2.10.1/generic-bits_time.h     |   75 ++
> >  recipes/glibc/glibc-2.10.1/generic-bits_types.h    |  200 +++++
> >  .../glibc/glibc-2.10.1/generic-bits_typesizes.h    |   66 ++
> >  .../glibc-arm-IO-acquire-lock-fix.diff             |   13 +
> >  recipes/glibc/glibc-2.10.1/glibc-check_pf.patch    |  343 +++++++++
> >  recipes/glibc/glibc-2.10.1/ldd-unbash.patch        |   11 +
> >  recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch  |   18 +
> >  recipes/glibc/glibc-2.10.1/march-i686.patch        |   38 +
> >  recipes/glibc/glibc-2.10.1/no-z-defs.patch         |    9 +
> >  recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch |   26 +
> >  recipes/glibc/glibc-2.10.1/nscd-init.patch         |   39 +
> >  recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff  |   25 +
> >  recipes/glibc/glibc_2.10.1.bb                      |    3 -
> >  22 files changed, 1807 insertions(+), 3 deletions(-)
> >  create mode 100644 recipes/glibc/glibc-2.10.1/arm-longlong.patch
> >  create mode 100644
> recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/arm-memcpy.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/etc/ld.so.conf
> >  create mode 100644 recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/generate-supported.mk
> >  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_select.h
> >  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_time.h
> >  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_types.h
> >  create mode 100644 recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
> >  create mode 100644
> recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
> >  create mode 100644 recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/ldd-unbash.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/march-i686.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/no-z-defs.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/nscd-init.patch
> >  create mode 100644 recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
> >
> > diff --git a/recipes/glibc/glibc-2.10.1/arm-longlong.patch
> b/recipes/glibc/glibc-2.10.1/arm-longlong.patch
> > new file mode 100644
> > index 0000000..28aca83
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/arm-longlong.patch
> > @@ -0,0 +1,58 @@
> > +--- glibc-2.4/stdlib/longlong.h.ark    2006-03-11 22:49:27.000000000
> +0100
> > ++++ glibc-2.4/stdlib/longlong.h        2006-03-11 22:55:12.000000000
> +0100
> > +@@ -206,6 +206,14 @@
> > +            "rI" ((USItype) (bh)),                                     \
> > +            "r" ((USItype) (al)),                                      \
> > +            "rI" ((USItype) (bl)) __CLOBBER_CC)
> > ++/* v3m and all higher arches have long multiply support.  */
> > ++#if !defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__)
> > ++#define umul_ppmm(xh, xl, a, b) \
> > ++  __asm__ ("umull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r"
> (b))
> > ++#define UMUL_TIME 5
> > ++#define smul_ppmm(xh, xl, a, b) \
> > ++  __asm__ ("smull %0,%1,%2,%3" : "=&r" (xl), "=&r" (xh) : "r" (a), "r"
> (b))
> > ++#else
> > + #define umul_ppmm(xh, xl, a, b) \
> > + {register USItype __t0, __t1, __t2;                                   \
> > +   __asm__ ("%@ Inlined umul_ppmm\n"                                   \
> > +@@ -227,7 +235,13 @@
> > +          : "r" ((USItype) (a)),                                       \
> > +            "r" ((USItype) (b)) __CLOBBER_CC );}
> > + #define UMUL_TIME 20
> > ++#endif
> > + #define UDIV_TIME 100
> > ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) ||
> defined(__ARM_ARCH_5TE__)
> > ++#define count_leading_zeros(COUNT,X)   ((COUNT) = __builtin_clz (X))
> > ++#define COUNT_LEADING_ZEROS_0 32
> > ++#endif
> > ++
> > + #endif /* __arm__ */
> > +
> > + #if defined (__hppa) && W_TYPE_SIZE == 32
> > +--- glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c.ark       2006-03-11
> 22:56:43.000000000 +0100
> > ++++ glibc-2.4/ports/sysdeps/arm/mp_clz_tab.c   2006-03-11
> 22:58:19.000000000 +0100
> > +@@ -0,0 +1,24 @@
> > ++/* __clz_tab -- support for longlong.h
> > ++   Copyright (C) 2004 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.  */
> > ++
> > ++#if defined(__ARM_ARCH_5__) || defined(__ARM_ARCH_5T__) ||
> defined(__ARM_ARCH_5TE__)
> > ++/* Nothing required.  */
> > ++#else
> > ++#include <stdlib/mp_clz_tab.c>
> > ++#endif
> > diff --git
> a/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
> b/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
> > new file mode 100644
> > index 0000000..5c8062e
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/arm-lowlevellock-include-tls.patch
> > @@ -0,0 +1,12 @@
> > +Index: glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
> > +===================================================================
> > +--- glibc-2.9.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
>       2009-06-19 20:54:35.446686910 +0400
> > ++++ glibc-2.9/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
>  2009-06-19 20:54:43.774683370 +0400
> > +@@ -25,6 +25,7 @@
> > + #include <atomic.h>
> > + #include <sysdep.h>
> > + #include <kernel-features.h>
> > ++#include <tls.h>
> > +
> > + #define FUTEX_WAIT            0
> > + #define FUTEX_WAKE            1
> > diff --git a/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
> b/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
> > new file mode 100644
> > index 0000000..bc2b3da
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/arm-memcpy.patch
> > @@ -0,0 +1,758 @@
> > +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> > ++++ sysdeps/arm/memmove.S      2004-03-20 18:37:23.000000000 +0000
> > +@@ -0,0 +1,251 @@
> > ++/*
> > ++ *   Optimized memmove implementation for ARM processors
> > ++ *
> > ++ *    Author:         Nicolas Pitre
> > ++ *    Created:        Dec 23, 2003
> > ++ *    Copyright:      (C) MontaVista Software, Inc.
> > ++ *
> > ++ *   This file 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.
> > ++ *
> > ++ *   This file 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.
> > ++ */
> > ++
> > ++#include <sysdep.h>
> > ++
> > ++
> > ++/*
> > ++ * Endian independent macros for shifting bytes within registers.
> > ++ */
> > ++#ifndef __ARMEB__
> > ++#define pull            lsr
> > ++#define push            lsl
> > ++#else
> > ++#define pull            lsl
> > ++#define push            lsr
> > ++#endif
> > ++
> > ++/*
> > ++ * Enable data preload for architectures that support it (ARMv5 and
> above)
> > ++ */
> > ++#if defined(__ARM_ARCH_5__) || \
> > ++    defined(__ARM_ARCH_5T__) || \
> > ++    defined(__ARM_ARCH_5TE__)
> > ++#define PLD(code...)  code
> > ++#else
> > ++#define PLD(code...)
> > ++#endif
> > ++
> > ++
> > ++/* char * memmove (char *dst, const char *src) */
> > ++ENTRY(memmove)
> > ++              subs    ip, r0, r1
> > ++              cmphi   r2, ip
> > ++              bls     memcpy(PLT)
> > ++
> > ++              stmfd   sp!, {r0, r4, lr}
> > ++              add     r1, r1, r2
> > ++              add     r0, r0, r2
> > ++              subs    r2, r2, #4
> > ++              blt     25f
> > ++              ands    ip, r0, #3
> > ++      PLD(    pld     [r1, #-4]               )
> > ++              bne     26f
> > ++              ands    ip, r1, #3
> > ++              bne     27f
> > ++
> > ++19:           subs    r2, r2, #4
> > ++              blt     24f
> > ++              subs    r2, r2, #8
> > ++              blt     23f
> > ++              subs    r2, r2, #16
> > ++              blt     22f
> > ++
> > ++      PLD(    pld     [r1, #-32]              )
> > ++      PLD(    subs    r2, r2, #96             )
> > ++              stmfd   sp!, {r5 - r8}
> > ++      PLD(    blt     21f                     )
> > ++
> > ++      PLD(    @ cache alignment               )
> > ++      PLD(    ands    ip, r1, #31             )
> > ++      PLD(    pld     [r1, #-64]              )
> > ++      PLD(    beq     20f                     )
> > ++      PLD(    cmp     r2, ip                  )
> > ++      PLD(    pld     [r1, #-96]              )
> > ++      PLD(    blt     20f                     )
> > ++      PLD(    cmp     ip, #16                 )
> > ++      PLD(    sub     r2, r2, ip              )
> > ++      PLD(    ldmgedb r1!, {r3 - r6}          )
> > ++      PLD(    stmgedb r0!, {r3 - r6}          )
> > ++      PLD(    beq     20f                     )
> > ++      PLD(    and     ip, ip, #15             )
> > ++      PLD(    cmp     ip, #8                  )
> > ++      PLD(    ldr     r3, [r1, #-4]!          )
> > ++      PLD(    ldrge   r4, [r1, #-4]!          )
> > ++      PLD(    ldrgt   r5, [r1, #-4]!          )
> > ++      PLD(    str     r3, [r0, #-4]!          )
> > ++      PLD(    strge   r4, [r0, #-4]!          )
> > ++      PLD(    strgt   r5, [r0, #-4]!          )
> > ++
> > ++20:   PLD(    pld     [r1, #-96]              )
> > ++      PLD(    pld     [r1, #-128]             )
> > ++21:           ldmdb   r1!, {r3, r4, ip, lr}
> > ++              subs    r2, r2, #32
> > ++              stmdb   r0!, {r3, r4, ip, lr}
> > ++              ldmdb   r1!, {r3, r4, ip, lr}
> > ++              stmgedb r0!, {r3, r4, ip, lr}
> > ++              ldmgedb r1!, {r3, r4, ip, lr}
> > ++              stmgedb r0!, {r3, r4, ip, lr}
> > ++              ldmgedb r1!, {r3, r4, ip, lr}
> > ++              subges  r2, r2, #32
> > ++              stmdb   r0!, {r3, r4, ip, lr}
> > ++              bge     20b
> > ++      PLD(    cmn     r2, #96                 )
> > ++      PLD(    bge     21b                     )
> > ++      PLD(    add     r2, r2, #96             )
> > ++              tst     r2, #31
> > ++              ldmfd   sp!, {r5 - r8}
> > ++              ldmeqfd sp!, {r0, r4, pc}
> > ++
> > ++              tst     r2, #16
> > ++22:           ldmnedb r1!, {r3, r4, ip, lr}
> > ++              stmnedb r0!, {r3, r4, ip, lr}
> > ++
> > ++              tst     r2, #8
> > ++23:           ldmnedb r1!, {r3, r4}
> > ++              stmnedb r0!, {r3, r4}
> > ++
> > ++              tst     r2, #4
> > ++24:           ldrne   r3, [r1, #-4]!
> > ++              strne   r3, [r0, #-4]!
> > ++
> > ++25:           ands    r2, r2, #3
> > ++              ldmeqfd sp!, {r0, r4, pc}
> > ++
> > ++              cmp     r2, #2
> > ++              ldrb    r3, [r1, #-1]
> > ++              ldrgeb  r4, [r1, #-2]
> > ++              ldrgtb  ip, [r1, #-3]
> > ++              strb    r3, [r0, #-1]
> > ++              strgeb  r4, [r0, #-2]
> > ++              strgtb  ip, [r0, #-3]
> > ++              ldmfd   sp!, {r0, r4, pc}
> > ++
> > ++26:           cmp     ip, #2
> > ++              ldrb    r3, [r1, #-1]!
> > ++              ldrgeb  r4, [r1, #-1]!
> > ++              ldrgtb  lr, [r1, #-1]!
> > ++              strb    r3, [r0, #-1]!
> > ++              strgeb  r4, [r0, #-1]!
> > ++              strgtb  lr, [r0, #-1]!
> > ++              subs    r2, r2, ip
> > ++              blt     25b
> > ++              ands    ip, r1, #3
> > ++              beq     19b
> > ++
> > ++27:           bic     r1, r1, #3
> > ++              cmp     ip, #2
> > ++              ldr     r3, [r1]
> > ++              beq     35f
> > ++              blt     36f
> > ++
> > ++
> > ++              .macro  backward_copy_shift push pull
> > ++
> > ++              cmp     r2, #12
> > ++      PLD(    pld     [r1, #-4]               )
> > ++              blt     33f
> > ++              subs    r2, r2, #28
> > ++              stmfd   sp!, {r5 - r9}
> > ++              blt     31f
> > ++
> > ++      PLD(    subs    r2, r2, #96             )
> > ++      PLD(    pld     [r1, #-32]              )
> > ++      PLD(    blt     30f                     )
> > ++      PLD(    pld     [r1, #-64]              )
> > ++
> > ++      PLD(    @ cache alignment               )
> > ++      PLD(    ands    ip, r1, #31             )
> > ++      PLD(    pld     [r1, #-96]              )
> > ++      PLD(    beq     29f                     )
> > ++      PLD(    cmp     r2, ip                  )
> > ++      PLD(    pld     [r1, #-128]             )
> > ++      PLD(    blt     29f                     )
> > ++      PLD(    sub     r2, r2, ip              )
> > ++28:   PLD(    mov     r4, r3, push #\push     )
> > ++      PLD(    ldr     r3, [r1, #-4]!          )
> > ++      PLD(    subs    ip, ip, #4              )
> > ++      PLD(    orr     r4, r4, r3, pull #\pull )
> > ++      PLD(    str     r4, [r0, #-4]!          )
> > ++      PLD(    bgt     28b                     )
> > ++
> > ++29:   PLD(    pld     [r1, #-128]             )
> > ++30:           mov     lr, r3, push #\push
> > ++              ldmdb   r1!, {r3 - r9, ip}
> > ++              subs    r2, r2, #32
> > ++              orr     lr, lr, ip, pull #\pull
> > ++              mov     ip, ip, push #\push
> > ++              orr     ip, ip, r9, pull #\pull
> > ++              mov     r9, r9, push #\push
> > ++              orr     r9, r9, r8, pull #\pull
> > ++              mov     r8, r8, push #\push
> > ++              orr     r8, r8, r7, pull #\pull
> > ++              mov     r7, r7, push #\push
> > ++              orr     r7, r7, r6, pull #\pull
> > ++              mov     r6, r6, push #\push
> > ++              orr     r6, r6, r5, pull #\pull
> > ++              mov     r5, r5, push #\push
> > ++              orr     r5, r5, r4, pull #\pull
> > ++              mov     r4, r4, push #\push
> > ++              orr     r4, r4, r3, pull #\pull
> > ++              stmdb   r0!, {r4 - r9, ip, lr}
> > ++              bge     29b
> > ++      PLD(    cmn     r2, #96                 )
> > ++      PLD(    bge     30b                     )
> > ++      PLD(    add     r2, r2, #96             )
> > ++              cmn     r2, #16
> > ++              blt     32f
> > ++31:           mov     r7, r3, push #\push
> > ++              ldmdb   r1!, {r3 - r6}
> > ++              sub     r2, r2, #16
> > ++              orr     r7, r7, r6, pull #\pull
> > ++              mov     r6, r6, push #\push
> > ++              orr     r6, r6, r5, pull #\pull
> > ++              mov     r5, r5, push #\push
> > ++              orr     r5, r5, r4, pull #\pull
> > ++              mov     r4, r4, push #\push
> > ++              orr     r4, r4, r3, pull #\pull
> > ++              stmdb   r0!, {r4 - r7}
> > ++32:           adds    r2, r2, #28
> > ++              ldmfd   sp!, {r5 - r9}
> > ++              blt     34f
> > ++33:           mov     r4, r3, push #\push
> > ++              ldr     r3, [r1, #-4]!
> > ++              subs    r2, r2, #4
> > ++              orr     r4, r4, r3, pull #\pull
> > ++              str     r4, [r0, #-4]!
> > ++              bge     33b
> > ++34:
> > ++              .endm
> > ++
> > ++
> > ++              backward_copy_shift     push=8  pull=24
> > ++              add     r1, r1, #3
> > ++              b       25b
> > ++
> > ++35:           backward_copy_shift     push=16 pull=16
> > ++              add     r1, r1, #2
> > ++              b       25b
> > ++
> > ++36:           backward_copy_shift     push=24 pull=8
> > ++              add     r1, r1, #1
> > ++              b       25b
> > ++
> > ++              .size   memmove, . - memmove
> > ++END(memmove)
> > ++libc_hidden_builtin_def (memmove)
> > +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> > ++++ sysdeps/arm/bcopy.S        2004-03-20 18:37:48.000000000 +0000
> > +@@ -0,0 +1,255 @@
> > ++/*
> > ++ *   Optimized memmove implementation for ARM processors
> > ++ *
> > ++ *    Author:         Nicolas Pitre
> > ++ *    Created:        Dec 23, 2003
> > ++ *    Copyright:      (C) MontaVista Software, Inc.
> > ++ *
> > ++ *   This file 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.
> > ++ *
> > ++ *   This file 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.
> > ++ */
> > ++
> > ++#include <sysdep.h>
> > ++
> > ++
> > ++/*
> > ++ * Endian independent macros for shifting bytes within registers.
> > ++ */
> > ++#ifndef __ARMEB__
> > ++#define pull            lsr
> > ++#define push            lsl
> > ++#else
> > ++#define pull            lsl
> > ++#define push            lsr
> > ++#endif
> > ++
> > ++/*
> > ++ * Enable data preload for architectures that support it (ARMv5 and
> above)
> > ++ */
> > ++#if defined(__ARM_ARCH_5__) || \
> > ++    defined(__ARM_ARCH_5T__) || \
> > ++    defined(__ARM_ARCH_5TE__)
> > ++#define PLD(code...)  code
> > ++#else
> > ++#define PLD(code...)
> > ++#endif
> > ++
> > ++dst           .req    r1
> > ++src           .req    r0
> > ++
> > ++/* void *bcopy (const char *src, char *dst, size_t size) */
> > ++ENTRY(bcopy)
> > ++              subs    ip, dst, src
> > ++              cmphi   r2, ip
> > ++              movls   r3, r0
> > ++              movls   r0, r1
> > ++              movls   r1, r3
> > ++              bls     memcpy(PLT)
> > ++
> > ++              stmfd   sp!, {r4, lr}
> > ++              add     src, src, r2
> > ++              add     dst, dst, r2
> > ++              subs    r2, r2, #4
> > ++              blt     25f
> > ++              ands    ip, dst, #3
> > ++      PLD(    pld     [src, #-4]              )
> > ++              bne     26f
> > ++              ands    ip, src, #3
> > ++              bne     27f
> > ++
> > ++19:           subs    r2, r2, #4
> > ++              blt     24f
> > ++              subs    r2, r2, #8
> > ++              blt     23f
> > ++              subs    r2, r2, #16
> > ++              blt     22f
> > ++
> > ++      PLD(    pld     [src, #-32]             )
> > ++      PLD(    subs    r2, r2, #96             )
> > ++              stmfd   sp!, {r5 - r8}
> > ++      PLD(    blt     21f                     )
> > ++
> > ++      PLD(    @ cache alignment               )
> > ++      PLD(    ands    ip, src, #31            )
> > ++      PLD(    pld     [src, #-64]             )
> > ++      PLD(    beq     20f                     )
> > ++      PLD(    cmp     r2, ip                  )
> > ++      PLD(    pld     [src, #-96]             )
> > ++      PLD(    blt     20f                     )
> > ++      PLD(    cmp     ip, #16                 )
> > ++      PLD(    sub     r2, r2, ip              )
> > ++      PLD(    ldmgedb src!, {r3 - r6}         )
> > ++      PLD(    stmgedb dst!, {r3 - r6}         )
> > ++      PLD(    beq     20f                     )
> > ++      PLD(    and     ip, ip, #15             )
> > ++      PLD(    cmp     ip, #8                  )
> > ++      PLD(    ldr     r3, [src, #-4]!         )
> > ++      PLD(    ldrge   r4, [src, #-4]!         )
> > ++      PLD(    ldrgt   r5, [src, #-4]!         )
> > ++      PLD(    str     r3, [dst, #-4]!         )
> > ++      PLD(    strge   r4, [dst, #-4]!         )
> > ++      PLD(    strgt   r5, [dst, #-4]!         )
> > ++
> > ++20:   PLD(    pld     [src, #-96]             )
> > ++      PLD(    pld     [src, #-128]            )
> > ++21:           ldmdb   src!, {r3, r4, ip, lr}
> > ++              subs    r2, r2, #32
> > ++              stmdb   dst!, {r3, r4, ip, lr}
> > ++              ldmdb   src!, {r3, r4, ip, lr}
> > ++              stmgedb dst!, {r3, r4, ip, lr}
> > ++              ldmgedb src!, {r3, r4, ip, lr}
> > ++              stmgedb dst!, {r3, r4, ip, lr}
> > ++              ldmgedb src!, {r3, r4, ip, lr}
> > ++              subges  r2, r2, #32
> > ++              stmdb   dst!, {r3, r4, ip, lr}
> > ++              bge     20b
> > ++      PLD(    cmn     r2, #96                 )
> > ++      PLD(    bge     21b                     )
> > ++      PLD(    add     r2, r2, #96             )
> > ++              tst     r2, #31
> > ++              ldmfd   sp!, {r5 - r8}
> > ++              ldmeqfd sp!, {r4, pc}
> > ++
> > ++              tst     r2, #16
> > ++22:           ldmnedb src!, {r3, r4, ip, lr}
> > ++              stmnedb dst!, {r3, r4, ip, lr}
> > ++
> > ++              tst     r2, #8
> > ++23:           ldmnedb src!, {r3, r4}
> > ++              stmnedb dst!, {r3, r4}
> > ++
> > ++              tst     r2, #4
> > ++24:           ldrne   r3, [src, #-4]!
> > ++              strne   r3, [dst, #-4]!
> > ++
> > ++25:           ands    r2, r2, #3
> > ++              ldmeqfd sp!, {dst, r4, pc}
> > ++
> > ++              cmp     r2, #2
> > ++              ldrb    r3, [src, #-1]
> > ++              ldrgeb  r4, [src, #-2]
> > ++              ldrgtb  ip, [src, #-3]
> > ++              strb    r3, [dst, #-1]
> > ++              strgeb  r4, [dst, #-2]
> > ++              strgtb  ip, [dst, #-3]
> > ++              ldmfd   sp!, {dst, r4, pc}
> > ++
> > ++26:           cmp     ip, #2
> > ++              ldrb    r3, [src, #-1]!
> > ++              ldrgeb  r4, [src, #-1]!
> > ++              ldrgtb  lr, [src, #-1]!
> > ++              strb    r3, [dst, #-1]!
> > ++              strgeb  r4, [dst, #-1]!
> > ++              strgtb  lr, [dst, #-1]!
> > ++              subs    r2, r2, ip
> > ++              blt     25b
> > ++              ands    ip, src, #3
> > ++              beq     19b
> > ++
> > ++27:           bic     src, src, #3
> > ++              cmp     ip, #2
> > ++              ldr     r3, [src]
> > ++              beq     35f
> > ++              blt     36f
> > ++
> > ++
> > ++              .macro  backward_copy_shift push pull
> > ++
> > ++              cmp     r2, #12
> > ++      PLD(    pld     [src, #-4]              )
> > ++              blt     33f
> > ++              subs    r2, r2, #28
> > ++              stmfd   sp!, {r5 - r9}
> > ++              blt     31f
> > ++
> > ++      PLD(    subs    r2, r2, #96             )
> > ++      PLD(    pld     [src, #-32]             )
> > ++      PLD(    blt     30f                     )
> > ++      PLD(    pld     [src, #-64]             )
> > ++
> > ++      PLD(    @ cache alignment               )
> > ++      PLD(    ands    ip, src, #31            )
> > ++      PLD(    pld     [src, #-96]             )
> > ++      PLD(    beq     29f                     )
> > ++      PLD(    cmp     r2, ip                  )
> > ++      PLD(    pld     [src, #-128]            )
> > ++      PLD(    blt     29f                     )
> > ++      PLD(    sub     r2, r2, ip              )
> > ++28:   PLD(    mov     r4, r3, push #\push     )
> > ++      PLD(    ldr     r3, [src, #-4]!         )
> > ++      PLD(    subs    ip, ip, #4              )
> > ++      PLD(    orr     r4, r4, r3, pull #\pull )
> > ++      PLD(    str     r4, [dst, #-4]!         )
> > ++      PLD(    bgt     28b                     )
> > ++
> > ++29:   PLD(    pld     [src, #-128]            )
> > ++30:           mov     lr, r3, push #\push
> > ++              ldmdb   src!, {r3 - r9, ip}
> > ++              subs    r2, r2, #32
> > ++              orr     lr, lr, ip, pull #\pull
> > ++              mov     ip, ip, push #\push
> > ++              orr     ip, ip, r9, pull #\pull
> > ++              mov     r9, r9, push #\push
> > ++              orr     r9, r9, r8, pull #\pull
> > ++              mov     r8, r8, push #\push
> > ++              orr     r8, r8, r7, pull #\pull
> > ++              mov     r7, r7, push #\push
> > ++              orr     r7, r7, r6, pull #\pull
> > ++              mov     r6, r6, push #\push
> > ++              orr     r6, r6, r5, pull #\pull
> > ++              mov     r5, r5, push #\push
> > ++              orr     r5, r5, r4, pull #\pull
> > ++              mov     r4, r4, push #\push
> > ++              orr     r4, r4, r3, pull #\pull
> > ++              stmdb   dst!, {r4 - r9, ip, lr}
> > ++              bge     29b
> > ++      PLD(    cmn     r2, #96                 )
> > ++      PLD(    bge     30b                     )
> > ++      PLD(    add     r2, r2, #96             )
> > ++              cmn     r2, #16
> > ++              blt     32f
> > ++31:           mov     r7, r3, push #\push
> > ++              ldmdb   src!, {r3 - r6}
> > ++              sub     r2, r2, #16
> > ++              orr     r7, r7, r6, pull #\pull
> > ++              mov     r6, r6, push #\push
> > ++              orr     r6, r6, r5, pull #\pull
> > ++              mov     r5, r5, push #\push
> > ++              orr     r5, r5, r4, pull #\pull
> > ++              mov     r4, r4, push #\push
> > ++              orr     r4, r4, r3, pull #\pull
> > ++              stmdb   dst!, {r4 - r7}
> > ++32:           adds    r2, r2, #28
> > ++              ldmfd   sp!, {r5 - r9}
> > ++              blt     34f
> > ++33:           mov     r4, r3, push #\push
> > ++              ldr     r3, [src, #-4]!
> > ++              subs    r2, r2, #4
> > ++              orr     r4, r4, r3, pull #\pull
> > ++              str     r4, [dst, #-4]!
> > ++              bge     33b
> > ++34:
> > ++              .endm
> > ++
> > ++
> > ++              backward_copy_shift     push=8  pull=24
> > ++              add     src, src, #3
> > ++              b       25b
> > ++
> > ++35:           backward_copy_shift     push=16 pull=16
> > ++              add     src, src, #2
> > ++              b       25b
> > ++
> > ++36:           backward_copy_shift     push=24 pull=8
> > ++              add     src, src, #1
> > ++              b       25b
> > ++
> > ++              .size   bcopy, . - bcopy
> > ++END(bcopy)
> > +
> > +--- /dev/null  2004-02-02 20:32:13.000000000 +0000
> > ++++ sysdeps/arm/memcpy.S       2004-05-02 14:33:22.000000000 +0100
> > +@@ -0,0 +1,242 @@
> > ++/*
> > ++ *   Optimized memcpy implementation for ARM processors
> > ++ *
> > ++ *    Author:         Nicolas Pitre
> > ++ *    Created:        Dec 23, 2003
> > ++ *    Copyright:      (C) MontaVista Software, Inc.
> > ++ *
> > ++ *   This file 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.
> > ++ *
> > ++ *   This file 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.
> > ++ */
> > ++
> > ++#include <sysdep.h>
> > ++
> > ++
> > ++/*
> > ++ * Endian independent macros for shifting bytes within registers.
> > ++ */
> > ++#ifndef __ARMEB__
> > ++#define pull            lsr
> > ++#define push            lsl
> > ++#else
> > ++#define pull            lsl
> > ++#define push            lsr
> > ++#endif
> > ++
> > ++/*
> > ++ * Enable data preload for architectures that support it (ARMv5 and
> above)
> > ++ */
> > ++#if defined(__ARM_ARCH_5__) || \
> > ++    defined(__ARM_ARCH_5T__) || \
> > ++    defined(__ARM_ARCH_5TE__)
> > ++#define PLD(code...)  code
> > ++#else
> > ++#define PLD(code...)
> > ++#endif
> > ++
> > ++
> > ++/* char * memcpy (char *dst, const char *src) */
> > ++
> > ++ENTRY(memcpy)
> > ++              subs    r2, r2, #4
> > ++              stmfd   sp!, {r0, r4, lr}
> > ++              blt     7f
> > ++              ands    ip, r0, #3
> > ++      PLD(    pld     [r1, #0]                )
> > ++              bne     8f
> > ++              ands    ip, r1, #3
> > ++              bne     9f
> > ++
> > ++1:            subs    r2, r2, #4
> > ++              blt     6f
> > ++              subs    r2, r2, #8
> > ++              blt     5f
> > ++              subs    r2, r2, #16
> > ++              blt     4f
> > ++
> > ++      PLD(    subs    r2, r2, #65             )
> > ++              stmfd   sp!, {r5 - r8}
> > ++      PLD(    blt     3f                      )
> > ++      PLD(    pld     [r1, #32]               )
> > ++
> > ++      PLD(    @ cache alignment               )
> > ++      PLD(    ands    ip, r1, #31             )
> > ++      PLD(    pld     [r1, #64]               )
> > ++      PLD(    beq     2f                      )
> > ++      PLD(    rsb     ip, ip, #32             )
> > ++      PLD(    cmp     r2, ip                  )
> > ++      PLD(    pld     [r1, #96]               )
> > ++      PLD(    blt     2f                      )
> > ++      PLD(    cmp     ip, #16                 )
> > ++      PLD(    sub     r2, r2, ip              )
> > ++      PLD(    ldmgeia r1!, {r3 - r6}          )
> > ++      PLD(    stmgeia r0!, {r3 - r6}          )
> > ++      PLD(    beq     2f                      )
> > ++      PLD(    and     ip, ip, #15             )
> > ++      PLD(    cmp     ip, #8                  )
> > ++      PLD(    ldr     r3, [r1], #4            )
> > ++      PLD(    ldrge   r4, [r1], #4            )
> > ++      PLD(    ldrgt   r5, [r1], #4            )
> > ++      PLD(    str     r3, [r0], #4            )
> > ++      PLD(    strge   r4, [r0], #4            )
> > ++      PLD(    strgt   r5, [r0], #4            )
> > ++
> > ++2:    PLD(    pld     [r1, #96]               )
> > ++3:            ldmia   r1!, {r3 - r8, ip, lr}
> > ++              subs    r2, r2, #32
> > ++              stmia   r0!, {r3 - r8, ip, lr}
> > ++              bge     2b
> > ++      PLD(    cmn     r2, #65                 )
> > ++      PLD(    bge     3b                      )
> > ++      PLD(    add     r2, r2, #65             )
> > ++              tst     r2, #31
> > ++              ldmfd   sp!, {r5 - r8}
> > ++              ldmeqfd sp!, {r0, r4, pc}
> > ++
> > ++              tst     r2, #16
> > ++4:            ldmneia r1!, {r3, r4, ip, lr}
> > ++              stmneia r0!, {r3, r4, ip, lr}
> > ++
> > ++              tst     r2, #8
> > ++5:            ldmneia r1!, {r3, r4}
> > ++              stmneia r0!, {r3, r4}
> > ++
> > ++              tst     r2, #4
> > ++6:            ldrne   r3, [r1], #4
> > ++              strne   r3, [r0], #4
> > ++
> > ++7:            ands    r2, r2, #3
> > ++              ldmeqfd sp!, {r0, r4, pc}
> > ++
> > ++              cmp     r2, #2
> > ++              ldrb    r3, [r1], #1
> > ++              ldrgeb  r4, [r1], #1
> > ++              ldrgtb  ip, [r1]
> > ++              strb    r3, [r0], #1
> > ++              strgeb  r4, [r0], #1
> > ++              strgtb  ip, [r0]
> > ++              ldmfd   sp!, {r0, r4, pc}
> > ++
> > ++8:            rsb     ip, ip, #4
> > ++              cmp     ip, #2
> > ++              ldrb    r3, [r1], #1
> > ++              ldrgeb  r4, [r1], #1
> > ++              ldrgtb  lr, [r1], #1
> > ++              strb    r3, [r0], #1
> > ++              strgeb  r4, [r0], #1
> > ++              strgtb  lr, [r0], #1
> > ++              subs    r2, r2, ip
> > ++              blt     7b
> > ++              ands    ip, r1, #3
> > ++              beq     1b
> > ++
> > ++9:            bic     r1, r1, #3
> > ++              cmp     ip, #2
> > ++              ldr     lr, [r1], #4
> > ++              beq     17f
> > ++              bgt     18f
> > ++
> > ++
> > ++              .macro  forward_copy_shift pull push
> > ++
> > ++              cmp     r2, #12
> > ++      PLD(    pld     [r1, #0]                )
> > ++              blt     15f
> > ++              subs    r2, r2, #28
> > ++              stmfd   sp!, {r5 - r9}
> > ++              blt     13f
> > ++
> > ++      PLD(    subs    r2, r2, #97             )
> > ++      PLD(    blt     12f                     )
> > ++      PLD(    pld     [r1, #32]               )
> > ++
> > ++      PLD(    @ cache alignment               )
> > ++      PLD(    rsb     ip, r1, #36             )
> > ++      PLD(    pld     [r1, #64]               )
> > ++      PLD(    ands    ip, ip, #31             )
> > ++      PLD(    pld     [r1, #96]               )
> > ++      PLD(    beq     11f                     )
> > ++      PLD(    cmp     r2, ip                  )
> > ++      PLD(    pld     [r1, #128]              )
> > ++      PLD(    blt     11f                     )
> > ++      PLD(    sub     r2, r2, ip              )
> > ++10:   PLD(    mov     r3, lr, pull #\pull     )
> > ++      PLD(    ldr     lr, [r1], #4            )
> > ++      PLD(    subs    ip, ip, #4              )
> > ++      PLD(    orr     r3, r3, lr, push #\push )
> > ++      PLD(    str     r3, [r0], #4            )
> > ++      PLD(    bgt     10b                     )
> > ++
> > ++11:   PLD(    pld     [r1, #128]              )
> > ++12:           mov     r3, lr, pull #\pull
> > ++              ldmia   r1!, {r4 - r9, ip, lr}
> > ++              subs    r2, r2, #32
> > ++              orr     r3, r3, r4, push #\push
> > ++              mov     r4, r4, pull #\pull
> > ++              orr     r4, r4, r5, push #\push
> > ++              mov     r5, r5, pull #\pull
> > ++              orr     r5, r5, r6, push #\push
> > ++              mov     r6, r6, pull #\pull
> > ++              orr     r6, r6, r7, push #\push
> > ++              mov     r7, r7, pull #\pull
> > ++              orr     r7, r7, r8, push #\push
> > ++              mov     r8, r8, pull #\pull
> > ++              orr     r8, r8, r9, push #\push
> > ++              mov     r9, r9, pull #\pull
> > ++              orr     r9, r9, ip, push #\push
> > ++              mov     ip, ip, pull #\pull
> > ++              orr     ip, ip, lr, push #\push
> > ++              stmia   r0!, {r3 - r9, ip}
> > ++              bge     11b
> > ++      PLD(    cmn     r2, #97                 )
> > ++      PLD(    bge     12b                     )
> > ++      PLD(    add     r2, r2, #97             )
> > ++              cmn     r2, #16
> > ++              blt     14f
> > ++13:           mov     r3, lr, pull #\pull
> > ++              ldmia   r1!, {r4 - r6, lr}
> > ++              sub     r2, r2, #16
> > ++              orr     r3, r3, r4, push #\push
> > ++              mov     r4, r4, pull #\pull
> > ++              orr     r4, r4, r5, push #\push
> > ++              mov     r5, r5, pull #\pull
> > ++              orr     r5, r5, r6, push #\push
> > ++              mov     r6, r6, pull #\pull
> > ++              orr     r6, r6, lr, push #\push
> > ++              stmia   r0!, {r3 - r6}
> > ++14:           adds    r2, r2, #28
> > ++              ldmfd   sp!, {r5 - r9}
> > ++              blt     16f
> > ++15:           mov     r3, lr, pull #\pull
> > ++              ldr     lr, [r1], #4
> > ++              subs    r2, r2, #4
> > ++              orr     r3, r3, lr, push #\push
> > ++              str     r3, [r0], #4
> > ++              bge     15b
> > ++16:
> > ++              .endm
> > ++
> > ++
> > ++              forward_copy_shift      pull=8  push=24
> > ++              sub     r1, r1, #3
> > ++              b       7b
> > ++
> > ++17:           forward_copy_shift      pull=16 push=16
> > ++              sub     r1, r1, #2
> > ++              b       7b
> > ++
> > ++18:           forward_copy_shift      pull=24 push=8
> > ++              sub     r1, r1, #1
> > ++              b       7b
> > ++
> > ++              .size   memcpy, . - memcpy
> > ++END(memcpy)
> > ++libc_hidden_builtin_def (memcpy)
> > ++
> > diff --git a/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
> b/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
> > new file mode 100644
> > index 0000000..ce91ad6
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/armv4t-interworking.patch
> > @@ -0,0 +1,47 @@
> > +--- libc/ports/sysdeps/arm/memcpy.S~   2006-10-31 17:07:54.000000000
> +0000
> > ++++ libc/ports/sysdeps/arm/memcpy.S    2008-10-24 11:09:34.000000000
> +0100
> > +@@ -130,7 +130,12 @@
> > +               strcsb  r4, [r0], #1
> > +               strcsb  ip, [r0]
> > +
> > ++#if defined (__ARM_ARCH_4T__) && defined(__THUMB_INTERWORK__)
> > ++              ldmfd   sp!, {r0, r4, lr}
> > ++                bx      lr
> > ++#else
> > +               ldmfd   sp!, {r0, r4, pc}
> > ++#endif
> > +
> > + 9:            rsb     ip, ip, #4
> > +               cmp     ip, #2
> > +--- libc/ports/sysdeps/arm/memmove.S~  2006-10-31 17:07:54.000000000
> +0000
> > ++++ libc/ports/sysdeps/arm/memmove.S   2008-10-24 11:09:44.000000000
> +0100
> > +@@ -140,7 +140,12 @@
> > +               strneb  r3, [r0, #-1]!
> > +               strcsb  r4, [r0, #-1]!
> > +               strcsb  ip, [r0, #-1]
> > ++#if defined (__ARM_ARCH_4T__) && defined (__THUMB_INTERWORK__)
> > ++              ldmfd   sp!, {r0, r4, lr}
> > ++                bx      lr
> > ++#else
> > +               ldmfd   sp!, {r0, r4, pc}
> > ++#endif
> > +
> > + 9:            cmp     ip, #2
> > +               ldrgtb  r3, [r1, #-1]!
> > +--- libc/ports/sysdeps/unix/sysv/linux/arm/clone.S~    2005-11-16
> 19:03:42.000000000 +0000
> > ++++ libc/ports/sysdeps/unix/sysv/linux/arm/clone.S     2008-10-24
> 11:11:05.000000000 +0100
> > +@@ -96,8 +96,14 @@
> > + #endif
> > +       @ pick the function arg and call address off the stack and
> execute
> > +       ldr     r0, [sp, #4]
> > ++#if defined(__ARM_ARCH_V4T__) && defined(__THUMB_INTERWORK__)
> > ++      ldr     ip, [sp], #8
> > ++      mov     lr, pc
> > ++        bx      ip
> > ++#else
> > +       mov     lr, pc
> > +       ldr     pc, [sp], #8
> > ++#endif
> > +
> > +       @ and we are done, passing the return value through r0
> > +       b       PLTJMP(_exit)
> > diff --git a/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
> b/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
> > new file mode 100644
> > index 0000000..2fedfa6
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/dl-cache-libcmp.patch
> > @@ -0,0 +1,10 @@
> > +--- glibc-2.4/elf/Versions.ark 2006-03-11 23:30:09.000000000 +0100
> > ++++ glibc-2.4/elf/Versions     2006-03-11 23:31:44.000000000 +0100
> > +@@ -63,5 +63,7 @@
> > +     _dl_debug_state;
> > +     # Pointer protection.
> > +     __pointer_chk_guard;
> > ++    # for ldconfig
> > ++    _dl_cache_libcmp;
> > +   }
> > + }
> > diff --git a/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
> b/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
> > new file mode 100644
> > index 0000000..46e06d3
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/etc/ld.so.conf
> > @@ -0,0 +1,2 @@
> > +/usr/local/lib
> > +
> > diff --git a/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
> b/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
> > new file mode 100644
> > index 0000000..1f32f6d
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/fhs-linux-paths.patch
> > @@ -0,0 +1,11 @@
> > +--- glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h~       Thu May 27
> 13:16:33 1999
> > ++++ glibc-2.1.1/sysdeps/unix/sysv/linux/paths.h        Thu May 27
> 13:17:55 1999
> > +@@ -71,7 +71,7 @@
> > + /* Provide trailing slash, since mostly used for building pathnames. */
> > + #define       _PATH_DEV       "/dev/"
> > + #define       _PATH_TMP       "/tmp/"
> > +-#define       _PATH_VARDB     "/var/db/"
> > ++#define       _PATH_VARDB     "/var/lib/misc/"
> > + #define       _PATH_VARRUN    "/var/run/"
> > + #define       _PATH_VARTMP    "/var/tmp/"
> > +
> > diff --git a/recipes/glibc/glibc-2.10.1/generate-supported.mkb/recipes/glibc/glibc-2.10.1/
> generate-supported.mk
> > new file mode 100644
> > index 0000000..d2a28c2
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/generate-supported.mk
> > @@ -0,0 +1,11 @@
> > +#!/usr/bin/make
> > +
> > +include $(IN)
> > +
> > +all:
> > +       rm -f $(OUT)
> > +       touch $(OUT)
> > +       for locale in $(SUPPORTED-LOCALES); do \
> > +               [ $$locale = true ] && continue; \
> > +               echo $$locale | sed 's,/, ,' >> $(OUT); \
> > +       done
> > diff --git a/recipes/glibc/glibc-2.10.1/generic-bits_select.h
> b/recipes/glibc/glibc-2.10.1/generic-bits_select.h
> > new file mode 100644
> > index 0000000..47e7ded
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/generic-bits_select.h
> > @@ -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/recipes/glibc/glibc-2.10.1/generic-bits_time.h
> b/recipes/glibc/glibc-2.10.1/generic-bits_time.h
> > new file mode 100644
> > index 0000000..b3184d1
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/generic-bits_time.h
> > @@ -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/recipes/glibc/glibc-2.10.1/generic-bits_types.h
> b/recipes/glibc/glibc-2.10.1/generic-bits_types.h
> > new file mode 100644
> > index 0000000..65c8a9f
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/generic-bits_types.h
> > @@ -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/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
> b/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
> > new file mode 100644
> > index 0000000..e9226c4
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/generic-bits_typesizes.h
> > @@ -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/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
> b/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
> > new file mode 100644
> > index 0000000..a552cf0
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/glibc-arm-IO-acquire-lock-fix.diff
> > @@ -0,0 +1,13 @@
> > +Arm needs a similar fix as
> http://sourceware.org/ml/libc-ports/2007-12/msg00000.html
> > +
> > +--- /tmp/stdio-lock.h  2008-03-04 18:51:15.555038993 +0100
> > ++++ glibc-2.7/ports/sysdeps/unix/sysv/linux/arm/bits/stdio-lock.h
>  2008-03-04 18:51:28.445035052 +0100
> > +@@ -50,6 +50,8 @@
> > +   _IO_cleanup_region_start ((void (*) (void *)) _IO_funlockfile,
> (_fp));      \
> > +   _IO_flockfile (_fp)
> > +
> > ++# define _IO_acquire_lock_clear_flags2(_fp) _IO_acquire_lock (_fp)
> > ++
> > + # define _IO_release_lock(_fp) \
> > +   _IO_funlockfile (_fp);
>      \
> > +   _IO_cleanup_region_end (0)
> > diff --git a/recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
> b/recipes/glibc/glibc-2.10.1/glibc-check_pf.patch
> > new file mode 100644
> > index 0000000..3cff6bb
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/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: <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/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
> b/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
> > new file mode 100644
> > index 0000000..2fb8854
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/ldd-unbash.patch
> > @@ -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/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
> b/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
> > new file mode 100644
> > index 0000000..9994d4f
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/ldsocache-varrun.patch
> > @@ -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/recipes/glibc/glibc-2.10.1/march-i686.patch
> b/recipes/glibc/glibc-2.10.1/march-i686.patch
> > new file mode 100644
> > index 0000000..0461603
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/march-i686.patch
> > @@ -0,0 +1,38 @@
> > +2007-02-15  Khem Raj  <kraj@xxxxxxxxxx>
> > +
> > +       * sysdeps/unix/sysv/linux/i386/sysdep.h: Re-define __i686.
> > +       * nptl/sysdeps/pthread/pt-initfini.c: Ditto.
> > +
> > +
> > +
> > +Index: sysdeps/unix/sysv/linux/i386/sysdep.h
> > +===================================================================
> > +--- sysdeps/unix/sysv/linux/i386/sysdep.h      (revision 1469)
> > ++++ sysdeps/unix/sysv/linux/i386/sysdep.h      (working copy)
> > +@@ -29,6 +29,10 @@
> > + #include <dl-sysdep.h>
> > + #include <tls.h>
> > +
> > ++#if defined __i686 && defined __ASSEMBLER__
> > ++#undef __i686
> > ++#define __i686 __i686
> > ++#endif
> > +
> > + /* For Linux we can use the system call table in the header file
> > +       /usr/include/asm/unistd.h
> > +Index: nptl/sysdeps/pthread/pt-initfini.c
> > +===================================================================
> > +--- nptl/sysdeps/pthread/pt-initfini.c (revision 1469)
> > ++++ nptl/sysdeps/pthread/pt-initfini.c (working copy)
> > +@@ -45,6 +45,11 @@
> > + /* Embed an #include to pull in the alignment and .end directives. */
> > + asm ("\n#include \"defs.h\"");
> > +
> > ++asm ("\n#if defined __i686 && defined __ASSEMBLER__");
> > ++asm ("\n#undef __i686");
> > ++asm ("\n#define __i686 __i686");
> > ++asm ("\n#endif");
> > ++
> > + /* The initial common code ends here. */
> > + asm ("\n/*@HEADER_ENDS*/");
> > +
> > diff --git a/recipes/glibc/glibc-2.10.1/no-z-defs.patch
> b/recipes/glibc/glibc-2.10.1/no-z-defs.patch
> > new file mode 100644
> > index 0000000..48c6a41
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/no-z-defs.patch
> > @@ -0,0 +1,9 @@
> > +Create a configparms file which disabled no-z-defs.
> > +This is required to build a working glibs for sh4,
> > +without there will be a lot linker errors during the build.
> > +
> > +diff -duNr libc.orig/configparms libc/configparms
> > +--- libc.orig/configparms      1970-01-01 10:00:00.000000000 +1000
> > ++++ libc/configparms   2006-02-23 14:08:18.000000000 +1100
> > +@@ -0,0 +1 @@
> > ++no-z-defs=yes
> > diff --git a/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
> b/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
> > new file mode 100644
> > index 0000000..18a46ad
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/nptl-crosscompile.patch
> > @@ -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/recipes/glibc/glibc-2.10.1/nscd-init.patch
> b/recipes/glibc/glibc-2.10.1/nscd-init.patch
> > new file mode 100644
> > index 0000000..884609a
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/nscd-init.patch
> > @@ -0,0 +1,39 @@
> > +--- nscd/nscd.init
> > ++++ nscd/nscd.init
> > +@@ -48,9 +48,8 @@
> > +
> > + start () {
> > +     [ -d /var/run/nscd ] || mkdir /var/run/nscd
> > +-    [ -d /var/db/nscd ] || mkdir /var/db/nscd
> > +     echo -n $"Starting $prog: "
> > +-    daemon /usr/sbin/nscd
> > ++    /usr/sbin/nscd
> > +     RETVAL=$?
> > +     echo
> > +     [ $RETVAL -eq 0 ] && touch /var/lock/subsys/nscd
> > +@@ -67,12 +66,10 @@
> > +       # a non-privileged user
> > +       rm -f /var/run/nscd/nscd.pid
> > +       rm -f /var/run/nscd/socket
> > +-              success $"$prog shutdown"
> > +-    else
> > +-              failure $"$prog shutdown"
> > +     fi
> > +-    echo
> > +-    return $RETVAL
> > ++    echo "Done."
> > ++    # If nscd did not run, return 0 according to LSB.
> > ++    return 0
> > + }
> > +
> > + restart() {
> > +@@ -104,7 +101,8 @@
> > +       ;;
> > +     force-reload | reload)
> > +       echo -n $"Reloading $prog: "
> > +-      killproc /usr/sbin/nscd -HUP
> > ++      # Use killall, initscripts-1.0-r115 don't support -HUP yet.
> > ++      killall -HUP /usr/sbin/nscd
> > +       RETVAL=$?
> > +       echo
> > +       ;;
> > diff --git a/recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
> b/recipes/glibc/glibc-2.10.1/powerpc-sqrt-hack.diff
> > new file mode 100644
> > index 0000000..1046efb
> > --- /dev/null
> > +++ b/recipes/glibc/glibc-2.10.1/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 <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 };
> > diff --git a/recipes/glibc/glibc_2.10.1.bb b/recipes/glibc/
> glibc_2.10.1.bb
> > index 3c2fce8..b29e36a 100644
> > --- a/recipes/glibc/glibc_2.10.1.bb
> > +++ b/recipes/glibc/glibc_2.10.1.bb
> > @@ -11,9 +11,6 @@ RPROVIDES_${PN}-dev = "libc6-dev virtual-libc-dev"
> >  BUILD_CPPFLAGS = "-I${STAGING_INCDIR_NATIVE}"
> >  TARGET_CPPFLAGS = "-I${STAGING_DIR_TARGET}${layout_includedir}"
> >
> > -
> > -FILESPATHPKG =. "glibc-2.4:"
> > -
> >  GLIBC_ADDONS ?= "ports,nptl,libidn"
> >
> >  GLIBC_BROKEN_LOCALES = " _ER _ET so_ET yn_ER sid_ET tr_TR mn_MN gez_ET
> gez_ER bn_BD te_IN"
> > --
> > 1.6.4.2
> >
> >
> > _______________________________________________
> > Openembedded-devel mailing list
> > Openembedded-devel@lists.openembedded.org
> > http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
> >
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 3/3] glibc: remove old/obsolete versions
  2010-07-15 20:46   ` [PATCH 3/3] glibc: remove old/obsolete versions Frans Meulenbroeks
@ 2010-07-16  6:41     ` Graham Gower
  0 siblings, 0 replies; 9+ messages in thread
From: Graham Gower @ 2010-07-16  6:41 UTC (permalink / raw)
  To: openembedded-devel

On 16 July 2010 06:16, Frans Meulenbroeks <fransmeulenbroeks@gmail.com> wrote:
> as mentioned before on the OE ML.
> removing some old versions which are not pinned by any distro
> and are fairly old:
> glibc-initial_2.3.2+cvs20040726.bb
> glibc-initial_2.3.6.bb
> glibc-initial_2.4.bb
> glibc-initial_2.7.bb
> glibc_2.3.2+cvs20040726.bb
> glibc_2.3.3+cvs20041128.bb
> glibc_2.3.3+cvs20050221.bb
> glibc_2.3.3+cvs20050420.bb
> glibc_2.3.6.bb
> glibc_2.4.bb
> glibc_2.7.bb
>

Yes! OE needs more of this cruft removal.

Acked-by: Graham Gower <graham.gower@gmail.com>



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir
  2010-07-15 20:46 [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir Frans Meulenbroeks
  2010-07-15 20:46 ` [PATCH 2/3] glibc 2.10.1: " Frans Meulenbroeks
  2010-07-15 21:49 ` [PATCH 1/3] glibc 2.9: " Khem Raj
@ 2010-07-17  7:56 ` Khem Raj
  2010-07-17  8:05   ` Frans Meulenbroeks
  2 siblings, 1 reply; 9+ messages in thread
From: Khem Raj @ 2010-07-17  7:56 UTC (permalink / raw)
  To: openembedded-devel

On (15/07/10 22:46), Frans Meulenbroeks wrote:
> moved all patches to glibc-2.9
> removed references to other dirs.


Well you forgot to copy glibc-2.4/etc dir into glibc-2.9
this will render glibc 2.9 unbuildable.

Thx
-Khem



^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir
  2010-07-17  7:56 ` Khem Raj
@ 2010-07-17  8:05   ` Frans Meulenbroeks
  0 siblings, 0 replies; 9+ messages in thread
From: Frans Meulenbroeks @ 2010-07-17  8:05 UTC (permalink / raw)
  To: openembedded-devel

2010/7/17 Khem Raj <raj.khem@gmail.com>

> On (15/07/10 22:46), Frans Meulenbroeks wrote:
> > moved all patches to glibc-2.9
> > removed references to other dirs.
>
>
> Well you forgot to copy glibc-2.4/etc dir into glibc-2.9
> this will render glibc 2.9 unbuildable.
>

Thanks for noticing this. Fixed.
(apparently forgot the -r when copying the dir over)

Frans

>
> Thx
> -Khem
>
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel@lists.openembedded.org
> http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/openembedded-devel
>


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2010-07-17  8:05 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-07-15 20:46 [PATCH 1/3] glibc 2.9: cleaned up; patches only in local dir Frans Meulenbroeks
2010-07-15 20:46 ` [PATCH 2/3] glibc 2.10.1: " Frans Meulenbroeks
2010-07-15 20:46   ` [PATCH 3/3] glibc: remove old/obsolete versions Frans Meulenbroeks
2010-07-16  6:41     ` Graham Gower
2010-07-15 21:50   ` [PATCH 2/3] glibc 2.10.1: cleaned up; patches only in local dir Khem Raj
2010-07-16  6:07     ` Frans Meulenbroeks
2010-07-15 21:49 ` [PATCH 1/3] glibc 2.9: " Khem Raj
2010-07-17  7:56 ` Khem Raj
2010-07-17  8:05   ` Frans Meulenbroeks

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.