summaryrefslogtreecommitdiff
path: root/patches/glibc
diff options
context:
space:
mode:
authorAlexey Neyman <stilor@att.net>2017-02-09 21:41:09 (GMT)
committerAlexey Neyman <stilor@att.net>2017-02-10 02:05:36 (GMT)
commit5273394f55d5ef3e2cbd9b4546f531c3b7a1ca5a (patch)
treee503212574214a995dd9f215258b3b3fa8fc89c5 /patches/glibc
parentb5dc6e6c26f49be2e9b9fad92df771991a15297f (diff)
Ports patches for glibc 2.12.1 .. 2.16
Add patches for versions that didn't have them - patches updated/retired as necessary. Also, disallow 2.12.2 for architectures in ports - this version did not have ports addon. Signed-off-by: Alexey Neyman <stilor@att.net>
Diffstat (limited to 'patches/glibc')
-rw-r--r--patches/glibc/ports-2.12.1/090-Fix-ARM-build-with-GCC-trunk.patch (renamed from patches/glibc/ports-2.13/100-Fix-ARM-build-with-GCC-trunk.patch)22
-rw-r--r--patches/glibc/ports-2.12.2/100-respect-env-CPPFLAGS.patch25
-rw-r--r--patches/glibc/ports-2.12.2/250-fix-pr631.patch45
-rw-r--r--patches/glibc/ports-2.12.2/370-fnmatch.patch62
-rw-r--r--patches/glibc/ports-2.12.2/430-alpha-creat.patch14
-rw-r--r--patches/glibc/ports-2.13/090-Fix-ARM-build-with-GCC-trunk.patch72
-rw-r--r--patches/glibc/ports-2.14.1/090-Fix-ARM-build-with-GCC-trunk.patch72
-rw-r--r--patches/glibc/ports-2.14.1/100-respect-env-CPPFLAGS.patch14
-rw-r--r--patches/glibc/ports-2.14.1/120-i386-x86_64-revert-clone-cfi.patch (renamed from patches/glibc/ports-2.12.2/120-i386-x86_64-revert-clone-cfi.patch)12
-rw-r--r--patches/glibc/ports-2.14.1/140-disable-ldconfig.patch (renamed from patches/glibc/ports-2.12.2/140-disable-ldconfig.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/150-queue-header-updates.patch (renamed from patches/glibc/ports-2.12.2/150-queue-header-updates.patch)8
-rw-r--r--patches/glibc/ports-2.14.1/160-manual-no-perl.patch (renamed from patches/glibc/ports-2.12.2/160-manual-no-perl.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/170-localedef-fix-trampoline.patch (renamed from patches/glibc/ports-2.12.2/170-localedef-fix-trampoline.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/180-resolv-dynamic.patch (renamed from patches/glibc/ports-2.12.2/180-resolv-dynamic.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/190-localedef-mmap.patch (renamed from patches/glibc/ports-2.12.2/190-localedef-mmap.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/200-fadvise64_64.patch (renamed from patches/glibc/ports-2.12.2/200-fadvise64_64.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/220-section-comments.patch (renamed from patches/glibc/ports-2.12.2/220-section-comments.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/230-no-inline-gmon.patch (renamed from patches/glibc/ports-2.12.2/230-no-inline-gmon.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/260-assume-pipe2.patch (renamed from patches/glibc/ports-2.12.2/260-assume-pipe2.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/270-china.patch (renamed from patches/glibc/ports-2.12.2/270-china.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/280-new-valencian-locale.patch (renamed from patches/glibc/ports-2.12.2/280-new-valencian-locale.patch)12
-rw-r--r--patches/glibc/ports-2.14.1/300-nscd-one-fork.patch (renamed from patches/glibc/ports-2.12.2/300-nscd-one-fork.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/310-hppa-nptl-carlos.patch (renamed from patches/glibc/ports-2.12.2/310-hppa-nptl-carlos.patch)48
-rw-r--r--patches/glibc/ports-2.14.1/330-m68k-sys-user.patch (renamed from patches/glibc/ports-2.12.2/330-m68k-sys-user.patch)10
-rw-r--r--patches/glibc/ports-2.14.1/340-dl_execstack-PaX-support.patch (renamed from patches/glibc/ports-2.12.2/340-dl_execstack-PaX-support.patch)12
-rw-r--r--patches/glibc/ports-2.14.1/350-pre20040117-pt_pax.patch (renamed from patches/glibc/ports-2.12.2/350-pre20040117-pt_pax.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/360-tests-sandbox-libdl-paths.patch (renamed from patches/glibc/ports-2.12.2/360-tests-sandbox-libdl-paths.patch)72
-rw-r--r--patches/glibc/ports-2.14.1/380-dont-build-timezone.patch (renamed from patches/glibc/ports-2.12.2/380-dont-build-timezone.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/400-alpha-xstat.patch (renamed from patches/glibc/ports-2.12.2/400-alpha-xstat.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/430-alpha-creat.patch14
-rw-r--r--patches/glibc/ports-2.14.1/440-alpha-cache-shape.patch (renamed from patches/glibc/ports-2.12.2/440-alpha-cache-shape.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/460-alpha-fix-gcc-4.1-warnings.patch (renamed from patches/glibc/ports-2.12.2/460-alpha-fix-gcc-4.1-warnings.patch)8
-rw-r--r--patches/glibc/ports-2.14.1/490-alpha_alpha-add-fdatasync-support.patch (renamed from patches/glibc/ports-2.12.2/490-alpha_alpha-add-fdatasync-support.patch)26
-rw-r--r--patches/glibc/ports-2.14.1/530-alpha-fix-rtld-fPIC.patch (renamed from patches/glibc/ports-2.12.2/530-alpha-fix-rtld-fPIC.patch)8
-rw-r--r--patches/glibc/ports-2.14.1/560-ppc-atomic.patch (renamed from patches/glibc/ports-2.12.2/560-ppc-atomic.patch)18
-rw-r--r--patches/glibc/ports-2.14.1/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch (renamed from patches/glibc/ports-2.12.2/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch)88
-rw-r--r--patches/glibc/ports-2.14.1/580-nptl-lowlevellock.patch (renamed from patches/glibc/ports-2.12.2/580-nptl-lowlevellock.patch)8
-rw-r--r--patches/glibc/ports-2.14.1/610-fpu-cw-mips.patch (renamed from patches/glibc/ports-2.12.2/610-fpu-cw-mips.patch)8
-rw-r--r--patches/glibc/ports-2.14.1/630-mips_shn_undef-hack.patch (renamed from patches/glibc/ports-2.12.2/630-mips_shn_undef-hack.patch)6
-rw-r--r--patches/glibc/ports-2.14.1/640-alpha-atfcts.patch (renamed from patches/glibc/ports-2.12.2/640-alpha-atfcts.patch)4
-rw-r--r--patches/glibc/ports-2.14.1/650-syslog.patch (renamed from patches/glibc/ports-2.12.2/650-syslog.patch)0
-rw-r--r--patches/glibc/ports-2.14.1/660-debug-readlink_chk-readklinkat_chk.patch (renamed from patches/glibc/ports-2.12.2/660-debug-readlink_chk-readklinkat_chk.patch)0
-rw-r--r--patches/glibc/ports-2.14/090-Fix-ARM-build-with-GCC-trunk.patch72
-rw-r--r--patches/glibc/ports-2.14/100-respect-env-CPPFLAGS.patch14
-rw-r--r--patches/glibc/ports-2.14/120-i386-x86_64-revert-clone-cfi.patch55
-rw-r--r--patches/glibc/ports-2.14/140-disable-ldconfig.patch16
-rw-r--r--patches/glibc/ports-2.14/150-queue-header-updates.patch85
-rw-r--r--patches/glibc/ports-2.14/160-manual-no-perl.patch24
-rw-r--r--patches/glibc/ports-2.14/170-localedef-fix-trampoline.patch69
-rw-r--r--patches/glibc/ports-2.14/180-resolv-dynamic.patch39
-rw-r--r--patches/glibc/ports-2.14/190-localedef-mmap.patch39
-rw-r--r--patches/glibc/ports-2.14/200-fadvise64_64.patch28
-rw-r--r--patches/glibc/ports-2.14/220-section-comments.patch24
-rw-r--r--patches/glibc/ports-2.14/230-no-inline-gmon.patch36
-rw-r--r--patches/glibc/ports-2.14/240-check_native-headers.patch (renamed from patches/glibc/ports-2.12.2/240-check_native-headers.patch)6
-rw-r--r--patches/glibc/ports-2.14/260-assume-pipe2.patch40
-rw-r--r--patches/glibc/ports-2.14/270-china.patch32
-rw-r--r--patches/glibc/ports-2.14/280-new-valencian-locale.patch115
-rw-r--r--patches/glibc/ports-2.14/300-nscd-one-fork.patch40
-rw-r--r--patches/glibc/ports-2.14/310-hppa-nptl-carlos.patch246
-rw-r--r--patches/glibc/ports-2.14/330-m68k-sys-user.patch97
-rw-r--r--patches/glibc/ports-2.14/340-dl_execstack-PaX-support.patch66
-rw-r--r--patches/glibc/ports-2.14/350-pre20040117-pt_pax.patch32
-rw-r--r--patches/glibc/ports-2.14/360-tests-sandbox-libdl-paths.patch193
-rw-r--r--patches/glibc/ports-2.14/380-dont-build-timezone.patch14
-rw-r--r--patches/glibc/ports-2.14/400-alpha-xstat.patch15
-rw-r--r--patches/glibc/ports-2.14/430-alpha-creat.patch14
-rw-r--r--patches/glibc/ports-2.14/440-alpha-cache-shape.patch13
-rw-r--r--patches/glibc/ports-2.14/460-alpha-fix-gcc-4.1-warnings.patch56
-rw-r--r--patches/glibc/ports-2.14/490-alpha_alpha-add-fdatasync-support.patch126
-rw-r--r--patches/glibc/ports-2.14/530-alpha-fix-rtld-fPIC.patch21
-rw-r--r--patches/glibc/ports-2.14/560-ppc-atomic.patch415
-rw-r--r--patches/glibc/ports-2.14/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch374
-rw-r--r--patches/glibc/ports-2.14/580-nptl-lowlevellock.patch23
-rw-r--r--patches/glibc/ports-2.14/610-fpu-cw-mips.patch15
-rw-r--r--patches/glibc/ports-2.14/630-mips_shn_undef-hack.patch16
-rw-r--r--patches/glibc/ports-2.14/640-alpha-atfcts.patch12
-rw-r--r--patches/glibc/ports-2.14/650-syslog.patch12
-rw-r--r--patches/glibc/ports-2.14/660-debug-readlink_chk-readklinkat_chk.patch24
-rw-r--r--patches/glibc/ports-2.15/090-Fix-ARM-build-with-GCC-trunk.patch72
-rw-r--r--patches/glibc/ports-2.15/100-respect-env-CPPFLAGS.patch14
-rw-r--r--patches/glibc/ports-2.15/120-i386-x86_64-revert-clone-cfi.patch55
-rw-r--r--patches/glibc/ports-2.15/140-disable-ldconfig.patch16
-rw-r--r--patches/glibc/ports-2.15/150-queue-header-updates.patch85
-rw-r--r--patches/glibc/ports-2.15/160-manual-no-perl.patch24
-rw-r--r--patches/glibc/ports-2.15/170-localedef-fix-trampoline.patch69
-rw-r--r--patches/glibc/ports-2.15/180-resolv-dynamic.patch39
-rw-r--r--patches/glibc/ports-2.15/200-fadvise64_64.patch28
-rw-r--r--patches/glibc/ports-2.15/220-section-comments.patch24
-rw-r--r--patches/glibc/ports-2.15/230-no-inline-gmon.patch36
-rw-r--r--patches/glibc/ports-2.15/260-assume-pipe2.patch40
-rw-r--r--patches/glibc/ports-2.15/270-china.patch32
-rw-r--r--patches/glibc/ports-2.15/280-new-valencian-locale.patch115
-rw-r--r--patches/glibc/ports-2.15/300-nscd-one-fork.patch40
-rw-r--r--patches/glibc/ports-2.15/310-hppa-nptl-carlos.patch246
-rw-r--r--patches/glibc/ports-2.15/330-m68k-sys-user.patch97
-rw-r--r--patches/glibc/ports-2.15/340-dl_execstack-PaX-support.patch66
-rw-r--r--patches/glibc/ports-2.15/350-pre20040117-pt_pax.patch32
-rw-r--r--patches/glibc/ports-2.15/360-tests-sandbox-libdl-paths.patch193
-rw-r--r--patches/glibc/ports-2.15/380-dont-build-timezone.patch14
-rw-r--r--patches/glibc/ports-2.15/400-alpha-xstat.patch15
-rw-r--r--patches/glibc/ports-2.15/430-alpha-creat.patch14
-rw-r--r--patches/glibc/ports-2.15/440-alpha-cache-shape.patch13
-rw-r--r--patches/glibc/ports-2.15/460-alpha-fix-gcc-4.1-warnings.patch56
-rw-r--r--patches/glibc/ports-2.15/490-alpha_alpha-add-fdatasync-support.patch126
-rw-r--r--patches/glibc/ports-2.15/530-alpha-fix-rtld-fPIC.patch21
-rw-r--r--patches/glibc/ports-2.15/560-ppc-atomic.patch415
-rw-r--r--patches/glibc/ports-2.15/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch374
-rw-r--r--patches/glibc/ports-2.15/580-nptl-lowlevellock.patch23
-rw-r--r--patches/glibc/ports-2.15/610-fpu-cw-mips.patch15
-rw-r--r--patches/glibc/ports-2.15/630-mips_shn_undef-hack.patch16
-rw-r--r--patches/glibc/ports-2.15/640-alpha-atfcts.patch12
-rw-r--r--patches/glibc/ports-2.15/650-syslog.patch12
-rw-r--r--patches/glibc/ports-2.15/660-debug-readlink_chk-readklinkat_chk.patch24
-rw-r--r--patches/glibc/ports-2.16.0/090-Fix-ARM-build-with-GCC-trunk.patch54
-rw-r--r--patches/glibc/ports-2.16.0/100-respect-env-CPPFLAGS.patch14
-rw-r--r--patches/glibc/ports-2.16.0/120-i386-x86_64-revert-clone-cfi.patch55
-rw-r--r--patches/glibc/ports-2.16.0/140-disable-ldconfig.patch16
-rw-r--r--patches/glibc/ports-2.16.0/150-queue-header-updates.patch85
-rw-r--r--patches/glibc/ports-2.16.0/170-localedef-fix-trampoline.patch69
-rw-r--r--patches/glibc/ports-2.16.0/180-resolv-dynamic.patch39
-rw-r--r--patches/glibc/ports-2.16.0/200-fadvise64_64.patch28
-rw-r--r--patches/glibc/ports-2.16.0/260-assume-pipe2.patch40
-rw-r--r--patches/glibc/ports-2.16.0/270-china.patch32
-rw-r--r--patches/glibc/ports-2.16.0/280-new-valencian-locale.patch115
-rw-r--r--patches/glibc/ports-2.16.0/300-nscd-one-fork.patch43
-rw-r--r--patches/glibc/ports-2.16.0/310-hppa-nptl-carlos.patch246
-rw-r--r--patches/glibc/ports-2.16.0/330-m68k-sys-user.patch97
-rw-r--r--patches/glibc/ports-2.16.0/340-dl_execstack-PaX-support.patch66
-rw-r--r--patches/glibc/ports-2.16.0/350-pre20040117-pt_pax.patch32
-rw-r--r--patches/glibc/ports-2.16.0/360-tests-sandbox-libdl-paths.patch193
-rw-r--r--patches/glibc/ports-2.16.0/380-dont-build-timezone.patch14
-rw-r--r--patches/glibc/ports-2.16.0/400-alpha-xstat.patch15
-rw-r--r--patches/glibc/ports-2.16.0/430-alpha-creat.patch14
-rw-r--r--patches/glibc/ports-2.16.0/440-alpha-cache-shape.patch13
-rw-r--r--patches/glibc/ports-2.16.0/460-alpha-fix-gcc-4.1-warnings.patch56
-rw-r--r--patches/glibc/ports-2.16.0/490-alpha_alpha-add-fdatasync-support.patch126
-rw-r--r--patches/glibc/ports-2.16.0/530-alpha-fix-rtld-fPIC.patch21
-rw-r--r--patches/glibc/ports-2.16.0/560-ppc-atomic.patch415
-rw-r--r--patches/glibc/ports-2.16.0/580-nptl-lowlevellock.patch23
-rw-r--r--patches/glibc/ports-2.16.0/610-fpu-cw-mips.patch15
-rw-r--r--patches/glibc/ports-2.16.0/630-mips_shn_undef-hack.patch16
-rw-r--r--patches/glibc/ports-2.16.0/640-alpha-atfcts.patch12
-rw-r--r--patches/glibc/ports-2.16.0/650-syslog.patch12
-rw-r--r--patches/glibc/ports-2.16.0/660-debug-readlink_chk-readklinkat_chk.patch24
145 files changed, 7401 insertions, 368 deletions
diff --git a/patches/glibc/ports-2.13/100-Fix-ARM-build-with-GCC-trunk.patch b/patches/glibc/ports-2.12.1/090-Fix-ARM-build-with-GCC-trunk.patch
index f754e96..1a632fe 100644
--- a/patches/glibc/ports-2.13/100-Fix-ARM-build-with-GCC-trunk.patch
+++ b/patches/glibc/ports-2.12.1/090-Fix-ARM-build-with-GCC-trunk.patch
@@ -1,3 +1,25 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
@@ -23,7 +23,8 @@
diff --git a/patches/glibc/ports-2.12.2/100-respect-env-CPPFLAGS.patch b/patches/glibc/ports-2.12.2/100-respect-env-CPPFLAGS.patch
deleted file mode 100644
index ed022be..0000000
--- a/patches/glibc/ports-2.12.2/100-respect-env-CPPFLAGS.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-Respect environment CPPFLAGS when we run ./configure so we can inject
-random -D things without having to set CFLAGS/ASFLAGS
-
-diff -durN glibc-2.12.1.orig/Makeconfig glibc-2.12.1/Makeconfig
---- glibc-2.12.1.orig/Makeconfig 2009-05-09 23:57:56.000000000 +0200
-+++ glibc-2.12.1/Makeconfig 2009-11-13 00:49:41.000000000 +0100
-@@ -697,6 +697,7 @@
- $(foreach lib,$(libof-$(basename $(@F))) \
- $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
- $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
-+CPPFLAGS += $(CPPFLAGS-config)
- override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) \
- $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
- $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
-diff -durN glibc-2.12.1.orig/config.make.in glibc-2.12.1/config.make.in
---- glibc-2.12.1.orig/config.make.in 2009-05-09 17:59:38.000000000 +0200
-+++ glibc-2.12.1/config.make.in 2009-11-13 00:49:41.000000000 +0100
-@@ -107,6 +107,7 @@
- CXX = @CXX@
- BUILD_CC = @BUILD_CC@
- CFLAGS = @CFLAGS@
-+CPPFLAGS-config = @CPPFLAGS@
- ASFLAGS-config = @ASFLAGS_config@
- AR = @AR@
- RANLIB = @RANLIB@
diff --git a/patches/glibc/ports-2.12.2/250-fix-pr631.patch b/patches/glibc/ports-2.12.2/250-fix-pr631.patch
deleted file mode 100644
index af5b347..0000000
--- a/patches/glibc/ports-2.12.2/250-fix-pr631.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From dank@kegel.com
-Wed Jun 15 09:12:43 PDT 2005
-
-Fixes
-
-build-glibc/libc.a(nsswitch.o)(.data+0x64): undefined reference to `_nss_files_getaliasent_r'
-build-glibc/libc.a(nsswitch.o)(.data+0x6c): undefined reference to `_nss_files_endaliasent'
-... 53 lines deleted ...
-build-glibc/libc.a(nsswitch.o)(.data+0x21c): undefined reference to `_nss_files_getspnam_r'
-collect2: ld returned 1 exit status
-make[2]: *** [/build/gcc-3.4.3-glibc-2.3.5-hdrs-2.6.11.2/i686-unknown-linux-gnu/build-glibc/elf/ldconfig] Error 1
-
-when building glibc with --enable-static-nss.
-
-See http://sources.redhat.com/bugzilla/show_bug.cgi?id=631
-
-diff -durN glibc-2.12.1.orig/Makeconfig glibc-2.12.1/Makeconfig
---- glibc-2.12.1.orig/Makeconfig 2009-11-13 00:49:41.000000000 +0100
-+++ glibc-2.12.1/Makeconfig 2009-11-13 00:50:13.000000000 +0100
-@@ -531,7 +531,7 @@
-
- # The static libraries.
- ifeq (yes,$(build-static))
--link-libc-static = $(common-objpfx)libc.a $(static-gnulib) $(common-objpfx)libc.a
-+link-libc-static = $(common-objpfx)libc.a $(static-gnulib) $(otherlibs) $(common-objpfx)libc.a
- else
- ifeq (yes,$(build-shared))
- # We can try to link the programs with lib*_pic.a...
-diff -durN glibc-2.12.1.orig/elf/Makefile glibc-2.12.1/elf/Makefile
---- glibc-2.12.1.orig/elf/Makefile 2009-01-31 01:20:55.000000000 +0100
-+++ glibc-2.12.1/elf/Makefile 2009-11-13 00:50:13.000000000 +0100
-@@ -146,6 +146,13 @@
- install-bin-script = ldd
- endif
-
-+ifeq (yes,$(build-static-nss))
-+nssobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)nss)
-+resolvobjdir := $(patsubst ../$(subdir),.,$(common-objpfx)resolv)
-+otherlibs += $(nssobjdir)/libnss_files.a $(resolvobjdir)/libnss_dns.a \
-+ $(resolvobjdir)/libresolv.a
-+endif
-+
- others = sprof sln
- install-bin = sprof
- others-static = sln
diff --git a/patches/glibc/ports-2.12.2/370-fnmatch.patch b/patches/glibc/ports-2.12.2/370-fnmatch.patch
deleted file mode 100644
index f345b35..0000000
--- a/patches/glibc/ports-2.12.2/370-fnmatch.patch
+++ /dev/null
@@ -1,62 +0,0 @@
-http://sourceware.org/ml/libc-hacker/2002-11/msg00071.html
-
-When fnmatch detects an invalid multibyte character it should fall back to
-single byte matching, so that "*" has a chance to match such a string.
-
-Andreas.
-
-2005-04-12 Andreas Schwab <schwab@suse.de>
-
- * posix/fnmatch.c (fnmatch): If conversion to wide character
- fails fall back to single byte matching.
-
-Index: posix/fnmatch.c
-===================================================================
-
-diff -durN glibc-2.12.1.orig/posix/fnmatch.c glibc-2.12.1/posix/fnmatch.c
---- glibc-2.12.1.orig/posix/fnmatch.c 2007-07-28 22:35:00.000000000 +0200
-+++ glibc-2.12.1/posix/fnmatch.c 2009-11-13 00:50:39.000000000 +0100
-@@ -327,6 +327,7 @@
- # if HANDLE_MULTIBYTE
- if (__builtin_expect (MB_CUR_MAX, 1) != 1)
- {
-+ const char *orig_pattern = pattern;
- mbstate_t ps;
- size_t n;
- const char *p;
-@@ -382,10 +383,8 @@
- wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
- n = mbsrtowcs (wstring, &p, n + 1, &ps);
- if (__builtin_expect (n == (size_t) -1, 0))
-- /* Something wrong.
-- XXX Do we have to set `errno' to something which mbsrtows hasn't
-- already done? */
-- return -1;
-+ /* Something wrong. Fall back to single byte matching. */
-+ goto try_singlebyte;
- if (p)
- {
- memset (&ps, '\0', sizeof (ps));
-@@ -397,10 +396,8 @@
- prepare_wstring:
- n = mbsrtowcs (NULL, &string, 0, &ps);
- if (__builtin_expect (n == (size_t) -1, 0))
-- /* Something wrong.
-- XXX Do we have to set `errno' to something which mbsrtows hasn't
-- already done? */
-- return -1;
-+ /* Something wrong. Fall back to single byte matching. */
-+ goto try_singlebyte;
- wstring = (wchar_t *) alloca ((n + 1) * sizeof (wchar_t));
- assert (mbsinit (&ps));
- (void) mbsrtowcs (wstring, &string, n + 1, &ps);
-@@ -408,6 +405,9 @@
-
- return internal_fnwmatch (wpattern, wstring, wstring + n,
- flags & FNM_PERIOD, flags, NULL);
-+
-+ try_singlebyte:
-+ pattern = orig_pattern;
- }
- # endif /* mbstate_t and mbsrtowcs or _LIBC. */
-
diff --git a/patches/glibc/ports-2.12.2/430-alpha-creat.patch b/patches/glibc/ports-2.12.2/430-alpha-creat.patch
deleted file mode 100644
index bfb72d0..0000000
--- a/patches/glibc/ports-2.12.2/430-alpha-creat.patch
+++ /dev/null
@@ -1,14 +0,0 @@
-alpha does not have a __NR_creat
-
-http://bugs.gentoo.org/227275
-http://sourceware.org/bugzilla/show_bug.cgi?id=6650
-
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c glibc-2.12.1/sysdeps/unix/sysv/linux/wordsize-64/creat64.c
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2007-11-10 20:34:26.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2009-11-13 00:50:51.000000000 +0100
-@@ -1 +1,5 @@
- /* Defined as alias for the syscall. */
-+#include <sysdep.h>
-+#ifndef __NR_creat
-+#include "../../../../../io/creat64.c"
-+#endif
diff --git a/patches/glibc/ports-2.13/090-Fix-ARM-build-with-GCC-trunk.patch b/patches/glibc/ports-2.13/090-Fix-ARM-build-with-GCC-trunk.patch
new file mode 100644
index 0000000..1a632fe
--- /dev/null
+++ b/patches/glibc/ports-2.13/090-Fix-ARM-build-with-GCC-trunk.patch
@@ -0,0 +1,72 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+index bff3e2b..1f1eb71 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
diff --git a/patches/glibc/ports-2.14.1/090-Fix-ARM-build-with-GCC-trunk.patch b/patches/glibc/ports-2.14.1/090-Fix-ARM-build-with-GCC-trunk.patch
new file mode 100644
index 0000000..1a632fe
--- /dev/null
+++ b/patches/glibc/ports-2.14.1/090-Fix-ARM-build-with-GCC-trunk.patch
@@ -0,0 +1,72 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+index bff3e2b..1f1eb71 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
diff --git a/patches/glibc/ports-2.14.1/100-respect-env-CPPFLAGS.patch b/patches/glibc/ports-2.14.1/100-respect-env-CPPFLAGS.patch
new file mode 100644
index 0000000..3798cb2
--- /dev/null
+++ b/patches/glibc/ports-2.14.1/100-respect-env-CPPFLAGS.patch
@@ -0,0 +1,14 @@
+Respect environment CPPFLAGS when we run ./configure so we can inject
+random -D things without having to set CFLAGS/ASFLAGS
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-05-09 23:57:56.000000000 +0200
++++ glibc-2.13/Makeconfig 2009-11-13 00:49:41.000000000 +0100
+@@ -697,6 +697,7 @@
+ $(foreach lib,$(libof-$(basename $(@F))) \
+ $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
+ $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
++CPPFLAGS += $(CPPFLAGS-config)
+ override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) \
+ $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+ $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
diff --git a/patches/glibc/ports-2.12.2/120-i386-x86_64-revert-clone-cfi.patch b/patches/glibc/ports-2.14.1/120-i386-x86_64-revert-clone-cfi.patch
index 95f5ace..c7f6182 100644
--- a/patches/glibc/ports-2.12.2/120-i386-x86_64-revert-clone-cfi.patch
+++ b/patches/glibc/ports-2.14.1/120-i386-x86_64-revert-clone-cfi.patch
@@ -11,9 +11,9 @@ retrieving revision 1.27
retrieving revision 1.26
diff -u -p -r1.27 -r1.26
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.12.1/sysdeps/unix/sysv/linux/i386/clone.S
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/clone.S 2006-12-04 00:12:36.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/i386/clone.S 2009-11-13 00:49:45.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S 2009-11-13 00:49:45.000000000 +0100
@@ -120,9 +120,6 @@
ret
@@ -32,9 +32,9 @@ diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.12.1/s
cfi_startproc
PSEUDO_END (BP_SYM (__clone))
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.12.1/sysdeps/unix/sysv/linux/x86_64/clone.S
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/x86_64/clone.S 2006-12-04 00:12:36.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/x86_64/clone.S 2009-11-13 00:49:45.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S 2009-11-13 00:49:45.000000000 +0100
@@ -89,9 +89,6 @@
ret
diff --git a/patches/glibc/ports-2.12.2/140-disable-ldconfig.patch b/patches/glibc/ports-2.14.1/140-disable-ldconfig.patch
index 43330b8..378e1df 100644
--- a/patches/glibc/ports-2.12.2/140-disable-ldconfig.patch
+++ b/patches/glibc/ports-2.14.1/140-disable-ldconfig.patch
@@ -3,9 +3,9 @@ file outside of the chroot. doesnt matter anyways as we wont use the cache
results (portage will rebuild cache), so running ldconfig is simply a waste
of time.
-diff -durN glibc-2.12.1.orig/Makefile glibc-2.12.1/Makefile
---- glibc-2.12.1.orig/Makefile 2009-04-23 20:23:03.000000000 +0200
-+++ glibc-2.12.1/Makefile 2009-11-13 00:49:49.000000000 +0100
+diff -durN glibc-2.13.orig/Makefile glibc-2.13/Makefile
+--- glibc-2.13.orig/Makefile 2009-04-23 20:23:03.000000000 +0200
++++ glibc-2.13/Makefile 2009-11-13 00:49:49.000000000 +0100
@@ -116,6 +116,7 @@
rm -f $(symbolic-link-list)
diff --git a/patches/glibc/ports-2.12.2/150-queue-header-updates.patch b/patches/glibc/ports-2.14.1/150-queue-header-updates.patch
index fe625e1..7cbe70e 100644
--- a/patches/glibc/ports-2.12.2/150-queue-header-updates.patch
+++ b/patches/glibc/ports-2.14.1/150-queue-header-updates.patch
@@ -2,11 +2,11 @@ grab some updates from FreeBSD
http://bugs.gentoo.org/201979
-diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
-diff -durN glibc-2.12.1.orig/misc/sys/queue.h glibc-2.12.1/misc/sys/queue.h
---- glibc-2.12.1.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100
-+++ glibc-2.12.1/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+--- glibc-2.13.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100
++++ glibc-2.13/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100
@@ -136,6 +136,11 @@
(var); \
(var) = ((var)->field.le_next))
diff --git a/patches/glibc/ports-2.12.2/160-manual-no-perl.patch b/patches/glibc/ports-2.14.1/160-manual-no-perl.patch
index 2eb5414..5e2b807 100644
--- a/patches/glibc/ports-2.12.2/160-manual-no-perl.patch
+++ b/patches/glibc/ports-2.14.1/160-manual-no-perl.patch
@@ -4,9 +4,9 @@ deal, so just whine a little and continue on our merry way.
http://bugs.gentoo.org/60132
-diff -durN glibc-2.12.1.orig/manual/Makefile glibc-2.12.1/manual/Makefile
---- glibc-2.12.1.orig/manual/Makefile 2006-01-08 07:43:47.000000000 +0100
-+++ glibc-2.12.1/manual/Makefile 2009-11-13 00:49:54.000000000 +0100
+diff -durN glibc-2.13.orig/manual/Makefile glibc-2.13/manual/Makefile
+--- glibc-2.13.orig/manual/Makefile 2006-01-08 07:43:47.000000000 +0100
++++ glibc-2.13/manual/Makefile 2009-11-13 00:49:54.000000000 +0100
@@ -104,9 +104,14 @@
libm-err.texi: stamp-libm-err
stamp-libm-err: libm-err-tab.pl $(wildcard $(foreach dir,$(sysdirs),\
diff --git a/patches/glibc/ports-2.12.2/170-localedef-fix-trampoline.patch b/patches/glibc/ports-2.14.1/170-localedef-fix-trampoline.patch
index 0e05844..4784a07 100644
--- a/patches/glibc/ports-2.12.2/170-localedef-fix-trampoline.patch
+++ b/patches/glibc/ports-2.14.1/170-localedef-fix-trampoline.patch
@@ -21,9 +21,9 @@ case "$1" in
esac
exit 0
-diff -durN glibc-2.12.1.orig/locale/programs/3level.h glibc-2.12.1/locale/programs/3level.h
---- glibc-2.12.1.orig/locale/programs/3level.h 2007-07-16 02:54:59.000000000 +0200
-+++ glibc-2.12.1/locale/programs/3level.h 2009-11-13 00:49:56.000000000 +0100
+diff -durN glibc-2.13.orig/locale/programs/3level.h glibc-2.13/locale/programs/3level.h
+--- glibc-2.13.orig/locale/programs/3level.h 2007-07-16 02:54:59.000000000 +0200
++++ glibc-2.13/locale/programs/3level.h 2009-11-13 00:49:56.000000000 +0100
@@ -203,6 +203,42 @@
}
}
diff --git a/patches/glibc/ports-2.12.2/180-resolv-dynamic.patch b/patches/glibc/ports-2.14.1/180-resolv-dynamic.patch
index 8f74a53..e916bce 100644
--- a/patches/glibc/ports-2.12.2/180-resolv-dynamic.patch
+++ b/patches/glibc/ports-2.14.1/180-resolv-dynamic.patch
@@ -5,9 +5,9 @@ already running get the updated information.
http://bugs.gentoo.org/177416
-diff -durN glibc-2.12.1.orig/resolv/res_libc.c glibc-2.12.1/resolv/res_libc.c
---- glibc-2.12.1.orig/resolv/res_libc.c 2009-02-07 05:27:42.000000000 +0100
-+++ glibc-2.12.1/resolv/res_libc.c 2009-11-13 00:49:59.000000000 +0100
+diff -durN glibc-2.13.orig/resolv/res_libc.c glibc-2.13/resolv/res_libc.c
+--- glibc-2.13.orig/resolv/res_libc.c 2009-02-07 05:27:42.000000000 +0100
++++ glibc-2.13/resolv/res_libc.c 2009-11-13 00:49:59.000000000 +0100
@@ -22,6 +22,7 @@
#include <arpa/nameser.h>
#include <resolv.h>
diff --git a/patches/glibc/ports-2.12.2/190-localedef-mmap.patch b/patches/glibc/ports-2.14.1/190-localedef-mmap.patch
index b24ed80..f3914cd 100644
--- a/patches/glibc/ports-2.12.2/190-localedef-mmap.patch
+++ b/patches/glibc/ports-2.14.1/190-localedef-mmap.patch
@@ -7,9 +7,9 @@ http://bugs.gentoo.org/289615
used later with MMAP_FIXED | MMAP_SHARED to cope with different
alignment restrictions.
-diff -durN glibc-2.12.1.orig/locale/programs/locarchive.c glibc-2.12.1/locale/programs/locarchive.c
---- glibc-2.12.1.orig/locale/programs/locarchive.c 2009-04-27 16:07:47.000000000 +0200
-+++ glibc-2.12.1/locale/programs/locarchive.c 2009-11-13 00:50:01.000000000 +0100
+diff -durN glibc-2.13.orig/locale/programs/locarchive.c glibc-2.13/locale/programs/locarchive.c
+--- glibc-2.13.orig/locale/programs/locarchive.c 2009-04-27 16:07:47.000000000 +0200
++++ glibc-2.13/locale/programs/locarchive.c 2009-11-13 00:50:01.000000000 +0100
@@ -134,7 +134,7 @@
size_t reserved = RESERVE_MMAP_SIZE;
int xflags = 0;
diff --git a/patches/glibc/ports-2.12.2/200-fadvise64_64.patch b/patches/glibc/ports-2.14.1/200-fadvise64_64.patch
index a9f10cd..71bca38 100644
--- a/patches/glibc/ports-2.12.2/200-fadvise64_64.patch
+++ b/patches/glibc/ports-2.14.1/200-fadvise64_64.patch
@@ -3,9 +3,9 @@ ripped from Debian
sysdeps/unix/sysv/linux/posix_fadvise.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/posix_fadvise.c glibc-2.12.1/sysdeps/unix/sysv/linux/posix_fadvise.c
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/posix_fadvise.c 2003-08-17 02:36:22.000000000 +0200
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/posix_fadvise.c 2009-11-13 00:50:03.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c 2003-08-17 02:36:22.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c 2009-11-13 00:50:03.000000000 +0100
@@ -35,6 +35,19 @@
return INTERNAL_SYSCALL_ERRNO (ret, err);
return 0;
diff --git a/patches/glibc/ports-2.12.2/220-section-comments.patch b/patches/glibc/ports-2.14.1/220-section-comments.patch
index 4d35535..d717829 100644
--- a/patches/glibc/ports-2.12.2/220-section-comments.patch
+++ b/patches/glibc/ports-2.14.1/220-section-comments.patch
@@ -3,9 +3,9 @@ http://sources.redhat.com/ml/binutils/2004-04/msg00665.html
fixes building on some architectures (like m68k/arm/cris/etc...) because
it does the right thing
-diff -durN glibc-2.12.1.orig/include/libc-symbols.h glibc-2.12.1/include/libc-symbols.h
---- glibc-2.12.1.orig/include/libc-symbols.h 2009-03-14 00:51:46.000000000 +0100
-+++ glibc-2.12.1/include/libc-symbols.h 2009-11-13 00:50:07.000000000 +0100
+diff -durN glibc-2.13.orig/include/libc-symbols.h glibc-2.13/include/libc-symbols.h
+--- glibc-2.13.orig/include/libc-symbols.h 2009-03-14 00:51:46.000000000 +0100
++++ glibc-2.13/include/libc-symbols.h 2009-11-13 00:50:07.000000000 +0100
@@ -239,12 +239,12 @@
# define __make_section_unallocated(section_string)
# endif
diff --git a/patches/glibc/ports-2.12.2/230-no-inline-gmon.patch b/patches/glibc/ports-2.14.1/230-no-inline-gmon.patch
index 594fb79..fa33c2b 100644
--- a/patches/glibc/ports-2.12.2/230-no-inline-gmon.patch
+++ b/patches/glibc/ports-2.14.1/230-no-inline-gmon.patch
@@ -22,9 +22,9 @@ Kazu Hirata
Index: sysdeps/generic/initfini.c
===================================================================
-diff -durN glibc-2.12.1.orig/sysdeps/generic/initfini.c glibc-2.12.1/sysdeps/generic/initfini.c
---- glibc-2.12.1.orig/sysdeps/generic/initfini.c 2007-06-17 20:02:40.000000000 +0200
-+++ glibc-2.12.1/sysdeps/generic/initfini.c 2009-11-13 00:50:09.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/generic/initfini.c glibc-2.13/sysdeps/generic/initfini.c
+--- glibc-2.13.orig/sysdeps/generic/initfini.c 2007-06-17 20:02:40.000000000 +0200
++++ glibc-2.13/sysdeps/generic/initfini.c 2009-11-13 00:50:09.000000000 +0100
@@ -70,7 +70,7 @@
/* The beginning of _init: */
asm ("\n/*@_init_PROLOG_BEGINS*/");
diff --git a/patches/glibc/ports-2.12.2/260-assume-pipe2.patch b/patches/glibc/ports-2.14.1/260-assume-pipe2.patch
index b84f882..42e8f4e 100644
--- a/patches/glibc/ports-2.12.2/260-assume-pipe2.patch
+++ b/patches/glibc/ports-2.14.1/260-assume-pipe2.patch
@@ -20,9 +20,9 @@ __have_sock_cloexec and __have_pipe2 to true. but if glibc was built against
older kernel headers where __NR_pipe2 does not exist, glibc will have a ENOSYS
stub for it. so popen() will always fail as glibc assumes pipe2() works.
-diff -durN glibc-2.12.1.orig/socket/have_sock_cloexec.c glibc-2.12.1/socket/have_sock_cloexec.c
---- glibc-2.12.1.orig/socket/have_sock_cloexec.c 2008-07-25 18:46:23.000000000 +0200
-+++ glibc-2.12.1/socket/have_sock_cloexec.c 2009-11-13 00:50:15.000000000 +0100
+diff -durN glibc-2.13.orig/socket/have_sock_cloexec.c glibc-2.13/socket/have_sock_cloexec.c
+--- glibc-2.13.orig/socket/have_sock_cloexec.c 2008-07-25 18:46:23.000000000 +0200
++++ glibc-2.13/socket/have_sock_cloexec.c 2009-11-13 00:50:15.000000000 +0100
@@ -16,9 +16,14 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
diff --git a/patches/glibc/ports-2.12.2/270-china.patch b/patches/glibc/ports-2.14.1/270-china.patch
index 4cde1cf..41d7759 100644
--- a/patches/glibc/ports-2.12.2/270-china.patch
+++ b/patches/glibc/ports-2.14.1/270-china.patch
@@ -1,8 +1,8 @@
-diff -durN glibc-2.12.1.orig/localedata/locales/zh_TW glibc-2.12.1/localedata/locales/zh_TW
---- glibc-2.12.1.orig/localedata/locales/zh_TW 2004-11-01 00:42:28.000000000 +0100
-+++ glibc-2.12.1/localedata/locales/zh_TW 2009-11-13 00:50:17.000000000 +0100
+diff -durN glibc-2.13.orig/localedata/locales/zh_TW glibc-2.13/localedata/locales/zh_TW
+--- glibc-2.13.orig/localedata/locales/zh_TW 2004-11-01 00:42:28.000000000 +0100
++++ glibc-2.13/localedata/locales/zh_TW 2009-11-13 00:50:17.000000000 +0100
@@ -1,7 +1,7 @@
comment_char %
escape_char /
diff --git a/patches/glibc/ports-2.12.2/280-new-valencian-locale.patch b/patches/glibc/ports-2.14.1/280-new-valencian-locale.patch
index 6b46b44..4cdd108 100644
--- a/patches/glibc/ports-2.12.2/280-new-valencian-locale.patch
+++ b/patches/glibc/ports-2.14.1/280-new-valencian-locale.patch
@@ -1,9 +1,9 @@
http://bugs.gentoo.org/show_bug.cgi?id=131815
http://sourceware.org/bugzilla/show_bug.cgi?id=2522
-diff -durN glibc-2.12.1.orig/localedata/SUPPORTED glibc-2.12.1/localedata/SUPPORTED
---- glibc-2.12.1.orig/localedata/SUPPORTED 2009-04-18 10:43:52.000000000 +0200
-+++ glibc-2.12.1/localedata/SUPPORTED 2009-11-13 00:50:20.000000000 +0100
+diff -durN glibc-2.13.orig/localedata/SUPPORTED glibc-2.13/localedata/SUPPORTED
+--- glibc-2.13.orig/localedata/SUPPORTED 2009-04-18 10:43:52.000000000 +0200
++++ glibc-2.13/localedata/SUPPORTED 2009-11-13 00:50:20.000000000 +0100
@@ -72,6 +72,8 @@
ca_ES.UTF-8/UTF-8 \
ca_ES/ISO-8859-1 \
@@ -13,9 +13,9 @@ diff -durN glibc-2.12.1.orig/localedata/SUPPORTED glibc-2.12.1/localedata/SUPPOR
ca_FR.UTF-8/UTF-8 \
ca_FR/ISO-8859-15 \
ca_IT.UTF-8/UTF-8 \
-diff -durN glibc-2.12.1.orig/localedata/locales/ca_ES@valencia glibc-2.12.1/localedata/locales/ca_ES@valencia
---- glibc-2.12.1.orig/localedata/locales/ca_ES@valencia 1970-01-01 01:00:00.000000000 +0100
-+++ glibc-2.12.1/localedata/locales/ca_ES@valencia 2009-11-13 00:50:20.000000000 +0100
+diff -durN glibc-2.13.orig/localedata/locales/ca_ES@valencia glibc-2.13/localedata/locales/ca_ES@valencia
+--- glibc-2.13.orig/localedata/locales/ca_ES@valencia 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/localedata/locales/ca_ES@valencia 2009-11-13 00:50:20.000000000 +0100
@@ -0,0 +1,96 @@
+comment_char %
+escape_char /
diff --git a/patches/glibc/ports-2.12.2/300-nscd-one-fork.patch b/patches/glibc/ports-2.14.1/300-nscd-one-fork.patch
index 27eae51..adc9b3f 100644
--- a/patches/glibc/ports-2.12.2/300-nscd-one-fork.patch
+++ b/patches/glibc/ports-2.14.1/300-nscd-one-fork.patch
@@ -2,9 +2,9 @@ only fork one to assist in stop-start-daemon assumptions about daemon behavior
http://bugs.gentoo.org/190785
-diff -durN glibc-2.12.1.orig/nscd/nscd.c glibc-2.12.1/nscd/nscd.c
---- glibc-2.12.1.orig/nscd/nscd.c 2009-02-06 21:10:27.000000000 +0100
-+++ glibc-2.12.1/nscd/nscd.c 2009-11-13 00:50:24.000000000 +0100
+diff -durN glibc-2.13.orig/nscd/nscd.c glibc-2.13/nscd/nscd.c
+--- glibc-2.13.orig/nscd/nscd.c 2009-02-06 21:10:27.000000000 +0100
++++ glibc-2.13/nscd/nscd.c 2009-11-13 00:50:24.000000000 +0100
@@ -182,6 +182,9 @@
if (pid != 0)
exit (0);
diff --git a/patches/glibc/ports-2.12.2/310-hppa-nptl-carlos.patch b/patches/glibc/ports-2.14.1/310-hppa-nptl-carlos.patch
index 947bb58..4c028b2 100644
--- a/patches/glibc/ports-2.12.2/310-hppa-nptl-carlos.patch
+++ b/patches/glibc/ports-2.14.1/310-hppa-nptl-carlos.patch
@@ -1,9 +1,9 @@
-diff -durN glibc-2.12.1.orig/elf/rtld.c glibc-2.12.1/elf/rtld.c
---- glibc-2.12.1.orig/elf/rtld.c 2009-04-17 02:00:08.000000000 +0200
-+++ glibc-2.12.1/elf/rtld.c 2009-11-13 00:50:26.000000000 +0100
-@@ -390,14 +390,14 @@
+diff -durN glibc-2.13.orig/elf/rtld.c glibc-2.13/elf/rtld.c
+--- glibc-2.13.orig/elf/rtld.c 2009-04-17 02:00:08.000000000 +0200
++++ glibc-2.13/elf/rtld.c 2009-11-13 00:50:26.000000000 +0100
+@@ -392,14 +392,14 @@
know it is available. We do not have to clear the memory if we
do not have to use the temporary bootstrap_map. Global variables
are initialized to zero by default. */
@@ -23,9 +23,9 @@ diff -durN glibc-2.12.1.orig/elf/rtld.c glibc-2.12.1/elf/rtld.c
# endif
# if USE___THREAD
bootstrap_map.l_tls_modid = 0;
-diff -durN glibc-2.12.1.orig/include/atomic.h glibc-2.12.1/include/atomic.h
---- glibc-2.12.1.orig/include/atomic.h 2009-02-09 00:49:53.000000000 +0100
-+++ glibc-2.12.1/include/atomic.h 2009-11-13 00:50:26.000000000 +0100
+diff -durN glibc-2.13.orig/include/atomic.h glibc-2.13/include/atomic.h
+--- glibc-2.13.orig/include/atomic.h 2009-02-09 00:49:53.000000000 +0100
++++ glibc-2.13/include/atomic.h 2009-11-13 00:50:26.000000000 +0100
@@ -185,7 +185,7 @@
__typeof (*(mem)) __atg5_value = (newvalue); \
\
@@ -143,10 +143,10 @@ diff -durN glibc-2.12.1.orig/include/atomic.h glibc-2.12.1/include/atomic.h
while (__builtin_expect \
(atomic_compare_and_exchange_bool_acq (__atg19_memp, \
__atg19_old | __atg19_mask,\
-diff -durN glibc-2.12.1.orig/nptl/Makefile glibc-2.12.1/nptl/Makefile
---- glibc-2.12.1.orig/nptl/Makefile 2008-11-12 14:38:23.000000000 +0100
-+++ glibc-2.12.1/nptl/Makefile 2009-11-13 00:50:26.000000000 +0100
-@@ -264,9 +264,9 @@
+diff -durN glibc-2.13.orig/nptl/Makefile glibc-2.13/nptl/Makefile
+--- glibc-2.13.orig/nptl/Makefile 2008-11-12 14:38:23.000000000 +0100
++++ glibc-2.13/nptl/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -265,9 +265,9 @@
# Files which must not be linked with libpthread.
tests-nolibpthread = tst-unload
@@ -159,7 +159,7 @@ diff -durN glibc-2.12.1.orig/nptl/Makefile glibc-2.12.1/nptl/Makefile
distribute = eintr.c tst-cleanup4aux.c
-@@ -425,6 +425,35 @@
+@@ -426,6 +426,35 @@
CFLAGS-tst-cleanupx4.c += -fexceptions
CFLAGS-tst-oncex3.c += -fexceptions
CFLAGS-tst-oncex4.c += -fexceptions
@@ -195,9 +195,9 @@ diff -durN glibc-2.12.1.orig/nptl/Makefile glibc-2.12.1/nptl/Makefile
CFLAGS-tst-align.c += $(stack-align-test-flags)
CFLAGS-tst-align3.c += $(stack-align-test-flags)
CFLAGS-tst-initializers1.c = -W -Wall -Werror
-diff -durN glibc-2.12.1.orig/nptl/pthread_barrier_wait.c glibc-2.12.1/nptl/pthread_barrier_wait.c
---- glibc-2.12.1.orig/nptl/pthread_barrier_wait.c 2007-08-01 06:18:50.000000000 +0200
-+++ glibc-2.12.1/nptl/pthread_barrier_wait.c 2009-11-13 00:50:26.000000000 +0100
+diff -durN glibc-2.13.orig/nptl/pthread_barrier_wait.c glibc-2.13/nptl/pthread_barrier_wait.c
+--- glibc-2.13.orig/nptl/pthread_barrier_wait.c 2007-08-01 06:18:50.000000000 +0200
++++ glibc-2.13/nptl/pthread_barrier_wait.c 2009-11-13 00:50:26.000000000 +0100
@@ -64,7 +64,7 @@
do
lll_futex_wait (&ibarrier->curr_event, event,
@@ -207,9 +207,9 @@ diff -durN glibc-2.12.1.orig/nptl/pthread_barrier_wait.c glibc-2.12.1/nptl/pthre
}
/* Make sure the init_count is stored locally or in a register. */
-diff -durN glibc-2.12.1.orig/nptl/sysdeps/pthread/Makefile glibc-2.12.1/nptl/sysdeps/pthread/Makefile
---- glibc-2.12.1.orig/nptl/sysdeps/pthread/Makefile 2006-02-28 08:09:41.000000000 +0100
-+++ glibc-2.12.1/nptl/sysdeps/pthread/Makefile 2009-11-13 00:50:26.000000000 +0100
+diff -durN glibc-2.13.orig/nptl/sysdeps/pthread/Makefile glibc-2.13/nptl/sysdeps/pthread/Makefile
+--- glibc-2.13.orig/nptl/sysdeps/pthread/Makefile 2006-02-28 08:09:41.000000000 +0100
++++ glibc-2.13/nptl/sysdeps/pthread/Makefile 2009-11-13 00:50:26.000000000 +0100
@@ -33,7 +33,9 @@
ifeq ($(have-forced-unwind),yes)
@@ -220,9 +220,9 @@ diff -durN glibc-2.12.1.orig/nptl/sysdeps/pthread/Makefile glibc-2.12.1/nptl/sys
endif
endif
-diff -durN glibc-2.12.1.orig/stdio-common/Makefile glibc-2.12.1/stdio-common/Makefile
---- glibc-2.12.1.orig/stdio-common/Makefile 2009-04-11 07:29:56.000000000 +0200
-+++ glibc-2.12.1/stdio-common/Makefile 2009-11-13 00:50:26.000000000 +0100
+diff -durN glibc-2.13.orig/stdio-common/Makefile glibc-2.13/stdio-common/Makefile
+--- glibc-2.13.orig/stdio-common/Makefile 2009-04-11 07:29:56.000000000 +0200
++++ glibc-2.13/stdio-common/Makefile 2009-11-13 00:50:26.000000000 +0100
@@ -82,7 +82,7 @@
$(SHELL) -e tst-printf.sh $(common-objpfx) '$(run-program-prefix)'
endif
@@ -232,9 +232,9 @@ diff -durN glibc-2.12.1.orig/stdio-common/Makefile glibc-2.12.1/stdio-common/Mak
CFLAGS-vfwprintf.c = -Wno-uninitialized
CFLAGS-tst-printf.c = -Wno-format
CFLAGS-tstdiomisc.c = -Wno-format
-diff -durN glibc-2.12.1.orig/sunrpc/clnt_udp.c glibc-2.12.1/sunrpc/clnt_udp.c
---- glibc-2.12.1.orig/sunrpc/clnt_udp.c 2008-07-26 10:42:44.000000000 +0200
-+++ glibc-2.12.1/sunrpc/clnt_udp.c 2009-11-13 00:50:26.000000000 +0100
+diff -durN glibc-2.13.orig/sunrpc/clnt_udp.c glibc-2.13/sunrpc/clnt_udp.c
+--- glibc-2.13.orig/sunrpc/clnt_udp.c 2008-07-26 10:42:44.000000000 +0200
++++ glibc-2.13/sunrpc/clnt_udp.c 2009-11-13 00:50:26.000000000 +0100
@@ -456,7 +456,7 @@
while (inlen < 0 && errno == EINTR);
if (inlen < 0)
diff --git a/patches/glibc/ports-2.12.2/330-m68k-sys-user.patch b/patches/glibc/ports-2.14.1/330-m68k-sys-user.patch
index b441691..8fbe2e5 100644
--- a/patches/glibc/ports-2.12.2/330-m68k-sys-user.patch
+++ b/patches/glibc/ports-2.14.1/330-m68k-sys-user.patch
@@ -1,8 +1,8 @@
copied from kernel as it is sanitized now
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/m68k/sys/user.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-11-13 00:50:31.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/m68k/sys/user.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-11-13 00:50:31.000000000 +0100
@@ -1,3 +1,90 @@
+#ifndef _SYS_USER_H
+#define _SYS_USER_H
@@ -91,7 +91,7 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/m68k/sys
+#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
+
+#endif
- /* Copyright (C) 2008 Free Software Foundation, Inc.
+ /* Copyright (C) 2008, 2010 Free Software Foundation, Inc.
This file is part of the GNU C Library.
-diff -durN glibc-2.12.1.orig/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.12.1/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.14.1/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h
diff --git a/patches/glibc/ports-2.12.2/340-dl_execstack-PaX-support.patch b/patches/glibc/ports-2.14.1/340-dl_execstack-PaX-support.patch
index afdb39c..2402af0 100644
--- a/patches/glibc/ports-2.12.2/340-dl_execstack-PaX-support.patch
+++ b/patches/glibc/ports-2.14.1/340-dl_execstack-PaX-support.patch
@@ -8,9 +8,9 @@
Patch also NPTL. Bug #116086. <kevquinn@gentoo.org> (20 Dec 2005).
-diff -durN glibc-2.12.1.orig/nptl/allocatestack.c glibc-2.12.1/nptl/allocatestack.c
---- glibc-2.12.1.orig/nptl/allocatestack.c 2009-01-29 21:34:16.000000000 +0100
-+++ glibc-2.12.1/nptl/allocatestack.c 2009-11-13 00:50:33.000000000 +0100
+diff -durN glibc-2.13.orig/nptl/allocatestack.c glibc-2.13/nptl/allocatestack.c
+--- glibc-2.13.orig/nptl/allocatestack.c 2009-01-29 21:34:16.000000000 +0100
++++ glibc-2.13/nptl/allocatestack.c 2009-11-13 00:50:33.000000000 +0100
@@ -329,7 +329,8 @@
# error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
#endif
@@ -21,9 +21,9 @@ diff -durN glibc-2.12.1.orig/nptl/allocatestack.c glibc-2.12.1/nptl/allocatestac
return 0;
}
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/dl-execstack.c glibc-2.12.1/sysdeps/unix/sysv/linux/dl-execstack.c
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/dl-execstack.c 2006-01-08 09:21:15.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/dl-execstack.c 2009-11-13 00:50:33.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c 2006-01-08 09:21:15.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c 2009-11-13 00:50:33.000000000 +0100
@@ -63,7 +63,10 @@
else
# endif
diff --git a/patches/glibc/ports-2.12.2/350-pre20040117-pt_pax.patch b/patches/glibc/ports-2.14.1/350-pre20040117-pt_pax.patch
index 3f03169..f8f6b83 100644
--- a/patches/glibc/ports-2.12.2/350-pre20040117-pt_pax.patch
+++ b/patches/glibc/ports-2.14.1/350-pre20040117-pt_pax.patch
@@ -1,8 +1,8 @@
-diff -durN glibc-2.12.1.orig/elf/elf.h glibc-2.12.1/elf/elf.h
---- glibc-2.12.1.orig/elf/elf.h 2009-04-15 02:15:54.000000000 +0200
-+++ glibc-2.12.1/elf/elf.h 2009-11-13 00:50:35.000000000 +0100
+diff -durN glibc-2.13.orig/elf/elf.h glibc-2.13/elf/elf.h
+--- glibc-2.13.orig/elf/elf.h 2009-04-15 02:15:54.000000000 +0200
++++ glibc-2.13/elf/elf.h 2009-11-13 00:50:35.000000000 +0100
@@ -580,6 +580,7 @@
#define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
#define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
diff --git a/patches/glibc/ports-2.12.2/360-tests-sandbox-libdl-paths.patch b/patches/glibc/ports-2.14.1/360-tests-sandbox-libdl-paths.patch
index a847cdb..9f78c52 100644
--- a/patches/glibc/ports-2.12.2/360-tests-sandbox-libdl-paths.patch
+++ b/patches/glibc/ports-2.14.1/360-tests-sandbox-libdl-paths.patch
@@ -15,9 +15,9 @@ Fix by Wormo
http://bugs.gentoo.org/56898
-diff -durN glibc-2.12.1.orig/grp/tst_fgetgrent.sh glibc-2.12.1/grp/tst_fgetgrent.sh
---- glibc-2.12.1.orig/grp/tst_fgetgrent.sh 2001-07-06 06:54:46.000000000 +0200
-+++ glibc-2.12.1/grp/tst_fgetgrent.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/grp/tst_fgetgrent.sh glibc-2.13/grp/tst_fgetgrent.sh
+--- glibc-2.13.orig/grp/tst_fgetgrent.sh 2001-07-06 06:54:46.000000000 +0200
++++ glibc-2.13/grp/tst_fgetgrent.sh 2009-11-13 00:50:37.000000000 +0100
@@ -24,7 +24,8 @@
rtld_installed_name=$1; shift
@@ -28,9 +28,9 @@ diff -durN glibc-2.12.1.orig/grp/tst_fgetgrent.sh glibc-2.12.1/grp/tst_fgetgrent
result=0
-diff -durN glibc-2.12.1.orig/iconvdata/run-iconv-test.sh glibc-2.12.1/iconvdata/run-iconv-test.sh
---- glibc-2.12.1.orig/iconvdata/run-iconv-test.sh 2008-05-15 03:59:44.000000000 +0200
-+++ glibc-2.12.1/iconvdata/run-iconv-test.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/iconvdata/run-iconv-test.sh glibc-2.13/iconvdata/run-iconv-test.sh
+--- glibc-2.13.orig/iconvdata/run-iconv-test.sh 2008-05-15 03:59:44.000000000 +0200
++++ glibc-2.13/iconvdata/run-iconv-test.sh 2009-11-13 00:50:37.000000000 +0100
@@ -34,7 +34,7 @@
export GCONV_PATH
@@ -40,9 +40,9 @@ diff -durN glibc-2.12.1.orig/iconvdata/run-iconv-test.sh glibc-2.12.1/iconvdata/
# How the start the iconv(1) program.
ICONV='$codir/elf/ld.so --library-path $LIBPATH --inhibit-rpath ${from}.so \
-diff -durN glibc-2.12.1.orig/iconvdata/tst-table.sh glibc-2.12.1/iconvdata/tst-table.sh
---- glibc-2.12.1.orig/iconvdata/tst-table.sh 2002-04-24 23:39:35.000000000 +0200
-+++ glibc-2.12.1/iconvdata/tst-table.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/iconvdata/tst-table.sh glibc-2.13/iconvdata/tst-table.sh
+--- glibc-2.13.orig/iconvdata/tst-table.sh 2002-04-24 23:39:35.000000000 +0200
++++ glibc-2.13/iconvdata/tst-table.sh 2009-11-13 00:50:37.000000000 +0100
@@ -59,8 +59,11 @@
irreversible=${charset}.irreversible
fi
@@ -56,9 +56,9 @@ diff -durN glibc-2.12.1.orig/iconvdata/tst-table.sh glibc-2.12.1/iconvdata/tst-t
${objpfx}tst-table-from ${charset} \
> ${objpfx}tst-${charset}.table
-diff -durN glibc-2.12.1.orig/intl/tst-codeset.sh glibc-2.12.1/intl/tst-codeset.sh
---- glibc-2.12.1.orig/intl/tst-codeset.sh 2005-04-06 04:18:35.000000000 +0200
-+++ glibc-2.12.1/intl/tst-codeset.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/intl/tst-codeset.sh glibc-2.13/intl/tst-codeset.sh
+--- glibc-2.13.orig/intl/tst-codeset.sh 2005-04-06 04:18:35.000000000 +0200
++++ glibc-2.13/intl/tst-codeset.sh 2009-11-13 00:50:37.000000000 +0100
@@ -37,6 +37,9 @@
LOCPATH=${common_objpfx}localedata
export LOCPATH
@@ -69,9 +69,9 @@ diff -durN glibc-2.12.1.orig/intl/tst-codeset.sh glibc-2.12.1/intl/tst-codeset.s
${common_objpfx}elf/ld.so --library-path $common_objpfx \
${objpfx}tst-codeset > ${objpfx}tst-codeset.out
-diff -durN glibc-2.12.1.orig/intl/tst-gettext.sh glibc-2.12.1/intl/tst-gettext.sh
---- glibc-2.12.1.orig/intl/tst-gettext.sh 2004-08-15 21:28:18.000000000 +0200
-+++ glibc-2.12.1/intl/tst-gettext.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/intl/tst-gettext.sh glibc-2.13/intl/tst-gettext.sh
+--- glibc-2.13.orig/intl/tst-gettext.sh 2004-08-15 21:28:18.000000000 +0200
++++ glibc-2.13/intl/tst-gettext.sh 2009-11-13 00:50:37.000000000 +0100
@@ -51,9 +51,12 @@
LOCPATH=${common_objpfx}localedata
export LOCPATH
@@ -86,9 +86,9 @@ diff -durN glibc-2.12.1.orig/intl/tst-gettext.sh glibc-2.12.1/intl/tst-gettext.s
${objpfx}tst-gettext > ${objpfx}tst-gettext.out ${objpfx}domaindir
exit $?
-diff -durN glibc-2.12.1.orig/intl/tst-gettext2.sh glibc-2.12.1/intl/tst-gettext2.sh
---- glibc-2.12.1.orig/intl/tst-gettext2.sh 2005-05-04 19:54:48.000000000 +0200
-+++ glibc-2.12.1/intl/tst-gettext2.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/intl/tst-gettext2.sh glibc-2.13/intl/tst-gettext2.sh
+--- glibc-2.13.orig/intl/tst-gettext2.sh 2005-05-04 19:54:48.000000000 +0200
++++ glibc-2.13/intl/tst-gettext2.sh 2009-11-13 00:50:37.000000000 +0100
@@ -65,8 +65,11 @@
LOCPATH=${objpfx}domaindir
export LOCPATH
@@ -102,9 +102,9 @@ diff -durN glibc-2.12.1.orig/intl/tst-gettext2.sh glibc-2.12.1/intl/tst-gettext2
${objpfx}tst-gettext2 > ${objpfx}tst-gettext2.out ${objpfx}domaindir &&
cmp ${objpfx}tst-gettext2.out - <<EOF
String1 - Lang1: 1st string
-diff -durN glibc-2.12.1.orig/intl/tst-translit.sh glibc-2.12.1/intl/tst-translit.sh
---- glibc-2.12.1.orig/intl/tst-translit.sh 2005-05-04 19:56:10.000000000 +0200
-+++ glibc-2.12.1/intl/tst-translit.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/intl/tst-translit.sh glibc-2.13/intl/tst-translit.sh
+--- glibc-2.13.orig/intl/tst-translit.sh 2005-05-04 19:56:10.000000000 +0200
++++ glibc-2.13/intl/tst-translit.sh 2009-11-13 00:50:37.000000000 +0100
@@ -36,7 +36,10 @@
LOCPATH=${common_objpfx}localedata
export LOCPATH
@@ -117,9 +117,9 @@ diff -durN glibc-2.12.1.orig/intl/tst-translit.sh glibc-2.12.1/intl/tst-translit
${objpfx}tst-translit > ${objpfx}tst-translit.out ${objpfx}domaindir
exit $?
-diff -durN glibc-2.12.1.orig/malloc/tst-mtrace.sh glibc-2.12.1/malloc/tst-mtrace.sh
---- glibc-2.12.1.orig/malloc/tst-mtrace.sh 2005-10-15 01:40:35.000000000 +0200
-+++ glibc-2.12.1/malloc/tst-mtrace.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/malloc/tst-mtrace.sh glibc-2.13/malloc/tst-mtrace.sh
+--- glibc-2.13.orig/malloc/tst-mtrace.sh 2005-10-15 01:40:35.000000000 +0200
++++ glibc-2.13/malloc/tst-mtrace.sh 2009-11-13 00:50:37.000000000 +0100
@@ -24,9 +24,12 @@
status=0
trap "rm -f ${common_objpfx}malloc/tst-mtrace.leak; exit 1" 1 2 15
@@ -134,9 +134,9 @@ diff -durN glibc-2.12.1.orig/malloc/tst-mtrace.sh glibc-2.12.1/malloc/tst-mtrace
${common_objpfx}malloc/tst-mtrace || status=1
if test $status -eq 0 && test -f ${common_objpfx}malloc/mtrace; then
-diff -durN glibc-2.12.1.orig/nptl/tst-tls6.sh glibc-2.12.1/nptl/tst-tls6.sh
---- glibc-2.12.1.orig/nptl/tst-tls6.sh 2003-09-03 00:02:59.000000000 +0200
-+++ glibc-2.12.1/nptl/tst-tls6.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/nptl/tst-tls6.sh glibc-2.13/nptl/tst-tls6.sh
+--- glibc-2.13.orig/nptl/tst-tls6.sh 2003-09-03 00:02:59.000000000 +0200
++++ glibc-2.13/nptl/tst-tls6.sh 2009-11-13 00:50:37.000000000 +0100
@@ -5,8 +5,8 @@
rtld_installed_name=$1; shift
logfile=$common_objpfx/nptl/tst-tls6.out
@@ -148,9 +148,9 @@ diff -durN glibc-2.12.1.orig/nptl/tst-tls6.sh glibc-2.12.1/nptl/tst-tls6.sh
tst_tls5="${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
${common_objpfx}/nptl/tst-tls5"
-diff -durN glibc-2.12.1.orig/posix/globtest.sh glibc-2.12.1/posix/globtest.sh
---- glibc-2.12.1.orig/posix/globtest.sh 2008-12-06 07:05:39.000000000 +0100
-+++ glibc-2.12.1/posix/globtest.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/posix/globtest.sh glibc-2.13/posix/globtest.sh
+--- glibc-2.13.orig/posix/globtest.sh 2008-12-06 07:05:39.000000000 +0100
++++ glibc-2.13/posix/globtest.sh 2009-11-13 00:50:37.000000000 +0100
@@ -18,7 +18,7 @@
esac
@@ -160,9 +160,9 @@ diff -durN glibc-2.12.1.orig/posix/globtest.sh glibc-2.12.1/posix/globtest.sh
# Since we use `sort' we must make sure to use the same locale everywhere.
LC_ALL=C
-diff -durN glibc-2.12.1.orig/posix/tst-getconf.sh glibc-2.12.1/posix/tst-getconf.sh
---- glibc-2.12.1.orig/posix/tst-getconf.sh 2002-09-01 13:11:25.000000000 +0200
-+++ glibc-2.12.1/posix/tst-getconf.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/posix/tst-getconf.sh glibc-2.13/posix/tst-getconf.sh
+--- glibc-2.13.orig/posix/tst-getconf.sh 2002-09-01 13:11:25.000000000 +0200
++++ glibc-2.13/posix/tst-getconf.sh 2009-11-13 00:50:37.000000000 +0100
@@ -10,7 +10,10 @@
else
rtld_installed_name=$1; shift
@@ -175,9 +175,9 @@ diff -durN glibc-2.12.1.orig/posix/tst-getconf.sh glibc-2.12.1/posix/tst-getconf
}
fi
-diff -durN glibc-2.12.1.orig/posix/wordexp-tst.sh glibc-2.12.1/posix/wordexp-tst.sh
---- glibc-2.12.1.orig/posix/wordexp-tst.sh 2000-10-20 18:23:30.000000000 +0200
-+++ glibc-2.12.1/posix/wordexp-tst.sh 2009-11-13 00:50:37.000000000 +0100
+diff -durN glibc-2.13.orig/posix/wordexp-tst.sh glibc-2.13/posix/wordexp-tst.sh
+--- glibc-2.13.orig/posix/wordexp-tst.sh 2000-10-20 18:23:30.000000000 +0200
++++ glibc-2.13/posix/wordexp-tst.sh 2009-11-13 00:50:37.000000000 +0100
@@ -19,8 +19,11 @@
"
export IFS
diff --git a/patches/glibc/ports-2.12.2/380-dont-build-timezone.patch b/patches/glibc/ports-2.14.1/380-dont-build-timezone.patch
index 0a30436..11c358e 100644
--- a/patches/glibc/ports-2.12.2/380-dont-build-timezone.patch
+++ b/patches/glibc/ports-2.14.1/380-dont-build-timezone.patch
@@ -1,8 +1,8 @@
timezone data has been split into the package sys-libs/timezone-data
-diff -durN glibc-2.12.1.orig/Makeconfig glibc-2.12.1/Makeconfig
---- glibc-2.12.1.orig/Makeconfig 2009-11-13 00:50:13.000000000 +0100
-+++ glibc-2.12.1/Makeconfig 2009-11-13 00:50:41.000000000 +0100
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-11-13 00:50:13.000000000 +0100
++++ glibc-2.13/Makeconfig 2009-11-13 00:50:41.000000000 +0100
@@ -944,7 +944,7 @@
stdlib stdio-common libio malloc string wcsmbs time dirent \
grp pwd posix io termios resource misc socket sysvipc gmon \
diff --git a/patches/glibc/ports-2.12.2/400-alpha-xstat.patch b/patches/glibc/ports-2.14.1/400-alpha-xstat.patch
index 97bea98..6e4ab8f 100644
--- a/patches/glibc/ports-2.12.2/400-alpha-xstat.patch
+++ b/patches/glibc/ports-2.14.1/400-alpha-xstat.patch
@@ -1,6 +1,6 @@
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-05-09 08:54:20.000000000 +0200
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-05-09 08:54:20.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
@@ -386,6 +386,11 @@
# define __ASSUME_GETDENTS32_D_TYPE 1
#endif
diff --git a/patches/glibc/ports-2.14.1/430-alpha-creat.patch b/patches/glibc/ports-2.14.1/430-alpha-creat.patch
new file mode 100644
index 0000000..da6ddda
--- /dev/null
+++ b/patches/glibc/ports-2.14.1/430-alpha-creat.patch
@@ -0,0 +1,14 @@
+alpha does not have a __NR_creat
+
+http://bugs.gentoo.org/227275
+http://sourceware.org/bugzilla/show_bug.cgi?id=6650
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2007-11-10 20:34:26.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2009-11-13 00:50:51.000000000 +0100
+@@ -1 +1,5 @@
+ /* Defined as alias for the syscall. */
++#include <sysdep.h>
++#ifndef __NR_creat
++#include "../../../../../io/creat64.c"
++#endif
diff --git a/patches/glibc/ports-2.12.2/440-alpha-cache-shape.patch b/patches/glibc/ports-2.14.1/440-alpha-cache-shape.patch
index ea85e99..8ca0bd6 100644
--- a/patches/glibc/ports-2.12.2/440-alpha-cache-shape.patch
+++ b/patches/glibc/ports-2.14.1/440-alpha-cache-shape.patch
@@ -5,9 +5,9 @@ duplication for static builds with dl-sysdep and dl-support. since dl-sysdep
is both shared/static, there is no point in hooking dl-support anymore, so we
can punt it.
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/dl-support.c glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/dl-support.c
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-11-13 00:50:53.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/dl-support.c glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/dl-support.c
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-11-13 00:50:53.000000000 +0100
@@ -1,2 +1,1 @@
-#include "dl-auxv.h"
#include <elf/dl-support.c>
diff --git a/patches/glibc/ports-2.12.2/460-alpha-fix-gcc-4.1-warnings.patch b/patches/glibc/ports-2.14.1/460-alpha-fix-gcc-4.1-warnings.patch
index 6438267..c3e59f4 100644
--- a/patches/glibc/ports-2.12.2/460-alpha-fix-gcc-4.1-warnings.patch
+++ b/patches/glibc/ports-2.14.1/460-alpha-fix-gcc-4.1-warnings.patch
@@ -16,9 +16,9 @@ I cannot really think of anything better than
ports/sysdeps/unix/sysv/linux/alpha/ioperm.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/ioperm.c
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-11-13 00:50:57.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/ioperm.c
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-11-13 00:50:57.000000000 +0100
@@ -178,13 +178,13 @@
static inline void
stb_mb(unsigned char val, unsigned long addr)
@@ -53,4 +53,4 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/alpha/io
return r;
}
-diff -durN glibc-2.12.1.orig/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.12.1/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c
+diff -durN glibc-2.14.1.orig/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.14.1/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c
diff --git a/patches/glibc/ports-2.12.2/490-alpha_alpha-add-fdatasync-support.patch b/patches/glibc/ports-2.14.1/490-alpha_alpha-add-fdatasync-support.patch
index 9d35ebd..372f34c 100644
--- a/patches/glibc/ports-2.12.2/490-alpha_alpha-add-fdatasync-support.patch
+++ b/patches/glibc/ports-2.14.1/490-alpha_alpha-add-fdatasync-support.patch
@@ -13,20 +13,20 @@
sysdeps/unix/sysv/linux/syscalls.list | 1
4 files changed, 76 insertions(+), 1 deletion(-)
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.12.1/sysdeps/unix/sysv/linux/Makefile
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/Makefile 2009-03-02 17:15:13.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/Makefile 2009-11-13 00:51:04.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.13/sysdeps/unix/sysv/linux/Makefile
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile 2009-03-02 17:15:13.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/Makefile 2009-11-13 00:51:04.000000000 +0100
@@ -20,6 +20,7 @@
setfsuid setfsgid makedev epoll_pwait signalfd \
- eventfd eventfd_read eventfd_write
+ eventfd eventfd_read eventfd_write prlimit
+CFLAGS-fdatasync.c = -fexceptions
CFLAGS-gethostid.c = -fexceptions
sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.12.1/sysdeps/unix/sysv/linux/fdatasync.c
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/fdatasync.c 1970-01-01 01:00:00.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/fdatasync.c 2009-11-13 00:51:04.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c 2009-11-13 00:51:04.000000000 +0100
@@ -0,0 +1,69 @@
+/* fdatasync -- synchronize at least the data part of a file with
+ the underlying media. Linux version.
@@ -97,9 +97,9 @@ diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.12.1/sy
+
+weak_alias (__fdatasync, fdatasync)
+
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:51:04.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:51:04.000000000 +0100
@@ -459,6 +459,12 @@
# define __ASSUME_FUTEX_LOCK_PI 1
#endif
@@ -113,9 +113,9 @@ diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.1
/* Support for utimensat syscall was added in 2.6.22, on SH
only after 2.6.22-rc1. */
#if __LINUX_KERNEL_VERSION >= 0x020616 \
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/syscalls.list glibc-2.12.1/sysdeps/unix/sysv/linux/syscalls.list
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/syscalls.list 2008-08-02 01:29:08.000000000 +0200
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/syscalls.list 2009-11-13 00:51:04.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list 2008-08-02 01:29:08.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list 2009-11-13 00:51:04.000000000 +0100
@@ -11,7 +11,6 @@
epoll_create1 EXTRA epoll_create1 i:i epoll_create1
epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
diff --git a/patches/glibc/ports-2.12.2/530-alpha-fix-rtld-fPIC.patch b/patches/glibc/ports-2.14.1/530-alpha-fix-rtld-fPIC.patch
index 621a6f3..2691a99 100644
--- a/patches/glibc/ports-2.12.2/530-alpha-fix-rtld-fPIC.patch
+++ b/patches/glibc/ports-2.14.1/530-alpha-fix-rtld-fPIC.patch
@@ -5,9 +5,9 @@
ports/sysdeps/alpha/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/alpha/Makefile glibc-2.12.1/glibc-ports-2.12.1/sysdeps/alpha/Makefile
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/alpha/Makefile 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/alpha/Makefile 2009-11-13 00:51:13.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/alpha/Makefile glibc-2.14.1/glibc-ports-2.14.1/sysdeps/alpha/Makefile
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/alpha/Makefile 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/alpha/Makefile 2009-11-13 00:51:13.000000000 +0100
@@ -35,7 +35,8 @@
ifeq ($(subdir),elf)
@@ -18,4 +18,4 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/alpha/Makefile glibc-2.1
endif
# Build everything with full IEEE math support, and with dynamic rounding;
-diff -durN glibc-2.12.1.orig/ports/sysdeps/alpha/Makefile glibc-2.12.1/ports/sysdeps/alpha/Makefile
+diff -durN glibc-2.14.1.orig/ports/sysdeps/alpha/Makefile glibc-2.14.1/ports/sysdeps/alpha/Makefile
diff --git a/patches/glibc/ports-2.12.2/560-ppc-atomic.patch b/patches/glibc/ports-2.14.1/560-ppc-atomic.patch
index 679ef18..ee1cb90 100644
--- a/patches/glibc/ports-2.12.2/560-ppc-atomic.patch
+++ b/patches/glibc/ports-2.14.1/560-ppc-atomic.patch
@@ -6,9 +6,9 @@ RCS file: /cvs/glibc/libc/sysdeps/powerpc/bits/atomic.h,v
retrieving revision 1.17
diff -u -a -p -r1.17 atomic.h
-diff -durN glibc-2.12.1.orig/sysdeps/powerpc/bits/atomic.h glibc-2.12.1/sysdeps/powerpc/bits/atomic.h
---- glibc-2.12.1.orig/sysdeps/powerpc/bits/atomic.h 2007-03-26 22:15:28.000000000 +0200
-+++ glibc-2.12.1/sysdeps/powerpc/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h glibc-2.13/sysdeps/powerpc/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h 2007-03-26 22:15:28.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
@@ -85,14 +85,14 @@
__typeof (*(mem)) __tmp; \
__typeof (mem) __memp = (mem); \
@@ -151,9 +151,9 @@ diff -durN glibc-2.12.1.orig/sysdeps/powerpc/bits/atomic.h glibc-2.12.1/sysdeps/
: "cr0", "memory"); \
__val; \
})
-diff -durN glibc-2.12.1.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.12.1/sysdeps/powerpc/powerpc32/bits/atomic.h
---- glibc-2.12.1.orig/sysdeps/powerpc/powerpc32/bits/atomic.h 2007-03-26 22:15:45.000000000 +0200
-+++ glibc-2.12.1/sysdeps/powerpc/powerpc32/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h 2007-03-26 22:15:45.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
@@ -44,14 +44,14 @@
({ \
unsigned int __tmp; \
@@ -192,9 +192,9 @@ diff -durN glibc-2.12.1.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.12.
: "cr0", "memory"); \
__tmp != 0; \
})
-diff -durN glibc-2.12.1.orig/sysdeps/powerpc/powerpc64/bits/atomic.h glibc-2.12.1/sysdeps/powerpc/powerpc64/bits/atomic.h
---- glibc-2.12.1.orig/sysdeps/powerpc/powerpc64/bits/atomic.h 2007-03-26 22:16:03.000000000 +0200
-+++ glibc-2.12.1/sysdeps/powerpc/powerpc64/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h 2007-03-26 22:16:03.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
@@ -44,14 +44,14 @@
({ \
unsigned int __tmp, __tmp2; \
diff --git a/patches/glibc/ports-2.12.2/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch b/patches/glibc/ports-2.14.1/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
index fc42a92..5e45682 100644
--- a/patches/glibc/ports-2.12.2/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
+++ b/patches/glibc/ports-2.14.1/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
@@ -1,9 +1,9 @@
http://yann.poupet.free.fr/ep93xx/
Add support for the Maverick Crunch FPU on Cirrus EP93XX processor series
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/bits/endian.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/bits/endian.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/bits/endian.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/bits/endian.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/bits/endian.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/bits/endian.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/bits/endian.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/bits/endian.h 2009-11-13 00:51:22.000000000 +0100
@@ -12,7 +12,7 @@
/* FPA floating point units are always big-endian, irrespective of the
CPU endianness. VFP floating point units use the same endianness
@@ -13,9 +13,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/bits/endian.h glibc-
#define __FLOAT_WORD_ORDER __BYTE_ORDER
#else
#define __FLOAT_WORD_ORDER __BIG_ENDIAN
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/__longjmp.S glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/__longjmp.S
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/__longjmp.S 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/__longjmp.S 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/__longjmp.S glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/__longjmp.S
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/__longjmp.S 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/__longjmp.S 2009-11-13 00:51:22.000000000 +0100
@@ -30,7 +30,33 @@
movs r0, r1 /* get the return value in place */
moveq r0, #1 /* can't let setjmp() return zero! */
@@ -50,9 +50,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/__longjmp.S glib
LOADREGS(ia, ip, {v1-v6, sl, fp, sp, pc})
END (__longjmp)
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/fenv.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/fenv.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/fenv.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/fenv.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/fenv.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/fenv.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/fenv.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/fenv.h 2009-11-13 00:51:22.000000000 +0100
@@ -20,6 +20,45 @@
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
#endif
@@ -108,9 +108,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/fenv.h glib
/* Type representing exception flags. */
typedef unsigned long int fexcept_t;
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/setjmp.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/setjmp.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/setjmp.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/setjmp.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/setjmp.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/setjmp.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/setjmp.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/bits/setjmp.h 2009-11-13 00:51:22.000000000 +0100
@@ -28,7 +28,11 @@
#ifndef _ASM
/* Jump buffer contains v1-v6, sl, fp, sp and pc. Other registers are not
@@ -123,9 +123,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/bits/setjmp.h gl
+#endif
#endif
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fegetround.c glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/fegetround.c
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fegetround.c 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/fegetround.c 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/fegetround.c glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/fegetround.c
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/fegetround.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/fegetround.c 2009-11-13 00:51:22.000000000 +0100
@@ -18,9 +18,21 @@
02111-1307 USA. */
@@ -148,9 +148,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fegetround.c gli
+
+#endif
}
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fesetround.c glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/fesetround.c
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fesetround.c 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/fesetround.c 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/fesetround.c glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/fesetround.c
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/fesetround.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/fesetround.c 2009-11-13 00:51:22.000000000 +0100
@@ -18,12 +18,28 @@
02111-1307 USA. */
@@ -180,9 +180,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fesetround.c gli
}
libm_hidden_def (fesetround)
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fpu_control.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/fpu_control.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/fpu_control.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/fpu_control.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/fpu_control.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/fpu_control.h 2009-11-13 00:51:22.000000000 +0100
@@ -1,5 +1,6 @@
/* FPU control word definitions. ARM version.
- Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
@@ -278,9 +278,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/fpu_control.h gl
+#endif
+
#endif /* _FPU_CONTROL_H */
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/jmpbuf-offsets.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/jmpbuf-offsets.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-11-13 00:51:22.000000000 +0100
@@ -17,4 +17,8 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
@@ -290,9 +290,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/jmpbuf-offsets.h
+#else
#define __JMP_BUF_SP 20
+#endif
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/setjmp.S glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/setjmp.S
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/setjmp.S 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/fpu/setjmp.S 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/setjmp.S glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/setjmp.S
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/fpu/setjmp.S 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/fpu/setjmp.S 2009-11-13 00:51:22.000000000 +0100
@@ -24,11 +24,41 @@
ENTRY (__sigsetjmp)
@@ -335,9 +335,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/fpu/setjmp.S glibc-2
/* Make a tail call to __sigjmp_save; it takes the same args. */
B PLTJMP(C_SYMBOL_NAME(__sigjmp_save))
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/gccframe.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/gccframe.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/gccframe.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/gccframe.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/gccframe.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/gccframe.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/gccframe.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/gccframe.h 2009-11-13 00:51:22.000000000 +0100
@@ -17,6 +17,10 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
@@ -349,9 +349,9 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/gccframe.h glibc-2.1
+#endif
#include <sysdeps/generic/gccframe.h>
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/gmp-mparam.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/gmp-mparam.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/gmp-mparam.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/arm/gmp-mparam.h 2009-11-13 00:51:22.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/gmp-mparam.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/gmp-mparam.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/arm/gmp-mparam.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/arm/gmp-mparam.h 2009-11-13 00:51:22.000000000 +0100
@@ -29,7 +29,7 @@
#if defined(__ARMEB__)
# define IEEE_DOUBLE_MIXED_ENDIAN 0
@@ -361,14 +361,14 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/arm/gmp-mparam.h glibc-2
# define IEEE_DOUBLE_MIXED_ENDIAN 0
# define IEEE_DOUBLE_BIG_ENDIAN 0
#else
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/bits/endian.h glibc-2.12.1/ports/sysdeps/arm/bits/endian.h
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/__longjmp.S glibc-2.12.1/ports/sysdeps/arm/fpu/__longjmp.S
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/bits/fenv.h glibc-2.12.1/ports/sysdeps/arm/fpu/bits/fenv.h
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/bits/setjmp.h glibc-2.12.1/ports/sysdeps/arm/fpu/bits/setjmp.h
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/fegetround.c glibc-2.12.1/ports/sysdeps/arm/fpu/fegetround.c
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/fesetround.c glibc-2.12.1/ports/sysdeps/arm/fpu/fesetround.c
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/fpu_control.h glibc-2.12.1/ports/sysdeps/arm/fpu/fpu_control.h
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.12.1/ports/sysdeps/arm/fpu/jmpbuf-offsets.h
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/fpu/setjmp.S glibc-2.12.1/ports/sysdeps/arm/fpu/setjmp.S
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/gccframe.h glibc-2.12.1/ports/sysdeps/arm/gccframe.h
-diff -durN glibc-2.12.1.orig/ports/sysdeps/arm/gmp-mparam.h glibc-2.12.1/ports/sysdeps/arm/gmp-mparam.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/bits/endian.h glibc-2.14.1/ports/sysdeps/arm/bits/endian.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/__longjmp.S glibc-2.14.1/ports/sysdeps/arm/fpu/__longjmp.S
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/bits/fenv.h glibc-2.14.1/ports/sysdeps/arm/fpu/bits/fenv.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/bits/setjmp.h glibc-2.14.1/ports/sysdeps/arm/fpu/bits/setjmp.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/fegetround.c glibc-2.14.1/ports/sysdeps/arm/fpu/fegetround.c
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/fesetround.c glibc-2.14.1/ports/sysdeps/arm/fpu/fesetround.c
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/fpu_control.h glibc-2.14.1/ports/sysdeps/arm/fpu/fpu_control.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.14.1/ports/sysdeps/arm/fpu/jmpbuf-offsets.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/fpu/setjmp.S glibc-2.14.1/ports/sysdeps/arm/fpu/setjmp.S
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/gccframe.h glibc-2.14.1/ports/sysdeps/arm/gccframe.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/arm/gmp-mparam.h glibc-2.14.1/ports/sysdeps/arm/gmp-mparam.h
diff --git a/patches/glibc/ports-2.12.2/580-nptl-lowlevellock.patch b/patches/glibc/ports-2.14.1/580-nptl-lowlevellock.patch
index c243a76..6bf5250 100644
--- a/patches/glibc/ports-2.12.2/580-nptl-lowlevellock.patch
+++ b/patches/glibc/ports-2.14.1/580-nptl-lowlevellock.patch
@@ -9,9 +9,9 @@ In file included from ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c:21:
../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: for each function it appears in.)
../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'header' undeclared (first use in this function)
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-11-13 00:51:23.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-11-13 00:51:23.000000000 +0100
@@ -25,6 +25,7 @@
#include <atomic.h>
#include <sysdep.h>
@@ -20,4 +20,4 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/unix/sysv/linux/arm/nptl
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
-diff -durN glibc-2.12.1.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.12.1/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.14.1/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
diff --git a/patches/glibc/ports-2.12.2/610-fpu-cw-mips.patch b/patches/glibc/ports-2.14.1/610-fpu-cw-mips.patch
index 7d990de..e53ac78 100644
--- a/patches/glibc/ports-2.12.2/610-fpu-cw-mips.patch
+++ b/patches/glibc/ports-2.14.1/610-fpu-cw-mips.patch
@@ -1,8 +1,8 @@
http://sourceware.org/ml/libc-alpha/2002-10/msg00392.html
-diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/mips/fpu_control.h glibc-2.12.1/glibc-ports-2.12.1/sysdeps/mips/fpu_control.h
---- glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/mips/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
-+++ glibc-2.12.1/glibc-ports-2.12.1/sysdeps/mips/fpu_control.h 2009-11-13 00:51:31.000000000 +0100
+diff -durN glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/mips/fpu_control.h glibc-2.14.1/glibc-ports-2.14.1/sysdeps/mips/fpu_control.h
+--- glibc-2.14.1.orig/glibc-ports-2.14.1/sysdeps/mips/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14.1/glibc-ports-2.14.1/sysdeps/mips/fpu_control.h 2009-11-13 00:51:31.000000000 +0100
@@ -86,7 +86,7 @@
#define _FPU_RC_UP 0x2
#define _FPU_RC_DOWN 0x3
@@ -12,4 +12,4 @@ diff -durN glibc-2.12.1.orig/glibc-ports-2.12.1/sysdeps/mips/fpu_control.h glibc
/* The fdlibm code requires strict IEEE double precision arithmetic,
-diff -durN glibc-2.12.1.orig/ports/sysdeps/mips/fpu_control.h glibc-2.12.1/ports/sysdeps/mips/fpu_control.h
+diff -durN glibc-2.14.1.orig/ports/sysdeps/mips/fpu_control.h glibc-2.14.1/ports/sysdeps/mips/fpu_control.h
diff --git a/patches/glibc/ports-2.12.2/630-mips_shn_undef-hack.patch b/patches/glibc/ports-2.14.1/630-mips_shn_undef-hack.patch
index f6a5eb6..791d76c 100644
--- a/patches/glibc/ports-2.12.2/630-mips_shn_undef-hack.patch
+++ b/patches/glibc/ports-2.14.1/630-mips_shn_undef-hack.patch
@@ -1,6 +1,6 @@
-diff -durN glibc-2.12.1.orig/elf/dl-lookup.c glibc-2.12.1/elf/dl-lookup.c
---- glibc-2.12.1.orig/elf/dl-lookup.c 2009-03-30 23:14:32.000000000 +0200
-+++ glibc-2.12.1/elf/dl-lookup.c 2009-11-13 00:51:36.000000000 +0100
+diff -durN glibc-2.13.orig/elf/dl-lookup.c glibc-2.13/elf/dl-lookup.c
+--- glibc-2.13.orig/elf/dl-lookup.c 2009-03-30 23:14:32.000000000 +0200
++++ glibc-2.13/elf/dl-lookup.c 2009-11-13 00:51:36.000000000 +0100
@@ -301,6 +301,12 @@
/* FALLTHROUGH */
case STB_GLOBAL:
diff --git a/patches/glibc/ports-2.12.2/640-alpha-atfcts.patch b/patches/glibc/ports-2.14.1/640-alpha-atfcts.patch
index 90a9d0d..7a8a94a 100644
--- a/patches/glibc/ports-2.12.2/640-alpha-atfcts.patch
+++ b/patches/glibc/ports-2.14.1/640-alpha-atfcts.patch
@@ -1,5 +1,5 @@
---- glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h 2010-07-27 14:34:39.000000000 +0300
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/kernel-features.h.new 2011-03-10 18:54:37.686795979 +0200
+--- glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2010-07-27 14:34:39.000000000 +0300
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h.new 2011-03-10 18:54:37.686795979 +0200
@@ -437,7 +437,8 @@
the code. On PPC they were introduced in 2.6.17-rc1,
on SH in 2.6.19-rc1. */
diff --git a/patches/glibc/ports-2.12.2/650-syslog.patch b/patches/glibc/ports-2.14.1/650-syslog.patch
index c20cafc..c20cafc 100644
--- a/patches/glibc/ports-2.12.2/650-syslog.patch
+++ b/patches/glibc/ports-2.14.1/650-syslog.patch
diff --git a/patches/glibc/ports-2.12.2/660-debug-readlink_chk-readklinkat_chk.patch b/patches/glibc/ports-2.14.1/660-debug-readlink_chk-readklinkat_chk.patch
index a5a7052..a5a7052 100644
--- a/patches/glibc/ports-2.12.2/660-debug-readlink_chk-readklinkat_chk.patch
+++ b/patches/glibc/ports-2.14.1/660-debug-readlink_chk-readklinkat_chk.patch
diff --git a/patches/glibc/ports-2.14/090-Fix-ARM-build-with-GCC-trunk.patch b/patches/glibc/ports-2.14/090-Fix-ARM-build-with-GCC-trunk.patch
new file mode 100644
index 0000000..1a632fe
--- /dev/null
+++ b/patches/glibc/ports-2.14/090-Fix-ARM-build-with-GCC-trunk.patch
@@ -0,0 +1,72 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+index bff3e2b..1f1eb71 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
diff --git a/patches/glibc/ports-2.14/100-respect-env-CPPFLAGS.patch b/patches/glibc/ports-2.14/100-respect-env-CPPFLAGS.patch
new file mode 100644
index 0000000..3798cb2
--- /dev/null
+++ b/patches/glibc/ports-2.14/100-respect-env-CPPFLAGS.patch
@@ -0,0 +1,14 @@
+Respect environment CPPFLAGS when we run ./configure so we can inject
+random -D things without having to set CFLAGS/ASFLAGS
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-05-09 23:57:56.000000000 +0200
++++ glibc-2.13/Makeconfig 2009-11-13 00:49:41.000000000 +0100
+@@ -697,6 +697,7 @@
+ $(foreach lib,$(libof-$(basename $(@F))) \
+ $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
+ $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
++CPPFLAGS += $(CPPFLAGS-config)
+ override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) \
+ $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+ $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
diff --git a/patches/glibc/ports-2.14/120-i386-x86_64-revert-clone-cfi.patch b/patches/glibc/ports-2.14/120-i386-x86_64-revert-clone-cfi.patch
new file mode 100644
index 0000000..c7f6182
--- /dev/null
+++ b/patches/glibc/ports-2.14/120-i386-x86_64-revert-clone-cfi.patch
@@ -0,0 +1,55 @@
+revert cfi additions to clone on i386/x86_64 to workaround problems in
+gcc's unwinder code. this is not a bug in glibc, it triggers problems
+elsewhere. this cfi code does not gain us a whole lot anyways.
+
+http://gcc.gnu.org/ml/gcc/2006-12/msg00293.html
+
+Index: sysdeps/unix/sysv/linux/i386/clone.S
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/clone.S,v
+retrieving revision 1.27
+retrieving revision 1.26
+diff -u -p -r1.27 -r1.26
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S 2009-11-13 00:49:45.000000000 +0100
+@@ -120,9 +120,6 @@
+ ret
+
+ L(thread_start):
+- cfi_startproc;
+- /* Clearing frame pointer is insufficient, use CFI. */
+- cfi_undefined (eip);
+ /* Note: %esi is zero. */
+ movl %esi,%ebp /* terminate the stack frame */
+ #ifdef RESET_PID
+@@ -155,7 +152,6 @@
+ jmp L(haspid)
+ .previous
+ #endif
+- cfi_endproc;
+
+ cfi_startproc
+ PSEUDO_END (BP_SYM (__clone))
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S 2009-11-13 00:49:45.000000000 +0100
+@@ -89,9 +89,6 @@
+ ret
+
+ L(thread_start):
+- cfi_startproc;
+- /* Clearing frame pointer is insufficient, use CFI. */
+- cfi_undefined (rip);
+ /* Clear the frame pointer. The ABI suggests this be done, to mark
+ the outermost frame obviously. */
+ xorl %ebp, %ebp
+@@ -116,7 +113,6 @@
+ /* Call exit with return value from function call. */
+ movq %rax, %rdi
+ call HIDDEN_JUMPTARGET (_exit)
+- cfi_endproc;
+
+ cfi_startproc;
+ PSEUDO_END (BP_SYM (__clone))
diff --git a/patches/glibc/ports-2.14/140-disable-ldconfig.patch b/patches/glibc/ports-2.14/140-disable-ldconfig.patch
new file mode 100644
index 0000000..378e1df
--- /dev/null
+++ b/patches/glibc/ports-2.14/140-disable-ldconfig.patch
@@ -0,0 +1,16 @@
+do not bother running ldconfig on DESTDIR. it wants to write the temp cache
+file outside of the chroot. doesnt matter anyways as we wont use the cache
+results (portage will rebuild cache), so running ldconfig is simply a waste
+of time.
+
+diff -durN glibc-2.13.orig/Makefile glibc-2.13/Makefile
+--- glibc-2.13.orig/Makefile 2009-04-23 20:23:03.000000000 +0200
++++ glibc-2.13/Makefile 2009-11-13 00:49:49.000000000 +0100
+@@ -116,6 +116,7 @@
+ rm -f $(symbolic-link-list)
+
+ install:
++dont-bother-with-destdir:
+ -test ! -x $(common-objpfx)elf/ldconfig || LC_ALL=C LANGUAGE=C \
+ $(common-objpfx)elf/ldconfig $(addprefix -r ,$(install_root)) \
+ $(slibdir) $(libdir)
diff --git a/patches/glibc/ports-2.14/150-queue-header-updates.patch b/patches/glibc/ports-2.14/150-queue-header-updates.patch
new file mode 100644
index 0000000..7cbe70e
--- /dev/null
+++ b/patches/glibc/ports-2.14/150-queue-header-updates.patch
@@ -0,0 +1,85 @@
+grab some updates from FreeBSD
+
+http://bugs.gentoo.org/201979
+
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+--- glibc-2.13.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100
++++ glibc-2.13/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100
+@@ -136,6 +136,11 @@
+ (var); \
+ (var) = ((var)->field.le_next))
+
++#define LIST_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = LIST_FIRST((head)); \
++ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ /*
+ * List access methods.
+ */
+@@ -197,6 +202,16 @@
+ #define SLIST_FOREACH(var, head, field) \
+ for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
+
++#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = SLIST_FIRST((head)); \
++ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
++ (var) = (tvar))
++
++#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
++ for ((varp) = &SLIST_FIRST((head)); \
++ ((var) = *(varp)) != NULL; \
++ (varp) = &SLIST_NEXT((var), field))
++
+ /*
+ * Singly-linked List access methods.
+ */
+@@ -242,6 +257,12 @@
+ (head)->stqh_last = &(elm)->field.stqe_next; \
+ } while (/*CONSTCOND*/0)
+
++#define STAILQ_LAST(head, type, field) \
++ (STAILQ_EMPTY((head)) ? \
++ NULL : \
++ ((struct type *)(void *) \
++ ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
++
+ #define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
+ (head)->stqh_last = &(elm)->field.stqe_next; \
+@@ -271,6 +292,11 @@
+ (var); \
+ (var) = ((var)->field.stqe_next))
+
++#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = STAILQ_FIRST((head)); \
++ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ #define STAILQ_CONCAT(head1, head2) do { \
+ if (!STAILQ_EMPTY((head2))) { \
+ *(head1)->stqh_last = (head2)->stqh_first; \
+@@ -437,11 +463,21 @@
+ (var); \
+ (var) = ((var)->field.tqe_next))
+
++#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = TAILQ_FIRST((head)); \
++ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \
+ (var); \
+ (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
+
++#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
++ for ((var) = TAILQ_LAST((head), headname); \
++ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
++ (var) = (tvar))
++
+ #define TAILQ_CONCAT(head1, head2, field) do { \
+ if (!TAILQ_EMPTY(head2)) { \
+ *(head1)->tqh_last = (head2)->tqh_first; \
diff --git a/patches/glibc/ports-2.14/160-manual-no-perl.patch b/patches/glibc/ports-2.14/160-manual-no-perl.patch
new file mode 100644
index 0000000..5e2b807
--- /dev/null
+++ b/patches/glibc/ports-2.14/160-manual-no-perl.patch
@@ -0,0 +1,24 @@
+If we're using a cvs snapshot which updates the source files, and
+perl isn't installed yet, then we can't regen the docs. Not a big
+deal, so just whine a little and continue on our merry way.
+
+http://bugs.gentoo.org/60132
+
+diff -durN glibc-2.13.orig/manual/Makefile glibc-2.13/manual/Makefile
+--- glibc-2.13.orig/manual/Makefile 2006-01-08 07:43:47.000000000 +0100
++++ glibc-2.13/manual/Makefile 2009-11-13 00:49:54.000000000 +0100
+@@ -104,9 +104,14 @@
+ libm-err.texi: stamp-libm-err
+ stamp-libm-err: libm-err-tab.pl $(wildcard $(foreach dir,$(sysdirs),\
+ $(dir)/libm-test-ulps))
++ifneq ($(PERL),no)
+ pwd=`pwd`; \
+ $(PERL) $< $$pwd/.. > libm-err-tmp
+ $(move-if-change) libm-err-tmp libm-err.texi
++else
++ echo "Unable to rebuild math docs, no perl installed"
++ touch libm-err.texi
++endif
+ touch $@
+
+ # Generate Texinfo files from the C source for the example programs.
diff --git a/patches/glibc/ports-2.14/170-localedef-fix-trampoline.patch b/patches/glibc/ports-2.14/170-localedef-fix-trampoline.patch
new file mode 100644
index 0000000..4784a07
--- /dev/null
+++ b/patches/glibc/ports-2.14/170-localedef-fix-trampoline.patch
@@ -0,0 +1,69 @@
+#! /bin/sh -e
+
+# DP: Description: Fix localedef segfault when run under exec-shield,
+# PaX or similar. (#231438, #198099)
+# DP: Dpatch Author: James Troup <james@nocrew.org>
+# DP: Patch Author: (probably) Jakub Jelinek <jakub@redhat.com>
+# DP: Upstream status: Unknown
+# DP: Status Details: Unknown
+# DP: Date: 2004-03-16
+
+if [ $# -ne 2 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch) patch -d "$2" -f --no-backup-if-mismatch -p1 < $0;;
+ -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p1 < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+diff -durN glibc-2.13.orig/locale/programs/3level.h glibc-2.13/locale/programs/3level.h
+--- glibc-2.13.orig/locale/programs/3level.h 2007-07-16 02:54:59.000000000 +0200
++++ glibc-2.13/locale/programs/3level.h 2009-11-13 00:49:56.000000000 +0100
+@@ -203,6 +203,42 @@
+ }
+ }
+ }
++
++/* GCC ATM seems to do a poor job with pointers to nested functions passed
++ to inlined functions. Help it a little bit with this hack. */
++#define wchead_table_iterate(tp, fn) \
++do \
++ { \
++ struct wchead_table *t = (tp); \
++ uint32_t index1; \
++ for (index1 = 0; index1 < t->level1_size; index1++) \
++ { \
++ uint32_t lookup1 = t->level1[index1]; \
++ if (lookup1 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup1_shifted = lookup1 << t->q; \
++ uint32_t index2; \
++ for (index2 = 0; index2 < (1 << t->q); index2++) \
++ { \
++ uint32_t lookup2 = t->level2[index2 + lookup1_shifted]; \
++ if (lookup2 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup2_shifted = lookup2 << t->p; \
++ uint32_t index3; \
++ for (index3 = 0; index3 < (1 << t->p); index3++) \
++ { \
++ struct element_t *lookup3 \
++ = t->level3[index3 + lookup2_shifted]; \
++ if (lookup3 != NULL) \
++ fn ((((index1 << t->q) + index2) << t->p) + index3, \
++ lookup3); \
++ } \
++ } \
++ } \
++ } \
++ } \
++ } while (0)
++
+ #endif
+
+ #ifndef NO_FINALIZE
diff --git a/patches/glibc/ports-2.14/180-resolv-dynamic.patch b/patches/glibc/ports-2.14/180-resolv-dynamic.patch
new file mode 100644
index 0000000..e916bce
--- /dev/null
+++ b/patches/glibc/ports-2.14/180-resolv-dynamic.patch
@@ -0,0 +1,39 @@
+ripped from SuSE
+
+if /etc/resolv.conf is updated, then make sure applications
+already running get the updated information.
+
+http://bugs.gentoo.org/177416
+
+diff -durN glibc-2.13.orig/resolv/res_libc.c glibc-2.13/resolv/res_libc.c
+--- glibc-2.13.orig/resolv/res_libc.c 2009-02-07 05:27:42.000000000 +0100
++++ glibc-2.13/resolv/res_libc.c 2009-11-13 00:49:59.000000000 +0100
+@@ -22,6 +22,7 @@
+ #include <arpa/nameser.h>
+ #include <resolv.h>
+ #include <bits/libc-lock.h>
++#include <sys/stat.h>
+
+
+ /* The following bit is copied from res_data.c (where it is #ifdef'ed
+@@ -95,6 +96,20 @@
+ __res_maybe_init (res_state resp, int preinit)
+ {
+ if (resp->options & RES_INIT) {
++ static time_t last_mtime, last_check;
++ time_t now;
++ struct stat statbuf;
++
++ time (&now);
++ if (now != last_check) {
++ last_check = now;
++ if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) {
++ last_mtime = statbuf.st_mtime;
++ atomicinclock (lock);
++ atomicinc (__res_initstamp);
++ atomicincunlock (lock);
++ }
++ }
+ if (__res_initstamp != resp->_u._ext.initstamp) {
+ if (resp->nscount > 0)
+ __res_iclose (resp, true);
diff --git a/patches/glibc/ports-2.14/190-localedef-mmap.patch b/patches/glibc/ports-2.14/190-localedef-mmap.patch
new file mode 100644
index 0000000..f3914cd
--- /dev/null
+++ b/patches/glibc/ports-2.14/190-localedef-mmap.patch
@@ -0,0 +1,39 @@
+sniped from Debian
+http://bugs.gentoo.org/289615
+
+2009-10-27 Aurelien Jarno <aurelien@aurel32.net>
+
+ * locale/programs/locarchive.c: use MMAP_SHARED to reserve memory
+ used later with MMAP_FIXED | MMAP_SHARED to cope with different
+ alignment restrictions.
+
+diff -durN glibc-2.13.orig/locale/programs/locarchive.c glibc-2.13/locale/programs/locarchive.c
+--- glibc-2.13.orig/locale/programs/locarchive.c 2009-04-27 16:07:47.000000000 +0200
++++ glibc-2.13/locale/programs/locarchive.c 2009-11-13 00:50:01.000000000 +0100
+@@ -134,7 +134,7 @@
+ size_t reserved = RESERVE_MMAP_SIZE;
+ int xflags = 0;
+ if (total < reserved
+- && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
++ && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
+ -1, 0)) != MAP_FAILED))
+ xflags = MAP_FIXED;
+ else
+@@ -396,7 +396,7 @@
+ size_t reserved = RESERVE_MMAP_SIZE;
+ int xflags = 0;
+ if (total < reserved
+- && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
++ && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
+ -1, 0)) != MAP_FAILED))
+ xflags = MAP_FIXED;
+ else
+@@ -614,7 +614,7 @@
+ int xflags = 0;
+ void *p;
+ if (st.st_size < reserved
+- && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
++ && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
+ -1, 0)) != MAP_FAILED))
+ xflags = MAP_FIXED;
+ else
diff --git a/patches/glibc/ports-2.14/200-fadvise64_64.patch b/patches/glibc/ports-2.14/200-fadvise64_64.patch
new file mode 100644
index 0000000..71bca38
--- /dev/null
+++ b/patches/glibc/ports-2.14/200-fadvise64_64.patch
@@ -0,0 +1,28 @@
+ripped from Debian
+
+ sysdeps/unix/sysv/linux/posix_fadvise.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c 2003-08-17 02:36:22.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c 2009-11-13 00:50:03.000000000 +0100
+@@ -35,6 +35,19 @@
+ return INTERNAL_SYSCALL_ERRNO (ret, err);
+ return 0;
+ #else
++# ifdef __NR_fadvise64_64
++ INTERNAL_SYSCALL_DECL (err);
++ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
++ __LONG_LONG_PAIR ((long) (offset >> 31),
++ (long) offset),
++ __LONG_LONG_PAIR ((long) (len >> 31),
++ (long) len),
++ advise);
++ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
++# else
+ return ENOSYS;
++# endif
+ #endif
+ }
diff --git a/patches/glibc/ports-2.14/220-section-comments.patch b/patches/glibc/ports-2.14/220-section-comments.patch
new file mode 100644
index 0000000..d717829
--- /dev/null
+++ b/patches/glibc/ports-2.14/220-section-comments.patch
@@ -0,0 +1,24 @@
+http://sources.redhat.com/ml/binutils/2004-04/msg00665.html
+
+fixes building on some architectures (like m68k/arm/cris/etc...) because
+it does the right thing
+
+diff -durN glibc-2.13.orig/include/libc-symbols.h glibc-2.13/include/libc-symbols.h
+--- glibc-2.13.orig/include/libc-symbols.h 2009-03-14 00:51:46.000000000 +0100
++++ glibc-2.13/include/libc-symbols.h 2009-11-13 00:50:07.000000000 +0100
+@@ -239,12 +239,12 @@
+ # define __make_section_unallocated(section_string)
+ # endif
+
+-/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
++/* Tacking on "\n#APP\n\t#" to the section name makes gcc put it's bogus
+ section attributes on what looks like a comment to the assembler. */
+ # ifdef HAVE_SECTION_QUOTES
+-# define __sec_comment "\"\n\t#\""
++# define __sec_comment "\"\n#APP\n\t#\""
+ # else
+-# define __sec_comment "\n\t#"
++# define __sec_comment "\n#APP\n\t#"
+ # endif
+ # define link_warning(symbol, msg) \
+ __make_section_unallocated (".gnu.warning." #symbol) \
diff --git a/patches/glibc/ports-2.14/230-no-inline-gmon.patch b/patches/glibc/ports-2.14/230-no-inline-gmon.patch
new file mode 100644
index 0000000..fa33c2b
--- /dev/null
+++ b/patches/glibc/ports-2.14/230-no-inline-gmon.patch
@@ -0,0 +1,36 @@
+http://bugs.gentoo.org/196245
+http://sourceware.org/ml/libc-alpha/2006-05/msg00017.html
+
+Attached is a patch to add __attribute__ ((noinline)) to
+call_gmon_start.
+
+Without this patch, the sec script that processed initfini.s removes a
+part of inlined call_gmon_start, causing undefined label errors.
+
+This patch solves the problem by forcing gcc not to inline
+call_gmon_start with __attribute__ ((noinline)).
+
+Tested by building for arm-none-lixux-gnueabi. OK to apply?
+
+Kazu Hirata
+
+2006-05-07 Kazu Hirata &lt;kazu@codesourcery.com&gt;
+
+ * sysdeps/generic/initfini.c (call_gmon_start): Add
+ __attribute__ ((noinline)).
+
+Index: sysdeps/generic/initfini.c
+===================================================================
+
+diff -durN glibc-2.13.orig/sysdeps/generic/initfini.c glibc-2.13/sysdeps/generic/initfini.c
+--- glibc-2.13.orig/sysdeps/generic/initfini.c 2007-06-17 20:02:40.000000000 +0200
++++ glibc-2.13/sysdeps/generic/initfini.c 2009-11-13 00:50:09.000000000 +0100
+@@ -70,7 +70,7 @@
+ /* The beginning of _init: */
+ asm ("\n/*@_init_PROLOG_BEGINS*/");
+
+-static void
++static void __attribute__ ((noinline))
+ call_gmon_start(void)
+ {
+ extern void __gmon_start__ (void) __attribute__ ((weak)); /*weak_extern (__gmon_start__);*/
diff --git a/patches/glibc/ports-2.12.2/240-check_native-headers.patch b/patches/glibc/ports-2.14/240-check_native-headers.patch
index de0cb5b..c936f71 100644
--- a/patches/glibc/ports-2.12.2/240-check_native-headers.patch
+++ b/patches/glibc/ports-2.14/240-check_native-headers.patch
@@ -4,9 +4,9 @@ many ports hit this warning:
snipped from suse
-diff -durN glibc-2.12.1.orig/sysdeps/unix/sysv/linux/check_native.c glibc-2.12.1/sysdeps/unix/sysv/linux/check_native.c
---- glibc-2.12.1.orig/sysdeps/unix/sysv/linux/check_native.c 2007-11-24 04:12:17.000000000 +0100
-+++ glibc-2.12.1/sysdeps/unix/sysv/linux/check_native.c 2009-11-13 00:50:11.000000000 +0100
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/check_native.c glibc-2.13/sysdeps/unix/sysv/linux/check_native.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/check_native.c 2007-11-24 04:12:17.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/check_native.c 2009-11-13 00:50:11.000000000 +0100
@@ -23,6 +23,7 @@
#include <stddef.h>
#include <stdint.h>
diff --git a/patches/glibc/ports-2.14/260-assume-pipe2.patch b/patches/glibc/ports-2.14/260-assume-pipe2.patch
new file mode 100644
index 0000000..42e8f4e
--- /dev/null
+++ b/patches/glibc/ports-2.14/260-assume-pipe2.patch
@@ -0,0 +1,40 @@
+http://bugs.gentoo.org/250342
+http://sources.redhat.com/bugzilla/show_bug.cgi?id=9685
+
+we cant assume sock_cloexec and pipe2 are bound together as the former defines
+are found in glibc only while the latter are a combo of kernel headers and
+glibc. so if we do a runtime detection of SOCK_CLOEXEC, but pipe2() is a stub
+inside of glibc, we hit a problem. for example:
+
+#include <grp.h>
+#include <stdio.h>
+main()
+{
+ getgrnam("portage");
+ if (!popen("ls", "r"))
+ perror("popen()");
+}
+
+getgrnam() will detect that the kernel supports SOCK_CLOEXEC and then set both
+__have_sock_cloexec and __have_pipe2 to true. but if glibc was built against
+older kernel headers where __NR_pipe2 does not exist, glibc will have a ENOSYS
+stub for it. so popen() will always fail as glibc assumes pipe2() works.
+
+diff -durN glibc-2.13.orig/socket/have_sock_cloexec.c glibc-2.13/socket/have_sock_cloexec.c
+--- glibc-2.13.orig/socket/have_sock_cloexec.c 2008-07-25 18:46:23.000000000 +0200
++++ glibc-2.13/socket/have_sock_cloexec.c 2009-11-13 00:50:15.000000000 +0100
+@@ -16,9 +16,14 @@
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
++#include <fcntl.h>
+ #include <sys/socket.h>
+ #include <kernel-features.h>
+
+ #if defined SOCK_CLOEXEC && !defined __ASSUME_SOCK_CLOEXEC
+ int __have_sock_cloexec;
+ #endif
++
++#if defined O_CLOEXEC && !defined __ASSUME_PIPE2
++int __have_pipe2;
++#endif
diff --git a/patches/glibc/ports-2.14/270-china.patch b/patches/glibc/ports-2.14/270-china.patch
new file mode 100644
index 0000000..41d7759
--- /dev/null
+++ b/patches/glibc/ports-2.14/270-china.patch
@@ -0,0 +1,32 @@
+
+
+diff -durN glibc-2.13.orig/localedata/locales/zh_TW glibc-2.13/localedata/locales/zh_TW
+--- glibc-2.13.orig/localedata/locales/zh_TW 2004-11-01 00:42:28.000000000 +0100
++++ glibc-2.13/localedata/locales/zh_TW 2009-11-13 00:50:17.000000000 +0100
+@@ -1,7 +1,7 @@
+ comment_char %
+ escape_char /
+ %
+-% Chinese language locale for Taiwan R.O.C.
++% Chinese language locale for Taiwan
+ % charmap: BIG5-CP950
+ %
+ % Original Author:
+@@ -17,7 +17,7 @@
+ % Reference: http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
+
+ LC_IDENTIFICATION
+-title "Chinese locale for Taiwan R.O.C."
++title "Chinese locale for Taiwan"
+ source ""
+ address ""
+ contact ""
+@@ -25,7 +25,7 @@
+ tel ""
+ fax ""
+ language "Chinese"
+-territory "Taiwan R.O.C."
++territory "Taiwan"
+ revision "0.2"
+ date "2000-08-02"
+ %
diff --git a/patches/glibc/ports-2.14/280-new-valencian-locale.patch b/patches/glibc/ports-2.14/280-new-valencian-locale.patch
new file mode 100644
index 0000000..4cdd108
--- /dev/null
+++ b/patches/glibc/ports-2.14/280-new-valencian-locale.patch
@@ -0,0 +1,115 @@
+http://bugs.gentoo.org/show_bug.cgi?id=131815
+http://sourceware.org/bugzilla/show_bug.cgi?id=2522
+
+diff -durN glibc-2.13.orig/localedata/SUPPORTED glibc-2.13/localedata/SUPPORTED
+--- glibc-2.13.orig/localedata/SUPPORTED 2009-04-18 10:43:52.000000000 +0200
++++ glibc-2.13/localedata/SUPPORTED 2009-11-13 00:50:20.000000000 +0100
+@@ -72,6 +72,8 @@
+ ca_ES.UTF-8/UTF-8 \
+ ca_ES/ISO-8859-1 \
+ ca_ES@euro/ISO-8859-15 \
++ca_ES.UTF-8@valencia/UTF-8 \
++ca_ES@valencia/ISO-8859-15 \
+ ca_FR.UTF-8/UTF-8 \
+ ca_FR/ISO-8859-15 \
+ ca_IT.UTF-8/UTF-8 \
+diff -durN glibc-2.13.orig/localedata/locales/ca_ES@valencia glibc-2.13/localedata/locales/ca_ES@valencia
+--- glibc-2.13.orig/localedata/locales/ca_ES@valencia 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/localedata/locales/ca_ES@valencia 2009-11-13 00:50:20.000000000 +0100
+@@ -0,0 +1,96 @@
++comment_char %
++escape_char /
++%
++% Valencian (southern Catalan) locale for Spain with Euro
++%
++% Note that this locale is almost the same as ca_ES@euro. The point of having
++% a separate locale is only for PO translations, which have a lot of social
++% support and are very appreciated by the Valencian-speaking community.
++%
++% Contact: Jordi Mallach
++% Email: jordi@gnu.org
++% Tel:
++% Fax:
++% Language: ca
++% Territory: ES
++% Option: euro
++% Revision: 1.0
++% Date: 2006-04-06
++% Application: general
++% Users: general
++% Repertoiremap: mnemonic,ds
++% Charset: ISO-8859-15
++% Distribution and use is free, also
++% for commercial purposes.
++
++LC_IDENTIFICATION
++title "Valencian (southern Catalan) locale for Spain with Euro"
++source ""
++address ""
++contact "Jordi Mallach"
++email "jordi@gnu.org"
++tel ""
++fax ""
++language "Catalan"
++territory "Spain"
++revision "1.0"
++date "2006-04-06"
++%
++category "ca_ES@valencia:2006";LC_IDENTIFICATION
++category "ca_ES@valencia:2006";LC_CTYPE
++category "ca_ES@valencia:2006";LC_COLLATE
++category "ca_ES@valencia:2006";LC_MONETARY
++category "ca_ES@valencia:2006";LC_NUMERIC
++category "ca_ES@valencia:2006";LC_TIME
++category "ca_ES@valencia:2006";LC_MESSAGES
++category "ca_ES@valencia:2006";LC_PAPER
++category "ca_ES@valencia:2006";LC_NAME
++category "ca_ES@valencia:2006";LC_ADDRESS
++category "ca_ES@valencia:2006";LC_TELEPHONE
++category "ca_ES@valencia:2006";LC_MEASUREMENT
++
++END LC_IDENTIFICATION
++
++LC_CTYPE
++copy "i18n"
++END LC_CTYPE
++
++LC_COLLATE
++copy "ca_ES"
++END LC_COLLATE
++
++LC_MONETARY
++copy "ca_ES"
++END LC_MONETARY
++
++LC_NUMERIC
++copy "ca_ES"
++END LC_NUMERIC
++
++LC_TIME
++copy "ca_ES"
++END LC_TIME
++
++LC_MESSAGES
++copy "ca_ES"
++END LC_MESSAGES
++
++LC_PAPER
++copy "ca_ES"
++END LC_PAPER
++
++LC_NAME
++copy "ca_ES"
++END LC_NAME
++
++LC_ADDRESS
++copy "ca_ES"
++END LC_ADDRESS
++
++LC_TELEPHONE
++copy "ca_ES"
++END LC_TELEPHONE
++
++LC_MEASUREMENT
++copy "ca_ES"
++END LC_MEASUREMENT
diff --git a/patches/glibc/ports-2.14/300-nscd-one-fork.patch b/patches/glibc/ports-2.14/300-nscd-one-fork.patch
new file mode 100644
index 0000000..adc9b3f
--- /dev/null
+++ b/patches/glibc/ports-2.14/300-nscd-one-fork.patch
@@ -0,0 +1,40 @@
+only fork one to assist in stop-start-daemon assumptions about daemon behavior
+
+http://bugs.gentoo.org/190785
+
+diff -durN glibc-2.13.orig/nscd/nscd.c glibc-2.13/nscd/nscd.c
+--- glibc-2.13.orig/nscd/nscd.c 2009-02-06 21:10:27.000000000 +0100
++++ glibc-2.13/nscd/nscd.c 2009-11-13 00:50:24.000000000 +0100
+@@ -182,6 +182,9 @@
+ if (pid != 0)
+ exit (0);
+
++ if (write_pid (_PATH_NSCDPID) < 0)
++ dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno));
++
+ int nullfd = open (_PATH_DEVNULL, O_RDWR);
+ if (nullfd != -1)
+ {
+@@ -231,12 +234,6 @@
+ for (i = min_close_fd; i < getdtablesize (); i++)
+ close (i);
+
+- pid = fork ();
+- if (pid == -1)
+- error (EXIT_FAILURE, errno, _("cannot fork"));
+- if (pid != 0)
+- exit (0);
+-
+ setsid ();
+
+ if (chdir ("/") != 0)
+@@ -245,9 +242,6 @@
+
+ openlog ("nscd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
+
+- if (write_pid (_PATH_NSCDPID) < 0)
+- dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno));
+-
+ if (!init_logfile ())
+ dbg_log (_("Could not create log file"));
+
diff --git a/patches/glibc/ports-2.14/310-hppa-nptl-carlos.patch b/patches/glibc/ports-2.14/310-hppa-nptl-carlos.patch
new file mode 100644
index 0000000..4c028b2
--- /dev/null
+++ b/patches/glibc/ports-2.14/310-hppa-nptl-carlos.patch
@@ -0,0 +1,246 @@
+
+
+diff -durN glibc-2.13.orig/elf/rtld.c glibc-2.13/elf/rtld.c
+--- glibc-2.13.orig/elf/rtld.c 2009-04-17 02:00:08.000000000 +0200
++++ glibc-2.13/elf/rtld.c 2009-11-13 00:50:26.000000000 +0100
+@@ -392,14 +392,14 @@
+ know it is available. We do not have to clear the memory if we
+ do not have to use the temporary bootstrap_map. Global variables
+ are initialized to zero by default. */
+-#ifndef DONT_USE_BOOTSTRAP_MAP
++#if !defined DONT_USE_BOOTSTRAP_MAP
+ # ifdef HAVE_BUILTIN_MEMSET
+ __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
+ # else
+- for (size_t cnt = 0;
+- cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
+- ++cnt)
+- bootstrap_map.l_info[cnt] = 0;
++ /* Clear the whole bootstrap_map structure */
++ for (char *cnt = (char *)&(bootstrap_map);
++ cnt < ((char *)&(bootstrap_map) + sizeof (bootstrap_map));
++ *cnt++ = '\0');
+ # endif
+ # if USE___THREAD
+ bootstrap_map.l_tls_modid = 0;
+diff -durN glibc-2.13.orig/include/atomic.h glibc-2.13/include/atomic.h
+--- glibc-2.13.orig/include/atomic.h 2009-02-09 00:49:53.000000000 +0100
++++ glibc-2.13/include/atomic.h 2009-11-13 00:50:26.000000000 +0100
+@@ -185,7 +185,7 @@
+ __typeof (*(mem)) __atg5_value = (newvalue); \
+ \
+ do \
+- __atg5_oldval = *__atg5_memp; \
++ __atg5_oldval = *(volatile __typeof (mem))__atg5_memp; \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg5_memp, __atg5_value, \
+ __atg5_oldval), 0)); \
+@@ -206,7 +206,7 @@
+ __typeof (*(mem)) __atg6_value = (value); \
+ \
+ do \
+- __atg6_oldval = *__atg6_memp; \
++ __atg6_oldval = *(volatile __typeof (mem))__atg6_memp; \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg6_memp, \
+ __atg6_oldval \
+@@ -224,7 +224,7 @@
+ __typeof (*(mem)) __atg7_value = (value); \
+ \
+ do \
+- __atg7_oldv = *__atg7_memp; \
++ __atg7_oldv = *(volatile __typeof (mem))__atg7_memp; \
+ while (__builtin_expect \
+ (catomic_compare_and_exchange_bool_acq (__atg7_memp, \
+ __atg7_oldv \
+@@ -242,7 +242,7 @@
+ __typeof (mem) __atg8_memp = (mem); \
+ __typeof (*(mem)) __atg8_value = (value); \
+ do { \
+- __atg8_oldval = *__atg8_memp; \
++ __atg8_oldval = *(volatile __typeof (mem))__atg8_memp; \
+ if (__atg8_oldval >= __atg8_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -259,7 +259,7 @@
+ __typeof (mem) __atg9_memp = (mem); \
+ __typeof (*(mem)) __atg9_value = (value); \
+ do { \
+- __atg9_oldv = *__atg9_memp; \
++ __atg9_oldv = *(volatile __typeof (mem))__atg9_memp; \
+ if (__atg9_oldv >= __atg9_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -277,7 +277,7 @@
+ __typeof (mem) __atg10_memp = (mem); \
+ __typeof (*(mem)) __atg10_value = (value); \
+ do { \
+- __atg10_oldval = *__atg10_memp; \
++ __atg10_oldval = *(volatile __typeof (mem))__atg10_memp; \
+ if (__atg10_oldval <= __atg10_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -361,7 +361,7 @@
+ \
+ do \
+ { \
+- __atg11_oldval = *__atg11_memp; \
++ __atg11_oldval = *(volatile __typeof (mem))__atg11_memp; \
+ if (__builtin_expect (__atg11_oldval <= 0, 0)) \
+ break; \
+ } \
+@@ -400,7 +400,7 @@
+ __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit)); \
+ \
+ do \
+- __atg14_old = (*__atg14_memp); \
++ __atg14_old = (*(volatile __typeof (mem))__atg14_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg14_memp, \
+ __atg14_old | __atg14_mask,\
+@@ -418,7 +418,7 @@
+ __typeof (*(mem)) __atg15_mask = (mask); \
+ \
+ do \
+- __atg15_old = (*__atg15_memp); \
++ __atg15_old = (*(volatile __typeof (mem))__atg15_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg15_memp, \
+ __atg15_old & __atg15_mask, \
+@@ -450,7 +450,7 @@
+ __typeof (*(mem)) __atg16_mask = (mask); \
+ \
+ do \
+- __atg16_old = (*__atg16_memp); \
++ __atg16_old = (*(volatile __typeof (mem))__atg16_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg16_memp, \
+ __atg16_old & __atg16_mask,\
+@@ -468,7 +468,7 @@
+ __typeof (*(mem)) __atg17_mask = (mask); \
+ \
+ do \
+- __atg17_old = (*__atg17_memp); \
++ __atg17_old = (*(volatile __typeof (mem))__atg17_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg17_memp, \
+ __atg17_old | __atg17_mask, \
+@@ -484,7 +484,7 @@
+ __typeof (*(mem)) __atg18_mask = (mask); \
+ \
+ do \
+- __atg18_old = (*__atg18_memp); \
++ __atg18_old = (*(volatile __typeof (mem))__atg18_memp); \
+ while (__builtin_expect \
+ (catomic_compare_and_exchange_bool_acq (__atg18_memp, \
+ __atg18_old | __atg18_mask,\
+@@ -500,7 +500,7 @@
+ __typeof (*(mem)) __atg19_mask = (mask); \
+ \
+ do \
+- __atg19_old = (*__atg19_memp); \
++ __atg19_old = (*(volatile __typeof (mem))__atg19_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg19_memp, \
+ __atg19_old | __atg19_mask,\
+diff -durN glibc-2.13.orig/nptl/Makefile glibc-2.13/nptl/Makefile
+--- glibc-2.13.orig/nptl/Makefile 2008-11-12 14:38:23.000000000 +0100
++++ glibc-2.13/nptl/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -265,9 +265,9 @@
+ # Files which must not be linked with libpthread.
+ tests-nolibpthread = tst-unload
+
+-# This sets the stack resource limit to 1023kb, which is not a multiple
+-# of the page size since every architecture's page size is > 1k.
+-tst-oddstacklimit-ENV = ; ulimit -s 1023;
++# This sets the stack resource limit to 8193kb, which is not a multiple
++# of the page size since every architecture's page size is 4096 bytes.
++tst-oddstacklimit-ENV = ; ulimit -s 8193;
+
+ distribute = eintr.c tst-cleanup4aux.c
+
+@@ -426,6 +426,35 @@
+ CFLAGS-tst-cleanupx4.c += -fexceptions
+ CFLAGS-tst-oncex3.c += -fexceptions
+ CFLAGS-tst-oncex4.c += -fexceptions
++
++ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
++LDFLAGS-tst-cancelx2 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx4 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx5 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx6 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx7 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx8 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx9 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx10 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx11 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx12 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx13 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx14 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx15 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx16 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx17 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx18 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx20 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx21 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx0 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx1 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx2 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx4 += $(ldflags-libgcc_s)
++LDFLAGS-tst-oncex3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-oncex4 += $(ldflags-libgcc_s)
++
+ CFLAGS-tst-align.c += $(stack-align-test-flags)
+ CFLAGS-tst-align3.c += $(stack-align-test-flags)
+ CFLAGS-tst-initializers1.c = -W -Wall -Werror
+diff -durN glibc-2.13.orig/nptl/pthread_barrier_wait.c glibc-2.13/nptl/pthread_barrier_wait.c
+--- glibc-2.13.orig/nptl/pthread_barrier_wait.c 2007-08-01 06:18:50.000000000 +0200
++++ glibc-2.13/nptl/pthread_barrier_wait.c 2009-11-13 00:50:26.000000000 +0100
+@@ -64,7 +64,7 @@
+ do
+ lll_futex_wait (&ibarrier->curr_event, event,
+ ibarrier->private ^ FUTEX_PRIVATE_FLAG);
+- while (event == ibarrier->curr_event);
++ while (event == *(volatile unsigned int *)&ibarrier->curr_event);
+ }
+
+ /* Make sure the init_count is stored locally or in a register. */
+diff -durN glibc-2.13.orig/nptl/sysdeps/pthread/Makefile glibc-2.13/nptl/sysdeps/pthread/Makefile
+--- glibc-2.13.orig/nptl/sysdeps/pthread/Makefile 2006-02-28 08:09:41.000000000 +0100
++++ glibc-2.13/nptl/sysdeps/pthread/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -33,7 +33,9 @@
+
+ ifeq ($(have-forced-unwind),yes)
+ tests += tst-mqueue8x
++ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
+ CFLAGS-tst-mqueue8x.c += -fexceptions
++LDFLAGS-tst-mqueue8x += $(ldflags-libgcc_s)
+ endif
+ endif
+
+diff -durN glibc-2.13.orig/stdio-common/Makefile glibc-2.13/stdio-common/Makefile
+--- glibc-2.13.orig/stdio-common/Makefile 2009-04-11 07:29:56.000000000 +0200
++++ glibc-2.13/stdio-common/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -82,7 +82,7 @@
+ $(SHELL) -e tst-printf.sh $(common-objpfx) '$(run-program-prefix)'
+ endif
+
+-CFLAGS-vfprintf.c = -Wno-uninitialized
++CFLAGS-vfprintf.c = -Wno-uninitialized -fno-delayed-branch
+ CFLAGS-vfwprintf.c = -Wno-uninitialized
+ CFLAGS-tst-printf.c = -Wno-format
+ CFLAGS-tstdiomisc.c = -Wno-format
+diff -durN glibc-2.13.orig/sunrpc/clnt_udp.c glibc-2.13/sunrpc/clnt_udp.c
+--- glibc-2.13.orig/sunrpc/clnt_udp.c 2008-07-26 10:42:44.000000000 +0200
++++ glibc-2.13/sunrpc/clnt_udp.c 2009-11-13 00:50:26.000000000 +0100
+@@ -456,7 +456,7 @@
+ while (inlen < 0 && errno == EINTR);
+ if (inlen < 0)
+ {
+- if (errno == EWOULDBLOCK)
++ if (errno == EWOULDBLOCK || errno == EAGAIN)
+ continue;
+ cu->cu_error.re_errno = errno;
+ return (cu->cu_error.re_status = RPC_CANTRECV);
diff --git a/patches/glibc/ports-2.14/330-m68k-sys-user.patch b/patches/glibc/ports-2.14/330-m68k-sys-user.patch
new file mode 100644
index 0000000..28bcb11
--- /dev/null
+++ b/patches/glibc/ports-2.14/330-m68k-sys-user.patch
@@ -0,0 +1,97 @@
+copied from kernel as it is sanitized now
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/m68k/sys/user.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-11-13 00:50:31.000000000 +0100
+@@ -1,3 +1,90 @@
++#ifndef _SYS_USER_H
++#define _SYS_USER_H
++
++/* Core file format: The core file is written in such a way that gdb
++ can understand it and provide useful information to the user (under
++ linux we use the 'trad-core' bfd). There are quite a number of
++ obstacles to being able to view the contents of the floating point
++ registers, and until these are solved you will not be able to view the
++ contents of them. Actually, you can read in the core file and look at
++ the contents of the user struct to find out what the floating point
++ registers contain.
++ The actual file contents are as follows:
++ UPAGE: 1 page consisting of a user struct that tells gdb what is present
++ in the file. Directly after this is a copy of the task_struct, which
++ is currently not used by gdb, but it may come in useful at some point.
++ All of the registers are stored as part of the upage. The upage should
++ always be only one page.
++ DATA: The data area is stored. We use current->end_text to
++ current->brk to pick up all of the user variables, plus any memory
++ that may have been malloced. No attempt is made to determine if a page
++ is demand-zero or if a page is totally unused, we just cover the entire
++ range. All of the addresses are rounded in such a way that an integral
++ number of pages is written.
++ STACK: We need the stack information in order to get a meaningful
++ backtrace. We need to write the data from (esp) to
++ current->start_stack, so we round each of these off in order to be able
++ to write an integer number of pages.
++ The minimum core file size is 3 pages, or 12288 bytes.
++*/
++
++struct user_m68kfp_struct {
++ unsigned long fpregs[8*3]; /* fp0-fp7 registers */
++ unsigned long fpcntl[3]; /* fp control regs */
++};
++
++/* This is the old layout of "struct pt_regs" as of Linux 1.x, and
++ is still the layout used by user (the new pt_regs doesn't have
++ all registers). */
++struct user_regs_struct {
++ long d1,d2,d3,d4,d5,d6,d7;
++ long a0,a1,a2,a3,a4,a5,a6;
++ long d0;
++ long usp;
++ long orig_d0;
++ short stkadj;
++ short sr;
++ long pc;
++ short fmtvec;
++ short __fill;
++};
++
++
++/* When the kernel dumps core, it starts by dumping the user struct -
++ this will be used by gdb to figure out where the data and stack segments
++ are within the file, and what virtual addresses to use. */
++struct user{
++/* We start with the registers, to mimic the way that "memory" is returned
++ from the ptrace(3,...) function. */
++ struct user_regs_struct regs; /* Where the registers are actually stored */
++/* ptrace does not yet supply these. Someday.... */
++ int u_fpvalid; /* True if math co-processor being used. */
++ /* for this mess. Not yet used. */
++ struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */
++/* The rest of this junk is to help gdb figure out what goes where */
++ unsigned long int u_tsize; /* Text segment size (pages). */
++ unsigned long int u_dsize; /* Data segment size (pages). */
++ unsigned long int u_ssize; /* Stack segment size (pages). */
++ unsigned long start_code; /* Starting virtual address of text. */
++ unsigned long start_stack; /* Starting virtual address of stack area.
++ This is actually the bottom of the stack,
++ the top of the stack is always found in the
++ esp register. */
++ long int signal; /* Signal that caused the core dump. */
++ int reserved; /* No longer used */
++ struct user_regs_struct *u_ar0;
++ /* Used by gdb to help find the values for */
++ /* the registers. */
++ struct user_m68kfp_struct* u_fpstate; /* Math Co-processor pointer. */
++ unsigned long magic; /* To uniquely identify a core file */
++ char u_comm[32]; /* User command that was responsible */
++};
++#define NBPG 4096
++#define UPAGES 1
++#define HOST_TEXT_START_ADDR (u.start_code)
++#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
++
++#endif
+ /* Copyright (C) 2008, 2010 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+diff -durN glibc-2.14.orig/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.14/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h
diff --git a/patches/glibc/ports-2.14/340-dl_execstack-PaX-support.patch b/patches/glibc/ports-2.14/340-dl_execstack-PaX-support.patch
new file mode 100644
index 0000000..2402af0
--- /dev/null
+++ b/patches/glibc/ports-2.14/340-dl_execstack-PaX-support.patch
@@ -0,0 +1,66 @@
+ With latest versions of glibc, a lot of apps failed on a PaX enabled
+ system with:
+ cannot enable executable stack as shared object requires: Permission denied
+
+ This is due to PaX 'exec-protecting' the stack, and ld.so then trying
+ to make the stack executable due to some libraries not containing the
+ PT_GNU_STACK section. Bug #32960. <azarah@gentoo.org> (12 Nov 2003).
+
+ Patch also NPTL. Bug #116086. <kevquinn@gentoo.org> (20 Dec 2005).
+
+diff -durN glibc-2.13.orig/nptl/allocatestack.c glibc-2.13/nptl/allocatestack.c
+--- glibc-2.13.orig/nptl/allocatestack.c 2009-01-29 21:34:16.000000000 +0100
++++ glibc-2.13/nptl/allocatestack.c 2009-11-13 00:50:33.000000000 +0100
+@@ -329,7 +329,8 @@
+ # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
+ #endif
+ if (mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
+- return errno;
++ if (errno != EACCES) /* PAX is enabled */
++ return errno;
+
+ return 0;
+ }
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c 2006-01-08 09:21:15.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c 2009-11-13 00:50:33.000000000 +0100
+@@ -63,7 +63,10 @@
+ else
+ # endif
+ {
+- result = errno;
++ if (errno == EACCES) /* PAX is enabled */
++ result = 0;
++ else
++ result = errno;
+ goto out;
+ }
+ }
+@@ -89,7 +92,12 @@
+ page -= size;
+ else
+ {
+- if (errno != ENOMEM) /* Unexpected failure mode. */
++ if (errno == EACCES) /* PAX is enabled */
++ {
++ result = 0;
++ goto out;
++ }
++ else if (errno != ENOMEM) /* Unexpected failure mode. */
+ {
+ result = errno;
+ goto out;
+@@ -115,7 +123,12 @@
+ page += size;
+ else
+ {
+- if (errno != ENOMEM) /* Unexpected failure mode. */
++ if (errno == EACCES) /* PAX is enabled */
++ {
++ result = 0;
++ goto out;
++ }
++ else if (errno != ENOMEM) /* Unexpected failure mode. */
+ {
+ result = errno;
+ goto out;
diff --git a/patches/glibc/ports-2.14/350-pre20040117-pt_pax.patch b/patches/glibc/ports-2.14/350-pre20040117-pt_pax.patch
new file mode 100644
index 0000000..f8f6b83
--- /dev/null
+++ b/patches/glibc/ports-2.14/350-pre20040117-pt_pax.patch
@@ -0,0 +1,32 @@
+
+
+diff -durN glibc-2.13.orig/elf/elf.h glibc-2.13/elf/elf.h
+--- glibc-2.13.orig/elf/elf.h 2009-04-15 02:15:54.000000000 +0200
++++ glibc-2.13/elf/elf.h 2009-11-13 00:50:35.000000000 +0100
+@@ -580,6 +580,7 @@
+ #define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
+ #define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
+ #define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
++#define PT_PAX_FLAGS 0x65041580 /* Indicates PaX flag markings */
+ #define PT_LOSUNW 0x6ffffffa
+ #define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
+ #define PT_SUNWSTACK 0x6ffffffb /* Stack segment */
+@@ -593,6 +594,18 @@
+ #define PF_X (1 << 0) /* Segment is executable */
+ #define PF_W (1 << 1) /* Segment is writable */
+ #define PF_R (1 << 2) /* Segment is readable */
++#define PF_PAGEEXEC (1 << 4) /* Enable PAGEEXEC */
++#define PF_NOPAGEEXEC (1 << 5) /* Disable PAGEEXEC */
++#define PF_SEGMEXEC (1 << 6) /* Enable SEGMEXEC */
++#define PF_NOSEGMEXEC (1 << 7) /* Disable SEGMEXEC */
++#define PF_MPROTECT (1 << 8) /* Enable MPROTECT */
++#define PF_NOMPROTECT (1 << 9) /* Disable MPROTECT */
++#define PF_RANDEXEC (1 << 10) /* Enable RANDEXEC */
++#define PF_NORANDEXEC (1 << 11) /* Disable RANDEXEC */
++#define PF_EMUTRAMP (1 << 12) /* Enable EMUTRAMP */
++#define PF_NOEMUTRAMP (1 << 13) /* Disable EMUTRAMP */
++#define PF_RANDMMAP (1 << 14) /* Enable RANDMMAP */
++#define PF_NORANDMMAP (1 << 15) /* Disable RANDMMAP */
+ #define PF_MASKOS 0x0ff00000 /* OS-specific */
+ #define PF_MASKPROC 0xf0000000 /* Processor-specific */
+
diff --git a/patches/glibc/ports-2.14/360-tests-sandbox-libdl-paths.patch b/patches/glibc/ports-2.14/360-tests-sandbox-libdl-paths.patch
new file mode 100644
index 0000000..9f78c52
--- /dev/null
+++ b/patches/glibc/ports-2.14/360-tests-sandbox-libdl-paths.patch
@@ -0,0 +1,193 @@
+when glibc runs its tests, it does so by invoking the local library loader.
+in Gentoo, we build/run inside of our "sandbox" which itself is linked against
+libdl (so that it can load libraries and pull out symbols). the trouble
+is that when you upgrade from an older glibc to the new one, often times
+internal symbols change name or abi. this is normally OK as you cannot use
+libc.so from say version 2.3.6 but libpthread.so from say version 2.5, so
+we always say "keep all of the glibc libraries from the same build". but
+when glibc runs its tests, it uses dynamic paths to point to its new local
+copies of libraries. if the test doesnt use libdl, then glibc doesnt add
+its path, and when sandbox triggers the loading of libdl, glibc does so
+from the host system system. this gets us into the case of all libraries
+are from the locally compiled version of glibc except for libdl.so.
+
+Fix by Wormo
+
+http://bugs.gentoo.org/56898
+
+diff -durN glibc-2.13.orig/grp/tst_fgetgrent.sh glibc-2.13/grp/tst_fgetgrent.sh
+--- glibc-2.13.orig/grp/tst_fgetgrent.sh 2001-07-06 06:54:46.000000000 +0200
++++ glibc-2.13/grp/tst_fgetgrent.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -24,7 +24,8 @@
+ rtld_installed_name=$1; shift
+
+ testout=${common_objpfx}/grp/tst_fgetgrent.out
+-library_path=${common_objpfx}
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
+
+ result=0
+
+diff -durN glibc-2.13.orig/iconvdata/run-iconv-test.sh glibc-2.13/iconvdata/run-iconv-test.sh
+--- glibc-2.13.orig/iconvdata/run-iconv-test.sh 2008-05-15 03:59:44.000000000 +0200
++++ glibc-2.13/iconvdata/run-iconv-test.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -34,7 +34,7 @@
+ export GCONV_PATH
+
+ # We have to have some directories in the library path.
+-LIBPATH=$codir:$codir/iconvdata
++LIBPATH=$codir:$codir/iconvdata:$codir/dlfcn
+
+ # How the start the iconv(1) program.
+ ICONV='$codir/elf/ld.so --library-path $LIBPATH --inhibit-rpath ${from}.so \
+diff -durN glibc-2.13.orig/iconvdata/tst-table.sh glibc-2.13/iconvdata/tst-table.sh
+--- glibc-2.13.orig/iconvdata/tst-table.sh 2002-04-24 23:39:35.000000000 +0200
++++ glibc-2.13/iconvdata/tst-table.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -59,8 +59,11 @@
+ irreversible=${charset}.irreversible
+ fi
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # iconv in one direction.
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-table-from ${charset} \
+ > ${objpfx}tst-${charset}.table
+
+diff -durN glibc-2.13.orig/intl/tst-codeset.sh glibc-2.13/intl/tst-codeset.sh
+--- glibc-2.13.orig/intl/tst-codeset.sh 2005-04-06 04:18:35.000000000 +0200
++++ glibc-2.13/intl/tst-codeset.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -37,6 +37,9 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ ${common_objpfx}elf/ld.so --library-path $common_objpfx \
+ ${objpfx}tst-codeset > ${objpfx}tst-codeset.out
+
+diff -durN glibc-2.13.orig/intl/tst-gettext.sh glibc-2.13/intl/tst-gettext.sh
+--- glibc-2.13.orig/intl/tst-gettext.sh 2004-08-15 21:28:18.000000000 +0200
++++ glibc-2.13/intl/tst-gettext.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -51,9 +51,12 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # Now run the test.
+ MALLOC_TRACE=$malloc_trace LOCPATH=${objpfx}localedir:$LOCPATH \
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-gettext > ${objpfx}tst-gettext.out ${objpfx}domaindir
+
+ exit $?
+diff -durN glibc-2.13.orig/intl/tst-gettext2.sh glibc-2.13/intl/tst-gettext2.sh
+--- glibc-2.13.orig/intl/tst-gettext2.sh 2005-05-04 19:54:48.000000000 +0200
++++ glibc-2.13/intl/tst-gettext2.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -65,8 +65,11 @@
+ LOCPATH=${objpfx}domaindir
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # Now run the test.
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-gettext2 > ${objpfx}tst-gettext2.out ${objpfx}domaindir &&
+ cmp ${objpfx}tst-gettext2.out - <<EOF
+ String1 - Lang1: 1st string
+diff -durN glibc-2.13.orig/intl/tst-translit.sh glibc-2.13/intl/tst-translit.sh
+--- glibc-2.13.orig/intl/tst-translit.sh 2005-05-04 19:56:10.000000000 +0200
++++ glibc-2.13/intl/tst-translit.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -36,7 +36,10 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-translit > ${objpfx}tst-translit.out ${objpfx}domaindir
+
+ exit $?
+diff -durN glibc-2.13.orig/malloc/tst-mtrace.sh glibc-2.13/malloc/tst-mtrace.sh
+--- glibc-2.13.orig/malloc/tst-mtrace.sh 2005-10-15 01:40:35.000000000 +0200
++++ glibc-2.13/malloc/tst-mtrace.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -24,9 +24,12 @@
+ status=0
+ trap "rm -f ${common_objpfx}malloc/tst-mtrace.leak; exit 1" 1 2 15
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ MALLOC_TRACE=${common_objpfx}malloc/tst-mtrace.leak \
+ LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${common_objpfx}malloc/tst-mtrace || status=1
+
+ if test $status -eq 0 && test -f ${common_objpfx}malloc/mtrace; then
+diff -durN glibc-2.13.orig/nptl/tst-tls6.sh glibc-2.13/nptl/tst-tls6.sh
+--- glibc-2.13.orig/nptl/tst-tls6.sh 2003-09-03 00:02:59.000000000 +0200
++++ glibc-2.13/nptl/tst-tls6.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -5,8 +5,8 @@
+ rtld_installed_name=$1; shift
+ logfile=$common_objpfx/nptl/tst-tls6.out
+
+-# We have to find libc and nptl
+-library_path=${common_objpfx}:${common_objpfx}nptl
++# We have to find libc and nptl (also libdl in case sandbox is in use)
++library_path=${common_objpfx}:${common_objpfx}nptl:${common_objpfx}/dlfcn
+ tst_tls5="${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+ ${common_objpfx}/nptl/tst-tls5"
+
+diff -durN glibc-2.13.orig/posix/globtest.sh glibc-2.13/posix/globtest.sh
+--- glibc-2.13.orig/posix/globtest.sh 2008-12-06 07:05:39.000000000 +0100
++++ glibc-2.13/posix/globtest.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -18,7 +18,7 @@
+ esac
+
+ # We have to find the libc and the NSS modules.
+-library_path=${common_objpfx}:${common_objpfx}nss:${common_objpfx}nis:${common_objpfx}db2:${common_objpfx}hesiod
++library_path=${common_objpfx}:${common_objpfx}nss:${common_objpfx}nis:${common_objpfx}db2:${common_objpfx}hesiod:${common_objpfx}/dlfcn
+
+ # Since we use `sort' we must make sure to use the same locale everywhere.
+ LC_ALL=C
+diff -durN glibc-2.13.orig/posix/tst-getconf.sh glibc-2.13/posix/tst-getconf.sh
+--- glibc-2.13.orig/posix/tst-getconf.sh 2002-09-01 13:11:25.000000000 +0200
++++ glibc-2.13/posix/tst-getconf.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -10,7 +10,10 @@
+ else
+ rtld_installed_name=$1; shift
+ runit() {
+- ${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} "$@"
++
++ # make sure libdl is also in path in case sandbox is in use
++ library_path=${common_objpfx}:${common_objpfx}/dlfcn
++ ${elf_objpfx}${rtld_installed_name} --library-path ${library_path} "$@"
+ }
+ fi
+
+diff -durN glibc-2.13.orig/posix/wordexp-tst.sh glibc-2.13/posix/wordexp-tst.sh
+--- glibc-2.13.orig/posix/wordexp-tst.sh 2000-10-20 18:23:30.000000000 +0200
++++ glibc-2.13/posix/wordexp-tst.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -19,8 +19,11 @@
+ "
+ export IFS
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ failed=0
+-${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \
++${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+ ${common_objpfx}posix/wordexp-test '$*' > ${testout}1
+ cat <<"EOF" | cmp - ${testout}1 >> $logfile || failed=1
+ wordexp returned 0
diff --git a/patches/glibc/ports-2.14/380-dont-build-timezone.patch b/patches/glibc/ports-2.14/380-dont-build-timezone.patch
new file mode 100644
index 0000000..11c358e
--- /dev/null
+++ b/patches/glibc/ports-2.14/380-dont-build-timezone.patch
@@ -0,0 +1,14 @@
+timezone data has been split into the package sys-libs/timezone-data
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-11-13 00:50:13.000000000 +0100
++++ glibc-2.13/Makeconfig 2009-11-13 00:50:41.000000000 +0100
+@@ -944,7 +944,7 @@
+ stdlib stdio-common libio malloc string wcsmbs time dirent \
+ grp pwd posix io termios resource misc socket sysvipc gmon \
+ gnulib iconv iconvdata wctype manual shadow gshadow po argp \
+- crypt nss localedata timezone rt conform debug \
++ crypt nss localedata rt conform debug \
+ $(add-on-subdirs) $(dlfcn) $(binfmt-subdir)
+
+ ifndef avoid-generated
diff --git a/patches/glibc/ports-2.14/400-alpha-xstat.patch b/patches/glibc/ports-2.14/400-alpha-xstat.patch
new file mode 100644
index 0000000..6e4ab8f
--- /dev/null
+++ b/patches/glibc/ports-2.14/400-alpha-xstat.patch
@@ -0,0 +1,15 @@
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-05-09 08:54:20.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
+@@ -386,6 +386,11 @@
+ # define __ASSUME_GETDENTS32_D_TYPE 1
+ #endif
+
++/* Starting with version 2.6.4, alpha stat64 syscalls are available. */
++#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
++# define __ASSUME_STAT64_SYSCALL 1
++#endif
++
+ /* Starting with version 2.5.3, the initial location returned by `brk'
+ after exec is always rounded up to the next page. */
+ #if __LINUX_KERNEL_VERSION >= 132355
diff --git a/patches/glibc/ports-2.14/430-alpha-creat.patch b/patches/glibc/ports-2.14/430-alpha-creat.patch
new file mode 100644
index 0000000..da6ddda
--- /dev/null
+++ b/patches/glibc/ports-2.14/430-alpha-creat.patch
@@ -0,0 +1,14 @@
+alpha does not have a __NR_creat
+
+http://bugs.gentoo.org/227275
+http://sourceware.org/bugzilla/show_bug.cgi?id=6650
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2007-11-10 20:34:26.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2009-11-13 00:50:51.000000000 +0100
+@@ -1 +1,5 @@
+ /* Defined as alias for the syscall. */
++#include <sysdep.h>
++#ifndef __NR_creat
++#include "../../../../../io/creat64.c"
++#endif
diff --git a/patches/glibc/ports-2.14/440-alpha-cache-shape.patch b/patches/glibc/ports-2.14/440-alpha-cache-shape.patch
new file mode 100644
index 0000000..def0181
--- /dev/null
+++ b/patches/glibc/ports-2.14/440-alpha-cache-shape.patch
@@ -0,0 +1,13 @@
+older verisons of glibc would build dl-sysdep as shared-only and dl-support as
+static-only. alpha hooks in a cache variable via dl-auxv.h. newer versions of
+glibc build dl-sysdep as both shared and static which means we now have symbol
+duplication for static builds with dl-sysdep and dl-support. since dl-sysdep
+is both shared/static, there is no point in hooking dl-support anymore, so we
+can punt it.
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/dl-support.c glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/dl-support.c
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-11-13 00:50:53.000000000 +0100
+@@ -1,2 +1,1 @@
+-#include "dl-auxv.h"
+ #include <elf/dl-support.c>
diff --git a/patches/glibc/ports-2.14/460-alpha-fix-gcc-4.1-warnings.patch b/patches/glibc/ports-2.14/460-alpha-fix-gcc-4.1-warnings.patch
new file mode 100644
index 0000000..1569ce4
--- /dev/null
+++ b/patches/glibc/ports-2.14/460-alpha-fix-gcc-4.1-warnings.patch
@@ -0,0 +1,56 @@
+2006-05-30 Falk Hueffner <falk@debian.org>
+
+ * sysdeps/unix/sysv/linux/alpha/ioperm.c: force the architecture
+ to ev6 in assembly code.
+
+{standard input}: Assembler messages:
+{standard input}:341: Error: macro requires $at register while noat in effect
+{standard input}:374: Error: macro requires $at register while noat in effect
+{standard input}:438: Error: macro requires $at register while noat in effect
+{standard input}:471: Error: macro requires $at register while noat in effect
+make[3]: *** [/tmp/buildd/glibc-2.3.6/build-tree/alpha-libc/misc/ioperm.o] Error 1
+
+Hrm. gcc puts .arch ev4 into the .s, and this overrides -mev6 for as.
+I cannot really think of anything better than
+
+ ports/sysdeps/unix/sysv/linux/alpha/ioperm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/ioperm.c
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-11-13 00:50:57.000000000 +0100
+@@ -178,13 +178,13 @@
+ static inline void
+ stb_mb(unsigned char val, unsigned long addr)
+ {
+- __asm__("stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
++ __asm__(".arch ev6; stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
+ }
+
+ static inline void
+ stw_mb(unsigned short val, unsigned long addr)
+ {
+- __asm__("stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
++ __asm__(".arch ev6; stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
+ }
+
+ static inline void
+@@ -356,7 +356,7 @@
+ unsigned long int addr = dense_port_to_cpu_addr (port);
+ unsigned char r;
+
+- __asm__ ("ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
++ __asm__ (".arch ev6; ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
+ return r;
+ }
+
+@@ -366,7 +366,7 @@
+ unsigned long int addr = dense_port_to_cpu_addr (port);
+ unsigned short r;
+
+- __asm__ ("ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
++ __asm__ (".arch ev6; ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
+ return r;
+ }
+
+diff -durN glibc-2.14.orig/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.14/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c
diff --git a/patches/glibc/ports-2.14/490-alpha_alpha-add-fdatasync-support.patch b/patches/glibc/ports-2.14/490-alpha_alpha-add-fdatasync-support.patch
new file mode 100644
index 0000000..372f34c
--- /dev/null
+++ b/patches/glibc/ports-2.14/490-alpha_alpha-add-fdatasync-support.patch
@@ -0,0 +1,126 @@
+2009-07-25 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h: define
+ __ASSUME_FDATASYNC.
+ * sysdeps/unix/sysv/linux/fdatasync.c: New file.
+ * sysdeps/unix/sysv/linux/Makefile: compile fdatasync.c with
+ -fexceptions.
+ * sysdeps/unix/sysv/linux/syscalls.list: Remove fdatasync.
+
+ sysdeps/unix/sysv/linux/Makefile | 1
+ sysdeps/unix/sysv/linux/fdatasync.c | 69 ++++++++++++++++++++++++++++++
+ sysdeps/unix/sysv/linux/kernel-features.h | 6 ++
+ sysdeps/unix/sysv/linux/syscalls.list | 1
+ 4 files changed, 76 insertions(+), 1 deletion(-)
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.13/sysdeps/unix/sysv/linux/Makefile
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile 2009-03-02 17:15:13.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/Makefile 2009-11-13 00:51:04.000000000 +0100
+@@ -20,6 +20,7 @@
+ setfsuid setfsgid makedev epoll_pwait signalfd \
+ eventfd eventfd_read eventfd_write prlimit
+
++CFLAGS-fdatasync.c = -fexceptions
+ CFLAGS-gethostid.c = -fexceptions
+
+ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c 2009-11-13 00:51:04.000000000 +0100
+@@ -0,0 +1,69 @@
++/* fdatasync -- synchronize at least the data part of a file with
++ the underlying media. Linux version.
++
++ Copyright (C) 2007 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 <errno.h>
++#include <unistd.h>
++
++#include <sysdep-cancel.h>
++#include <sys/syscall.h>
++#include <bp-checks.h>
++
++#include <kernel-features.h>
++
++#if defined __NR_fdatasync && !defined __ASSUME_FDATASYNC
++static int __have_no_fdatasync;
++#endif
++
++static int
++do_fdatasync (int fd)
++{
++#ifdef __ASSUME_FDATASYNC
++ return INLINE_SYSCALL (fdatasync, 1, fd);
++#elif defined __NR_fdatasync
++ if (!__builtin_expect (__have_no_fdatasync, 0))
++ {
++ int result = INLINE_SYSCALL (fdatasync, 1, fd);
++ if (__builtin_expect (result, 0) != -1 || errno != ENOSYS)
++ return result;
++
++ __have_no_fdatasync = 1;
++ }
++#endif
++ return INLINE_SYSCALL (fsync, 1, fd);
++}
++
++int
++__fdatasync (int fd)
++{
++ if (SINGLE_THREAD_P)
++ return do_fdatasync (fd);
++
++ int oldtype = LIBC_CANCEL_ASYNC ();
++
++ int result = do_fdatasync (fd);
++
++ LIBC_CANCEL_RESET (oldtype);
++
++ return result;
++}
++
++weak_alias (__fdatasync, fdatasync)
++
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:51:04.000000000 +0100
+@@ -459,6 +459,12 @@
+ # define __ASSUME_FUTEX_LOCK_PI 1
+ #endif
+
++/* Support for fsyncdata syscall was added in 2.6.22 on alpha, but it
++ was already present in 2.0 kernels on other architectures. */
++#if (!defined __alpha || __LINUX_KERNEL_VERSION >= 0x020616)
++# define __ASSUME_FDATASYNC 1
++#endif
++
+ /* Support for utimensat syscall was added in 2.6.22, on SH
+ only after 2.6.22-rc1. */
+ #if __LINUX_KERNEL_VERSION >= 0x020616 \
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list 2008-08-02 01:29:08.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list 2009-11-13 00:51:04.000000000 +0100
+@@ -11,7 +11,6 @@
+ epoll_create1 EXTRA epoll_create1 i:i epoll_create1
+ epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
+ epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait
+-fdatasync - fdatasync Ci:i fdatasync
+ flock - flock i:ii __flock flock
+ fork - fork i: __libc_fork __fork fork
+ get_kernel_syms EXTRA get_kernel_syms i:p get_kernel_syms
diff --git a/patches/glibc/ports-2.14/530-alpha-fix-rtld-fPIC.patch b/patches/glibc/ports-2.14/530-alpha-fix-rtld-fPIC.patch
new file mode 100644
index 0000000..3560e2a
--- /dev/null
+++ b/patches/glibc/ports-2.14/530-alpha-fix-rtld-fPIC.patch
@@ -0,0 +1,21 @@
+2009-05-26 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/alpha/Makefile (CFLAGS-rtld.c): add $(PIC-ccflag).
+
+ ports/sysdeps/alpha/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/alpha/Makefile glibc-2.14/glibc-ports-2.14/sysdeps/alpha/Makefile
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/alpha/Makefile 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/alpha/Makefile 2009-11-13 00:51:13.000000000 +0100
+@@ -35,7 +35,8 @@
+
+ ifeq ($(subdir),elf)
+ # The ld.so startup code cannot use literals until it self-relocates.
+-CFLAGS-rtld.c = -mbuild-constants
++# It uses more than 64k for the small data area.
++CFLAGS-rtld.c = -mbuild-constants $(PIC-ccflag)
+ endif
+
+ # Build everything with full IEEE math support, and with dynamic rounding;
+diff -durN glibc-2.14.orig/ports/sysdeps/alpha/Makefile glibc-2.14/ports/sysdeps/alpha/Makefile
diff --git a/patches/glibc/ports-2.14/560-ppc-atomic.patch b/patches/glibc/ports-2.14/560-ppc-atomic.patch
new file mode 100644
index 0000000..ee1cb90
--- /dev/null
+++ b/patches/glibc/ports-2.14/560-ppc-atomic.patch
@@ -0,0 +1,415 @@
+sniped from suse
+
+Index: sysdeps/powerpc/bits/atomic.h
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/powerpc/bits/atomic.h,v
+retrieving revision 1.17
+diff -u -a -p -r1.17 atomic.h
+
+diff -durN glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h glibc-2.13/sysdeps/powerpc/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h 2007-03-26 22:15:28.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -85,14 +85,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " cmpw %0,%2\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -102,14 +102,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " cmpw %0,%2\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -118,12 +118,12 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
+- " stwcx. %3,0,%2\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
++ " stwcx. %2,%y1\n" \
+ " bne- 1b\n" \
+ " " __ARCH_ACQ_INSTR \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -132,11 +132,11 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \
+- " stwcx. %3,0,%2\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
++ " stwcx. %2,%y1\n" \
+ " bne- 1b" \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -144,12 +144,12 @@
+ #define __arch_atomic_exchange_and_add_32(mem, value) \
+ ({ \
+ __typeof (*mem) __val, __tmp; \
+- __asm __volatile ("1: lwarx %0,0,%3\n" \
+- " add %1,%0,%4\n" \
+- " stwcx. %1,0,%3\n" \
++ __asm __volatile ("1: lwarx %0,%y2\n" \
++ " add %1,%0,%3\n" \
++ " stwcx. %1,%y2\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -157,12 +157,12 @@
+ #define __arch_atomic_increment_val_32(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: lwarx %0,0,%2\n" \
++ __asm __volatile ("1: lwarx %0,%y1\n" \
+ " addi %0,%0,1\n" \
+- " stwcx. %0,0,%2\n" \
++ " stwcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -170,27 +170,27 @@
+ #define __arch_atomic_decrement_val_32(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: lwarx %0,0,%2\n" \
++ __asm __volatile ("1: lwarx %0,%y1\n" \
+ " subi %0,%0,1\n" \
+- " stwcx. %0,0,%2\n" \
++ " stwcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+
+ #define __arch_atomic_decrement_if_positive_32(mem) \
+ ({ int __val, __tmp; \
+- __asm __volatile ("1: lwarx %0,0,%3\n" \
++ __asm __volatile ("1: lwarx %0,%y2\n" \
+ " cmpwi 0,%0,0\n" \
+ " addi %1,%0,-1\n" \
+ " ble 2f\n" \
+- " stwcx. %1,0,%3\n" \
++ " stwcx. %1,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h 2007-03-26 22:15:45.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -44,14 +44,14 @@
+ ({ \
+ unsigned int __tmp; \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -60,14 +60,14 @@
+ ({ \
+ unsigned int __tmp; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h 2007-03-26 22:16:03.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -44,14 +44,14 @@
+ ({ \
+ unsigned int __tmp, __tmp2; \
+ __asm __volatile (" clrldi %1,%1,32\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y2" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%1,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %4,0,%2\n" \
++ " stwcx. %4,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp), "=r" (__tmp2) \
+- : "b" (mem), "1" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem)) \
++ : "1" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -61,14 +61,14 @@
+ unsigned int __tmp, __tmp2; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+ " clrldi %1,%1,32\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y2" MUTEX_HINT_REL "\n" \
+ " subf. %0,%1,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %4,0,%2\n" \
++ " stwcx. %4,%y2\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp), "=r" (__tmp2) \
+- : "b" (mem), "1" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem)) \
++ : "1" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -82,14 +82,14 @@
+ ({ \
+ unsigned long __tmp; \
+ __asm __volatile ( \
+- "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -98,14 +98,14 @@
+ ({ \
+ unsigned long __tmp; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -115,14 +115,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile ( \
+- "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " cmpd %0,%2\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -132,14 +132,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " cmpd %0,%2\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -148,12 +148,12 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
+- " stdcx. %3,0,%2\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
++ " stdcx. %2,%y1\n" \
+ " bne- 1b\n" \
+ " " __ARCH_ACQ_INSTR \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -162,11 +162,11 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \
+- " stdcx. %3,0,%2\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
++ " stdcx. %2,%y1\n" \
+ " bne- 1b" \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -174,12 +174,12 @@
+ #define __arch_atomic_exchange_and_add_64(mem, value) \
+ ({ \
+ __typeof (*mem) __val, __tmp; \
+- __asm __volatile ("1: ldarx %0,0,%3\n" \
+- " add %1,%0,%4\n" \
+- " stdcx. %1,0,%3\n" \
++ __asm __volatile ("1: ldarx %0,%y2\n" \
++ " add %1,%0,%3\n" \
++ " stdcx. %1,%y2\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -187,12 +187,12 @@
+ #define __arch_atomic_increment_val_64(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: ldarx %0,0,%2\n" \
++ __asm __volatile ("1: ldarx %0,%y1\n" \
+ " addi %0,%0,1\n" \
+- " stdcx. %0,0,%2\n" \
++ " stdcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -200,27 +200,27 @@
+ #define __arch_atomic_decrement_val_64(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: ldarx %0,0,%2\n" \
++ __asm __volatile ("1: ldarx %0,%y1\n" \
+ " subi %0,%0,1\n" \
+- " stdcx. %0,0,%2\n" \
++ " stdcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+
+ #define __arch_atomic_decrement_if_positive_64(mem) \
+ ({ int __val, __tmp; \
+- __asm __volatile ("1: ldarx %0,0,%3\n" \
++ __asm __volatile ("1: ldarx %0,%y2\n" \
+ " cmpdi 0,%0,0\n" \
+ " addi %1,%0,-1\n" \
+ " ble 2f\n" \
+- " stdcx. %1,0,%3\n" \
++ " stdcx. %1,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
diff --git a/patches/glibc/ports-2.14/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch b/patches/glibc/ports-2.14/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
new file mode 100644
index 0000000..b297ff0
--- /dev/null
+++ b/patches/glibc/ports-2.14/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
@@ -0,0 +1,374 @@
+http://yann.poupet.free.fr/ep93xx/
+Add support for the Maverick Crunch FPU on Cirrus EP93XX processor series
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/bits/endian.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/bits/endian.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/bits/endian.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/bits/endian.h 2009-11-13 00:51:22.000000000 +0100
+@@ -12,7 +12,7 @@
+ /* FPA floating point units are always big-endian, irrespective of the
+ CPU endianness. VFP floating point units use the same endianness
+ as the rest of the system. */
+-#ifdef __VFP_FP__
++#if defined __VFP_FP__ || defined __MAVERICK__
+ #define __FLOAT_WORD_ORDER __BYTE_ORDER
+ #else
+ #define __FLOAT_WORD_ORDER __BIG_ENDIAN
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/__longjmp.S glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/__longjmp.S
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/__longjmp.S 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/__longjmp.S 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/bits/fenv.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/bits/fenv.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/bits/fenv.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/bits/fenv.h 2009-11-13 00:51:22.000000000 +0100
+@@ -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
+ {
+@@ -44,6 +83,8 @@
+ modes exist, but you have to encode them in the actual instruction. */
+ #define FE_TONEAREST 0
+
++#endif
++
+ /* Type representing exception flags. */
+ typedef unsigned long int fexcept_t;
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/bits/setjmp.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/bits/setjmp.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/bits/setjmp.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/bits/setjmp.h 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/fegetround.c glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/fegetround.c
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/fegetround.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/fegetround.c 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/fesetround.c glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/fesetround.c
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/fesetround.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/fesetround.c 2009-11-13 00:51:22.000000000 +0100
+@@ -18,12 +18,28 @@
+ 02111-1307 USA. */
+
+ #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 -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/fpu_control.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/fpu_control.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/fpu_control.h 2009-11-13 00:51:22.000000000 +0100
+@@ -1,5 +1,6 @@
+ /* FPU control word definitions. ARM version.
+- Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
++ Copyright (C) 1996, 1997, 1998, 2000, 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
+@@ -20,6 +21,79 @@
+ #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 +173,6 @@
+ /* Default control word set at startup. */
+ extern fpu_control_t __fpu_control;
+
++#endif
++
+ #endif /* _FPU_CONTROL_H */
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/jmpbuf-offsets.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-11-13 00:51:22.000000000 +0100
+@@ -17,4 +17,8 @@
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
++#ifdef __MAVERICK__
++#define __JMP_BUF_SP 32
++#else
+ #define __JMP_BUF_SP 20
++#endif
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/setjmp.S glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/setjmp.S
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/fpu/setjmp.S 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/fpu/setjmp.S 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/gccframe.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/gccframe.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/gccframe.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/gccframe.h 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/gmp-mparam.h glibc-2.14/glibc-ports-2.14/sysdeps/arm/gmp-mparam.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/arm/gmp-mparam.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/arm/gmp-mparam.h 2009-11-13 00:51:22.000000000 +0100
+@@ -29,7 +29,7 @@
+ #if defined(__ARMEB__)
+ # define IEEE_DOUBLE_MIXED_ENDIAN 0
+ # define IEEE_DOUBLE_BIG_ENDIAN 1
+-#elif defined(__VFP_FP__)
++#elif defined(__VFP_FP__) || defined(__MAVERICK__)
+ # define IEEE_DOUBLE_MIXED_ENDIAN 0
+ # define IEEE_DOUBLE_BIG_ENDIAN 0
+ #else
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/bits/endian.h glibc-2.14/ports/sysdeps/arm/bits/endian.h
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/__longjmp.S glibc-2.14/ports/sysdeps/arm/fpu/__longjmp.S
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/bits/fenv.h glibc-2.14/ports/sysdeps/arm/fpu/bits/fenv.h
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/bits/setjmp.h glibc-2.14/ports/sysdeps/arm/fpu/bits/setjmp.h
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/fegetround.c glibc-2.14/ports/sysdeps/arm/fpu/fegetround.c
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/fesetround.c glibc-2.14/ports/sysdeps/arm/fpu/fesetround.c
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/fpu_control.h glibc-2.14/ports/sysdeps/arm/fpu/fpu_control.h
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.14/ports/sysdeps/arm/fpu/jmpbuf-offsets.h
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/fpu/setjmp.S glibc-2.14/ports/sysdeps/arm/fpu/setjmp.S
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/gccframe.h glibc-2.14/ports/sysdeps/arm/gccframe.h
+diff -durN glibc-2.14.orig/ports/sysdeps/arm/gmp-mparam.h glibc-2.14/ports/sysdeps/arm/gmp-mparam.h
diff --git a/patches/glibc/ports-2.14/580-nptl-lowlevellock.patch b/patches/glibc/ports-2.14/580-nptl-lowlevellock.patch
new file mode 100644
index 0000000..a2a141c
--- /dev/null
+++ b/patches/glibc/ports-2.14/580-nptl-lowlevellock.patch
@@ -0,0 +1,23 @@
+fix build error on arm like on hppa:
+
+arm-unknown-linux-gnu-gcc ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -fno-strict-aliasing -g -pipe -Wstrict-prototypes -fPIC -I../include -I/var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl -I/var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl -I../ports/sysdeps/arm/elf -I../ports/sysdeps/unix/sysv/linux/arm/nptl -I../ports/sysdeps/unix/sysv/linux/arm -I../nptl/sysdeps/unix/sysv/linux -I../nptl/sysdeps/pthread -I../sysdeps/pthread -I../ports/sysdeps/unix/sysv/linux -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../nptl/sysdeps/unix/sysv -I../ports/sysdeps/unix/sysv -I../sysdeps/unix/sysv -I../ports/sysdeps/unix/arm -I../nptl/sysdeps/unix -I../ports/sysdeps/unix -I../sysdeps/unix -I../sysdeps/posix -I../ports/sysdeps/arm/fpu -I../ports/sysdeps/arm/nptl -I../ports/sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -I../nptl -I../ports -I.. -I../libio -I. -nostdinc -isystem /usr/lib/gcc/arm-unknown-linux-gnu/4.3.2/include -isystem /usr/lib/gcc/arm-unknown-linux-gnu/4.3.2/include-fixed -isystem /usr/arm-unknown-linux-gnu/usr/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DSHARED -o /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os -MD -MP -MF /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os.dt -MT /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os -DNOT_IN_libc=1 -DIS_IN_rtld=1
+In file included from ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c:21:
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c: In function '__lll_lock_wait_private':
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: warning: implicit declaration of function 'THREAD_GETMEM'
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'THREAD_SELF' undeclared (first use in this function)
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: (Each undeclared identifier is reported only once
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: for each function it appears in.)
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'header' undeclared (first use in this function)
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-11-13 00:51:23.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <atomic.h>
+ #include <sysdep.h>
+ #include <kernel-features.h>
++#include <tls.h> /* Need THREAD_*, and header.*. */
+
+ #define FUTEX_WAIT 0
+ #define FUTEX_WAKE 1
+diff -durN glibc-2.14.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.14/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
diff --git a/patches/glibc/ports-2.14/610-fpu-cw-mips.patch b/patches/glibc/ports-2.14/610-fpu-cw-mips.patch
new file mode 100644
index 0000000..c624565
--- /dev/null
+++ b/patches/glibc/ports-2.14/610-fpu-cw-mips.patch
@@ -0,0 +1,15 @@
+http://sourceware.org/ml/libc-alpha/2002-10/msg00392.html
+
+diff -durN glibc-2.14.orig/glibc-ports-2.14/sysdeps/mips/fpu_control.h glibc-2.14/glibc-ports-2.14/sysdeps/mips/fpu_control.h
+--- glibc-2.14.orig/glibc-ports-2.14/sysdeps/mips/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.14/glibc-ports-2.14/sysdeps/mips/fpu_control.h 2009-11-13 00:51:31.000000000 +0100
+@@ -86,7 +86,7 @@
+ #define _FPU_RC_UP 0x2
+ #define _FPU_RC_DOWN 0x3
+
+-#define _FPU_RESERVED 0xfe3c0000 /* Reserved bits in cw */
++#define _FPU_RESERVED 0xfebc0000 /* Reserved bits in cw */
+
+
+ /* The fdlibm code requires strict IEEE double precision arithmetic,
+diff -durN glibc-2.14.orig/ports/sysdeps/mips/fpu_control.h glibc-2.14/ports/sysdeps/mips/fpu_control.h
diff --git a/patches/glibc/ports-2.14/630-mips_shn_undef-hack.patch b/patches/glibc/ports-2.14/630-mips_shn_undef-hack.patch
new file mode 100644
index 0000000..791d76c
--- /dev/null
+++ b/patches/glibc/ports-2.14/630-mips_shn_undef-hack.patch
@@ -0,0 +1,16 @@
+diff -durN glibc-2.13.orig/elf/dl-lookup.c glibc-2.13/elf/dl-lookup.c
+--- glibc-2.13.orig/elf/dl-lookup.c 2009-03-30 23:14:32.000000000 +0200
++++ glibc-2.13/elf/dl-lookup.c 2009-11-13 00:51:36.000000000 +0100
+@@ -301,6 +301,12 @@
+ /* FALLTHROUGH */
+ case STB_GLOBAL:
+ success:
++#ifdef __mips__
++ /* HACK: MIPS marks its lazy evaluation stubs with SHN_UNDEF
++ symbols, we skip them. */
++ if (sym->st_shndx == SHN_UNDEF)
++ break;
++#endif
+ /* Global definition. Just what we need. */
+ result->s = sym;
+ result->m = (struct link_map *) map;
diff --git a/patches/glibc/ports-2.14/640-alpha-atfcts.patch b/patches/glibc/ports-2.14/640-alpha-atfcts.patch
new file mode 100644
index 0000000..7a8a94a
--- /dev/null
+++ b/patches/glibc/ports-2.14/640-alpha-atfcts.patch
@@ -0,0 +1,12 @@
+--- glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2010-07-27 14:34:39.000000000 +0300
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h.new 2011-03-10 18:54:37.686795979 +0200
+@@ -437,7 +437,8 @@
+ the code. On PPC they were introduced in 2.6.17-rc1,
+ on SH in 2.6.19-rc1. */
+ #if __LINUX_KERNEL_VERSION >= 0x020611 \
+- && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613)
++ && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613) \
++ && (!defined __alpha__)
+ # define __ASSUME_ATFCTS 1
+ #endif
+
diff --git a/patches/glibc/ports-2.14/650-syslog.patch b/patches/glibc/ports-2.14/650-syslog.patch
new file mode 100644
index 0000000..c20cafc
--- /dev/null
+++ b/patches/glibc/ports-2.14/650-syslog.patch
@@ -0,0 +1,12 @@
+diff -durN glibc-cvs-2.9.orig/misc/syslog.c glibc-cvs-2.9/misc/syslog.c
+--- glibc-cvs-2.9.orig/misc/syslog.c 2009-06-01 10:16:50.000000000 +0200
++++ glibc-cvs-2.9/misc/syslog.c 2009-06-01 10:17:20.000000000 +0200
+@@ -152,7 +152,7 @@
+ #define INTERNALLOG LOG_ERR|LOG_CONS|LOG_PERROR|LOG_PID
+ /* Check for invalid bits. */
+ if (pri & ~(LOG_PRIMASK|LOG_FACMASK)) {
+- syslog(INTERNALLOG,
++ __syslog(INTERNALLOG,
+ "syslog: unknown facility/priority: %x", pri);
+ pri &= LOG_PRIMASK|LOG_FACMASK;
+ }
diff --git a/patches/glibc/ports-2.14/660-debug-readlink_chk-readklinkat_chk.patch b/patches/glibc/ports-2.14/660-debug-readlink_chk-readklinkat_chk.patch
new file mode 100644
index 0000000..a5a7052
--- /dev/null
+++ b/patches/glibc/ports-2.14/660-debug-readlink_chk-readklinkat_chk.patch
@@ -0,0 +1,24 @@
+diff -dur glibc-cvs-2.9.orig/debug/readlink_chk.c glibc-cvs-2.9/debug/readlink_chk.c
+--- glibc-cvs-2.9.orig/debug/readlink_chk.c 2005-03-01 01:41:15.000000000 +0100
++++ glibc-cvs-2.9/debug/readlink_chk.c 2009-06-01 10:59:37.000000000 +0200
+@@ -25,7 +25,7 @@
+
+
+ ssize_t
+-__readlink_chk (const char *path, void *buf, size_t len, size_t buflen)
++__readlink_chk (const char *path, char *buf, size_t len, size_t buflen)
+ {
+ if (len > buflen)
+ __chk_fail ();
+diff -dur glibc-cvs-2.9.orig/debug/readlinkat_chk.c glibc-cvs-2.9/debug/readlinkat_chk.c
+--- glibc-cvs-2.9.orig/debug/readlinkat_chk.c 2006-04-24 18:56:12.000000000 +0200
++++ glibc-cvs-2.9/debug/readlinkat_chk.c 2009-06-01 11:07:26.000000000 +0200
+@@ -21,7 +21,7 @@
+
+
+ ssize_t
+-__readlinkat_chk (int fd, const char *path, void *buf, size_t len,
++__readlinkat_chk (int fd, const char *path, char *buf, size_t len,
+ size_t buflen)
+ {
+ if (len > buflen)
diff --git a/patches/glibc/ports-2.15/090-Fix-ARM-build-with-GCC-trunk.patch b/patches/glibc/ports-2.15/090-Fix-ARM-build-with-GCC-trunk.patch
new file mode 100644
index 0000000..1a632fe
--- /dev/null
+++ b/patches/glibc/ports-2.15/090-Fix-ARM-build-with-GCC-trunk.patch
@@ -0,0 +1,72 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+index bff3e2b..1f1eb71 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (int, _Unwind_Action, _Unwind_Exception_Class, struct _Unwind_Exception *,
+ struct _Unwind_Context *);
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-forcedunwind.c
+@@ -23,7 +23,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+--- a/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/eabi/nptl/unwind-resume.c
+@@ -21,7 +21,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
diff --git a/patches/glibc/ports-2.15/100-respect-env-CPPFLAGS.patch b/patches/glibc/ports-2.15/100-respect-env-CPPFLAGS.patch
new file mode 100644
index 0000000..3798cb2
--- /dev/null
+++ b/patches/glibc/ports-2.15/100-respect-env-CPPFLAGS.patch
@@ -0,0 +1,14 @@
+Respect environment CPPFLAGS when we run ./configure so we can inject
+random -D things without having to set CFLAGS/ASFLAGS
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-05-09 23:57:56.000000000 +0200
++++ glibc-2.13/Makeconfig 2009-11-13 00:49:41.000000000 +0100
+@@ -697,6 +697,7 @@
+ $(foreach lib,$(libof-$(basename $(@F))) \
+ $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
+ $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
++CPPFLAGS += $(CPPFLAGS-config)
+ override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) \
+ $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+ $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
diff --git a/patches/glibc/ports-2.15/120-i386-x86_64-revert-clone-cfi.patch b/patches/glibc/ports-2.15/120-i386-x86_64-revert-clone-cfi.patch
new file mode 100644
index 0000000..c7f6182
--- /dev/null
+++ b/patches/glibc/ports-2.15/120-i386-x86_64-revert-clone-cfi.patch
@@ -0,0 +1,55 @@
+revert cfi additions to clone on i386/x86_64 to workaround problems in
+gcc's unwinder code. this is not a bug in glibc, it triggers problems
+elsewhere. this cfi code does not gain us a whole lot anyways.
+
+http://gcc.gnu.org/ml/gcc/2006-12/msg00293.html
+
+Index: sysdeps/unix/sysv/linux/i386/clone.S
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/clone.S,v
+retrieving revision 1.27
+retrieving revision 1.26
+diff -u -p -r1.27 -r1.26
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S 2009-11-13 00:49:45.000000000 +0100
+@@ -120,9 +120,6 @@
+ ret
+
+ L(thread_start):
+- cfi_startproc;
+- /* Clearing frame pointer is insufficient, use CFI. */
+- cfi_undefined (eip);
+ /* Note: %esi is zero. */
+ movl %esi,%ebp /* terminate the stack frame */
+ #ifdef RESET_PID
+@@ -155,7 +152,6 @@
+ jmp L(haspid)
+ .previous
+ #endif
+- cfi_endproc;
+
+ cfi_startproc
+ PSEUDO_END (BP_SYM (__clone))
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S 2009-11-13 00:49:45.000000000 +0100
+@@ -89,9 +89,6 @@
+ ret
+
+ L(thread_start):
+- cfi_startproc;
+- /* Clearing frame pointer is insufficient, use CFI. */
+- cfi_undefined (rip);
+ /* Clear the frame pointer. The ABI suggests this be done, to mark
+ the outermost frame obviously. */
+ xorl %ebp, %ebp
+@@ -116,7 +113,6 @@
+ /* Call exit with return value from function call. */
+ movq %rax, %rdi
+ call HIDDEN_JUMPTARGET (_exit)
+- cfi_endproc;
+
+ cfi_startproc;
+ PSEUDO_END (BP_SYM (__clone))
diff --git a/patches/glibc/ports-2.15/140-disable-ldconfig.patch b/patches/glibc/ports-2.15/140-disable-ldconfig.patch
new file mode 100644
index 0000000..378e1df
--- /dev/null
+++ b/patches/glibc/ports-2.15/140-disable-ldconfig.patch
@@ -0,0 +1,16 @@
+do not bother running ldconfig on DESTDIR. it wants to write the temp cache
+file outside of the chroot. doesnt matter anyways as we wont use the cache
+results (portage will rebuild cache), so running ldconfig is simply a waste
+of time.
+
+diff -durN glibc-2.13.orig/Makefile glibc-2.13/Makefile
+--- glibc-2.13.orig/Makefile 2009-04-23 20:23:03.000000000 +0200
++++ glibc-2.13/Makefile 2009-11-13 00:49:49.000000000 +0100
+@@ -116,6 +116,7 @@
+ rm -f $(symbolic-link-list)
+
+ install:
++dont-bother-with-destdir:
+ -test ! -x $(common-objpfx)elf/ldconfig || LC_ALL=C LANGUAGE=C \
+ $(common-objpfx)elf/ldconfig $(addprefix -r ,$(install_root)) \
+ $(slibdir) $(libdir)
diff --git a/patches/glibc/ports-2.15/150-queue-header-updates.patch b/patches/glibc/ports-2.15/150-queue-header-updates.patch
new file mode 100644
index 0000000..7cbe70e
--- /dev/null
+++ b/patches/glibc/ports-2.15/150-queue-header-updates.patch
@@ -0,0 +1,85 @@
+grab some updates from FreeBSD
+
+http://bugs.gentoo.org/201979
+
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+--- glibc-2.13.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100
++++ glibc-2.13/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100
+@@ -136,6 +136,11 @@
+ (var); \
+ (var) = ((var)->field.le_next))
+
++#define LIST_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = LIST_FIRST((head)); \
++ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ /*
+ * List access methods.
+ */
+@@ -197,6 +202,16 @@
+ #define SLIST_FOREACH(var, head, field) \
+ for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
+
++#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = SLIST_FIRST((head)); \
++ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
++ (var) = (tvar))
++
++#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
++ for ((varp) = &SLIST_FIRST((head)); \
++ ((var) = *(varp)) != NULL; \
++ (varp) = &SLIST_NEXT((var), field))
++
+ /*
+ * Singly-linked List access methods.
+ */
+@@ -242,6 +257,12 @@
+ (head)->stqh_last = &(elm)->field.stqe_next; \
+ } while (/*CONSTCOND*/0)
+
++#define STAILQ_LAST(head, type, field) \
++ (STAILQ_EMPTY((head)) ? \
++ NULL : \
++ ((struct type *)(void *) \
++ ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
++
+ #define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
+ (head)->stqh_last = &(elm)->field.stqe_next; \
+@@ -271,6 +292,11 @@
+ (var); \
+ (var) = ((var)->field.stqe_next))
+
++#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = STAILQ_FIRST((head)); \
++ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ #define STAILQ_CONCAT(head1, head2) do { \
+ if (!STAILQ_EMPTY((head2))) { \
+ *(head1)->stqh_last = (head2)->stqh_first; \
+@@ -437,11 +463,21 @@
+ (var); \
+ (var) = ((var)->field.tqe_next))
+
++#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = TAILQ_FIRST((head)); \
++ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \
+ (var); \
+ (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
+
++#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
++ for ((var) = TAILQ_LAST((head), headname); \
++ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
++ (var) = (tvar))
++
+ #define TAILQ_CONCAT(head1, head2, field) do { \
+ if (!TAILQ_EMPTY(head2)) { \
+ *(head1)->tqh_last = (head2)->tqh_first; \
diff --git a/patches/glibc/ports-2.15/160-manual-no-perl.patch b/patches/glibc/ports-2.15/160-manual-no-perl.patch
new file mode 100644
index 0000000..5e2b807
--- /dev/null
+++ b/patches/glibc/ports-2.15/160-manual-no-perl.patch
@@ -0,0 +1,24 @@
+If we're using a cvs snapshot which updates the source files, and
+perl isn't installed yet, then we can't regen the docs. Not a big
+deal, so just whine a little and continue on our merry way.
+
+http://bugs.gentoo.org/60132
+
+diff -durN glibc-2.13.orig/manual/Makefile glibc-2.13/manual/Makefile
+--- glibc-2.13.orig/manual/Makefile 2006-01-08 07:43:47.000000000 +0100
++++ glibc-2.13/manual/Makefile 2009-11-13 00:49:54.000000000 +0100
+@@ -104,9 +104,14 @@
+ libm-err.texi: stamp-libm-err
+ stamp-libm-err: libm-err-tab.pl $(wildcard $(foreach dir,$(sysdirs),\
+ $(dir)/libm-test-ulps))
++ifneq ($(PERL),no)
+ pwd=`pwd`; \
+ $(PERL) $< $$pwd/.. > libm-err-tmp
+ $(move-if-change) libm-err-tmp libm-err.texi
++else
++ echo "Unable to rebuild math docs, no perl installed"
++ touch libm-err.texi
++endif
+ touch $@
+
+ # Generate Texinfo files from the C source for the example programs.
diff --git a/patches/glibc/ports-2.15/170-localedef-fix-trampoline.patch b/patches/glibc/ports-2.15/170-localedef-fix-trampoline.patch
new file mode 100644
index 0000000..4784a07
--- /dev/null
+++ b/patches/glibc/ports-2.15/170-localedef-fix-trampoline.patch
@@ -0,0 +1,69 @@
+#! /bin/sh -e
+
+# DP: Description: Fix localedef segfault when run under exec-shield,
+# PaX or similar. (#231438, #198099)
+# DP: Dpatch Author: James Troup <james@nocrew.org>
+# DP: Patch Author: (probably) Jakub Jelinek <jakub@redhat.com>
+# DP: Upstream status: Unknown
+# DP: Status Details: Unknown
+# DP: Date: 2004-03-16
+
+if [ $# -ne 2 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch) patch -d "$2" -f --no-backup-if-mismatch -p1 < $0;;
+ -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p1 < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+diff -durN glibc-2.13.orig/locale/programs/3level.h glibc-2.13/locale/programs/3level.h
+--- glibc-2.13.orig/locale/programs/3level.h 2007-07-16 02:54:59.000000000 +0200
++++ glibc-2.13/locale/programs/3level.h 2009-11-13 00:49:56.000000000 +0100
+@@ -203,6 +203,42 @@
+ }
+ }
+ }
++
++/* GCC ATM seems to do a poor job with pointers to nested functions passed
++ to inlined functions. Help it a little bit with this hack. */
++#define wchead_table_iterate(tp, fn) \
++do \
++ { \
++ struct wchead_table *t = (tp); \
++ uint32_t index1; \
++ for (index1 = 0; index1 < t->level1_size; index1++) \
++ { \
++ uint32_t lookup1 = t->level1[index1]; \
++ if (lookup1 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup1_shifted = lookup1 << t->q; \
++ uint32_t index2; \
++ for (index2 = 0; index2 < (1 << t->q); index2++) \
++ { \
++ uint32_t lookup2 = t->level2[index2 + lookup1_shifted]; \
++ if (lookup2 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup2_shifted = lookup2 << t->p; \
++ uint32_t index3; \
++ for (index3 = 0; index3 < (1 << t->p); index3++) \
++ { \
++ struct element_t *lookup3 \
++ = t->level3[index3 + lookup2_shifted]; \
++ if (lookup3 != NULL) \
++ fn ((((index1 << t->q) + index2) << t->p) + index3, \
++ lookup3); \
++ } \
++ } \
++ } \
++ } \
++ } \
++ } while (0)
++
+ #endif
+
+ #ifndef NO_FINALIZE
diff --git a/patches/glibc/ports-2.15/180-resolv-dynamic.patch b/patches/glibc/ports-2.15/180-resolv-dynamic.patch
new file mode 100644
index 0000000..e916bce
--- /dev/null
+++ b/patches/glibc/ports-2.15/180-resolv-dynamic.patch
@@ -0,0 +1,39 @@
+ripped from SuSE
+
+if /etc/resolv.conf is updated, then make sure applications
+already running get the updated information.
+
+http://bugs.gentoo.org/177416
+
+diff -durN glibc-2.13.orig/resolv/res_libc.c glibc-2.13/resolv/res_libc.c
+--- glibc-2.13.orig/resolv/res_libc.c 2009-02-07 05:27:42.000000000 +0100
++++ glibc-2.13/resolv/res_libc.c 2009-11-13 00:49:59.000000000 +0100
+@@ -22,6 +22,7 @@
+ #include <arpa/nameser.h>
+ #include <resolv.h>
+ #include <bits/libc-lock.h>
++#include <sys/stat.h>
+
+
+ /* The following bit is copied from res_data.c (where it is #ifdef'ed
+@@ -95,6 +96,20 @@
+ __res_maybe_init (res_state resp, int preinit)
+ {
+ if (resp->options & RES_INIT) {
++ static time_t last_mtime, last_check;
++ time_t now;
++ struct stat statbuf;
++
++ time (&now);
++ if (now != last_check) {
++ last_check = now;
++ if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) {
++ last_mtime = statbuf.st_mtime;
++ atomicinclock (lock);
++ atomicinc (__res_initstamp);
++ atomicincunlock (lock);
++ }
++ }
+ if (__res_initstamp != resp->_u._ext.initstamp) {
+ if (resp->nscount > 0)
+ __res_iclose (resp, true);
diff --git a/patches/glibc/ports-2.15/200-fadvise64_64.patch b/patches/glibc/ports-2.15/200-fadvise64_64.patch
new file mode 100644
index 0000000..71bca38
--- /dev/null
+++ b/patches/glibc/ports-2.15/200-fadvise64_64.patch
@@ -0,0 +1,28 @@
+ripped from Debian
+
+ sysdeps/unix/sysv/linux/posix_fadvise.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c 2003-08-17 02:36:22.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c 2009-11-13 00:50:03.000000000 +0100
+@@ -35,6 +35,19 @@
+ return INTERNAL_SYSCALL_ERRNO (ret, err);
+ return 0;
+ #else
++# ifdef __NR_fadvise64_64
++ INTERNAL_SYSCALL_DECL (err);
++ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
++ __LONG_LONG_PAIR ((long) (offset >> 31),
++ (long) offset),
++ __LONG_LONG_PAIR ((long) (len >> 31),
++ (long) len),
++ advise);
++ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
++# else
+ return ENOSYS;
++# endif
+ #endif
+ }
diff --git a/patches/glibc/ports-2.15/220-section-comments.patch b/patches/glibc/ports-2.15/220-section-comments.patch
new file mode 100644
index 0000000..d717829
--- /dev/null
+++ b/patches/glibc/ports-2.15/220-section-comments.patch
@@ -0,0 +1,24 @@
+http://sources.redhat.com/ml/binutils/2004-04/msg00665.html
+
+fixes building on some architectures (like m68k/arm/cris/etc...) because
+it does the right thing
+
+diff -durN glibc-2.13.orig/include/libc-symbols.h glibc-2.13/include/libc-symbols.h
+--- glibc-2.13.orig/include/libc-symbols.h 2009-03-14 00:51:46.000000000 +0100
++++ glibc-2.13/include/libc-symbols.h 2009-11-13 00:50:07.000000000 +0100
+@@ -239,12 +239,12 @@
+ # define __make_section_unallocated(section_string)
+ # endif
+
+-/* Tacking on "\n\t#" to the section name makes gcc put it's bogus
++/* Tacking on "\n#APP\n\t#" to the section name makes gcc put it's bogus
+ section attributes on what looks like a comment to the assembler. */
+ # ifdef HAVE_SECTION_QUOTES
+-# define __sec_comment "\"\n\t#\""
++# define __sec_comment "\"\n#APP\n\t#\""
+ # else
+-# define __sec_comment "\n\t#"
++# define __sec_comment "\n#APP\n\t#"
+ # endif
+ # define link_warning(symbol, msg) \
+ __make_section_unallocated (".gnu.warning." #symbol) \
diff --git a/patches/glibc/ports-2.15/230-no-inline-gmon.patch b/patches/glibc/ports-2.15/230-no-inline-gmon.patch
new file mode 100644
index 0000000..fa33c2b
--- /dev/null
+++ b/patches/glibc/ports-2.15/230-no-inline-gmon.patch
@@ -0,0 +1,36 @@
+http://bugs.gentoo.org/196245
+http://sourceware.org/ml/libc-alpha/2006-05/msg00017.html
+
+Attached is a patch to add __attribute__ ((noinline)) to
+call_gmon_start.
+
+Without this patch, the sec script that processed initfini.s removes a
+part of inlined call_gmon_start, causing undefined label errors.
+
+This patch solves the problem by forcing gcc not to inline
+call_gmon_start with __attribute__ ((noinline)).
+
+Tested by building for arm-none-lixux-gnueabi. OK to apply?
+
+Kazu Hirata
+
+2006-05-07 Kazu Hirata &lt;kazu@codesourcery.com&gt;
+
+ * sysdeps/generic/initfini.c (call_gmon_start): Add
+ __attribute__ ((noinline)).
+
+Index: sysdeps/generic/initfini.c
+===================================================================
+
+diff -durN glibc-2.13.orig/sysdeps/generic/initfini.c glibc-2.13/sysdeps/generic/initfini.c
+--- glibc-2.13.orig/sysdeps/generic/initfini.c 2007-06-17 20:02:40.000000000 +0200
++++ glibc-2.13/sysdeps/generic/initfini.c 2009-11-13 00:50:09.000000000 +0100
+@@ -70,7 +70,7 @@
+ /* The beginning of _init: */
+ asm ("\n/*@_init_PROLOG_BEGINS*/");
+
+-static void
++static void __attribute__ ((noinline))
+ call_gmon_start(void)
+ {
+ extern void __gmon_start__ (void) __attribute__ ((weak)); /*weak_extern (__gmon_start__);*/
diff --git a/patches/glibc/ports-2.15/260-assume-pipe2.patch b/patches/glibc/ports-2.15/260-assume-pipe2.patch
new file mode 100644
index 0000000..42e8f4e
--- /dev/null
+++ b/patches/glibc/ports-2.15/260-assume-pipe2.patch
@@ -0,0 +1,40 @@
+http://bugs.gentoo.org/250342
+http://sources.redhat.com/bugzilla/show_bug.cgi?id=9685
+
+we cant assume sock_cloexec and pipe2 are bound together as the former defines
+are found in glibc only while the latter are a combo of kernel headers and
+glibc. so if we do a runtime detection of SOCK_CLOEXEC, but pipe2() is a stub
+inside of glibc, we hit a problem. for example:
+
+#include <grp.h>
+#include <stdio.h>
+main()
+{
+ getgrnam("portage");
+ if (!popen("ls", "r"))
+ perror("popen()");
+}
+
+getgrnam() will detect that the kernel supports SOCK_CLOEXEC and then set both
+__have_sock_cloexec and __have_pipe2 to true. but if glibc was built against
+older kernel headers where __NR_pipe2 does not exist, glibc will have a ENOSYS
+stub for it. so popen() will always fail as glibc assumes pipe2() works.
+
+diff -durN glibc-2.13.orig/socket/have_sock_cloexec.c glibc-2.13/socket/have_sock_cloexec.c
+--- glibc-2.13.orig/socket/have_sock_cloexec.c 2008-07-25 18:46:23.000000000 +0200
++++ glibc-2.13/socket/have_sock_cloexec.c 2009-11-13 00:50:15.000000000 +0100
+@@ -16,9 +16,14 @@
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
++#include <fcntl.h>
+ #include <sys/socket.h>
+ #include <kernel-features.h>
+
+ #if defined SOCK_CLOEXEC && !defined __ASSUME_SOCK_CLOEXEC
+ int __have_sock_cloexec;
+ #endif
++
++#if defined O_CLOEXEC && !defined __ASSUME_PIPE2
++int __have_pipe2;
++#endif
diff --git a/patches/glibc/ports-2.15/270-china.patch b/patches/glibc/ports-2.15/270-china.patch
new file mode 100644
index 0000000..41d7759
--- /dev/null
+++ b/patches/glibc/ports-2.15/270-china.patch
@@ -0,0 +1,32 @@
+
+
+diff -durN glibc-2.13.orig/localedata/locales/zh_TW glibc-2.13/localedata/locales/zh_TW
+--- glibc-2.13.orig/localedata/locales/zh_TW 2004-11-01 00:42:28.000000000 +0100
++++ glibc-2.13/localedata/locales/zh_TW 2009-11-13 00:50:17.000000000 +0100
+@@ -1,7 +1,7 @@
+ comment_char %
+ escape_char /
+ %
+-% Chinese language locale for Taiwan R.O.C.
++% Chinese language locale for Taiwan
+ % charmap: BIG5-CP950
+ %
+ % Original Author:
+@@ -17,7 +17,7 @@
+ % Reference: http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
+
+ LC_IDENTIFICATION
+-title "Chinese locale for Taiwan R.O.C."
++title "Chinese locale for Taiwan"
+ source ""
+ address ""
+ contact ""
+@@ -25,7 +25,7 @@
+ tel ""
+ fax ""
+ language "Chinese"
+-territory "Taiwan R.O.C."
++territory "Taiwan"
+ revision "0.2"
+ date "2000-08-02"
+ %
diff --git a/patches/glibc/ports-2.15/280-new-valencian-locale.patch b/patches/glibc/ports-2.15/280-new-valencian-locale.patch
new file mode 100644
index 0000000..4cdd108
--- /dev/null
+++ b/patches/glibc/ports-2.15/280-new-valencian-locale.patch
@@ -0,0 +1,115 @@
+http://bugs.gentoo.org/show_bug.cgi?id=131815
+http://sourceware.org/bugzilla/show_bug.cgi?id=2522
+
+diff -durN glibc-2.13.orig/localedata/SUPPORTED glibc-2.13/localedata/SUPPORTED
+--- glibc-2.13.orig/localedata/SUPPORTED 2009-04-18 10:43:52.000000000 +0200
++++ glibc-2.13/localedata/SUPPORTED 2009-11-13 00:50:20.000000000 +0100
+@@ -72,6 +72,8 @@
+ ca_ES.UTF-8/UTF-8 \
+ ca_ES/ISO-8859-1 \
+ ca_ES@euro/ISO-8859-15 \
++ca_ES.UTF-8@valencia/UTF-8 \
++ca_ES@valencia/ISO-8859-15 \
+ ca_FR.UTF-8/UTF-8 \
+ ca_FR/ISO-8859-15 \
+ ca_IT.UTF-8/UTF-8 \
+diff -durN glibc-2.13.orig/localedata/locales/ca_ES@valencia glibc-2.13/localedata/locales/ca_ES@valencia
+--- glibc-2.13.orig/localedata/locales/ca_ES@valencia 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/localedata/locales/ca_ES@valencia 2009-11-13 00:50:20.000000000 +0100
+@@ -0,0 +1,96 @@
++comment_char %
++escape_char /
++%
++% Valencian (southern Catalan) locale for Spain with Euro
++%
++% Note that this locale is almost the same as ca_ES@euro. The point of having
++% a separate locale is only for PO translations, which have a lot of social
++% support and are very appreciated by the Valencian-speaking community.
++%
++% Contact: Jordi Mallach
++% Email: jordi@gnu.org
++% Tel:
++% Fax:
++% Language: ca
++% Territory: ES
++% Option: euro
++% Revision: 1.0
++% Date: 2006-04-06
++% Application: general
++% Users: general
++% Repertoiremap: mnemonic,ds
++% Charset: ISO-8859-15
++% Distribution and use is free, also
++% for commercial purposes.
++
++LC_IDENTIFICATION
++title "Valencian (southern Catalan) locale for Spain with Euro"
++source ""
++address ""
++contact "Jordi Mallach"
++email "jordi@gnu.org"
++tel ""
++fax ""
++language "Catalan"
++territory "Spain"
++revision "1.0"
++date "2006-04-06"
++%
++category "ca_ES@valencia:2006";LC_IDENTIFICATION
++category "ca_ES@valencia:2006";LC_CTYPE
++category "ca_ES@valencia:2006";LC_COLLATE
++category "ca_ES@valencia:2006";LC_MONETARY
++category "ca_ES@valencia:2006";LC_NUMERIC
++category "ca_ES@valencia:2006";LC_TIME
++category "ca_ES@valencia:2006";LC_MESSAGES
++category "ca_ES@valencia:2006";LC_PAPER
++category "ca_ES@valencia:2006";LC_NAME
++category "ca_ES@valencia:2006";LC_ADDRESS
++category "ca_ES@valencia:2006";LC_TELEPHONE
++category "ca_ES@valencia:2006";LC_MEASUREMENT
++
++END LC_IDENTIFICATION
++
++LC_CTYPE
++copy "i18n"
++END LC_CTYPE
++
++LC_COLLATE
++copy "ca_ES"
++END LC_COLLATE
++
++LC_MONETARY
++copy "ca_ES"
++END LC_MONETARY
++
++LC_NUMERIC
++copy "ca_ES"
++END LC_NUMERIC
++
++LC_TIME
++copy "ca_ES"
++END LC_TIME
++
++LC_MESSAGES
++copy "ca_ES"
++END LC_MESSAGES
++
++LC_PAPER
++copy "ca_ES"
++END LC_PAPER
++
++LC_NAME
++copy "ca_ES"
++END LC_NAME
++
++LC_ADDRESS
++copy "ca_ES"
++END LC_ADDRESS
++
++LC_TELEPHONE
++copy "ca_ES"
++END LC_TELEPHONE
++
++LC_MEASUREMENT
++copy "ca_ES"
++END LC_MEASUREMENT
diff --git a/patches/glibc/ports-2.15/300-nscd-one-fork.patch b/patches/glibc/ports-2.15/300-nscd-one-fork.patch
new file mode 100644
index 0000000..adc9b3f
--- /dev/null
+++ b/patches/glibc/ports-2.15/300-nscd-one-fork.patch
@@ -0,0 +1,40 @@
+only fork one to assist in stop-start-daemon assumptions about daemon behavior
+
+http://bugs.gentoo.org/190785
+
+diff -durN glibc-2.13.orig/nscd/nscd.c glibc-2.13/nscd/nscd.c
+--- glibc-2.13.orig/nscd/nscd.c 2009-02-06 21:10:27.000000000 +0100
++++ glibc-2.13/nscd/nscd.c 2009-11-13 00:50:24.000000000 +0100
+@@ -182,6 +182,9 @@
+ if (pid != 0)
+ exit (0);
+
++ if (write_pid (_PATH_NSCDPID) < 0)
++ dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno));
++
+ int nullfd = open (_PATH_DEVNULL, O_RDWR);
+ if (nullfd != -1)
+ {
+@@ -231,12 +234,6 @@
+ for (i = min_close_fd; i < getdtablesize (); i++)
+ close (i);
+
+- pid = fork ();
+- if (pid == -1)
+- error (EXIT_FAILURE, errno, _("cannot fork"));
+- if (pid != 0)
+- exit (0);
+-
+ setsid ();
+
+ if (chdir ("/") != 0)
+@@ -245,9 +242,6 @@
+
+ openlog ("nscd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
+
+- if (write_pid (_PATH_NSCDPID) < 0)
+- dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno));
+-
+ if (!init_logfile ())
+ dbg_log (_("Could not create log file"));
+
diff --git a/patches/glibc/ports-2.15/310-hppa-nptl-carlos.patch b/patches/glibc/ports-2.15/310-hppa-nptl-carlos.patch
new file mode 100644
index 0000000..4c028b2
--- /dev/null
+++ b/patches/glibc/ports-2.15/310-hppa-nptl-carlos.patch
@@ -0,0 +1,246 @@
+
+
+diff -durN glibc-2.13.orig/elf/rtld.c glibc-2.13/elf/rtld.c
+--- glibc-2.13.orig/elf/rtld.c 2009-04-17 02:00:08.000000000 +0200
++++ glibc-2.13/elf/rtld.c 2009-11-13 00:50:26.000000000 +0100
+@@ -392,14 +392,14 @@
+ know it is available. We do not have to clear the memory if we
+ do not have to use the temporary bootstrap_map. Global variables
+ are initialized to zero by default. */
+-#ifndef DONT_USE_BOOTSTRAP_MAP
++#if !defined DONT_USE_BOOTSTRAP_MAP
+ # ifdef HAVE_BUILTIN_MEMSET
+ __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
+ # else
+- for (size_t cnt = 0;
+- cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
+- ++cnt)
+- bootstrap_map.l_info[cnt] = 0;
++ /* Clear the whole bootstrap_map structure */
++ for (char *cnt = (char *)&(bootstrap_map);
++ cnt < ((char *)&(bootstrap_map) + sizeof (bootstrap_map));
++ *cnt++ = '\0');
+ # endif
+ # if USE___THREAD
+ bootstrap_map.l_tls_modid = 0;
+diff -durN glibc-2.13.orig/include/atomic.h glibc-2.13/include/atomic.h
+--- glibc-2.13.orig/include/atomic.h 2009-02-09 00:49:53.000000000 +0100
++++ glibc-2.13/include/atomic.h 2009-11-13 00:50:26.000000000 +0100
+@@ -185,7 +185,7 @@
+ __typeof (*(mem)) __atg5_value = (newvalue); \
+ \
+ do \
+- __atg5_oldval = *__atg5_memp; \
++ __atg5_oldval = *(volatile __typeof (mem))__atg5_memp; \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg5_memp, __atg5_value, \
+ __atg5_oldval), 0)); \
+@@ -206,7 +206,7 @@
+ __typeof (*(mem)) __atg6_value = (value); \
+ \
+ do \
+- __atg6_oldval = *__atg6_memp; \
++ __atg6_oldval = *(volatile __typeof (mem))__atg6_memp; \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg6_memp, \
+ __atg6_oldval \
+@@ -224,7 +224,7 @@
+ __typeof (*(mem)) __atg7_value = (value); \
+ \
+ do \
+- __atg7_oldv = *__atg7_memp; \
++ __atg7_oldv = *(volatile __typeof (mem))__atg7_memp; \
+ while (__builtin_expect \
+ (catomic_compare_and_exchange_bool_acq (__atg7_memp, \
+ __atg7_oldv \
+@@ -242,7 +242,7 @@
+ __typeof (mem) __atg8_memp = (mem); \
+ __typeof (*(mem)) __atg8_value = (value); \
+ do { \
+- __atg8_oldval = *__atg8_memp; \
++ __atg8_oldval = *(volatile __typeof (mem))__atg8_memp; \
+ if (__atg8_oldval >= __atg8_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -259,7 +259,7 @@
+ __typeof (mem) __atg9_memp = (mem); \
+ __typeof (*(mem)) __atg9_value = (value); \
+ do { \
+- __atg9_oldv = *__atg9_memp; \
++ __atg9_oldv = *(volatile __typeof (mem))__atg9_memp; \
+ if (__atg9_oldv >= __atg9_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -277,7 +277,7 @@
+ __typeof (mem) __atg10_memp = (mem); \
+ __typeof (*(mem)) __atg10_value = (value); \
+ do { \
+- __atg10_oldval = *__atg10_memp; \
++ __atg10_oldval = *(volatile __typeof (mem))__atg10_memp; \
+ if (__atg10_oldval <= __atg10_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -361,7 +361,7 @@
+ \
+ do \
+ { \
+- __atg11_oldval = *__atg11_memp; \
++ __atg11_oldval = *(volatile __typeof (mem))__atg11_memp; \
+ if (__builtin_expect (__atg11_oldval <= 0, 0)) \
+ break; \
+ } \
+@@ -400,7 +400,7 @@
+ __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit)); \
+ \
+ do \
+- __atg14_old = (*__atg14_memp); \
++ __atg14_old = (*(volatile __typeof (mem))__atg14_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg14_memp, \
+ __atg14_old | __atg14_mask,\
+@@ -418,7 +418,7 @@
+ __typeof (*(mem)) __atg15_mask = (mask); \
+ \
+ do \
+- __atg15_old = (*__atg15_memp); \
++ __atg15_old = (*(volatile __typeof (mem))__atg15_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg15_memp, \
+ __atg15_old & __atg15_mask, \
+@@ -450,7 +450,7 @@
+ __typeof (*(mem)) __atg16_mask = (mask); \
+ \
+ do \
+- __atg16_old = (*__atg16_memp); \
++ __atg16_old = (*(volatile __typeof (mem))__atg16_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg16_memp, \
+ __atg16_old & __atg16_mask,\
+@@ -468,7 +468,7 @@
+ __typeof (*(mem)) __atg17_mask = (mask); \
+ \
+ do \
+- __atg17_old = (*__atg17_memp); \
++ __atg17_old = (*(volatile __typeof (mem))__atg17_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg17_memp, \
+ __atg17_old | __atg17_mask, \
+@@ -484,7 +484,7 @@
+ __typeof (*(mem)) __atg18_mask = (mask); \
+ \
+ do \
+- __atg18_old = (*__atg18_memp); \
++ __atg18_old = (*(volatile __typeof (mem))__atg18_memp); \
+ while (__builtin_expect \
+ (catomic_compare_and_exchange_bool_acq (__atg18_memp, \
+ __atg18_old | __atg18_mask,\
+@@ -500,7 +500,7 @@
+ __typeof (*(mem)) __atg19_mask = (mask); \
+ \
+ do \
+- __atg19_old = (*__atg19_memp); \
++ __atg19_old = (*(volatile __typeof (mem))__atg19_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg19_memp, \
+ __atg19_old | __atg19_mask,\
+diff -durN glibc-2.13.orig/nptl/Makefile glibc-2.13/nptl/Makefile
+--- glibc-2.13.orig/nptl/Makefile 2008-11-12 14:38:23.000000000 +0100
++++ glibc-2.13/nptl/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -265,9 +265,9 @@
+ # Files which must not be linked with libpthread.
+ tests-nolibpthread = tst-unload
+
+-# This sets the stack resource limit to 1023kb, which is not a multiple
+-# of the page size since every architecture's page size is > 1k.
+-tst-oddstacklimit-ENV = ; ulimit -s 1023;
++# This sets the stack resource limit to 8193kb, which is not a multiple
++# of the page size since every architecture's page size is 4096 bytes.
++tst-oddstacklimit-ENV = ; ulimit -s 8193;
+
+ distribute = eintr.c tst-cleanup4aux.c
+
+@@ -426,6 +426,35 @@
+ CFLAGS-tst-cleanupx4.c += -fexceptions
+ CFLAGS-tst-oncex3.c += -fexceptions
+ CFLAGS-tst-oncex4.c += -fexceptions
++
++ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
++LDFLAGS-tst-cancelx2 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx4 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx5 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx6 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx7 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx8 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx9 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx10 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx11 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx12 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx13 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx14 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx15 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx16 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx17 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx18 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx20 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx21 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx0 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx1 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx2 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx4 += $(ldflags-libgcc_s)
++LDFLAGS-tst-oncex3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-oncex4 += $(ldflags-libgcc_s)
++
+ CFLAGS-tst-align.c += $(stack-align-test-flags)
+ CFLAGS-tst-align3.c += $(stack-align-test-flags)
+ CFLAGS-tst-initializers1.c = -W -Wall -Werror
+diff -durN glibc-2.13.orig/nptl/pthread_barrier_wait.c glibc-2.13/nptl/pthread_barrier_wait.c
+--- glibc-2.13.orig/nptl/pthread_barrier_wait.c 2007-08-01 06:18:50.000000000 +0200
++++ glibc-2.13/nptl/pthread_barrier_wait.c 2009-11-13 00:50:26.000000000 +0100
+@@ -64,7 +64,7 @@
+ do
+ lll_futex_wait (&ibarrier->curr_event, event,
+ ibarrier->private ^ FUTEX_PRIVATE_FLAG);
+- while (event == ibarrier->curr_event);
++ while (event == *(volatile unsigned int *)&ibarrier->curr_event);
+ }
+
+ /* Make sure the init_count is stored locally or in a register. */
+diff -durN glibc-2.13.orig/nptl/sysdeps/pthread/Makefile glibc-2.13/nptl/sysdeps/pthread/Makefile
+--- glibc-2.13.orig/nptl/sysdeps/pthread/Makefile 2006-02-28 08:09:41.000000000 +0100
++++ glibc-2.13/nptl/sysdeps/pthread/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -33,7 +33,9 @@
+
+ ifeq ($(have-forced-unwind),yes)
+ tests += tst-mqueue8x
++ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
+ CFLAGS-tst-mqueue8x.c += -fexceptions
++LDFLAGS-tst-mqueue8x += $(ldflags-libgcc_s)
+ endif
+ endif
+
+diff -durN glibc-2.13.orig/stdio-common/Makefile glibc-2.13/stdio-common/Makefile
+--- glibc-2.13.orig/stdio-common/Makefile 2009-04-11 07:29:56.000000000 +0200
++++ glibc-2.13/stdio-common/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -82,7 +82,7 @@
+ $(SHELL) -e tst-printf.sh $(common-objpfx) '$(run-program-prefix)'
+ endif
+
+-CFLAGS-vfprintf.c = -Wno-uninitialized
++CFLAGS-vfprintf.c = -Wno-uninitialized -fno-delayed-branch
+ CFLAGS-vfwprintf.c = -Wno-uninitialized
+ CFLAGS-tst-printf.c = -Wno-format
+ CFLAGS-tstdiomisc.c = -Wno-format
+diff -durN glibc-2.13.orig/sunrpc/clnt_udp.c glibc-2.13/sunrpc/clnt_udp.c
+--- glibc-2.13.orig/sunrpc/clnt_udp.c 2008-07-26 10:42:44.000000000 +0200
++++ glibc-2.13/sunrpc/clnt_udp.c 2009-11-13 00:50:26.000000000 +0100
+@@ -456,7 +456,7 @@
+ while (inlen < 0 && errno == EINTR);
+ if (inlen < 0)
+ {
+- if (errno == EWOULDBLOCK)
++ if (errno == EWOULDBLOCK || errno == EAGAIN)
+ continue;
+ cu->cu_error.re_errno = errno;
+ return (cu->cu_error.re_status = RPC_CANTRECV);
diff --git a/patches/glibc/ports-2.15/330-m68k-sys-user.patch b/patches/glibc/ports-2.15/330-m68k-sys-user.patch
new file mode 100644
index 0000000..faee18f
--- /dev/null
+++ b/patches/glibc/ports-2.15/330-m68k-sys-user.patch
@@ -0,0 +1,97 @@
+copied from kernel as it is sanitized now
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/m68k/sys/user.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-11-13 00:50:31.000000000 +0100
+@@ -1,3 +1,90 @@
++#ifndef _SYS_USER_H
++#define _SYS_USER_H
++
++/* Core file format: The core file is written in such a way that gdb
++ can understand it and provide useful information to the user (under
++ linux we use the 'trad-core' bfd). There are quite a number of
++ obstacles to being able to view the contents of the floating point
++ registers, and until these are solved you will not be able to view the
++ contents of them. Actually, you can read in the core file and look at
++ the contents of the user struct to find out what the floating point
++ registers contain.
++ The actual file contents are as follows:
++ UPAGE: 1 page consisting of a user struct that tells gdb what is present
++ in the file. Directly after this is a copy of the task_struct, which
++ is currently not used by gdb, but it may come in useful at some point.
++ All of the registers are stored as part of the upage. The upage should
++ always be only one page.
++ DATA: The data area is stored. We use current->end_text to
++ current->brk to pick up all of the user variables, plus any memory
++ that may have been malloced. No attempt is made to determine if a page
++ is demand-zero or if a page is totally unused, we just cover the entire
++ range. All of the addresses are rounded in such a way that an integral
++ number of pages is written.
++ STACK: We need the stack information in order to get a meaningful
++ backtrace. We need to write the data from (esp) to
++ current->start_stack, so we round each of these off in order to be able
++ to write an integer number of pages.
++ The minimum core file size is 3 pages, or 12288 bytes.
++*/
++
++struct user_m68kfp_struct {
++ unsigned long fpregs[8*3]; /* fp0-fp7 registers */
++ unsigned long fpcntl[3]; /* fp control regs */
++};
++
++/* This is the old layout of "struct pt_regs" as of Linux 1.x, and
++ is still the layout used by user (the new pt_regs doesn't have
++ all registers). */
++struct user_regs_struct {
++ long d1,d2,d3,d4,d5,d6,d7;
++ long a0,a1,a2,a3,a4,a5,a6;
++ long d0;
++ long usp;
++ long orig_d0;
++ short stkadj;
++ short sr;
++ long pc;
++ short fmtvec;
++ short __fill;
++};
++
++
++/* When the kernel dumps core, it starts by dumping the user struct -
++ this will be used by gdb to figure out where the data and stack segments
++ are within the file, and what virtual addresses to use. */
++struct user{
++/* We start with the registers, to mimic the way that "memory" is returned
++ from the ptrace(3,...) function. */
++ struct user_regs_struct regs; /* Where the registers are actually stored */
++/* ptrace does not yet supply these. Someday.... */
++ int u_fpvalid; /* True if math co-processor being used. */
++ /* for this mess. Not yet used. */
++ struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */
++/* The rest of this junk is to help gdb figure out what goes where */
++ unsigned long int u_tsize; /* Text segment size (pages). */
++ unsigned long int u_dsize; /* Data segment size (pages). */
++ unsigned long int u_ssize; /* Stack segment size (pages). */
++ unsigned long start_code; /* Starting virtual address of text. */
++ unsigned long start_stack; /* Starting virtual address of stack area.
++ This is actually the bottom of the stack,
++ the top of the stack is always found in the
++ esp register. */
++ long int signal; /* Signal that caused the core dump. */
++ int reserved; /* No longer used */
++ struct user_regs_struct *u_ar0;
++ /* Used by gdb to help find the values for */
++ /* the registers. */
++ struct user_m68kfp_struct* u_fpstate; /* Math Co-processor pointer. */
++ unsigned long magic; /* To uniquely identify a core file */
++ char u_comm[32]; /* User command that was responsible */
++};
++#define NBPG 4096
++#define UPAGES 1
++#define HOST_TEXT_START_ADDR (u.start_code)
++#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
++
++#endif
+ /* Copyright (C) 2008, 2010 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+diff -durN glibc-2.15.orig/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.15/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h
diff --git a/patches/glibc/ports-2.15/340-dl_execstack-PaX-support.patch b/patches/glibc/ports-2.15/340-dl_execstack-PaX-support.patch
new file mode 100644
index 0000000..2402af0
--- /dev/null
+++ b/patches/glibc/ports-2.15/340-dl_execstack-PaX-support.patch
@@ -0,0 +1,66 @@
+ With latest versions of glibc, a lot of apps failed on a PaX enabled
+ system with:
+ cannot enable executable stack as shared object requires: Permission denied
+
+ This is due to PaX 'exec-protecting' the stack, and ld.so then trying
+ to make the stack executable due to some libraries not containing the
+ PT_GNU_STACK section. Bug #32960. <azarah@gentoo.org> (12 Nov 2003).
+
+ Patch also NPTL. Bug #116086. <kevquinn@gentoo.org> (20 Dec 2005).
+
+diff -durN glibc-2.13.orig/nptl/allocatestack.c glibc-2.13/nptl/allocatestack.c
+--- glibc-2.13.orig/nptl/allocatestack.c 2009-01-29 21:34:16.000000000 +0100
++++ glibc-2.13/nptl/allocatestack.c 2009-11-13 00:50:33.000000000 +0100
+@@ -329,7 +329,8 @@
+ # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
+ #endif
+ if (mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
+- return errno;
++ if (errno != EACCES) /* PAX is enabled */
++ return errno;
+
+ return 0;
+ }
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c 2006-01-08 09:21:15.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c 2009-11-13 00:50:33.000000000 +0100
+@@ -63,7 +63,10 @@
+ else
+ # endif
+ {
+- result = errno;
++ if (errno == EACCES) /* PAX is enabled */
++ result = 0;
++ else
++ result = errno;
+ goto out;
+ }
+ }
+@@ -89,7 +92,12 @@
+ page -= size;
+ else
+ {
+- if (errno != ENOMEM) /* Unexpected failure mode. */
++ if (errno == EACCES) /* PAX is enabled */
++ {
++ result = 0;
++ goto out;
++ }
++ else if (errno != ENOMEM) /* Unexpected failure mode. */
+ {
+ result = errno;
+ goto out;
+@@ -115,7 +123,12 @@
+ page += size;
+ else
+ {
+- if (errno != ENOMEM) /* Unexpected failure mode. */
++ if (errno == EACCES) /* PAX is enabled */
++ {
++ result = 0;
++ goto out;
++ }
++ else if (errno != ENOMEM) /* Unexpected failure mode. */
+ {
+ result = errno;
+ goto out;
diff --git a/patches/glibc/ports-2.15/350-pre20040117-pt_pax.patch b/patches/glibc/ports-2.15/350-pre20040117-pt_pax.patch
new file mode 100644
index 0000000..f8f6b83
--- /dev/null
+++ b/patches/glibc/ports-2.15/350-pre20040117-pt_pax.patch
@@ -0,0 +1,32 @@
+
+
+diff -durN glibc-2.13.orig/elf/elf.h glibc-2.13/elf/elf.h
+--- glibc-2.13.orig/elf/elf.h 2009-04-15 02:15:54.000000000 +0200
++++ glibc-2.13/elf/elf.h 2009-11-13 00:50:35.000000000 +0100
+@@ -580,6 +580,7 @@
+ #define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
+ #define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
+ #define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
++#define PT_PAX_FLAGS 0x65041580 /* Indicates PaX flag markings */
+ #define PT_LOSUNW 0x6ffffffa
+ #define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
+ #define PT_SUNWSTACK 0x6ffffffb /* Stack segment */
+@@ -593,6 +594,18 @@
+ #define PF_X (1 << 0) /* Segment is executable */
+ #define PF_W (1 << 1) /* Segment is writable */
+ #define PF_R (1 << 2) /* Segment is readable */
++#define PF_PAGEEXEC (1 << 4) /* Enable PAGEEXEC */
++#define PF_NOPAGEEXEC (1 << 5) /* Disable PAGEEXEC */
++#define PF_SEGMEXEC (1 << 6) /* Enable SEGMEXEC */
++#define PF_NOSEGMEXEC (1 << 7) /* Disable SEGMEXEC */
++#define PF_MPROTECT (1 << 8) /* Enable MPROTECT */
++#define PF_NOMPROTECT (1 << 9) /* Disable MPROTECT */
++#define PF_RANDEXEC (1 << 10) /* Enable RANDEXEC */
++#define PF_NORANDEXEC (1 << 11) /* Disable RANDEXEC */
++#define PF_EMUTRAMP (1 << 12) /* Enable EMUTRAMP */
++#define PF_NOEMUTRAMP (1 << 13) /* Disable EMUTRAMP */
++#define PF_RANDMMAP (1 << 14) /* Enable RANDMMAP */
++#define PF_NORANDMMAP (1 << 15) /* Disable RANDMMAP */
+ #define PF_MASKOS 0x0ff00000 /* OS-specific */
+ #define PF_MASKPROC 0xf0000000 /* Processor-specific */
+
diff --git a/patches/glibc/ports-2.15/360-tests-sandbox-libdl-paths.patch b/patches/glibc/ports-2.15/360-tests-sandbox-libdl-paths.patch
new file mode 100644
index 0000000..9f78c52
--- /dev/null
+++ b/patches/glibc/ports-2.15/360-tests-sandbox-libdl-paths.patch
@@ -0,0 +1,193 @@
+when glibc runs its tests, it does so by invoking the local library loader.
+in Gentoo, we build/run inside of our "sandbox" which itself is linked against
+libdl (so that it can load libraries and pull out symbols). the trouble
+is that when you upgrade from an older glibc to the new one, often times
+internal symbols change name or abi. this is normally OK as you cannot use
+libc.so from say version 2.3.6 but libpthread.so from say version 2.5, so
+we always say "keep all of the glibc libraries from the same build". but
+when glibc runs its tests, it uses dynamic paths to point to its new local
+copies of libraries. if the test doesnt use libdl, then glibc doesnt add
+its path, and when sandbox triggers the loading of libdl, glibc does so
+from the host system system. this gets us into the case of all libraries
+are from the locally compiled version of glibc except for libdl.so.
+
+Fix by Wormo
+
+http://bugs.gentoo.org/56898
+
+diff -durN glibc-2.13.orig/grp/tst_fgetgrent.sh glibc-2.13/grp/tst_fgetgrent.sh
+--- glibc-2.13.orig/grp/tst_fgetgrent.sh 2001-07-06 06:54:46.000000000 +0200
++++ glibc-2.13/grp/tst_fgetgrent.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -24,7 +24,8 @@
+ rtld_installed_name=$1; shift
+
+ testout=${common_objpfx}/grp/tst_fgetgrent.out
+-library_path=${common_objpfx}
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
+
+ result=0
+
+diff -durN glibc-2.13.orig/iconvdata/run-iconv-test.sh glibc-2.13/iconvdata/run-iconv-test.sh
+--- glibc-2.13.orig/iconvdata/run-iconv-test.sh 2008-05-15 03:59:44.000000000 +0200
++++ glibc-2.13/iconvdata/run-iconv-test.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -34,7 +34,7 @@
+ export GCONV_PATH
+
+ # We have to have some directories in the library path.
+-LIBPATH=$codir:$codir/iconvdata
++LIBPATH=$codir:$codir/iconvdata:$codir/dlfcn
+
+ # How the start the iconv(1) program.
+ ICONV='$codir/elf/ld.so --library-path $LIBPATH --inhibit-rpath ${from}.so \
+diff -durN glibc-2.13.orig/iconvdata/tst-table.sh glibc-2.13/iconvdata/tst-table.sh
+--- glibc-2.13.orig/iconvdata/tst-table.sh 2002-04-24 23:39:35.000000000 +0200
++++ glibc-2.13/iconvdata/tst-table.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -59,8 +59,11 @@
+ irreversible=${charset}.irreversible
+ fi
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # iconv in one direction.
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-table-from ${charset} \
+ > ${objpfx}tst-${charset}.table
+
+diff -durN glibc-2.13.orig/intl/tst-codeset.sh glibc-2.13/intl/tst-codeset.sh
+--- glibc-2.13.orig/intl/tst-codeset.sh 2005-04-06 04:18:35.000000000 +0200
++++ glibc-2.13/intl/tst-codeset.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -37,6 +37,9 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ ${common_objpfx}elf/ld.so --library-path $common_objpfx \
+ ${objpfx}tst-codeset > ${objpfx}tst-codeset.out
+
+diff -durN glibc-2.13.orig/intl/tst-gettext.sh glibc-2.13/intl/tst-gettext.sh
+--- glibc-2.13.orig/intl/tst-gettext.sh 2004-08-15 21:28:18.000000000 +0200
++++ glibc-2.13/intl/tst-gettext.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -51,9 +51,12 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # Now run the test.
+ MALLOC_TRACE=$malloc_trace LOCPATH=${objpfx}localedir:$LOCPATH \
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-gettext > ${objpfx}tst-gettext.out ${objpfx}domaindir
+
+ exit $?
+diff -durN glibc-2.13.orig/intl/tst-gettext2.sh glibc-2.13/intl/tst-gettext2.sh
+--- glibc-2.13.orig/intl/tst-gettext2.sh 2005-05-04 19:54:48.000000000 +0200
++++ glibc-2.13/intl/tst-gettext2.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -65,8 +65,11 @@
+ LOCPATH=${objpfx}domaindir
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # Now run the test.
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-gettext2 > ${objpfx}tst-gettext2.out ${objpfx}domaindir &&
+ cmp ${objpfx}tst-gettext2.out - <<EOF
+ String1 - Lang1: 1st string
+diff -durN glibc-2.13.orig/intl/tst-translit.sh glibc-2.13/intl/tst-translit.sh
+--- glibc-2.13.orig/intl/tst-translit.sh 2005-05-04 19:56:10.000000000 +0200
++++ glibc-2.13/intl/tst-translit.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -36,7 +36,10 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-translit > ${objpfx}tst-translit.out ${objpfx}domaindir
+
+ exit $?
+diff -durN glibc-2.13.orig/malloc/tst-mtrace.sh glibc-2.13/malloc/tst-mtrace.sh
+--- glibc-2.13.orig/malloc/tst-mtrace.sh 2005-10-15 01:40:35.000000000 +0200
++++ glibc-2.13/malloc/tst-mtrace.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -24,9 +24,12 @@
+ status=0
+ trap "rm -f ${common_objpfx}malloc/tst-mtrace.leak; exit 1" 1 2 15
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ MALLOC_TRACE=${common_objpfx}malloc/tst-mtrace.leak \
+ LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${common_objpfx}malloc/tst-mtrace || status=1
+
+ if test $status -eq 0 && test -f ${common_objpfx}malloc/mtrace; then
+diff -durN glibc-2.13.orig/nptl/tst-tls6.sh glibc-2.13/nptl/tst-tls6.sh
+--- glibc-2.13.orig/nptl/tst-tls6.sh 2003-09-03 00:02:59.000000000 +0200
++++ glibc-2.13/nptl/tst-tls6.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -5,8 +5,8 @@
+ rtld_installed_name=$1; shift
+ logfile=$common_objpfx/nptl/tst-tls6.out
+
+-# We have to find libc and nptl
+-library_path=${common_objpfx}:${common_objpfx}nptl
++# We have to find libc and nptl (also libdl in case sandbox is in use)
++library_path=${common_objpfx}:${common_objpfx}nptl:${common_objpfx}/dlfcn
+ tst_tls5="${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+ ${common_objpfx}/nptl/tst-tls5"
+
+diff -durN glibc-2.13.orig/posix/globtest.sh glibc-2.13/posix/globtest.sh
+--- glibc-2.13.orig/posix/globtest.sh 2008-12-06 07:05:39.000000000 +0100
++++ glibc-2.13/posix/globtest.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -18,7 +18,7 @@
+ esac
+
+ # We have to find the libc and the NSS modules.
+-library_path=${common_objpfx}:${common_objpfx}nss:${common_objpfx}nis:${common_objpfx}db2:${common_objpfx}hesiod
++library_path=${common_objpfx}:${common_objpfx}nss:${common_objpfx}nis:${common_objpfx}db2:${common_objpfx}hesiod:${common_objpfx}/dlfcn
+
+ # Since we use `sort' we must make sure to use the same locale everywhere.
+ LC_ALL=C
+diff -durN glibc-2.13.orig/posix/tst-getconf.sh glibc-2.13/posix/tst-getconf.sh
+--- glibc-2.13.orig/posix/tst-getconf.sh 2002-09-01 13:11:25.000000000 +0200
++++ glibc-2.13/posix/tst-getconf.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -10,7 +10,10 @@
+ else
+ rtld_installed_name=$1; shift
+ runit() {
+- ${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} "$@"
++
++ # make sure libdl is also in path in case sandbox is in use
++ library_path=${common_objpfx}:${common_objpfx}/dlfcn
++ ${elf_objpfx}${rtld_installed_name} --library-path ${library_path} "$@"
+ }
+ fi
+
+diff -durN glibc-2.13.orig/posix/wordexp-tst.sh glibc-2.13/posix/wordexp-tst.sh
+--- glibc-2.13.orig/posix/wordexp-tst.sh 2000-10-20 18:23:30.000000000 +0200
++++ glibc-2.13/posix/wordexp-tst.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -19,8 +19,11 @@
+ "
+ export IFS
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ failed=0
+-${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \
++${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+ ${common_objpfx}posix/wordexp-test '$*' > ${testout}1
+ cat <<"EOF" | cmp - ${testout}1 >> $logfile || failed=1
+ wordexp returned 0
diff --git a/patches/glibc/ports-2.15/380-dont-build-timezone.patch b/patches/glibc/ports-2.15/380-dont-build-timezone.patch
new file mode 100644
index 0000000..11c358e
--- /dev/null
+++ b/patches/glibc/ports-2.15/380-dont-build-timezone.patch
@@ -0,0 +1,14 @@
+timezone data has been split into the package sys-libs/timezone-data
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-11-13 00:50:13.000000000 +0100
++++ glibc-2.13/Makeconfig 2009-11-13 00:50:41.000000000 +0100
+@@ -944,7 +944,7 @@
+ stdlib stdio-common libio malloc string wcsmbs time dirent \
+ grp pwd posix io termios resource misc socket sysvipc gmon \
+ gnulib iconv iconvdata wctype manual shadow gshadow po argp \
+- crypt nss localedata timezone rt conform debug \
++ crypt nss localedata rt conform debug \
+ $(add-on-subdirs) $(dlfcn) $(binfmt-subdir)
+
+ ifndef avoid-generated
diff --git a/patches/glibc/ports-2.15/400-alpha-xstat.patch b/patches/glibc/ports-2.15/400-alpha-xstat.patch
new file mode 100644
index 0000000..6e4ab8f
--- /dev/null
+++ b/patches/glibc/ports-2.15/400-alpha-xstat.patch
@@ -0,0 +1,15 @@
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-05-09 08:54:20.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
+@@ -386,6 +386,11 @@
+ # define __ASSUME_GETDENTS32_D_TYPE 1
+ #endif
+
++/* Starting with version 2.6.4, alpha stat64 syscalls are available. */
++#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
++# define __ASSUME_STAT64_SYSCALL 1
++#endif
++
+ /* Starting with version 2.5.3, the initial location returned by `brk'
+ after exec is always rounded up to the next page. */
+ #if __LINUX_KERNEL_VERSION >= 132355
diff --git a/patches/glibc/ports-2.15/430-alpha-creat.patch b/patches/glibc/ports-2.15/430-alpha-creat.patch
new file mode 100644
index 0000000..da6ddda
--- /dev/null
+++ b/patches/glibc/ports-2.15/430-alpha-creat.patch
@@ -0,0 +1,14 @@
+alpha does not have a __NR_creat
+
+http://bugs.gentoo.org/227275
+http://sourceware.org/bugzilla/show_bug.cgi?id=6650
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2007-11-10 20:34:26.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2009-11-13 00:50:51.000000000 +0100
+@@ -1 +1,5 @@
+ /* Defined as alias for the syscall. */
++#include <sysdep.h>
++#ifndef __NR_creat
++#include "../../../../../io/creat64.c"
++#endif
diff --git a/patches/glibc/ports-2.15/440-alpha-cache-shape.patch b/patches/glibc/ports-2.15/440-alpha-cache-shape.patch
new file mode 100644
index 0000000..b3158da
--- /dev/null
+++ b/patches/glibc/ports-2.15/440-alpha-cache-shape.patch
@@ -0,0 +1,13 @@
+older verisons of glibc would build dl-sysdep as shared-only and dl-support as
+static-only. alpha hooks in a cache variable via dl-auxv.h. newer versions of
+glibc build dl-sysdep as both shared and static which means we now have symbol
+duplication for static builds with dl-sysdep and dl-support. since dl-sysdep
+is both shared/static, there is no point in hooking dl-support anymore, so we
+can punt it.
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/dl-support.c glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/dl-support.c
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-11-13 00:50:53.000000000 +0100
+@@ -1,2 +1,1 @@
+-#include "dl-auxv.h"
+ #include <elf/dl-support.c>
diff --git a/patches/glibc/ports-2.15/460-alpha-fix-gcc-4.1-warnings.patch b/patches/glibc/ports-2.15/460-alpha-fix-gcc-4.1-warnings.patch
new file mode 100644
index 0000000..a54d823
--- /dev/null
+++ b/patches/glibc/ports-2.15/460-alpha-fix-gcc-4.1-warnings.patch
@@ -0,0 +1,56 @@
+2006-05-30 Falk Hueffner <falk@debian.org>
+
+ * sysdeps/unix/sysv/linux/alpha/ioperm.c: force the architecture
+ to ev6 in assembly code.
+
+{standard input}: Assembler messages:
+{standard input}:341: Error: macro requires $at register while noat in effect
+{standard input}:374: Error: macro requires $at register while noat in effect
+{standard input}:438: Error: macro requires $at register while noat in effect
+{standard input}:471: Error: macro requires $at register while noat in effect
+make[3]: *** [/tmp/buildd/glibc-2.3.6/build-tree/alpha-libc/misc/ioperm.o] Error 1
+
+Hrm. gcc puts .arch ev4 into the .s, and this overrides -mev6 for as.
+I cannot really think of anything better than
+
+ ports/sysdeps/unix/sysv/linux/alpha/ioperm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/ioperm.c
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-11-13 00:50:57.000000000 +0100
+@@ -178,13 +178,13 @@
+ static inline void
+ stb_mb(unsigned char val, unsigned long addr)
+ {
+- __asm__("stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
++ __asm__(".arch ev6; stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
+ }
+
+ static inline void
+ stw_mb(unsigned short val, unsigned long addr)
+ {
+- __asm__("stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
++ __asm__(".arch ev6; stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
+ }
+
+ static inline void
+@@ -356,7 +356,7 @@
+ unsigned long int addr = dense_port_to_cpu_addr (port);
+ unsigned char r;
+
+- __asm__ ("ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
++ __asm__ (".arch ev6; ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
+ return r;
+ }
+
+@@ -366,7 +366,7 @@
+ unsigned long int addr = dense_port_to_cpu_addr (port);
+ unsigned short r;
+
+- __asm__ ("ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
++ __asm__ (".arch ev6; ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
+ return r;
+ }
+
+diff -durN glibc-2.15.orig/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.15/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c
diff --git a/patches/glibc/ports-2.15/490-alpha_alpha-add-fdatasync-support.patch b/patches/glibc/ports-2.15/490-alpha_alpha-add-fdatasync-support.patch
new file mode 100644
index 0000000..acf250d
--- /dev/null
+++ b/patches/glibc/ports-2.15/490-alpha_alpha-add-fdatasync-support.patch
@@ -0,0 +1,126 @@
+2009-07-25 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h: define
+ __ASSUME_FDATASYNC.
+ * sysdeps/unix/sysv/linux/fdatasync.c: New file.
+ * sysdeps/unix/sysv/linux/Makefile: compile fdatasync.c with
+ -fexceptions.
+ * sysdeps/unix/sysv/linux/syscalls.list: Remove fdatasync.
+
+ sysdeps/unix/sysv/linux/Makefile | 1
+ sysdeps/unix/sysv/linux/fdatasync.c | 69 ++++++++++++++++++++++++++++++
+ sysdeps/unix/sysv/linux/kernel-features.h | 6 ++
+ sysdeps/unix/sysv/linux/syscalls.list | 1
+ 4 files changed, 76 insertions(+), 1 deletion(-)
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.13/sysdeps/unix/sysv/linux/Makefile
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile 2009-03-02 17:15:13.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/Makefile 2009-11-13 00:51:04.000000000 +0100
+@@ -21,6 +21,7 @@
+ setfsuid setfsgid makedev epoll_pwait signalfd \
+ eventfd eventfd_read eventfd_write prlimit
+
++CFLAGS-fdatasync.c = -fexceptions
+ CFLAGS-gethostid.c = -fexceptions
+ CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=0x80000000-__getpagesize()"
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c 2009-11-13 00:51:04.000000000 +0100
+@@ -0,0 +1,69 @@
++/* fdatasync -- synchronize at least the data part of a file with
++ the underlying media. Linux version.
++
++ Copyright (C) 2007 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 <errno.h>
++#include <unistd.h>
++
++#include <sysdep-cancel.h>
++#include <sys/syscall.h>
++#include <bp-checks.h>
++
++#include <kernel-features.h>
++
++#if defined __NR_fdatasync && !defined __ASSUME_FDATASYNC
++static int __have_no_fdatasync;
++#endif
++
++static int
++do_fdatasync (int fd)
++{
++#ifdef __ASSUME_FDATASYNC
++ return INLINE_SYSCALL (fdatasync, 1, fd);
++#elif defined __NR_fdatasync
++ if (!__builtin_expect (__have_no_fdatasync, 0))
++ {
++ int result = INLINE_SYSCALL (fdatasync, 1, fd);
++ if (__builtin_expect (result, 0) != -1 || errno != ENOSYS)
++ return result;
++
++ __have_no_fdatasync = 1;
++ }
++#endif
++ return INLINE_SYSCALL (fsync, 1, fd);
++}
++
++int
++__fdatasync (int fd)
++{
++ if (SINGLE_THREAD_P)
++ return do_fdatasync (fd);
++
++ int oldtype = LIBC_CANCEL_ASYNC ();
++
++ int result = do_fdatasync (fd);
++
++ LIBC_CANCEL_RESET (oldtype);
++
++ return result;
++}
++
++weak_alias (__fdatasync, fdatasync)
++
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:51:04.000000000 +0100
+@@ -459,6 +459,12 @@
+ # define __ASSUME_FUTEX_LOCK_PI 1
+ #endif
+
++/* Support for fsyncdata syscall was added in 2.6.22 on alpha, but it
++ was already present in 2.0 kernels on other architectures. */
++#if (!defined __alpha || __LINUX_KERNEL_VERSION >= 0x020616)
++# define __ASSUME_FDATASYNC 1
++#endif
++
+ /* Support for utimensat syscall was added in 2.6.22, on SH
+ only after 2.6.22-rc1. */
+ #if __LINUX_KERNEL_VERSION >= 0x020616 \
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list 2008-08-02 01:29:08.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list 2009-11-13 00:51:04.000000000 +0100
+@@ -11,7 +11,6 @@
+ epoll_create1 EXTRA epoll_create1 i:i epoll_create1
+ epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
+ epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait
+-fdatasync - fdatasync Ci:i fdatasync
+ flock - flock i:ii __flock flock
+ fork - fork i: __libc_fork __fork fork
+ get_kernel_syms EXTRA get_kernel_syms i:p get_kernel_syms
diff --git a/patches/glibc/ports-2.15/530-alpha-fix-rtld-fPIC.patch b/patches/glibc/ports-2.15/530-alpha-fix-rtld-fPIC.patch
new file mode 100644
index 0000000..800a789
--- /dev/null
+++ b/patches/glibc/ports-2.15/530-alpha-fix-rtld-fPIC.patch
@@ -0,0 +1,21 @@
+2009-05-26 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/alpha/Makefile (CFLAGS-rtld.c): add $(PIC-ccflag).
+
+ ports/sysdeps/alpha/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/alpha/Makefile glibc-2.15/glibc-ports-2.15/sysdeps/alpha/Makefile
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/alpha/Makefile 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/alpha/Makefile 2009-11-13 00:51:13.000000000 +0100
+@@ -35,7 +35,8 @@
+
+ ifeq ($(subdir),elf)
+ # The ld.so startup code cannot use literals until it self-relocates.
+-CFLAGS-rtld.c = -mbuild-constants
++# It uses more than 64k for the small data area.
++CFLAGS-rtld.c = -mbuild-constants $(PIC-ccflag)
+ endif
+
+ # Build everything with full IEEE math support, and with dynamic rounding;
+diff -durN glibc-2.15.orig/ports/sysdeps/alpha/Makefile glibc-2.15/ports/sysdeps/alpha/Makefile
diff --git a/patches/glibc/ports-2.15/560-ppc-atomic.patch b/patches/glibc/ports-2.15/560-ppc-atomic.patch
new file mode 100644
index 0000000..ee1cb90
--- /dev/null
+++ b/patches/glibc/ports-2.15/560-ppc-atomic.patch
@@ -0,0 +1,415 @@
+sniped from suse
+
+Index: sysdeps/powerpc/bits/atomic.h
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/powerpc/bits/atomic.h,v
+retrieving revision 1.17
+diff -u -a -p -r1.17 atomic.h
+
+diff -durN glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h glibc-2.13/sysdeps/powerpc/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h 2007-03-26 22:15:28.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -85,14 +85,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " cmpw %0,%2\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -102,14 +102,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " cmpw %0,%2\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -118,12 +118,12 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
+- " stwcx. %3,0,%2\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
++ " stwcx. %2,%y1\n" \
+ " bne- 1b\n" \
+ " " __ARCH_ACQ_INSTR \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -132,11 +132,11 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \
+- " stwcx. %3,0,%2\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
++ " stwcx. %2,%y1\n" \
+ " bne- 1b" \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -144,12 +144,12 @@
+ #define __arch_atomic_exchange_and_add_32(mem, value) \
+ ({ \
+ __typeof (*mem) __val, __tmp; \
+- __asm __volatile ("1: lwarx %0,0,%3\n" \
+- " add %1,%0,%4\n" \
+- " stwcx. %1,0,%3\n" \
++ __asm __volatile ("1: lwarx %0,%y2\n" \
++ " add %1,%0,%3\n" \
++ " stwcx. %1,%y2\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -157,12 +157,12 @@
+ #define __arch_atomic_increment_val_32(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: lwarx %0,0,%2\n" \
++ __asm __volatile ("1: lwarx %0,%y1\n" \
+ " addi %0,%0,1\n" \
+- " stwcx. %0,0,%2\n" \
++ " stwcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -170,27 +170,27 @@
+ #define __arch_atomic_decrement_val_32(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: lwarx %0,0,%2\n" \
++ __asm __volatile ("1: lwarx %0,%y1\n" \
+ " subi %0,%0,1\n" \
+- " stwcx. %0,0,%2\n" \
++ " stwcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+
+ #define __arch_atomic_decrement_if_positive_32(mem) \
+ ({ int __val, __tmp; \
+- __asm __volatile ("1: lwarx %0,0,%3\n" \
++ __asm __volatile ("1: lwarx %0,%y2\n" \
+ " cmpwi 0,%0,0\n" \
+ " addi %1,%0,-1\n" \
+ " ble 2f\n" \
+- " stwcx. %1,0,%3\n" \
++ " stwcx. %1,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h 2007-03-26 22:15:45.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -44,14 +44,14 @@
+ ({ \
+ unsigned int __tmp; \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -60,14 +60,14 @@
+ ({ \
+ unsigned int __tmp; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h 2007-03-26 22:16:03.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -44,14 +44,14 @@
+ ({ \
+ unsigned int __tmp, __tmp2; \
+ __asm __volatile (" clrldi %1,%1,32\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y2" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%1,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %4,0,%2\n" \
++ " stwcx. %4,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp), "=r" (__tmp2) \
+- : "b" (mem), "1" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem)) \
++ : "1" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -61,14 +61,14 @@
+ unsigned int __tmp, __tmp2; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+ " clrldi %1,%1,32\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y2" MUTEX_HINT_REL "\n" \
+ " subf. %0,%1,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %4,0,%2\n" \
++ " stwcx. %4,%y2\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp), "=r" (__tmp2) \
+- : "b" (mem), "1" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem)) \
++ : "1" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -82,14 +82,14 @@
+ ({ \
+ unsigned long __tmp; \
+ __asm __volatile ( \
+- "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -98,14 +98,14 @@
+ ({ \
+ unsigned long __tmp; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -115,14 +115,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile ( \
+- "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " cmpd %0,%2\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -132,14 +132,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " cmpd %0,%2\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -148,12 +148,12 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
+- " stdcx. %3,0,%2\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
++ " stdcx. %2,%y1\n" \
+ " bne- 1b\n" \
+ " " __ARCH_ACQ_INSTR \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -162,11 +162,11 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \
+- " stdcx. %3,0,%2\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
++ " stdcx. %2,%y1\n" \
+ " bne- 1b" \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -174,12 +174,12 @@
+ #define __arch_atomic_exchange_and_add_64(mem, value) \
+ ({ \
+ __typeof (*mem) __val, __tmp; \
+- __asm __volatile ("1: ldarx %0,0,%3\n" \
+- " add %1,%0,%4\n" \
+- " stdcx. %1,0,%3\n" \
++ __asm __volatile ("1: ldarx %0,%y2\n" \
++ " add %1,%0,%3\n" \
++ " stdcx. %1,%y2\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -187,12 +187,12 @@
+ #define __arch_atomic_increment_val_64(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: ldarx %0,0,%2\n" \
++ __asm __volatile ("1: ldarx %0,%y1\n" \
+ " addi %0,%0,1\n" \
+- " stdcx. %0,0,%2\n" \
++ " stdcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -200,27 +200,27 @@
+ #define __arch_atomic_decrement_val_64(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: ldarx %0,0,%2\n" \
++ __asm __volatile ("1: ldarx %0,%y1\n" \
+ " subi %0,%0,1\n" \
+- " stdcx. %0,0,%2\n" \
++ " stdcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+
+ #define __arch_atomic_decrement_if_positive_64(mem) \
+ ({ int __val, __tmp; \
+- __asm __volatile ("1: ldarx %0,0,%3\n" \
++ __asm __volatile ("1: ldarx %0,%y2\n" \
+ " cmpdi 0,%0,0\n" \
+ " addi %1,%0,-1\n" \
+ " ble 2f\n" \
+- " stdcx. %1,0,%3\n" \
++ " stdcx. %1,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
diff --git a/patches/glibc/ports-2.15/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch b/patches/glibc/ports-2.15/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
new file mode 100644
index 0000000..8a05574
--- /dev/null
+++ b/patches/glibc/ports-2.15/570-arm-cirrus-ep93xx-maverick-crunch-fpu.patch
@@ -0,0 +1,374 @@
+http://yann.poupet.free.fr/ep93xx/
+Add support for the Maverick Crunch FPU on Cirrus EP93XX processor series
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/bits/endian.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/bits/endian.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/bits/endian.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/bits/endian.h 2009-11-13 00:51:22.000000000 +0100
+@@ -12,7 +12,7 @@
+ /* FPA floating point units are always big-endian, irrespective of the
+ CPU endianness. VFP floating point units use the same endianness
+ as the rest of the system. */
+-#ifdef __VFP_FP__
++#if defined __VFP_FP__ || defined __MAVERICK__
+ #define __FLOAT_WORD_ORDER __BYTE_ORDER
+ #else
+ #define __FLOAT_WORD_ORDER __BIG_ENDIAN
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/__longjmp.S glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/__longjmp.S
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/__longjmp.S 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/__longjmp.S 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/bits/fenv.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/bits/fenv.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/bits/fenv.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/bits/fenv.h 2009-11-13 00:51:22.000000000 +0100
+@@ -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
+ {
+@@ -44,6 +83,8 @@
+ modes exist, but you have to encode them in the actual instruction. */
+ #define FE_TONEAREST 0
+
++#endif
++
+ /* Type representing exception flags. */
+ typedef unsigned long int fexcept_t;
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/bits/setjmp.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/bits/setjmp.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/bits/setjmp.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/bits/setjmp.h 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/fegetround.c glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/fegetround.c
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/fegetround.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/fegetround.c 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/fesetround.c glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/fesetround.c
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/fesetround.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/fesetround.c 2009-11-13 00:51:22.000000000 +0100
+@@ -18,12 +18,28 @@
+ 02111-1307 USA. */
+
+ #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 -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/fpu_control.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/fpu_control.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/fpu_control.h 2009-11-13 00:51:22.000000000 +0100
+@@ -1,5 +1,6 @@
+ /* FPU control word definitions. ARM version.
+- Copyright (C) 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
++ Copyright (C) 1996, 1997, 1998, 2000, 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
+@@ -20,6 +21,79 @@
+ #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 +173,6 @@
+ /* Default control word set at startup. */
+ extern fpu_control_t __fpu_control;
+
++#endif
++
+ #endif /* _FPU_CONTROL_H */
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/jmpbuf-offsets.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/jmpbuf-offsets.h 2009-11-13 00:51:22.000000000 +0100
+@@ -17,4 +17,8 @@
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
++#ifdef __MAVERICK__
++#define __JMP_BUF_SP 32
++#else
+ #define __JMP_BUF_SP 20
++#endif
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/setjmp.S glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/setjmp.S
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/fpu/setjmp.S 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/fpu/setjmp.S 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/gccframe.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/gccframe.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/gccframe.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/gccframe.h 2009-11-13 00:51:22.000000000 +0100
+@@ -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 -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/gmp-mparam.h glibc-2.15/glibc-ports-2.15/sysdeps/arm/gmp-mparam.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/arm/gmp-mparam.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/arm/gmp-mparam.h 2009-11-13 00:51:22.000000000 +0100
+@@ -29,7 +29,7 @@
+ #if defined(__ARMEB__)
+ # define IEEE_DOUBLE_MIXED_ENDIAN 0
+ # define IEEE_DOUBLE_BIG_ENDIAN 1
+-#elif defined(__VFP_FP__)
++#elif defined(__VFP_FP__) || defined(__MAVERICK__)
+ # define IEEE_DOUBLE_MIXED_ENDIAN 0
+ # define IEEE_DOUBLE_BIG_ENDIAN 0
+ #else
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/bits/endian.h glibc-2.15/ports/sysdeps/arm/bits/endian.h
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/__longjmp.S glibc-2.15/ports/sysdeps/arm/fpu/__longjmp.S
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/bits/fenv.h glibc-2.15/ports/sysdeps/arm/fpu/bits/fenv.h
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/bits/setjmp.h glibc-2.15/ports/sysdeps/arm/fpu/bits/setjmp.h
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/fegetround.c glibc-2.15/ports/sysdeps/arm/fpu/fegetround.c
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/fesetround.c glibc-2.15/ports/sysdeps/arm/fpu/fesetround.c
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/fpu_control.h glibc-2.15/ports/sysdeps/arm/fpu/fpu_control.h
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/jmpbuf-offsets.h glibc-2.15/ports/sysdeps/arm/fpu/jmpbuf-offsets.h
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/fpu/setjmp.S glibc-2.15/ports/sysdeps/arm/fpu/setjmp.S
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/gccframe.h glibc-2.15/ports/sysdeps/arm/gccframe.h
+diff -durN glibc-2.15.orig/ports/sysdeps/arm/gmp-mparam.h glibc-2.15/ports/sysdeps/arm/gmp-mparam.h
diff --git a/patches/glibc/ports-2.15/580-nptl-lowlevellock.patch b/patches/glibc/ports-2.15/580-nptl-lowlevellock.patch
new file mode 100644
index 0000000..a39e463
--- /dev/null
+++ b/patches/glibc/ports-2.15/580-nptl-lowlevellock.patch
@@ -0,0 +1,23 @@
+fix build error on arm like on hppa:
+
+arm-unknown-linux-gnu-gcc ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -fno-strict-aliasing -g -pipe -Wstrict-prototypes -fPIC -I../include -I/var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl -I/var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl -I../ports/sysdeps/arm/elf -I../ports/sysdeps/unix/sysv/linux/arm/nptl -I../ports/sysdeps/unix/sysv/linux/arm -I../nptl/sysdeps/unix/sysv/linux -I../nptl/sysdeps/pthread -I../sysdeps/pthread -I../ports/sysdeps/unix/sysv/linux -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../nptl/sysdeps/unix/sysv -I../ports/sysdeps/unix/sysv -I../sysdeps/unix/sysv -I../ports/sysdeps/unix/arm -I../nptl/sysdeps/unix -I../ports/sysdeps/unix -I../sysdeps/unix -I../sysdeps/posix -I../ports/sysdeps/arm/fpu -I../ports/sysdeps/arm/nptl -I../ports/sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -I../nptl -I../ports -I.. -I../libio -I. -nostdinc -isystem /usr/lib/gcc/arm-unknown-linux-gnu/4.3.2/include -isystem /usr/lib/gcc/arm-unknown-linux-gnu/4.3.2/include-fixed -isystem /usr/arm-unknown-linux-gnu/usr/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DSHARED -o /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os -MD -MP -MF /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os.dt -MT /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os -DNOT_IN_libc=1 -DIS_IN_rtld=1
+In file included from ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c:21:
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c: In function '__lll_lock_wait_private':
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: warning: implicit declaration of function 'THREAD_GETMEM'
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'THREAD_SELF' undeclared (first use in this function)
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: (Each undeclared identifier is reported only once
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: for each function it appears in.)
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'header' undeclared (first use in this function)
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-11-13 00:51:23.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <atomic.h>
+ #include <sysdep.h>
+ #include <kernel-features.h>
++#include <tls.h> /* Need THREAD_*, and header.*. */
+
+ #define FUTEX_WAIT 0
+ #define FUTEX_WAKE 1
+diff -durN glibc-2.15.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.15/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
diff --git a/patches/glibc/ports-2.15/610-fpu-cw-mips.patch b/patches/glibc/ports-2.15/610-fpu-cw-mips.patch
new file mode 100644
index 0000000..8692a1f
--- /dev/null
+++ b/patches/glibc/ports-2.15/610-fpu-cw-mips.patch
@@ -0,0 +1,15 @@
+http://sourceware.org/ml/libc-alpha/2002-10/msg00392.html
+
+diff -durN glibc-2.15.orig/glibc-ports-2.15/sysdeps/mips/fpu_control.h glibc-2.15/glibc-ports-2.15/sysdeps/mips/fpu_control.h
+--- glibc-2.15.orig/glibc-ports-2.15/sysdeps/mips/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.15/glibc-ports-2.15/sysdeps/mips/fpu_control.h 2009-11-13 00:51:31.000000000 +0100
+@@ -86,7 +86,7 @@
+ #define _FPU_RC_UP 0x2
+ #define _FPU_RC_DOWN 0x3
+
+-#define _FPU_RESERVED 0xfe3c0000 /* Reserved bits in cw */
++#define _FPU_RESERVED 0xfebc0000 /* Reserved bits in cw */
+
+
+ /* The fdlibm code requires strict IEEE double precision arithmetic,
+diff -durN glibc-2.15.orig/ports/sysdeps/mips/fpu_control.h glibc-2.15/ports/sysdeps/mips/fpu_control.h
diff --git a/patches/glibc/ports-2.15/630-mips_shn_undef-hack.patch b/patches/glibc/ports-2.15/630-mips_shn_undef-hack.patch
new file mode 100644
index 0000000..791d76c
--- /dev/null
+++ b/patches/glibc/ports-2.15/630-mips_shn_undef-hack.patch
@@ -0,0 +1,16 @@
+diff -durN glibc-2.13.orig/elf/dl-lookup.c glibc-2.13/elf/dl-lookup.c
+--- glibc-2.13.orig/elf/dl-lookup.c 2009-03-30 23:14:32.000000000 +0200
++++ glibc-2.13/elf/dl-lookup.c 2009-11-13 00:51:36.000000000 +0100
+@@ -301,6 +301,12 @@
+ /* FALLTHROUGH */
+ case STB_GLOBAL:
+ success:
++#ifdef __mips__
++ /* HACK: MIPS marks its lazy evaluation stubs with SHN_UNDEF
++ symbols, we skip them. */
++ if (sym->st_shndx == SHN_UNDEF)
++ break;
++#endif
+ /* Global definition. Just what we need. */
+ result->s = sym;
+ result->m = (struct link_map *) map;
diff --git a/patches/glibc/ports-2.15/640-alpha-atfcts.patch b/patches/glibc/ports-2.15/640-alpha-atfcts.patch
new file mode 100644
index 0000000..7a8a94a
--- /dev/null
+++ b/patches/glibc/ports-2.15/640-alpha-atfcts.patch
@@ -0,0 +1,12 @@
+--- glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2010-07-27 14:34:39.000000000 +0300
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h.new 2011-03-10 18:54:37.686795979 +0200
+@@ -437,7 +437,8 @@
+ the code. On PPC they were introduced in 2.6.17-rc1,
+ on SH in 2.6.19-rc1. */
+ #if __LINUX_KERNEL_VERSION >= 0x020611 \
+- && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613)
++ && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613) \
++ && (!defined __alpha__)
+ # define __ASSUME_ATFCTS 1
+ #endif
+
diff --git a/patches/glibc/ports-2.15/650-syslog.patch b/patches/glibc/ports-2.15/650-syslog.patch
new file mode 100644
index 0000000..c20cafc
--- /dev/null
+++ b/patches/glibc/ports-2.15/650-syslog.patch
@@ -0,0 +1,12 @@
+diff -durN glibc-cvs-2.9.orig/misc/syslog.c glibc-cvs-2.9/misc/syslog.c
+--- glibc-cvs-2.9.orig/misc/syslog.c 2009-06-01 10:16:50.000000000 +0200
++++ glibc-cvs-2.9/misc/syslog.c 2009-06-01 10:17:20.000000000 +0200
+@@ -152,7 +152,7 @@
+ #define INTERNALLOG LOG_ERR|LOG_CONS|LOG_PERROR|LOG_PID
+ /* Check for invalid bits. */
+ if (pri & ~(LOG_PRIMASK|LOG_FACMASK)) {
+- syslog(INTERNALLOG,
++ __syslog(INTERNALLOG,
+ "syslog: unknown facility/priority: %x", pri);
+ pri &= LOG_PRIMASK|LOG_FACMASK;
+ }
diff --git a/patches/glibc/ports-2.15/660-debug-readlink_chk-readklinkat_chk.patch b/patches/glibc/ports-2.15/660-debug-readlink_chk-readklinkat_chk.patch
new file mode 100644
index 0000000..a5a7052
--- /dev/null
+++ b/patches/glibc/ports-2.15/660-debug-readlink_chk-readklinkat_chk.patch
@@ -0,0 +1,24 @@
+diff -dur glibc-cvs-2.9.orig/debug/readlink_chk.c glibc-cvs-2.9/debug/readlink_chk.c
+--- glibc-cvs-2.9.orig/debug/readlink_chk.c 2005-03-01 01:41:15.000000000 +0100
++++ glibc-cvs-2.9/debug/readlink_chk.c 2009-06-01 10:59:37.000000000 +0200
+@@ -25,7 +25,7 @@
+
+
+ ssize_t
+-__readlink_chk (const char *path, void *buf, size_t len, size_t buflen)
++__readlink_chk (const char *path, char *buf, size_t len, size_t buflen)
+ {
+ if (len > buflen)
+ __chk_fail ();
+diff -dur glibc-cvs-2.9.orig/debug/readlinkat_chk.c glibc-cvs-2.9/debug/readlinkat_chk.c
+--- glibc-cvs-2.9.orig/debug/readlinkat_chk.c 2006-04-24 18:56:12.000000000 +0200
++++ glibc-cvs-2.9/debug/readlinkat_chk.c 2009-06-01 11:07:26.000000000 +0200
+@@ -21,7 +21,7 @@
+
+
+ ssize_t
+-__readlinkat_chk (int fd, const char *path, void *buf, size_t len,
++__readlinkat_chk (int fd, const char *path, char *buf, size_t len,
+ size_t buflen)
+ {
+ if (len > buflen)
diff --git a/patches/glibc/ports-2.16.0/090-Fix-ARM-build-with-GCC-trunk.patch b/patches/glibc/ports-2.16.0/090-Fix-ARM-build-with-GCC-trunk.patch
new file mode 100644
index 0000000..59f95aa
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/090-Fix-ARM-build-with-GCC-trunk.patch
@@ -0,0 +1,54 @@
+From 175cef4163dd60f95106cfd5f593b8a4e09d02c9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Tue, 20 May 2014 21:27:13 +0000
+Subject: [PATCH] Fix ARM build with GCC trunk.
+
+sysdeps/unix/sysv/linux/arm/unwind-resume.c and
+sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c have static
+variables that are written in C code but only read from toplevel asms.
+Current GCC trunk now optimizes away such apparently write-only static
+variables, so causing a build failure. This patch marks those
+variables with __attribute_used__ to avoid that optimization.
+
+Tested that this fixes the build for ARM.
+
+ * sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+ (libgcc_s_resume): Use __attribute_used__.
+ * sysdeps/unix/sysv/linux/arm/unwind-resume.c (libgcc_s_resume):
+ Likewise.
+---
+ sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c | 3 ++-
+ sysdeps/unix/sysv/linux/arm/unwind-resume.c | 3 ++-
+ 3 files changed, 11 insertions(+), 2 deletions(-)
+
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c b/sysdeps/unix/sysv/linux/arm/unwind-forcedunwind.c
+index 6ccd9b4..660d148 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-forcedunwind.c
+@@ -22,7 +22,8 @@
+ #include <pthreadP.h>
+
+ static void *libgcc_s_handle;
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+ static _Unwind_Reason_Code (*libgcc_s_forcedunwind)
+diff --git a/sysdeps/unix/sysv/linux/arm/unwind-resume.c b/sysdeps/unix/sysv/linux/arm/unwind-resume.c
+index bff3e2b..1f1eb71 100644
+--- a/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
++++ b/ports/sysdeps/unix/sysv/linux/arm/nptl/unwind-resume.c
+@@ -20,7 +20,8 @@
+ #include <stdio.h>
+ #include <unwind.h>
+
+-static void (*libgcc_s_resume) (struct _Unwind_Exception *exc);
++static void (*libgcc_s_resume) (struct _Unwind_Exception *exc)
++ __attribute_used__;
+ static _Unwind_Reason_Code (*libgcc_s_personality)
+ (_Unwind_State, struct _Unwind_Exception *, struct _Unwind_Context *);
+
+--
+1.9.4
+
diff --git a/patches/glibc/ports-2.16.0/100-respect-env-CPPFLAGS.patch b/patches/glibc/ports-2.16.0/100-respect-env-CPPFLAGS.patch
new file mode 100644
index 0000000..dce491c
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/100-respect-env-CPPFLAGS.patch
@@ -0,0 +1,14 @@
+Respect environment CPPFLAGS when we run ./configure so we can inject
+random -D things without having to set CFLAGS/ASFLAGS
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-05-09 23:57:56.000000000 +0200
++++ glibc-2.13/Makeconfig 2009-11-13 00:49:41.000000000 +0100
+@@ -668,6 +668,7 @@
+ $(foreach lib,$(libof-$(basename $(@F))) \
+ $(libof-$(<F)) $(libof-$(@F)),$(CPPFLAGS-$(lib))) \
+ $(CPPFLAGS-$(<F)) $(CPPFLAGS-$(@F)) $(CPPFLAGS-$(basename $(@F)))
++CPPFLAGS += $(CPPFLAGS-config)
+ override CFLAGS = -std=gnu99 $(gnu89-inline-CFLAGS) $(config-extra-cflags) \
+ $(filter-out %frame-pointer,$(+cflags)) $(+gccwarn-c) \
+ $(sysdep-CFLAGS) $(CFLAGS-$(suffix $@)) $(CFLAGS-$(<F)) \
diff --git a/patches/glibc/ports-2.16.0/120-i386-x86_64-revert-clone-cfi.patch b/patches/glibc/ports-2.16.0/120-i386-x86_64-revert-clone-cfi.patch
new file mode 100644
index 0000000..c7f6182
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/120-i386-x86_64-revert-clone-cfi.patch
@@ -0,0 +1,55 @@
+revert cfi additions to clone on i386/x86_64 to workaround problems in
+gcc's unwinder code. this is not a bug in glibc, it triggers problems
+elsewhere. this cfi code does not gain us a whole lot anyways.
+
+http://gcc.gnu.org/ml/gcc/2006-12/msg00293.html
+
+Index: sysdeps/unix/sysv/linux/i386/clone.S
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/linux/i386/clone.S,v
+retrieving revision 1.27
+retrieving revision 1.26
+diff -u -p -r1.27 -r1.26
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/i386/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/i386/clone.S 2009-11-13 00:49:45.000000000 +0100
+@@ -120,9 +120,6 @@
+ ret
+
+ L(thread_start):
+- cfi_startproc;
+- /* Clearing frame pointer is insufficient, use CFI. */
+- cfi_undefined (eip);
+ /* Note: %esi is zero. */
+ movl %esi,%ebp /* terminate the stack frame */
+ #ifdef RESET_PID
+@@ -155,7 +152,6 @@
+ jmp L(haspid)
+ .previous
+ #endif
+- cfi_endproc;
+
+ cfi_startproc
+ PSEUDO_END (BP_SYM (__clone))
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/x86_64/clone.S 2006-12-04 00:12:36.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/x86_64/clone.S 2009-11-13 00:49:45.000000000 +0100
+@@ -89,9 +89,6 @@
+ ret
+
+ L(thread_start):
+- cfi_startproc;
+- /* Clearing frame pointer is insufficient, use CFI. */
+- cfi_undefined (rip);
+ /* Clear the frame pointer. The ABI suggests this be done, to mark
+ the outermost frame obviously. */
+ xorl %ebp, %ebp
+@@ -116,7 +113,6 @@
+ /* Call exit with return value from function call. */
+ movq %rax, %rdi
+ call HIDDEN_JUMPTARGET (_exit)
+- cfi_endproc;
+
+ cfi_startproc;
+ PSEUDO_END (BP_SYM (__clone))
diff --git a/patches/glibc/ports-2.16.0/140-disable-ldconfig.patch b/patches/glibc/ports-2.16.0/140-disable-ldconfig.patch
new file mode 100644
index 0000000..378e1df
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/140-disable-ldconfig.patch
@@ -0,0 +1,16 @@
+do not bother running ldconfig on DESTDIR. it wants to write the temp cache
+file outside of the chroot. doesnt matter anyways as we wont use the cache
+results (portage will rebuild cache), so running ldconfig is simply a waste
+of time.
+
+diff -durN glibc-2.13.orig/Makefile glibc-2.13/Makefile
+--- glibc-2.13.orig/Makefile 2009-04-23 20:23:03.000000000 +0200
++++ glibc-2.13/Makefile 2009-11-13 00:49:49.000000000 +0100
+@@ -116,6 +116,7 @@
+ rm -f $(symbolic-link-list)
+
+ install:
++dont-bother-with-destdir:
+ -test ! -x $(common-objpfx)elf/ldconfig || LC_ALL=C LANGUAGE=C \
+ $(common-objpfx)elf/ldconfig $(addprefix -r ,$(install_root)) \
+ $(slibdir) $(libdir)
diff --git a/patches/glibc/ports-2.16.0/150-queue-header-updates.patch b/patches/glibc/ports-2.16.0/150-queue-header-updates.patch
new file mode 100644
index 0000000..7cbe70e
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/150-queue-header-updates.patch
@@ -0,0 +1,85 @@
+grab some updates from FreeBSD
+
+http://bugs.gentoo.org/201979
+
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+
+diff -durN glibc-2.13.orig/misc/sys/queue.h glibc-2.13/misc/sys/queue.h
+--- glibc-2.13.orig/misc/sys/queue.h 2008-03-05 06:50:30.000000000 +0100
++++ glibc-2.13/misc/sys/queue.h 2009-11-13 00:49:51.000000000 +0100
+@@ -136,6 +136,11 @@
+ (var); \
+ (var) = ((var)->field.le_next))
+
++#define LIST_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = LIST_FIRST((head)); \
++ (var) && ((tvar) = LIST_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ /*
+ * List access methods.
+ */
+@@ -197,6 +202,16 @@
+ #define SLIST_FOREACH(var, head, field) \
+ for((var) = (head)->slh_first; (var); (var) = (var)->field.sle_next)
+
++#define SLIST_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = SLIST_FIRST((head)); \
++ (var) && ((tvar) = SLIST_NEXT((var), field), 1); \
++ (var) = (tvar))
++
++#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
++ for ((varp) = &SLIST_FIRST((head)); \
++ ((var) = *(varp)) != NULL; \
++ (varp) = &SLIST_NEXT((var), field))
++
+ /*
+ * Singly-linked List access methods.
+ */
+@@ -242,6 +257,12 @@
+ (head)->stqh_last = &(elm)->field.stqe_next; \
+ } while (/*CONSTCOND*/0)
+
++#define STAILQ_LAST(head, type, field) \
++ (STAILQ_EMPTY((head)) ? \
++ NULL : \
++ ((struct type *)(void *) \
++ ((char *)((head)->stqh_last) - __offsetof(struct type, field))))
++
+ #define STAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.stqe_next = (listelm)->field.stqe_next) == NULL)\
+ (head)->stqh_last = &(elm)->field.stqe_next; \
+@@ -271,6 +292,11 @@
+ (var); \
+ (var) = ((var)->field.stqe_next))
+
++#define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = STAILQ_FIRST((head)); \
++ (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ #define STAILQ_CONCAT(head1, head2) do { \
+ if (!STAILQ_EMPTY((head2))) { \
+ *(head1)->stqh_last = (head2)->stqh_first; \
+@@ -437,11 +463,21 @@
+ (var); \
+ (var) = ((var)->field.tqe_next))
+
++#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
++ for ((var) = TAILQ_FIRST((head)); \
++ (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \
++ (var) = (tvar))
++
+ #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for ((var) = (*(((struct headname *)((head)->tqh_last))->tqh_last)); \
+ (var); \
+ (var) = (*(((struct headname *)((var)->field.tqe_prev))->tqh_last)))
+
++#define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
++ for ((var) = TAILQ_LAST((head), headname); \
++ (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \
++ (var) = (tvar))
++
+ #define TAILQ_CONCAT(head1, head2, field) do { \
+ if (!TAILQ_EMPTY(head2)) { \
+ *(head1)->tqh_last = (head2)->tqh_first; \
diff --git a/patches/glibc/ports-2.16.0/170-localedef-fix-trampoline.patch b/patches/glibc/ports-2.16.0/170-localedef-fix-trampoline.patch
new file mode 100644
index 0000000..4784a07
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/170-localedef-fix-trampoline.patch
@@ -0,0 +1,69 @@
+#! /bin/sh -e
+
+# DP: Description: Fix localedef segfault when run under exec-shield,
+# PaX or similar. (#231438, #198099)
+# DP: Dpatch Author: James Troup <james@nocrew.org>
+# DP: Patch Author: (probably) Jakub Jelinek <jakub@redhat.com>
+# DP: Upstream status: Unknown
+# DP: Status Details: Unknown
+# DP: Date: 2004-03-16
+
+if [ $# -ne 2 ]; then
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+fi
+case "$1" in
+ -patch) patch -d "$2" -f --no-backup-if-mismatch -p1 < $0;;
+ -unpatch) patch -d "$2" -f --no-backup-if-mismatch -R -p1 < $0;;
+ *)
+ echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+ exit 1
+esac
+exit 0
+
+diff -durN glibc-2.13.orig/locale/programs/3level.h glibc-2.13/locale/programs/3level.h
+--- glibc-2.13.orig/locale/programs/3level.h 2007-07-16 02:54:59.000000000 +0200
++++ glibc-2.13/locale/programs/3level.h 2009-11-13 00:49:56.000000000 +0100
+@@ -203,6 +203,42 @@
+ }
+ }
+ }
++
++/* GCC ATM seems to do a poor job with pointers to nested functions passed
++ to inlined functions. Help it a little bit with this hack. */
++#define wchead_table_iterate(tp, fn) \
++do \
++ { \
++ struct wchead_table *t = (tp); \
++ uint32_t index1; \
++ for (index1 = 0; index1 < t->level1_size; index1++) \
++ { \
++ uint32_t lookup1 = t->level1[index1]; \
++ if (lookup1 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup1_shifted = lookup1 << t->q; \
++ uint32_t index2; \
++ for (index2 = 0; index2 < (1 << t->q); index2++) \
++ { \
++ uint32_t lookup2 = t->level2[index2 + lookup1_shifted]; \
++ if (lookup2 != ((uint32_t) ~0)) \
++ { \
++ uint32_t lookup2_shifted = lookup2 << t->p; \
++ uint32_t index3; \
++ for (index3 = 0; index3 < (1 << t->p); index3++) \
++ { \
++ struct element_t *lookup3 \
++ = t->level3[index3 + lookup2_shifted]; \
++ if (lookup3 != NULL) \
++ fn ((((index1 << t->q) + index2) << t->p) + index3, \
++ lookup3); \
++ } \
++ } \
++ } \
++ } \
++ } \
++ } while (0)
++
+ #endif
+
+ #ifndef NO_FINALIZE
diff --git a/patches/glibc/ports-2.16.0/180-resolv-dynamic.patch b/patches/glibc/ports-2.16.0/180-resolv-dynamic.patch
new file mode 100644
index 0000000..e916bce
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/180-resolv-dynamic.patch
@@ -0,0 +1,39 @@
+ripped from SuSE
+
+if /etc/resolv.conf is updated, then make sure applications
+already running get the updated information.
+
+http://bugs.gentoo.org/177416
+
+diff -durN glibc-2.13.orig/resolv/res_libc.c glibc-2.13/resolv/res_libc.c
+--- glibc-2.13.orig/resolv/res_libc.c 2009-02-07 05:27:42.000000000 +0100
++++ glibc-2.13/resolv/res_libc.c 2009-11-13 00:49:59.000000000 +0100
+@@ -22,6 +22,7 @@
+ #include <arpa/nameser.h>
+ #include <resolv.h>
+ #include <bits/libc-lock.h>
++#include <sys/stat.h>
+
+
+ /* The following bit is copied from res_data.c (where it is #ifdef'ed
+@@ -95,6 +96,20 @@
+ __res_maybe_init (res_state resp, int preinit)
+ {
+ if (resp->options & RES_INIT) {
++ static time_t last_mtime, last_check;
++ time_t now;
++ struct stat statbuf;
++
++ time (&now);
++ if (now != last_check) {
++ last_check = now;
++ if (stat (_PATH_RESCONF, &statbuf) == 0 && last_mtime != statbuf.st_mtime) {
++ last_mtime = statbuf.st_mtime;
++ atomicinclock (lock);
++ atomicinc (__res_initstamp);
++ atomicincunlock (lock);
++ }
++ }
+ if (__res_initstamp != resp->_u._ext.initstamp) {
+ if (resp->nscount > 0)
+ __res_iclose (resp, true);
diff --git a/patches/glibc/ports-2.16.0/200-fadvise64_64.patch b/patches/glibc/ports-2.16.0/200-fadvise64_64.patch
new file mode 100644
index 0000000..71bca38
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/200-fadvise64_64.patch
@@ -0,0 +1,28 @@
+ripped from Debian
+
+ sysdeps/unix/sysv/linux/posix_fadvise.c | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/posix_fadvise.c 2003-08-17 02:36:22.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/posix_fadvise.c 2009-11-13 00:50:03.000000000 +0100
+@@ -35,6 +35,19 @@
+ return INTERNAL_SYSCALL_ERRNO (ret, err);
+ return 0;
+ #else
++# ifdef __NR_fadvise64_64
++ INTERNAL_SYSCALL_DECL (err);
++ int ret = INTERNAL_SYSCALL (fadvise64_64, err, 6, fd,
++ __LONG_LONG_PAIR ((long) (offset >> 31),
++ (long) offset),
++ __LONG_LONG_PAIR ((long) (len >> 31),
++ (long) len),
++ advise);
++ if (INTERNAL_SYSCALL_ERROR_P (ret, err))
++ return INTERNAL_SYSCALL_ERRNO (ret, err);
++ return 0;
++# else
+ return ENOSYS;
++# endif
+ #endif
+ }
diff --git a/patches/glibc/ports-2.16.0/260-assume-pipe2.patch b/patches/glibc/ports-2.16.0/260-assume-pipe2.patch
new file mode 100644
index 0000000..54f0382
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/260-assume-pipe2.patch
@@ -0,0 +1,40 @@
+http://bugs.gentoo.org/250342
+http://sources.redhat.com/bugzilla/show_bug.cgi?id=9685
+
+we cant assume sock_cloexec and pipe2 are bound together as the former defines
+are found in glibc only while the latter are a combo of kernel headers and
+glibc. so if we do a runtime detection of SOCK_CLOEXEC, but pipe2() is a stub
+inside of glibc, we hit a problem. for example:
+
+#include <grp.h>
+#include <stdio.h>
+main()
+{
+ getgrnam("portage");
+ if (!popen("ls", "r"))
+ perror("popen()");
+}
+
+getgrnam() will detect that the kernel supports SOCK_CLOEXEC and then set both
+__have_sock_cloexec and __have_pipe2 to true. but if glibc was built against
+older kernel headers where __NR_pipe2 does not exist, glibc will have a ENOSYS
+stub for it. so popen() will always fail as glibc assumes pipe2() works.
+
+diff -durN glibc-2.16.0.orig/socket/have_sock_cloexec.c glibc-2.16.0/socket/have_sock_cloexec.c
+--- glibc-2.16.0.orig/socket/have_sock_cloexec.c 2008-07-25 18:46:23.000000000 +0200
++++ glibc-2.16.0/socket/have_sock_cloexec.c 2009-11-13 00:50:15.000000000 +0100
+@@ -15,9 +15,14 @@
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
++#include <fcntl.h>
+ #include <sys/socket.h>
+ #include <kernel-features.h>
+
+ #if defined SOCK_CLOEXEC && !defined __ASSUME_SOCK_CLOEXEC
+ int __have_sock_cloexec;
+ #endif
++
++#if defined O_CLOEXEC && !defined __ASSUME_PIPE2
++int __have_pipe2;
++#endif
diff --git a/patches/glibc/ports-2.16.0/270-china.patch b/patches/glibc/ports-2.16.0/270-china.patch
new file mode 100644
index 0000000..41d7759
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/270-china.patch
@@ -0,0 +1,32 @@
+
+
+diff -durN glibc-2.13.orig/localedata/locales/zh_TW glibc-2.13/localedata/locales/zh_TW
+--- glibc-2.13.orig/localedata/locales/zh_TW 2004-11-01 00:42:28.000000000 +0100
++++ glibc-2.13/localedata/locales/zh_TW 2009-11-13 00:50:17.000000000 +0100
+@@ -1,7 +1,7 @@
+ comment_char %
+ escape_char /
+ %
+-% Chinese language locale for Taiwan R.O.C.
++% Chinese language locale for Taiwan
+ % charmap: BIG5-CP950
+ %
+ % Original Author:
+@@ -17,7 +17,7 @@
+ % Reference: http://wwwold.dkuug.dk/JTC1/SC22/WG20/docs/n690.pdf
+
+ LC_IDENTIFICATION
+-title "Chinese locale for Taiwan R.O.C."
++title "Chinese locale for Taiwan"
+ source ""
+ address ""
+ contact ""
+@@ -25,7 +25,7 @@
+ tel ""
+ fax ""
+ language "Chinese"
+-territory "Taiwan R.O.C."
++territory "Taiwan"
+ revision "0.2"
+ date "2000-08-02"
+ %
diff --git a/patches/glibc/ports-2.16.0/280-new-valencian-locale.patch b/patches/glibc/ports-2.16.0/280-new-valencian-locale.patch
new file mode 100644
index 0000000..4cdd108
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/280-new-valencian-locale.patch
@@ -0,0 +1,115 @@
+http://bugs.gentoo.org/show_bug.cgi?id=131815
+http://sourceware.org/bugzilla/show_bug.cgi?id=2522
+
+diff -durN glibc-2.13.orig/localedata/SUPPORTED glibc-2.13/localedata/SUPPORTED
+--- glibc-2.13.orig/localedata/SUPPORTED 2009-04-18 10:43:52.000000000 +0200
++++ glibc-2.13/localedata/SUPPORTED 2009-11-13 00:50:20.000000000 +0100
+@@ -72,6 +72,8 @@
+ ca_ES.UTF-8/UTF-8 \
+ ca_ES/ISO-8859-1 \
+ ca_ES@euro/ISO-8859-15 \
++ca_ES.UTF-8@valencia/UTF-8 \
++ca_ES@valencia/ISO-8859-15 \
+ ca_FR.UTF-8/UTF-8 \
+ ca_FR/ISO-8859-15 \
+ ca_IT.UTF-8/UTF-8 \
+diff -durN glibc-2.13.orig/localedata/locales/ca_ES@valencia glibc-2.13/localedata/locales/ca_ES@valencia
+--- glibc-2.13.orig/localedata/locales/ca_ES@valencia 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/localedata/locales/ca_ES@valencia 2009-11-13 00:50:20.000000000 +0100
+@@ -0,0 +1,96 @@
++comment_char %
++escape_char /
++%
++% Valencian (southern Catalan) locale for Spain with Euro
++%
++% Note that this locale is almost the same as ca_ES@euro. The point of having
++% a separate locale is only for PO translations, which have a lot of social
++% support and are very appreciated by the Valencian-speaking community.
++%
++% Contact: Jordi Mallach
++% Email: jordi@gnu.org
++% Tel:
++% Fax:
++% Language: ca
++% Territory: ES
++% Option: euro
++% Revision: 1.0
++% Date: 2006-04-06
++% Application: general
++% Users: general
++% Repertoiremap: mnemonic,ds
++% Charset: ISO-8859-15
++% Distribution and use is free, also
++% for commercial purposes.
++
++LC_IDENTIFICATION
++title "Valencian (southern Catalan) locale for Spain with Euro"
++source ""
++address ""
++contact "Jordi Mallach"
++email "jordi@gnu.org"
++tel ""
++fax ""
++language "Catalan"
++territory "Spain"
++revision "1.0"
++date "2006-04-06"
++%
++category "ca_ES@valencia:2006";LC_IDENTIFICATION
++category "ca_ES@valencia:2006";LC_CTYPE
++category "ca_ES@valencia:2006";LC_COLLATE
++category "ca_ES@valencia:2006";LC_MONETARY
++category "ca_ES@valencia:2006";LC_NUMERIC
++category "ca_ES@valencia:2006";LC_TIME
++category "ca_ES@valencia:2006";LC_MESSAGES
++category "ca_ES@valencia:2006";LC_PAPER
++category "ca_ES@valencia:2006";LC_NAME
++category "ca_ES@valencia:2006";LC_ADDRESS
++category "ca_ES@valencia:2006";LC_TELEPHONE
++category "ca_ES@valencia:2006";LC_MEASUREMENT
++
++END LC_IDENTIFICATION
++
++LC_CTYPE
++copy "i18n"
++END LC_CTYPE
++
++LC_COLLATE
++copy "ca_ES"
++END LC_COLLATE
++
++LC_MONETARY
++copy "ca_ES"
++END LC_MONETARY
++
++LC_NUMERIC
++copy "ca_ES"
++END LC_NUMERIC
++
++LC_TIME
++copy "ca_ES"
++END LC_TIME
++
++LC_MESSAGES
++copy "ca_ES"
++END LC_MESSAGES
++
++LC_PAPER
++copy "ca_ES"
++END LC_PAPER
++
++LC_NAME
++copy "ca_ES"
++END LC_NAME
++
++LC_ADDRESS
++copy "ca_ES"
++END LC_ADDRESS
++
++LC_TELEPHONE
++copy "ca_ES"
++END LC_TELEPHONE
++
++LC_MEASUREMENT
++copy "ca_ES"
++END LC_MEASUREMENT
diff --git a/patches/glibc/ports-2.16.0/300-nscd-one-fork.patch b/patches/glibc/ports-2.16.0/300-nscd-one-fork.patch
new file mode 100644
index 0000000..13b2861
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/300-nscd-one-fork.patch
@@ -0,0 +1,43 @@
+only fork one to assist in stop-start-daemon assumptions about daemon behavior
+
+http://bugs.gentoo.org/190785
+
+diff -durN glibc-2.13.orig/nscd/nscd.c glibc-2.13/nscd/nscd.c
+--- glibc-2.13.orig/nscd/nscd.c 2009-02-06 21:10:27.000000000 +0100
++++ glibc-2.13/nscd/nscd.c 2009-11-13 00:50:24.000000000 +0100
+@@ -203,6 +203,9 @@
+ exit (0);
+ }
+
++ if (write_pid (_PATH_NSCDPID) < 0)
++ dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno));
++
+ int nullfd = open (_PATH_DEVNULL, O_RDWR);
+ if (nullfd != -1)
+ {
+@@ -252,15 +255,6 @@
+ for (i = min_close_fd; i < getdtablesize (); i++)
+ close (i);
+
+- if (run_mode == RUN_DAEMONIZE)
+- {
+- pid = fork ();
+- if (pid == -1)
+- error (EXIT_FAILURE, errno, _("cannot fork"));
+- if (pid != 0)
+- exit (0);
+- }
+-
+ setsid ();
+
+ if (chdir ("/") != 0)
+@@ -245,9 +242,6 @@
+
+ openlog ("nscd", LOG_CONS | LOG_ODELAY, LOG_DAEMON);
+
+- if (write_pid (_PATH_NSCDPID) < 0)
+- dbg_log ("%s: %s", _PATH_NSCDPID, strerror (errno));
+-
+ if (!init_logfile ())
+ dbg_log (_("Could not create log file"));
+
diff --git a/patches/glibc/ports-2.16.0/310-hppa-nptl-carlos.patch b/patches/glibc/ports-2.16.0/310-hppa-nptl-carlos.patch
new file mode 100644
index 0000000..11e8a65
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/310-hppa-nptl-carlos.patch
@@ -0,0 +1,246 @@
+
+
+diff -durN glibc-2.13.orig/elf/rtld.c glibc-2.13/elf/rtld.c
+--- glibc-2.13.orig/elf/rtld.c 2009-04-17 02:00:08.000000000 +0200
++++ glibc-2.13/elf/rtld.c 2009-11-13 00:50:26.000000000 +0100
+@@ -392,14 +392,14 @@
+ know it is available. We do not have to clear the memory if we
+ do not have to use the temporary bootstrap_map. Global variables
+ are initialized to zero by default. */
+-#ifndef DONT_USE_BOOTSTRAP_MAP
++#if !defined DONT_USE_BOOTSTRAP_MAP
+ # ifdef HAVE_BUILTIN_MEMSET
+ __builtin_memset (bootstrap_map.l_info, '\0', sizeof (bootstrap_map.l_info));
+ # else
+- for (size_t cnt = 0;
+- cnt < sizeof (bootstrap_map.l_info) / sizeof (bootstrap_map.l_info[0]);
+- ++cnt)
+- bootstrap_map.l_info[cnt] = 0;
++ /* Clear the whole bootstrap_map structure */
++ for (char *cnt = (char *)&(bootstrap_map);
++ cnt < ((char *)&(bootstrap_map) + sizeof (bootstrap_map));
++ *cnt++ = '\0');
+ # endif
+ # if USE___THREAD
+ bootstrap_map.l_tls_modid = 0;
+diff -durN glibc-2.13.orig/include/atomic.h glibc-2.13/include/atomic.h
+--- glibc-2.13.orig/include/atomic.h 2009-02-09 00:49:53.000000000 +0100
++++ glibc-2.13/include/atomic.h 2009-11-13 00:50:26.000000000 +0100
+@@ -185,7 +185,7 @@
+ __typeof (*(mem)) __atg5_value = (newvalue); \
+ \
+ do \
+- __atg5_oldval = *__atg5_memp; \
++ __atg5_oldval = *(volatile __typeof (mem))__atg5_memp; \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg5_memp, __atg5_value, \
+ __atg5_oldval), 0)); \
+@@ -206,7 +206,7 @@
+ __typeof (*(mem)) __atg6_value = (value); \
+ \
+ do \
+- __atg6_oldval = *__atg6_memp; \
++ __atg6_oldval = *(volatile __typeof (mem))__atg6_memp; \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg6_memp, \
+ __atg6_oldval \
+@@ -224,7 +224,7 @@
+ __typeof (*(mem)) __atg7_value = (value); \
+ \
+ do \
+- __atg7_oldv = *__atg7_memp; \
++ __atg7_oldv = *(volatile __typeof (mem))__atg7_memp; \
+ while (__builtin_expect \
+ (catomic_compare_and_exchange_bool_acq (__atg7_memp, \
+ __atg7_oldv \
+@@ -242,7 +242,7 @@
+ __typeof (mem) __atg8_memp = (mem); \
+ __typeof (*(mem)) __atg8_value = (value); \
+ do { \
+- __atg8_oldval = *__atg8_memp; \
++ __atg8_oldval = *(volatile __typeof (mem))__atg8_memp; \
+ if (__atg8_oldval >= __atg8_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -259,7 +259,7 @@
+ __typeof (mem) __atg9_memp = (mem); \
+ __typeof (*(mem)) __atg9_value = (value); \
+ do { \
+- __atg9_oldv = *__atg9_memp; \
++ __atg9_oldv = *(volatile __typeof (mem))__atg9_memp; \
+ if (__atg9_oldv >= __atg9_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -277,7 +277,7 @@
+ __typeof (mem) __atg10_memp = (mem); \
+ __typeof (*(mem)) __atg10_value = (value); \
+ do { \
+- __atg10_oldval = *__atg10_memp; \
++ __atg10_oldval = *(volatile __typeof (mem))__atg10_memp; \
+ if (__atg10_oldval <= __atg10_value) \
+ break; \
+ } while (__builtin_expect \
+@@ -361,7 +361,7 @@
+ \
+ do \
+ { \
+- __atg11_oldval = *__atg11_memp; \
++ __atg11_oldval = *(volatile __typeof (mem))__atg11_memp; \
+ if (__builtin_expect (__atg11_oldval <= 0, 0)) \
+ break; \
+ } \
+@@ -400,7 +400,7 @@
+ __typeof (*(mem)) __atg14_mask = ((__typeof (*(mem))) 1 << (bit)); \
+ \
+ do \
+- __atg14_old = (*__atg14_memp); \
++ __atg14_old = (*(volatile __typeof (mem))__atg14_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg14_memp, \
+ __atg14_old | __atg14_mask,\
+@@ -418,7 +418,7 @@
+ __typeof (*(mem)) __atg15_mask = (mask); \
+ \
+ do \
+- __atg15_old = (*__atg15_memp); \
++ __atg15_old = (*(volatile __typeof (mem))__atg15_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg15_memp, \
+ __atg15_old & __atg15_mask, \
+@@ -450,7 +450,7 @@
+ __typeof (*(mem)) __atg16_mask = (mask); \
+ \
+ do \
+- __atg16_old = (*__atg16_memp); \
++ __atg16_old = (*(volatile __typeof (mem))__atg16_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg16_memp, \
+ __atg16_old & __atg16_mask,\
+@@ -468,7 +468,7 @@
+ __typeof (*(mem)) __atg17_mask = (mask); \
+ \
+ do \
+- __atg17_old = (*__atg17_memp); \
++ __atg17_old = (*(volatile __typeof (mem))__atg17_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg17_memp, \
+ __atg17_old | __atg17_mask, \
+@@ -484,7 +484,7 @@
+ __typeof (*(mem)) __atg18_mask = (mask); \
+ \
+ do \
+- __atg18_old = (*__atg18_memp); \
++ __atg18_old = (*(volatile __typeof (mem))__atg18_memp); \
+ while (__builtin_expect \
+ (catomic_compare_and_exchange_bool_acq (__atg18_memp, \
+ __atg18_old | __atg18_mask,\
+@@ -500,7 +500,7 @@
+ __typeof (*(mem)) __atg19_mask = (mask); \
+ \
+ do \
+- __atg19_old = (*__atg19_memp); \
++ __atg19_old = (*(volatile __typeof (mem))__atg19_memp); \
+ while (__builtin_expect \
+ (atomic_compare_and_exchange_bool_acq (__atg19_memp, \
+ __atg19_old | __atg19_mask,\
+diff -durN glibc-2.13.orig/nptl/Makefile glibc-2.13/nptl/Makefile
+--- glibc-2.13.orig/nptl/Makefile 2008-11-12 14:38:23.000000000 +0100
++++ glibc-2.13/nptl/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -266,9 +266,9 @@
+ # Files which must not be linked with libpthread.
+ tests-nolibpthread = tst-unload
+
+-# This sets the stack resource limit to 1023kb, which is not a multiple
+-# of the page size since every architecture's page size is > 1k.
+-tst-oddstacklimit-ENV = ; ulimit -s 1023;
++# This sets the stack resource limit to 8193kb, which is not a multiple
++# of the page size since every architecture's page size is 4096 bytes.
++tst-oddstacklimit-ENV = ; ulimit -s 8193;
+
+ gen-as-const-headers = pthread-errnos.sym
+
+@@ -426,6 +426,35 @@
+ CFLAGS-tst-cleanupx4.c += -fexceptions
+ CFLAGS-tst-oncex3.c += -fexceptions
+ CFLAGS-tst-oncex4.c += -fexceptions
++
++ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
++LDFLAGS-tst-cancelx2 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx4 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx5 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx6 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx7 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx8 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx9 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx10 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx11 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx12 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx13 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx14 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx15 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx16 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx17 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx18 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx20 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cancelx21 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx0 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx1 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx2 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-cleanupx4 += $(ldflags-libgcc_s)
++LDFLAGS-tst-oncex3 += $(ldflags-libgcc_s)
++LDFLAGS-tst-oncex4 += $(ldflags-libgcc_s)
++
+ CFLAGS-tst-align.c += $(stack-align-test-flags)
+ CFLAGS-tst-align3.c += $(stack-align-test-flags)
+ CFLAGS-tst-initializers1.c = -W -Wall -Werror
+diff -durN glibc-2.13.orig/nptl/pthread_barrier_wait.c glibc-2.13/nptl/pthread_barrier_wait.c
+--- glibc-2.13.orig/nptl/pthread_barrier_wait.c 2007-08-01 06:18:50.000000000 +0200
++++ glibc-2.13/nptl/pthread_barrier_wait.c 2009-11-13 00:50:26.000000000 +0100
+@@ -64,7 +64,7 @@
+ do
+ lll_futex_wait (&ibarrier->curr_event, event,
+ ibarrier->private ^ FUTEX_PRIVATE_FLAG);
+- while (event == ibarrier->curr_event);
++ while (event == *(volatile unsigned int *)&ibarrier->curr_event);
+ }
+
+ /* Make sure the init_count is stored locally or in a register. */
+diff -durN glibc-2.13.orig/nptl/sysdeps/pthread/Makefile glibc-2.13/nptl/sysdeps/pthread/Makefile
+--- glibc-2.13.orig/nptl/sysdeps/pthread/Makefile 2006-02-28 08:09:41.000000000 +0100
++++ glibc-2.13/nptl/sysdeps/pthread/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -33,7 +33,9 @@
+
+ ifeq ($(have-forced-unwind),yes)
+ tests += tst-mqueue8x
++ldflags-libgcc_s = --as-needed -lgcc_s --no-as-needed
+ CFLAGS-tst-mqueue8x.c += -fexceptions
++LDFLAGS-tst-mqueue8x += $(ldflags-libgcc_s)
+ endif
+ endif
+
+diff -durN glibc-2.13.orig/stdio-common/Makefile glibc-2.13/stdio-common/Makefile
+--- glibc-2.13.orig/stdio-common/Makefile 2009-04-11 07:29:56.000000000 +0200
++++ glibc-2.13/stdio-common/Makefile 2009-11-13 00:50:26.000000000 +0100
+@@ -82,7 +82,7 @@
+ $(SHELL) -e tst-printf.sh $(common-objpfx) '$(run-program-prefix)'
+ endif
+
+-CFLAGS-vfprintf.c = -Wno-uninitialized
++CFLAGS-vfprintf.c = -Wno-uninitialized -fno-delayed-branch
+ CFLAGS-vfwprintf.c = -Wno-uninitialized
+ CFLAGS-tst-printf.c = -Wno-format
+ CFLAGS-tstdiomisc.c = -Wno-format
+diff -durN glibc-2.13.orig/sunrpc/clnt_udp.c glibc-2.13/sunrpc/clnt_udp.c
+--- glibc-2.13.orig/sunrpc/clnt_udp.c 2008-07-26 10:42:44.000000000 +0200
++++ glibc-2.13/sunrpc/clnt_udp.c 2009-11-13 00:50:26.000000000 +0100
+@@ -456,7 +456,7 @@
+ while (inlen < 0 && errno == EINTR);
+ if (inlen < 0)
+ {
+- if (errno == EWOULDBLOCK)
++ if (errno == EWOULDBLOCK || errno == EAGAIN)
+ continue;
+ cu->cu_error.re_errno = errno;
+ return (cu->cu_error.re_status = RPC_CANTRECV);
diff --git a/patches/glibc/ports-2.16.0/330-m68k-sys-user.patch b/patches/glibc/ports-2.16.0/330-m68k-sys-user.patch
new file mode 100644
index 0000000..f113996
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/330-m68k-sys-user.patch
@@ -0,0 +1,97 @@
+copied from kernel as it is sanitized now
+
+diff -durN glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/m68k/sys/user.h
+--- glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/m68k/sys/user.h 2009-11-13 00:50:31.000000000 +0100
+@@ -1,3 +1,90 @@
++#ifndef _SYS_USER_H
++#define _SYS_USER_H
++
++/* Core file format: The core file is written in such a way that gdb
++ can understand it and provide useful information to the user (under
++ linux we use the 'trad-core' bfd). There are quite a number of
++ obstacles to being able to view the contents of the floating point
++ registers, and until these are solved you will not be able to view the
++ contents of them. Actually, you can read in the core file and look at
++ the contents of the user struct to find out what the floating point
++ registers contain.
++ The actual file contents are as follows:
++ UPAGE: 1 page consisting of a user struct that tells gdb what is present
++ in the file. Directly after this is a copy of the task_struct, which
++ is currently not used by gdb, but it may come in useful at some point.
++ All of the registers are stored as part of the upage. The upage should
++ always be only one page.
++ DATA: The data area is stored. We use current->end_text to
++ current->brk to pick up all of the user variables, plus any memory
++ that may have been malloced. No attempt is made to determine if a page
++ is demand-zero or if a page is totally unused, we just cover the entire
++ range. All of the addresses are rounded in such a way that an integral
++ number of pages is written.
++ STACK: We need the stack information in order to get a meaningful
++ backtrace. We need to write the data from (esp) to
++ current->start_stack, so we round each of these off in order to be able
++ to write an integer number of pages.
++ The minimum core file size is 3 pages, or 12288 bytes.
++*/
++
++struct user_m68kfp_struct {
++ unsigned long fpregs[8*3]; /* fp0-fp7 registers */
++ unsigned long fpcntl[3]; /* fp control regs */
++};
++
++/* This is the old layout of "struct pt_regs" as of Linux 1.x, and
++ is still the layout used by user (the new pt_regs doesn't have
++ all registers). */
++struct user_regs_struct {
++ long d1,d2,d3,d4,d5,d6,d7;
++ long a0,a1,a2,a3,a4,a5,a6;
++ long d0;
++ long usp;
++ long orig_d0;
++ short stkadj;
++ short sr;
++ long pc;
++ short fmtvec;
++ short __fill;
++};
++
++
++/* When the kernel dumps core, it starts by dumping the user struct -
++ this will be used by gdb to figure out where the data and stack segments
++ are within the file, and what virtual addresses to use. */
++struct user{
++/* We start with the registers, to mimic the way that "memory" is returned
++ from the ptrace(3,...) function. */
++ struct user_regs_struct regs; /* Where the registers are actually stored */
++/* ptrace does not yet supply these. Someday.... */
++ int u_fpvalid; /* True if math co-processor being used. */
++ /* for this mess. Not yet used. */
++ struct user_m68kfp_struct m68kfp; /* Math Co-processor registers. */
++/* The rest of this junk is to help gdb figure out what goes where */
++ unsigned long int u_tsize; /* Text segment size (pages). */
++ unsigned long int u_dsize; /* Data segment size (pages). */
++ unsigned long int u_ssize; /* Stack segment size (pages). */
++ unsigned long start_code; /* Starting virtual address of text. */
++ unsigned long start_stack; /* Starting virtual address of stack area.
++ This is actually the bottom of the stack,
++ the top of the stack is always found in the
++ esp register. */
++ long int signal; /* Signal that caused the core dump. */
++ int reserved; /* No longer used */
++ struct user_regs_struct *u_ar0;
++ /* Used by gdb to help find the values for */
++ /* the registers. */
++ struct user_m68kfp_struct* u_fpstate; /* Math Co-processor pointer. */
++ unsigned long magic; /* To uniquely identify a core file */
++ char u_comm[32]; /* User command that was responsible */
++};
++#define NBPG 4096
++#define UPAGES 1
++#define HOST_TEXT_START_ADDR (u.start_code)
++#define HOST_STACK_END_ADDR (u.start_stack + u.u_ssize * NBPG)
++
++#endif
+ /* Copyright (C) 2008, 2010 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+diff -durN glibc-2.16.0.orig/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h glibc-2.16.0/ports/sysdeps/unix/sysv/linux/m68k/sys/user.h
diff --git a/patches/glibc/ports-2.16.0/340-dl_execstack-PaX-support.patch b/patches/glibc/ports-2.16.0/340-dl_execstack-PaX-support.patch
new file mode 100644
index 0000000..2402af0
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/340-dl_execstack-PaX-support.patch
@@ -0,0 +1,66 @@
+ With latest versions of glibc, a lot of apps failed on a PaX enabled
+ system with:
+ cannot enable executable stack as shared object requires: Permission denied
+
+ This is due to PaX 'exec-protecting' the stack, and ld.so then trying
+ to make the stack executable due to some libraries not containing the
+ PT_GNU_STACK section. Bug #32960. <azarah@gentoo.org> (12 Nov 2003).
+
+ Patch also NPTL. Bug #116086. <kevquinn@gentoo.org> (20 Dec 2005).
+
+diff -durN glibc-2.13.orig/nptl/allocatestack.c glibc-2.13/nptl/allocatestack.c
+--- glibc-2.13.orig/nptl/allocatestack.c 2009-01-29 21:34:16.000000000 +0100
++++ glibc-2.13/nptl/allocatestack.c 2009-11-13 00:50:33.000000000 +0100
+@@ -329,7 +329,8 @@
+ # error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP"
+ #endif
+ if (mprotect (stack, len, PROT_READ | PROT_WRITE | PROT_EXEC) != 0)
+- return errno;
++ if (errno != EACCES) /* PAX is enabled */
++ return errno;
+
+ return 0;
+ }
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/dl-execstack.c 2006-01-08 09:21:15.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/dl-execstack.c 2009-11-13 00:50:33.000000000 +0100
+@@ -63,7 +63,10 @@
+ else
+ # endif
+ {
+- result = errno;
++ if (errno == EACCES) /* PAX is enabled */
++ result = 0;
++ else
++ result = errno;
+ goto out;
+ }
+ }
+@@ -89,7 +92,12 @@
+ page -= size;
+ else
+ {
+- if (errno != ENOMEM) /* Unexpected failure mode. */
++ if (errno == EACCES) /* PAX is enabled */
++ {
++ result = 0;
++ goto out;
++ }
++ else if (errno != ENOMEM) /* Unexpected failure mode. */
+ {
+ result = errno;
+ goto out;
+@@ -115,7 +123,12 @@
+ page += size;
+ else
+ {
+- if (errno != ENOMEM) /* Unexpected failure mode. */
++ if (errno == EACCES) /* PAX is enabled */
++ {
++ result = 0;
++ goto out;
++ }
++ else if (errno != ENOMEM) /* Unexpected failure mode. */
+ {
+ result = errno;
+ goto out;
diff --git a/patches/glibc/ports-2.16.0/350-pre20040117-pt_pax.patch b/patches/glibc/ports-2.16.0/350-pre20040117-pt_pax.patch
new file mode 100644
index 0000000..f8f6b83
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/350-pre20040117-pt_pax.patch
@@ -0,0 +1,32 @@
+
+
+diff -durN glibc-2.13.orig/elf/elf.h glibc-2.13/elf/elf.h
+--- glibc-2.13.orig/elf/elf.h 2009-04-15 02:15:54.000000000 +0200
++++ glibc-2.13/elf/elf.h 2009-11-13 00:50:35.000000000 +0100
+@@ -580,6 +580,7 @@
+ #define PT_GNU_EH_FRAME 0x6474e550 /* GCC .eh_frame_hdr segment */
+ #define PT_GNU_STACK 0x6474e551 /* Indicates stack executability */
+ #define PT_GNU_RELRO 0x6474e552 /* Read-only after relocation */
++#define PT_PAX_FLAGS 0x65041580 /* Indicates PaX flag markings */
+ #define PT_LOSUNW 0x6ffffffa
+ #define PT_SUNWBSS 0x6ffffffa /* Sun Specific segment */
+ #define PT_SUNWSTACK 0x6ffffffb /* Stack segment */
+@@ -593,6 +594,18 @@
+ #define PF_X (1 << 0) /* Segment is executable */
+ #define PF_W (1 << 1) /* Segment is writable */
+ #define PF_R (1 << 2) /* Segment is readable */
++#define PF_PAGEEXEC (1 << 4) /* Enable PAGEEXEC */
++#define PF_NOPAGEEXEC (1 << 5) /* Disable PAGEEXEC */
++#define PF_SEGMEXEC (1 << 6) /* Enable SEGMEXEC */
++#define PF_NOSEGMEXEC (1 << 7) /* Disable SEGMEXEC */
++#define PF_MPROTECT (1 << 8) /* Enable MPROTECT */
++#define PF_NOMPROTECT (1 << 9) /* Disable MPROTECT */
++#define PF_RANDEXEC (1 << 10) /* Enable RANDEXEC */
++#define PF_NORANDEXEC (1 << 11) /* Disable RANDEXEC */
++#define PF_EMUTRAMP (1 << 12) /* Enable EMUTRAMP */
++#define PF_NOEMUTRAMP (1 << 13) /* Disable EMUTRAMP */
++#define PF_RANDMMAP (1 << 14) /* Enable RANDMMAP */
++#define PF_NORANDMMAP (1 << 15) /* Disable RANDMMAP */
+ #define PF_MASKOS 0x0ff00000 /* OS-specific */
+ #define PF_MASKPROC 0xf0000000 /* Processor-specific */
+
diff --git a/patches/glibc/ports-2.16.0/360-tests-sandbox-libdl-paths.patch b/patches/glibc/ports-2.16.0/360-tests-sandbox-libdl-paths.patch
new file mode 100644
index 0000000..9f78c52
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/360-tests-sandbox-libdl-paths.patch
@@ -0,0 +1,193 @@
+when glibc runs its tests, it does so by invoking the local library loader.
+in Gentoo, we build/run inside of our "sandbox" which itself is linked against
+libdl (so that it can load libraries and pull out symbols). the trouble
+is that when you upgrade from an older glibc to the new one, often times
+internal symbols change name or abi. this is normally OK as you cannot use
+libc.so from say version 2.3.6 but libpthread.so from say version 2.5, so
+we always say "keep all of the glibc libraries from the same build". but
+when glibc runs its tests, it uses dynamic paths to point to its new local
+copies of libraries. if the test doesnt use libdl, then glibc doesnt add
+its path, and when sandbox triggers the loading of libdl, glibc does so
+from the host system system. this gets us into the case of all libraries
+are from the locally compiled version of glibc except for libdl.so.
+
+Fix by Wormo
+
+http://bugs.gentoo.org/56898
+
+diff -durN glibc-2.13.orig/grp/tst_fgetgrent.sh glibc-2.13/grp/tst_fgetgrent.sh
+--- glibc-2.13.orig/grp/tst_fgetgrent.sh 2001-07-06 06:54:46.000000000 +0200
++++ glibc-2.13/grp/tst_fgetgrent.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -24,7 +24,8 @@
+ rtld_installed_name=$1; shift
+
+ testout=${common_objpfx}/grp/tst_fgetgrent.out
+-library_path=${common_objpfx}
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
+
+ result=0
+
+diff -durN glibc-2.13.orig/iconvdata/run-iconv-test.sh glibc-2.13/iconvdata/run-iconv-test.sh
+--- glibc-2.13.orig/iconvdata/run-iconv-test.sh 2008-05-15 03:59:44.000000000 +0200
++++ glibc-2.13/iconvdata/run-iconv-test.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -34,7 +34,7 @@
+ export GCONV_PATH
+
+ # We have to have some directories in the library path.
+-LIBPATH=$codir:$codir/iconvdata
++LIBPATH=$codir:$codir/iconvdata:$codir/dlfcn
+
+ # How the start the iconv(1) program.
+ ICONV='$codir/elf/ld.so --library-path $LIBPATH --inhibit-rpath ${from}.so \
+diff -durN glibc-2.13.orig/iconvdata/tst-table.sh glibc-2.13/iconvdata/tst-table.sh
+--- glibc-2.13.orig/iconvdata/tst-table.sh 2002-04-24 23:39:35.000000000 +0200
++++ glibc-2.13/iconvdata/tst-table.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -59,8 +59,11 @@
+ irreversible=${charset}.irreversible
+ fi
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # iconv in one direction.
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-table-from ${charset} \
+ > ${objpfx}tst-${charset}.table
+
+diff -durN glibc-2.13.orig/intl/tst-codeset.sh glibc-2.13/intl/tst-codeset.sh
+--- glibc-2.13.orig/intl/tst-codeset.sh 2005-04-06 04:18:35.000000000 +0200
++++ glibc-2.13/intl/tst-codeset.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -37,6 +37,9 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ ${common_objpfx}elf/ld.so --library-path $common_objpfx \
+ ${objpfx}tst-codeset > ${objpfx}tst-codeset.out
+
+diff -durN glibc-2.13.orig/intl/tst-gettext.sh glibc-2.13/intl/tst-gettext.sh
+--- glibc-2.13.orig/intl/tst-gettext.sh 2004-08-15 21:28:18.000000000 +0200
++++ glibc-2.13/intl/tst-gettext.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -51,9 +51,12 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # Now run the test.
+ MALLOC_TRACE=$malloc_trace LOCPATH=${objpfx}localedir:$LOCPATH \
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-gettext > ${objpfx}tst-gettext.out ${objpfx}domaindir
+
+ exit $?
+diff -durN glibc-2.13.orig/intl/tst-gettext2.sh glibc-2.13/intl/tst-gettext2.sh
+--- glibc-2.13.orig/intl/tst-gettext2.sh 2005-05-04 19:54:48.000000000 +0200
++++ glibc-2.13/intl/tst-gettext2.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -65,8 +65,11 @@
+ LOCPATH=${objpfx}domaindir
+ export LOCPATH
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ # Now run the test.
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-gettext2 > ${objpfx}tst-gettext2.out ${objpfx}domaindir &&
+ cmp ${objpfx}tst-gettext2.out - <<EOF
+ String1 - Lang1: 1st string
+diff -durN glibc-2.13.orig/intl/tst-translit.sh glibc-2.13/intl/tst-translit.sh
+--- glibc-2.13.orig/intl/tst-translit.sh 2005-05-04 19:56:10.000000000 +0200
++++ glibc-2.13/intl/tst-translit.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -36,7 +36,10 @@
+ LOCPATH=${common_objpfx}localedata
+ export LOCPATH
+
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${objpfx}tst-translit > ${objpfx}tst-translit.out ${objpfx}domaindir
+
+ exit $?
+diff -durN glibc-2.13.orig/malloc/tst-mtrace.sh glibc-2.13/malloc/tst-mtrace.sh
+--- glibc-2.13.orig/malloc/tst-mtrace.sh 2005-10-15 01:40:35.000000000 +0200
++++ glibc-2.13/malloc/tst-mtrace.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -24,9 +24,12 @@
+ status=0
+ trap "rm -f ${common_objpfx}malloc/tst-mtrace.leak; exit 1" 1 2 15
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ MALLOC_TRACE=${common_objpfx}malloc/tst-mtrace.leak \
+ LOCPATH=${common_objpfx}localedata GCONV_PATH=${common_objpfx}iconvdata \
+-${common_objpfx}elf/ld.so --library-path $common_objpfx \
++${common_objpfx}elf/ld.so --library-path $library_path \
+ ${common_objpfx}malloc/tst-mtrace || status=1
+
+ if test $status -eq 0 && test -f ${common_objpfx}malloc/mtrace; then
+diff -durN glibc-2.13.orig/nptl/tst-tls6.sh glibc-2.13/nptl/tst-tls6.sh
+--- glibc-2.13.orig/nptl/tst-tls6.sh 2003-09-03 00:02:59.000000000 +0200
++++ glibc-2.13/nptl/tst-tls6.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -5,8 +5,8 @@
+ rtld_installed_name=$1; shift
+ logfile=$common_objpfx/nptl/tst-tls6.out
+
+-# We have to find libc and nptl
+-library_path=${common_objpfx}:${common_objpfx}nptl
++# We have to find libc and nptl (also libdl in case sandbox is in use)
++library_path=${common_objpfx}:${common_objpfx}nptl:${common_objpfx}/dlfcn
+ tst_tls5="${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+ ${common_objpfx}/nptl/tst-tls5"
+
+diff -durN glibc-2.13.orig/posix/globtest.sh glibc-2.13/posix/globtest.sh
+--- glibc-2.13.orig/posix/globtest.sh 2008-12-06 07:05:39.000000000 +0100
++++ glibc-2.13/posix/globtest.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -18,7 +18,7 @@
+ esac
+
+ # We have to find the libc and the NSS modules.
+-library_path=${common_objpfx}:${common_objpfx}nss:${common_objpfx}nis:${common_objpfx}db2:${common_objpfx}hesiod
++library_path=${common_objpfx}:${common_objpfx}nss:${common_objpfx}nis:${common_objpfx}db2:${common_objpfx}hesiod:${common_objpfx}/dlfcn
+
+ # Since we use `sort' we must make sure to use the same locale everywhere.
+ LC_ALL=C
+diff -durN glibc-2.13.orig/posix/tst-getconf.sh glibc-2.13/posix/tst-getconf.sh
+--- glibc-2.13.orig/posix/tst-getconf.sh 2002-09-01 13:11:25.000000000 +0200
++++ glibc-2.13/posix/tst-getconf.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -10,7 +10,10 @@
+ else
+ rtld_installed_name=$1; shift
+ runit() {
+- ${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} "$@"
++
++ # make sure libdl is also in path in case sandbox is in use
++ library_path=${common_objpfx}:${common_objpfx}/dlfcn
++ ${elf_objpfx}${rtld_installed_name} --library-path ${library_path} "$@"
+ }
+ fi
+
+diff -durN glibc-2.13.orig/posix/wordexp-tst.sh glibc-2.13/posix/wordexp-tst.sh
+--- glibc-2.13.orig/posix/wordexp-tst.sh 2000-10-20 18:23:30.000000000 +0200
++++ glibc-2.13/posix/wordexp-tst.sh 2009-11-13 00:50:37.000000000 +0100
+@@ -19,8 +19,11 @@
+ "
+ export IFS
+
++# make sure libdl is also in path in case sandbox is in use
++library_path=${common_objpfx}:${common_objpfx}/dlfcn
++
+ failed=0
+-${elf_objpfx}${rtld_installed_name} --library-path ${common_objpfx} \
++${elf_objpfx}${rtld_installed_name} --library-path ${library_path} \
+ ${common_objpfx}posix/wordexp-test '$*' > ${testout}1
+ cat <<"EOF" | cmp - ${testout}1 >> $logfile || failed=1
+ wordexp returned 0
diff --git a/patches/glibc/ports-2.16.0/380-dont-build-timezone.patch b/patches/glibc/ports-2.16.0/380-dont-build-timezone.patch
new file mode 100644
index 0000000..11c358e
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/380-dont-build-timezone.patch
@@ -0,0 +1,14 @@
+timezone data has been split into the package sys-libs/timezone-data
+
+diff -durN glibc-2.13.orig/Makeconfig glibc-2.13/Makeconfig
+--- glibc-2.13.orig/Makeconfig 2009-11-13 00:50:13.000000000 +0100
++++ glibc-2.13/Makeconfig 2009-11-13 00:50:41.000000000 +0100
+@@ -944,7 +944,7 @@
+ stdlib stdio-common libio malloc string wcsmbs time dirent \
+ grp pwd posix io termios resource misc socket sysvipc gmon \
+ gnulib iconv iconvdata wctype manual shadow gshadow po argp \
+- crypt nss localedata timezone rt conform debug \
++ crypt nss localedata rt conform debug \
+ $(add-on-subdirs) $(dlfcn) $(binfmt-subdir)
+
+ ifndef avoid-generated
diff --git a/patches/glibc/ports-2.16.0/400-alpha-xstat.patch b/patches/glibc/ports-2.16.0/400-alpha-xstat.patch
new file mode 100644
index 0000000..6e4ab8f
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/400-alpha-xstat.patch
@@ -0,0 +1,15 @@
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-05-09 08:54:20.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
+@@ -386,6 +386,11 @@
+ # define __ASSUME_GETDENTS32_D_TYPE 1
+ #endif
+
++/* Starting with version 2.6.4, alpha stat64 syscalls are available. */
++#if __LINUX_KERNEL_VERSION >= 0x020604 && defined __alpha__
++# define __ASSUME_STAT64_SYSCALL 1
++#endif
++
+ /* Starting with version 2.5.3, the initial location returned by `brk'
+ after exec is always rounded up to the next page. */
+ #if __LINUX_KERNEL_VERSION >= 132355
diff --git a/patches/glibc/ports-2.16.0/430-alpha-creat.patch b/patches/glibc/ports-2.16.0/430-alpha-creat.patch
new file mode 100644
index 0000000..da6ddda
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/430-alpha-creat.patch
@@ -0,0 +1,14 @@
+alpha does not have a __NR_creat
+
+http://bugs.gentoo.org/227275
+http://sourceware.org/bugzilla/show_bug.cgi?id=6650
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2007-11-10 20:34:26.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/wordsize-64/creat64.c 2009-11-13 00:50:51.000000000 +0100
+@@ -1 +1,5 @@
+ /* Defined as alias for the syscall. */
++#include <sysdep.h>
++#ifndef __NR_creat
++#include "../../../../../io/creat64.c"
++#endif
diff --git a/patches/glibc/ports-2.16.0/440-alpha-cache-shape.patch b/patches/glibc/ports-2.16.0/440-alpha-cache-shape.patch
new file mode 100644
index 0000000..5b1a298
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/440-alpha-cache-shape.patch
@@ -0,0 +1,13 @@
+older verisons of glibc would build dl-sysdep as shared-only and dl-support as
+static-only. alpha hooks in a cache variable via dl-auxv.h. newer versions of
+glibc build dl-sysdep as both shared and static which means we now have symbol
+duplication for static builds with dl-sysdep and dl-support. since dl-sysdep
+is both shared/static, there is no point in hooking dl-support anymore, so we
+can punt it.
+
+diff -durN glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/dl-support.c glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/dl-support.c
+--- glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/dl-support.c 2009-11-13 00:50:53.000000000 +0100
+@@ -1,2 +1,1 @@
+-#include "dl-auxv.h"
+ #include <elf/dl-support.c>
diff --git a/patches/glibc/ports-2.16.0/460-alpha-fix-gcc-4.1-warnings.patch b/patches/glibc/ports-2.16.0/460-alpha-fix-gcc-4.1-warnings.patch
new file mode 100644
index 0000000..f2ff04f
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/460-alpha-fix-gcc-4.1-warnings.patch
@@ -0,0 +1,56 @@
+2006-05-30 Falk Hueffner <falk@debian.org>
+
+ * sysdeps/unix/sysv/linux/alpha/ioperm.c: force the architecture
+ to ev6 in assembly code.
+
+{standard input}: Assembler messages:
+{standard input}:341: Error: macro requires $at register while noat in effect
+{standard input}:374: Error: macro requires $at register while noat in effect
+{standard input}:438: Error: macro requires $at register while noat in effect
+{standard input}:471: Error: macro requires $at register while noat in effect
+make[3]: *** [/tmp/buildd/glibc-2.3.6/build-tree/alpha-libc/misc/ioperm.o] Error 1
+
+Hrm. gcc puts .arch ev4 into the .s, and this overrides -mev6 for as.
+I cannot really think of anything better than
+
+ ports/sysdeps/unix/sysv/linux/alpha/ioperm.c | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+diff -durN glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/ioperm.c
+--- glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/alpha/ioperm.c 2009-11-13 00:50:57.000000000 +0100
+@@ -178,13 +178,13 @@
+ static inline void
+ stb_mb(unsigned char val, unsigned long addr)
+ {
+- __asm__("stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
++ __asm__(".arch ev6; stb %1,%0; mb" : "=m"(*(vucp)addr) : "r"(val));
+ }
+
+ static inline void
+ stw_mb(unsigned short val, unsigned long addr)
+ {
+- __asm__("stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
++ __asm__(".arch ev6; stw %1,%0; mb" : "=m"(*(vusp)addr) : "r"(val));
+ }
+
+ static inline void
+@@ -356,7 +356,7 @@
+ unsigned long int addr = dense_port_to_cpu_addr (port);
+ unsigned char r;
+
+- __asm__ ("ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
++ __asm__ (".arch ev6; ldbu %0,%1" : "=r"(r) : "m"(*(vucp)addr));
+ return r;
+ }
+
+@@ -366,7 +366,7 @@
+ unsigned long int addr = dense_port_to_cpu_addr (port);
+ unsigned short r;
+
+- __asm__ ("ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
++ __asm__ (".arch ev6; ldwu %0,%1" : "=r"(r) : "m"(*(vusp)addr));
+ return r;
+ }
+
+diff -durN glibc-2.16.0.orig/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c glibc-2.16.0/ports/sysdeps/unix/sysv/linux/alpha/ioperm.c
diff --git a/patches/glibc/ports-2.16.0/490-alpha_alpha-add-fdatasync-support.patch b/patches/glibc/ports-2.16.0/490-alpha_alpha-add-fdatasync-support.patch
new file mode 100644
index 0000000..acf250d
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/490-alpha_alpha-add-fdatasync-support.patch
@@ -0,0 +1,126 @@
+2009-07-25 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h: define
+ __ASSUME_FDATASYNC.
+ * sysdeps/unix/sysv/linux/fdatasync.c: New file.
+ * sysdeps/unix/sysv/linux/Makefile: compile fdatasync.c with
+ -fexceptions.
+ * sysdeps/unix/sysv/linux/syscalls.list: Remove fdatasync.
+
+ sysdeps/unix/sysv/linux/Makefile | 1
+ sysdeps/unix/sysv/linux/fdatasync.c | 69 ++++++++++++++++++++++++++++++
+ sysdeps/unix/sysv/linux/kernel-features.h | 6 ++
+ sysdeps/unix/sysv/linux/syscalls.list | 1
+ 4 files changed, 76 insertions(+), 1 deletion(-)
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile glibc-2.13/sysdeps/unix/sysv/linux/Makefile
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/Makefile 2009-03-02 17:15:13.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/Makefile 2009-11-13 00:51:04.000000000 +0100
+@@ -21,6 +21,7 @@
+ setfsuid setfsgid makedev epoll_pwait signalfd \
+ eventfd eventfd_read eventfd_write prlimit
+
++CFLAGS-fdatasync.c = -fexceptions
+ CFLAGS-gethostid.c = -fexceptions
+ CFLAGS-tst-writev.c += "-DARTIFICIAL_LIMIT=0x80000000-__getpagesize()"
+
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/fdatasync.c 1970-01-01 01:00:00.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/fdatasync.c 2009-11-13 00:51:04.000000000 +0100
+@@ -0,0 +1,69 @@
++/* fdatasync -- synchronize at least the data part of a file with
++ the underlying media. Linux version.
++
++ Copyright (C) 2007 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 <errno.h>
++#include <unistd.h>
++
++#include <sysdep-cancel.h>
++#include <sys/syscall.h>
++#include <bp-checks.h>
++
++#include <kernel-features.h>
++
++#if defined __NR_fdatasync && !defined __ASSUME_FDATASYNC
++static int __have_no_fdatasync;
++#endif
++
++static int
++do_fdatasync (int fd)
++{
++#ifdef __ASSUME_FDATASYNC
++ return INLINE_SYSCALL (fdatasync, 1, fd);
++#elif defined __NR_fdatasync
++ if (!__builtin_expect (__have_no_fdatasync, 0))
++ {
++ int result = INLINE_SYSCALL (fdatasync, 1, fd);
++ if (__builtin_expect (result, 0) != -1 || errno != ENOSYS)
++ return result;
++
++ __have_no_fdatasync = 1;
++ }
++#endif
++ return INLINE_SYSCALL (fsync, 1, fd);
++}
++
++int
++__fdatasync (int fd)
++{
++ if (SINGLE_THREAD_P)
++ return do_fdatasync (fd);
++
++ int oldtype = LIBC_CANCEL_ASYNC ();
++
++ int result = do_fdatasync (fd);
++
++ LIBC_CANCEL_RESET (oldtype);
++
++ return result;
++}
++
++weak_alias (__fdatasync, fdatasync)
++
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:50:45.000000000 +0100
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2009-11-13 00:51:04.000000000 +0100
+@@ -459,6 +459,12 @@
+ # define __ASSUME_FUTEX_LOCK_PI 1
+ #endif
+
++/* Support for fsyncdata syscall was added in 2.6.22 on alpha, but it
++ was already present in 2.0 kernels on other architectures. */
++#if (!defined __alpha || __LINUX_KERNEL_VERSION >= 0x020616)
++# define __ASSUME_FDATASYNC 1
++#endif
++
+ /* Support for utimensat syscall was added in 2.6.22, on SH
+ only after 2.6.22-rc1. */
+ #if __LINUX_KERNEL_VERSION >= 0x020616 \
+diff -durN glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list
+--- glibc-2.13.orig/sysdeps/unix/sysv/linux/syscalls.list 2008-08-02 01:29:08.000000000 +0200
++++ glibc-2.13/sysdeps/unix/sysv/linux/syscalls.list 2009-11-13 00:51:04.000000000 +0100
+@@ -11,7 +11,6 @@
+ epoll_create1 EXTRA epoll_create1 i:i epoll_create1
+ epoll_ctl EXTRA epoll_ctl i:iiip epoll_ctl
+ epoll_wait EXTRA epoll_wait Ci:ipii epoll_wait
+-fdatasync - fdatasync Ci:i fdatasync
+ flock - flock i:ii __flock flock
+ fork - fork i: __libc_fork __fork fork
+ get_kernel_syms EXTRA get_kernel_syms i:p get_kernel_syms
diff --git a/patches/glibc/ports-2.16.0/530-alpha-fix-rtld-fPIC.patch b/patches/glibc/ports-2.16.0/530-alpha-fix-rtld-fPIC.patch
new file mode 100644
index 0000000..42faaa5
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/530-alpha-fix-rtld-fPIC.patch
@@ -0,0 +1,21 @@
+2009-05-26 Aurelien Jarno <aurelien@aurel32.net>
+
+ * sysdeps/alpha/Makefile (CFLAGS-rtld.c): add $(PIC-ccflag).
+
+ ports/sysdeps/alpha/Makefile | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff -durN glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/alpha/Makefile glibc-2.16.0/glibc-ports-2.16.0/sysdeps/alpha/Makefile
+--- glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/alpha/Makefile 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.16.0/glibc-ports-2.16.0/sysdeps/alpha/Makefile 2009-11-13 00:51:13.000000000 +0100
+@@ -35,7 +35,8 @@
+
+ ifeq ($(subdir),elf)
+ # The ld.so startup code cannot use literals until it self-relocates.
+-CFLAGS-rtld.c = -mbuild-constants
++# It uses more than 64k for the small data area.
++CFLAGS-rtld.c = -mbuild-constants $(PIC-ccflag)
+ endif
+
+ # Build everything with full IEEE math support, and with dynamic rounding;
+diff -durN glibc-2.16.0.orig/ports/sysdeps/alpha/Makefile glibc-2.16.0/ports/sysdeps/alpha/Makefile
diff --git a/patches/glibc/ports-2.16.0/560-ppc-atomic.patch b/patches/glibc/ports-2.16.0/560-ppc-atomic.patch
new file mode 100644
index 0000000..ee1cb90
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/560-ppc-atomic.patch
@@ -0,0 +1,415 @@
+sniped from suse
+
+Index: sysdeps/powerpc/bits/atomic.h
+===================================================================
+RCS file: /cvs/glibc/libc/sysdeps/powerpc/bits/atomic.h,v
+retrieving revision 1.17
+diff -u -a -p -r1.17 atomic.h
+
+diff -durN glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h glibc-2.13/sysdeps/powerpc/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/bits/atomic.h 2007-03-26 22:15:28.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -85,14 +85,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " cmpw %0,%2\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -102,14 +102,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " cmpw %0,%2\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -118,12 +118,12 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
+- " stwcx. %3,0,%2\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
++ " stwcx. %2,%y1\n" \
+ " bne- 1b\n" \
+ " " __ARCH_ACQ_INSTR \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -132,11 +132,11 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \
+- " stwcx. %3,0,%2\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
++ " stwcx. %2,%y1\n" \
+ " bne- 1b" \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -144,12 +144,12 @@
+ #define __arch_atomic_exchange_and_add_32(mem, value) \
+ ({ \
+ __typeof (*mem) __val, __tmp; \
+- __asm __volatile ("1: lwarx %0,0,%3\n" \
+- " add %1,%0,%4\n" \
+- " stwcx. %1,0,%3\n" \
++ __asm __volatile ("1: lwarx %0,%y2\n" \
++ " add %1,%0,%3\n" \
++ " stwcx. %1,%y2\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -157,12 +157,12 @@
+ #define __arch_atomic_increment_val_32(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: lwarx %0,0,%2\n" \
++ __asm __volatile ("1: lwarx %0,%y1\n" \
+ " addi %0,%0,1\n" \
+- " stwcx. %0,0,%2\n" \
++ " stwcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -170,27 +170,27 @@
+ #define __arch_atomic_decrement_val_32(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: lwarx %0,0,%2\n" \
++ __asm __volatile ("1: lwarx %0,%y1\n" \
+ " subi %0,%0,1\n" \
+- " stwcx. %0,0,%2\n" \
++ " stwcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+
+ #define __arch_atomic_decrement_if_positive_32(mem) \
+ ({ int __val, __tmp; \
+- __asm __volatile ("1: lwarx %0,0,%3\n" \
++ __asm __volatile ("1: lwarx %0,%y2\n" \
+ " cmpwi 0,%0,0\n" \
+ " addi %1,%0,-1\n" \
+ " ble 2f\n" \
+- " stwcx. %1,0,%3\n" \
++ " stwcx. %1,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*mem) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc32/bits/atomic.h 2007-03-26 22:15:45.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc32/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -44,14 +44,14 @@
+ ({ \
+ unsigned int __tmp; \
+ __asm __volatile ( \
+- "1: lwarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -60,14 +60,14 @@
+ ({ \
+ unsigned int __tmp; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: lwarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %3,0,%1\n" \
++ " stwcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+diff -durN glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h
+--- glibc-2.13.orig/sysdeps/powerpc/powerpc64/bits/atomic.h 2007-03-26 22:16:03.000000000 +0200
++++ glibc-2.13/sysdeps/powerpc/powerpc64/bits/atomic.h 2009-11-13 00:51:19.000000000 +0100
+@@ -44,14 +44,14 @@
+ ({ \
+ unsigned int __tmp, __tmp2; \
+ __asm __volatile (" clrldi %1,%1,32\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
++ "1: lwarx %0,%y2" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%1,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %4,0,%2\n" \
++ " stwcx. %4,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp), "=r" (__tmp2) \
+- : "b" (mem), "1" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem)) \
++ : "1" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -61,14 +61,14 @@
+ unsigned int __tmp, __tmp2; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+ " clrldi %1,%1,32\n" \
+- "1: lwarx %0,0,%2" MUTEX_HINT_REL "\n" \
++ "1: lwarx %0,%y2" MUTEX_HINT_REL "\n" \
+ " subf. %0,%1,%0\n" \
+ " bne 2f\n" \
+- " stwcx. %4,0,%2\n" \
++ " stwcx. %4,%y2\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp), "=r" (__tmp2) \
+- : "b" (mem), "1" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "=r" (__tmp2), "+Z" (*(mem)) \
++ : "1" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -82,14 +82,14 @@
+ ({ \
+ unsigned long __tmp; \
+ __asm __volatile ( \
+- "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -98,14 +98,14 @@
+ ({ \
+ unsigned long __tmp; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " subf. %0,%2,%0\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (mem), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp != 0; \
+ })
+@@ -115,14 +115,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile ( \
+- "1: ldarx %0,0,%1" MUTEX_HINT_ACQ "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
+ " cmpd %0,%2\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -132,14 +132,14 @@
+ __typeof (*(mem)) __tmp; \
+ __typeof (mem) __memp = (mem); \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%1" MUTEX_HINT_REL "\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
+ " cmpd %0,%2\n" \
+ " bne 2f\n" \
+- " stdcx. %3,0,%1\n" \
++ " stdcx. %3,%y1\n" \
+ " bne- 1b\n" \
+ "2: " \
+- : "=&r" (__tmp) \
+- : "b" (__memp), "r" (oldval), "r" (newval) \
++ : "=&r" (__tmp), "+Z" (*__memp) \
++ : "r" (oldval), "r" (newval) \
+ : "cr0", "memory"); \
+ __tmp; \
+ })
+@@ -148,12 +148,12 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_ACQ "\n" \
+- " stdcx. %3,0,%2\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_ACQ "\n" \
++ " stdcx. %2,%y1\n" \
+ " bne- 1b\n" \
+ " " __ARCH_ACQ_INSTR \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -162,11 +162,11 @@
+ ({ \
+ __typeof (*mem) __val; \
+ __asm __volatile (__ARCH_REL_INSTR "\n" \
+- "1: ldarx %0,0,%2" MUTEX_HINT_REL "\n" \
+- " stdcx. %3,0,%2\n" \
++ "1: ldarx %0,%y1" MUTEX_HINT_REL "\n" \
++ " stdcx. %2,%y1\n" \
+ " bne- 1b" \
+- : "=&r" (__val), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&r" (__val), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -174,12 +174,12 @@
+ #define __arch_atomic_exchange_and_add_64(mem, value) \
+ ({ \
+ __typeof (*mem) __val, __tmp; \
+- __asm __volatile ("1: ldarx %0,0,%3\n" \
+- " add %1,%0,%4\n" \
+- " stdcx. %1,0,%3\n" \
++ __asm __volatile ("1: ldarx %0,%y2\n" \
++ " add %1,%0,%3\n" \
++ " stdcx. %1,%y2\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "r" (value), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem)) \
++ : "r" (value) \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -187,12 +187,12 @@
+ #define __arch_atomic_increment_val_64(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: ldarx %0,0,%2\n" \
++ __asm __volatile ("1: ldarx %0,%y1\n" \
+ " addi %0,%0,1\n" \
+- " stdcx. %0,0,%2\n" \
++ " stdcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+@@ -200,27 +200,27 @@
+ #define __arch_atomic_decrement_val_64(mem) \
+ ({ \
+ __typeof (*(mem)) __val; \
+- __asm __volatile ("1: ldarx %0,0,%2\n" \
++ __asm __volatile ("1: ldarx %0,%y1\n" \
+ " subi %0,%0,1\n" \
+- " stdcx. %0,0,%2\n" \
++ " stdcx. %0,%y1\n" \
+ " bne- 1b" \
+- : "=&b" (__val), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
+
+ #define __arch_atomic_decrement_if_positive_64(mem) \
+ ({ int __val, __tmp; \
+- __asm __volatile ("1: ldarx %0,0,%3\n" \
++ __asm __volatile ("1: ldarx %0,%y2\n" \
+ " cmpdi 0,%0,0\n" \
+ " addi %1,%0,-1\n" \
+ " ble 2f\n" \
+- " stdcx. %1,0,%3\n" \
++ " stdcx. %1,%y2\n" \
+ " bne- 1b\n" \
+ "2: " __ARCH_ACQ_INSTR \
+- : "=&b" (__val), "=&r" (__tmp), "=m" (*mem) \
+- : "b" (mem), "m" (*mem) \
++ : "=&b" (__val), "=&r" (__tmp), "+Z" (*(mem)) \
++ : \
+ : "cr0", "memory"); \
+ __val; \
+ })
diff --git a/patches/glibc/ports-2.16.0/580-nptl-lowlevellock.patch b/patches/glibc/ports-2.16.0/580-nptl-lowlevellock.patch
new file mode 100644
index 0000000..185331c
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/580-nptl-lowlevellock.patch
@@ -0,0 +1,23 @@
+fix build error on arm like on hppa:
+
+arm-unknown-linux-gnu-gcc ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wwrite-strings -fmerge-all-constants -fno-strict-aliasing -g -pipe -Wstrict-prototypes -fPIC -I../include -I/var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl -I/var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl -I../ports/sysdeps/arm/elf -I../ports/sysdeps/unix/sysv/linux/arm/nptl -I../ports/sysdeps/unix/sysv/linux/arm -I../nptl/sysdeps/unix/sysv/linux -I../nptl/sysdeps/pthread -I../sysdeps/pthread -I../ports/sysdeps/unix/sysv/linux -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../nptl/sysdeps/unix/sysv -I../ports/sysdeps/unix/sysv -I../sysdeps/unix/sysv -I../ports/sysdeps/unix/arm -I../nptl/sysdeps/unix -I../ports/sysdeps/unix -I../sysdeps/unix -I../sysdeps/posix -I../ports/sysdeps/arm/fpu -I../ports/sysdeps/arm/nptl -I../ports/sysdeps/arm -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -I../nptl -I../ports -I.. -I../libio -I. -nostdinc -isystem /usr/lib/gcc/arm-unknown-linux-gnu/4.3.2/include -isystem /usr/lib/gcc/arm-unknown-linux-gnu/4.3.2/include-fixed -isystem /usr/arm-unknown-linux-gnu/usr/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -DPIC -DSHARED -o /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os -MD -MP -MF /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os.dt -MT /var/tmp/portage/cross-arm-unknown-linux-gnu/glibc-2.8_p20080602/work/build-default-arm-unknown-linux-gnu-nptl/nptl/rtld-libc-lowlevellock.os -DNOT_IN_libc=1 -DIS_IN_rtld=1
+In file included from ../nptl/sysdeps/unix/sysv/linux/libc-lowlevellock.c:21:
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c: In function '__lll_lock_wait_private':
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: warning: implicit declaration of function 'THREAD_GETMEM'
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'THREAD_SELF' undeclared (first use in this function)
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: (Each undeclared identifier is reported only once
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: for each function it appears in.)
+../nptl/sysdeps/unix/sysv/linux/lowlevellock.c:31: error: 'header' undeclared (first use in this function)
+
+diff -durN glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
+--- glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.16.0/glibc-ports-2.16.0/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h 2009-11-13 00:51:23.000000000 +0100
+@@ -25,6 +25,7 @@
+ #include <atomic.h>
+ #include <sysdep.h>
+ #include <kernel-features.h>
++#include <tls.h> /* Need THREAD_*, and header.*. */
+
+ #define FUTEX_WAIT 0
+ #define FUTEX_WAKE 1
+diff -durN glibc-2.16.0.orig/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h glibc-2.16.0/ports/sysdeps/unix/sysv/linux/arm/nptl/lowlevellock.h
diff --git a/patches/glibc/ports-2.16.0/610-fpu-cw-mips.patch b/patches/glibc/ports-2.16.0/610-fpu-cw-mips.patch
new file mode 100644
index 0000000..0c0daf3
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/610-fpu-cw-mips.patch
@@ -0,0 +1,15 @@
+http://sourceware.org/ml/libc-alpha/2002-10/msg00392.html
+
+diff -durN glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/mips/fpu_control.h glibc-2.16.0/glibc-ports-2.16.0/sysdeps/mips/fpu_control.h
+--- glibc-2.16.0.orig/glibc-ports-2.16.0/sysdeps/mips/fpu_control.h 2009-05-16 10:36:20.000000000 +0200
++++ glibc-2.16.0/glibc-ports-2.16.0/sysdeps/mips/fpu_control.h 2009-11-13 00:51:31.000000000 +0100
+@@ -86,7 +86,7 @@
+ #define _FPU_RC_UP 0x2
+ #define _FPU_RC_DOWN 0x3
+
+-#define _FPU_RESERVED 0xfe3c0000 /* Reserved bits in cw */
++#define _FPU_RESERVED 0xfebc0000 /* Reserved bits in cw */
+
+
+ /* The fdlibm code requires strict IEEE double precision arithmetic,
+diff -durN glibc-2.16.0.orig/ports/sysdeps/mips/fpu_control.h glibc-2.16.0/ports/sysdeps/mips/fpu_control.h
diff --git a/patches/glibc/ports-2.16.0/630-mips_shn_undef-hack.patch b/patches/glibc/ports-2.16.0/630-mips_shn_undef-hack.patch
new file mode 100644
index 0000000..791d76c
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/630-mips_shn_undef-hack.patch
@@ -0,0 +1,16 @@
+diff -durN glibc-2.13.orig/elf/dl-lookup.c glibc-2.13/elf/dl-lookup.c
+--- glibc-2.13.orig/elf/dl-lookup.c 2009-03-30 23:14:32.000000000 +0200
++++ glibc-2.13/elf/dl-lookup.c 2009-11-13 00:51:36.000000000 +0100
+@@ -301,6 +301,12 @@
+ /* FALLTHROUGH */
+ case STB_GLOBAL:
+ success:
++#ifdef __mips__
++ /* HACK: MIPS marks its lazy evaluation stubs with SHN_UNDEF
++ symbols, we skip them. */
++ if (sym->st_shndx == SHN_UNDEF)
++ break;
++#endif
+ /* Global definition. Just what we need. */
+ result->s = sym;
+ result->m = (struct link_map *) map;
diff --git a/patches/glibc/ports-2.16.0/640-alpha-atfcts.patch b/patches/glibc/ports-2.16.0/640-alpha-atfcts.patch
new file mode 100644
index 0000000..7a8a94a
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/640-alpha-atfcts.patch
@@ -0,0 +1,12 @@
+--- glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h 2010-07-27 14:34:39.000000000 +0300
++++ glibc-2.13/sysdeps/unix/sysv/linux/kernel-features.h.new 2011-03-10 18:54:37.686795979 +0200
+@@ -437,7 +437,8 @@
+ the code. On PPC they were introduced in 2.6.17-rc1,
+ on SH in 2.6.19-rc1. */
+ #if __LINUX_KERNEL_VERSION >= 0x020611 \
+- && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613)
++ && (!defined __sh__ || __LINUX_KERNEL_VERSION >= 0x020613) \
++ && (!defined __alpha__)
+ # define __ASSUME_ATFCTS 1
+ #endif
+
diff --git a/patches/glibc/ports-2.16.0/650-syslog.patch b/patches/glibc/ports-2.16.0/650-syslog.patch
new file mode 100644
index 0000000..c20cafc
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/650-syslog.patch
@@ -0,0 +1,12 @@
+diff -durN glibc-cvs-2.9.orig/misc/syslog.c glibc-cvs-2.9/misc/syslog.c
+--- glibc-cvs-2.9.orig/misc/syslog.c 2009-06-01 10:16:50.000000000 +0200
++++ glibc-cvs-2.9/misc/syslog.c 2009-06-01 10:17:20.000000000 +0200
+@@ -152,7 +152,7 @@
+ #define INTERNALLOG LOG_ERR|LOG_CONS|LOG_PERROR|LOG_PID
+ /* Check for invalid bits. */
+ if (pri & ~(LOG_PRIMASK|LOG_FACMASK)) {
+- syslog(INTERNALLOG,
++ __syslog(INTERNALLOG,
+ "syslog: unknown facility/priority: %x", pri);
+ pri &= LOG_PRIMASK|LOG_FACMASK;
+ }
diff --git a/patches/glibc/ports-2.16.0/660-debug-readlink_chk-readklinkat_chk.patch b/patches/glibc/ports-2.16.0/660-debug-readlink_chk-readklinkat_chk.patch
new file mode 100644
index 0000000..a5a7052
--- /dev/null
+++ b/patches/glibc/ports-2.16.0/660-debug-readlink_chk-readklinkat_chk.patch
@@ -0,0 +1,24 @@
+diff -dur glibc-cvs-2.9.orig/debug/readlink_chk.c glibc-cvs-2.9/debug/readlink_chk.c
+--- glibc-cvs-2.9.orig/debug/readlink_chk.c 2005-03-01 01:41:15.000000000 +0100
++++ glibc-cvs-2.9/debug/readlink_chk.c 2009-06-01 10:59:37.000000000 +0200
+@@ -25,7 +25,7 @@
+
+
+ ssize_t
+-__readlink_chk (const char *path, void *buf, size_t len, size_t buflen)
++__readlink_chk (const char *path, char *buf, size_t len, size_t buflen)
+ {
+ if (len > buflen)
+ __chk_fail ();
+diff -dur glibc-cvs-2.9.orig/debug/readlinkat_chk.c glibc-cvs-2.9/debug/readlinkat_chk.c
+--- glibc-cvs-2.9.orig/debug/readlinkat_chk.c 2006-04-24 18:56:12.000000000 +0200
++++ glibc-cvs-2.9/debug/readlinkat_chk.c 2009-06-01 11:07:26.000000000 +0200
+@@ -21,7 +21,7 @@
+
+
+ ssize_t
+-__readlinkat_chk (int fd, const char *path, void *buf, size_t len,
++__readlinkat_chk (int fd, const char *path, char *buf, size_t len,
+ size_t buflen)
+ {
+ if (len > buflen)