Date: Tuesday, October 25, 2011 @ 01:04:59 Author: allan Revision: 141153
upgpkg: glibc 2.14.1-1 upstream update, enable multi-arch, remove patch included upstream, move back to crappy workaround for crappy DNS servers... Added: glibc/trunk/glibc-2.14-revert-4768ae77.patch Modified: glibc/trunk/PKGBUILD glibc/trunk/glibc-2.14-libdl-crash.patch Deleted: glibc/trunk/glibc-2.13-dlclose-search-reset.patch glibc/trunk/glibc-2.14-avoid-assertion-on-empty-dns-answer.patch ------------------------------------------------------+ PKGBUILD | 29 +- glibc-2.13-dlclose-search-reset.patch | 196 ----------------- glibc-2.14-avoid-assertion-on-empty-dns-answer.patch | 26 -- glibc-2.14-libdl-crash.patch | 2 glibc-2.14-revert-4768ae77.patch | 37 +++ 5 files changed, 51 insertions(+), 239 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2011-10-24 22:22:19 UTC (rev 141152) +++ PKGBUILD 2011-10-25 05:04:59 UTC (rev 141153) @@ -2,12 +2,12 @@ # Maintainer: Allan McRae <[email protected]> # toolchain build order: linux-api-headers->glibc->binutils->gcc->binutils->glibc -# NOTE: valgrind requires rebuilt with each new glibc version +# NOTE: valgrind requires rebuilt with each major glibc version pkgname=glibc -pkgver=2.14 -pkgrel=6 -_glibcdate=20110908 +pkgver=2.14.1 +pkgrel=1 +_glibcdate=20111025 pkgdesc="GNU C Library" arch=('i686' 'x86_64') url="http://www.gnu.org/software/libc" @@ -27,24 +27,22 @@ glibc-2.12.1-static-shared-getpagesize.patch glibc-2.12.2-ignore-origin-of-privileged-program.patch glibc-2.13-futex.patch - glibc-2.13-dlclose-search-reset.patch glibc-2.14-libdl-crash.patch - glibc-2.14-avoid-assertion-on-empty-dns-answer.patch + glibc-2.14-revert-4768ae77.patch glibc-2.14-reexport-rpc-interface.patch glibc-2.14-reinstall-nis-rpc-headers.patch nscd locale.gen.txt locale-gen) -md5sums=('069069eb9100cc7affd7ad884cb3c3e9' +md5sums=('c52a15134dfa9f2c94f2ccd4cb155cf1' '4dadb9203b69a3210d53514bb46f41c3' '0c5540efc51c0b93996c51b57a8540ae' '40cd342e21f71f5e49e32622b25acc52' 'a3ac6f318d680347bb6e2805d42b73b2' 'b042647ea7d6f22ad319e12e796bd13e' '7d0154b7e17ea218c9fa953599d24cc4' - '22d09c58718fb3d1d31c3a6c14ca6886' - 'cea62cc6b903d222c5f26e05a3c0e0e6' - '13728807283f111e5d9d38cf38e0a461' + '6970bcfeb3bf88913436d5112d16f588' + '7da8c554a3b591c7401d7023b1928afc' 'c5de2a946215d647c8af5432ec4b0da0' '55febbb72139ac7b65757df085024b83' 'b587ee3a70c9b3713099295609afde49' @@ -84,17 +82,16 @@ # http://sourceware.org/bugzilla/show_bug.cgi?id=12403 patch -Np1 -i ${srcdir}/glibc-2.13-futex.patch - # https://bugzilla.redhat.com/show_bug.cgi?id=593675 - # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=2f811bf8 (only fedora branch...) - patch -Np1 -i ${srcdir}/glibc-2.13-dlclose-search-reset.patch - # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=675155e9 (only fedora branch...) # http://sourceware.org/ml/libc-alpha/2011-06/msg00006.html patch -Np1 -i ${srcdir}/glibc-2.14-libdl-crash.patch + # Revert commit causing issues with crappy DNS servers... + # Will be removed when workaround becomes annoying to maintain - USE A BETTER DNS SERVER! + # Note that both these patches do not fix the issue completely: # http://sourceware.org/bugzilla/show_bug.cgi?id=13013 # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=032c0ee3 (only fedora branch...) - patch -Np1 -i ${srcdir}/glibc-2.14-avoid-assertion-on-empty-dns-answer.patch + patch -Np1 -i ${srcdir}/glibc-2.14-revert-4768ae77.patch # re-export RPC interface until libtirpc is ready as a replacement # http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=acee4873 (only fedora branch...) @@ -128,7 +125,7 @@ --with-tls --with-__thread \ --enable-bind-now --without-gd \ --without-cvs --disable-profile \ - --disable-multi-arch + --enable-multi-arch # build libraries with hardening disabled echo "build-programs=no" >> configparms Deleted: glibc-2.13-dlclose-search-reset.patch =================================================================== --- glibc-2.13-dlclose-search-reset.patch 2011-10-24 22:22:19 UTC (rev 141152) +++ glibc-2.13-dlclose-search-reset.patch 2011-10-25 05:04:59 UTC (rev 141153) @@ -1,196 +0,0 @@ -From 2f811bf88bed4a6c0dec8778847ba441736d509d Mon Sep 17 00:00:00 2001 -From: Andreas Schwab <[email protected]> -Date: Wed, 26 May 2010 18:28:59 +0200 -Subject: [PATCH] Fix scope handling during dl_close - ---- - ChangeLog | 12 ++++++++++++ - elf/Makefile | 10 +++++++++- - elf/dl-close.c | 7 +++++++ - elf/unload8.c | 33 +++++++++++++++++++++++++++++++++ - elf/unload8mod1.c | 7 +++++++ - elf/unload8mod1x.c | 1 + - elf/unload8mod2.c | 7 +++++++ - elf/unload8mod3.c | 27 +++++++++++++++++++++++++++ - 8 files changed, 103 insertions(+), 1 deletions(-) - create mode 100644 elf/unload8.c - create mode 100644 elf/unload8mod1.c - create mode 100644 elf/unload8mod1x.c - create mode 100644 elf/unload8mod2.c - create mode 100644 elf/unload8mod3.c - -diff --git a/elf/Makefile b/elf/Makefile -index 59e835f..65b6deb 100644 ---- a/elf/Makefile -+++ b/elf/Makefile -@@ -89,6 +89,7 @@ distribute := rtld-Rules \ - unload4mod1.c unload4mod2.c unload4mod3.c unload4mod4.c \ - unload6mod1.c unload6mod2.c unload6mod3.c \ - unload7mod1.c unload7mod2.c \ -+ unload8mod1.c unload8mod1x.c unload8mod2.c unload8mod3.c \ - tst-audit1.c tst-audit2.c tst-audit3.c tst-audit4.c \ - tst-auditmod1.c tst-auditmod3a.c tst-auditmod3b.c \ - tst-auditmod4a.c tst-auditmod4b.c \ -@@ -196,7 +197,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ - tst-align tst-align2 $(tests-execstack-$(have-z-execstack)) \ - tst-dlmodcount tst-dlopenrpath tst-deep1 \ - tst-dlmopen1 tst-dlmopen2 tst-dlmopen3 \ -- unload3 unload4 unload5 unload6 unload7 tst-global1 order2 \ -+ unload3 unload4 unload5 unload6 unload7 unload8 tst-global1 order2 \ - tst-audit1 tst-audit2 \ - tst-stackguard1 tst-addr1 tst-thrlock \ - tst-unique1 tst-unique2 -@@ -247,6 +248,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \ - unload4mod1 unload4mod2 unload4mod3 unload4mod4 \ - unload6mod1 unload6mod2 unload6mod3 \ - unload7mod1 unload7mod2 \ -+ unload8mod1 unload8mod1x unload8mod2 unload8mod3 \ - order2mod1 order2mod2 order2mod3 order2mod4 \ - tst-unique1mod1 tst-unique1mod2 \ - tst-unique2mod1 tst-unique2mod2 -@@ -522,6 +524,9 @@ $(objpfx)unload6mod2.so: $(libdl) - $(objpfx)unload6mod3.so: $(libdl) - $(objpfx)unload7mod1.so: $(libdl) - $(objpfx)unload7mod2.so: $(objpfx)unload7mod1.so -+$(objpfx)unload8mod1.so: $(objpfx)unload8mod2.so -+$(objpfx)unload8mod2.so: $(objpfx)unload8mod3.so -+$(objpfx)unload8mod3.so: $(libdl) - $(objpfx)tst-initordera2.so: $(objpfx)tst-initordera1.so - $(objpfx)tst-initorderb2.so: $(objpfx)tst-initorderb1.so $(objpfx)tst-initordera2.so - $(objpfx)tst-initordera3.so: $(objpfx)tst-initorderb2.so $(objpfx)tst-initorderb1.so -@@ -823,6 +828,9 @@ $(objpfx)unload7: $(libdl) - $(objpfx)unload7.out: $(objpfx)unload7mod1.so $(objpfx)unload7mod2.so - unload7-ENV = MALLOC_PERTURB_=85 - -+$(objpfx)unload8: $(libdl) -+$(objpfx)unload8.out: $(objpfx)unload8mod1.so $(objpfx)unload8mod1x.so -+ - ifdef libdl - $(objpfx)tst-tls9-static: $(common-objpfx)dlfcn/libdl.a - $(objpfx)tst-tls9-static.out: $(objpfx)tst-tlsmod5.so $(objpfx)tst-tlsmod6.so -diff --git a/elf/dl-close.c b/elf/dl-close.c -index 700e765..f47d5f8 100644 ---- a/elf/dl-close.c -+++ b/elf/dl-close.c -@@ -421,6 +421,13 @@ _dl_close_worker (struct link_map *map) - - imap->l_scope_max = new_size; - } -+ else if (new_list != NULL) -+ { -+ /* We didn't change the scope array, so reset the search -+ list. */ -+ imap->l_searchlist.r_list = NULL; -+ imap->l_searchlist.r_nlist = 0; -+ } - - /* The loader is gone, so mark the object as not having one. - Note: l_idx != IDX_STILL_USED -> object will be removed. */ -diff --git a/elf/unload8.c b/elf/unload8.c -new file mode 100644 -index 0000000..f984a38 ---- /dev/null -+++ b/elf/unload8.c -@@ -0,0 +1,33 @@ -+#include <dlfcn.h> -+#include <stdio.h> -+ -+int -+main (void) -+{ -+ void *h = dlopen ("$ORIGIN/unload8mod1.so", RTLD_LAZY); -+ if (h == NULL) -+ { -+ puts ("dlopen unload8mod1.so failed"); -+ return 1; -+ } -+ -+ void *h2 = dlopen ("$ORIGIN/unload8mod1x.so", RTLD_LAZY); -+ if (h2 == NULL) -+ { -+ puts ("dlopen unload8mod1x.so failed"); -+ return 1; -+ } -+ dlclose (h2); -+ -+ int (*mod1) (void) = dlsym (h, "mod1"); -+ if (mod1 == NULL) -+ { -+ puts ("dlsym failed"); -+ return 1; -+ } -+ -+ mod1 (); -+ dlclose (h); -+ -+ return 0; -+} -diff --git a/elf/unload8mod1.c b/elf/unload8mod1.c -new file mode 100644 -index 0000000..fe7e81c ---- /dev/null -+++ b/elf/unload8mod1.c -@@ -0,0 +1,7 @@ -+extern void mod2 (void); -+ -+void -+mod1 (void) -+{ -+ mod2 (); -+} -diff --git a/elf/unload8mod1x.c b/elf/unload8mod1x.c -new file mode 100644 -index 0000000..835b634 ---- /dev/null -+++ b/elf/unload8mod1x.c -@@ -0,0 +1 @@ -+int mod1x; -diff --git a/elf/unload8mod2.c b/elf/unload8mod2.c -new file mode 100644 -index 0000000..2fd8b67 ---- /dev/null -+++ b/elf/unload8mod2.c -@@ -0,0 +1,7 @@ -+extern void mod3 (void); -+ -+void -+mod2 (void) -+{ -+ mod3 (); -+} -diff --git a/elf/unload8mod3.c b/elf/unload8mod3.c -new file mode 100644 -index 0000000..d49e22b ---- /dev/null -+++ b/elf/unload8mod3.c -@@ -0,0 +1,27 @@ -+#include <dlfcn.h> -+#include <stdio.h> -+#include <stdlib.h> -+ -+void -+mod3_fini2 (void) -+{ -+} -+ -+void -+mod3_fini (void) -+{ -+ mod3_fini2 (); -+} -+ -+void -+mod3 (void) -+{ -+ void *h = dlopen ("$ORIGIN/unload8mod2.so", RTLD_LAZY); -+ if (h == NULL) -+ { -+ puts ("dlopen unload8mod2.so failed"); -+ exit (1); -+ } -+ -+ atexit (mod3_fini); -+} --- -1.7.3.4 - Deleted: glibc-2.14-avoid-assertion-on-empty-dns-answer.patch =================================================================== --- glibc-2.14-avoid-assertion-on-empty-dns-answer.patch 2011-10-24 22:22:19 UTC (rev 141152) +++ glibc-2.14-avoid-assertion-on-empty-dns-answer.patch 2011-10-25 05:04:59 UTC (rev 141153) @@ -1,26 +0,0 @@ -From 032c0ee3ee28841d684950e33a77210118697566 Mon Sep 17 00:00:00 2001 -From: Andreas Schwab <[email protected]> -Date: Thu, 1 Sep 2011 10:46:14 +0200 -Subject: [PATCH] Avoid assertion failure when first DNS answer was empty - ---- - ChangeLog | 4 ++++ - resolv/res_query.c | 2 +- - 2 files changed, 5 insertions(+), 1 deletions(-) - -diff --git a/resolv/res_query.c b/resolv/res_query.c -index 2f7cfaa..2ded9fb 100644 ---- a/resolv/res_query.c -+++ b/resolv/res_query.c -@@ -248,7 +248,7 @@ __libc_res_nquery(res_state statp, - && *resplen2 > (int) sizeof (HEADER)) - { - /* Special case of partial answer. */ -- assert (hp != hp2); -+ assert (n == 0 || hp != hp2); - hp = hp2; - } - else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER) --- -1.7.3.4 - Modified: glibc-2.14-libdl-crash.patch =================================================================== --- glibc-2.14-libdl-crash.patch 2011-10-24 22:22:19 UTC (rev 141152) +++ glibc-2.14-libdl-crash.patch 2011-10-25 05:04:59 UTC (rev 141153) @@ -55,7 +55,7 @@ if (old_l_initfini != NULL) - map->l_orig_initfini = old_l_initfini; + _dl_scope_free (old_l_initfini); - } + diff --git a/elf/dl-libc.c b/elf/dl-libc.c index 7be9483..a13fce3 100644 --- a/elf/dl-libc.c Added: glibc-2.14-revert-4768ae77.patch =================================================================== --- glibc-2.14-revert-4768ae77.patch (rev 0) +++ glibc-2.14-revert-4768ae77.patch 2011-10-25 05:04:59 UTC (rev 141153) @@ -0,0 +1,37 @@ +diff -Naur glibc-orig//resolv/res_send.c glibc/resolv/res_send.c +--- glibc-orig//resolv/res_send.c 2011-06-10 18:59:03.041436996 +1000 ++++ glibc/resolv/res_send.c 2011-06-10 19:08:09.379309323 +1000 +@@ -549,7 +549,7 @@ + ns, ansp, ansp2, nansp2, resplen2); + if (n < 0) + return (-1); +- if (n == 0 && (buf2 == NULL || *resplen2 == 0)) ++ if (n == 0) + goto next_ns; + } else { + /* Use datagrams. */ +@@ -559,7 +559,7 @@ + ansp2, nansp2, resplen2); + if (n < 0) + return (-1); +- if (n == 0 && (buf2 == NULL || *resplen2 == 0)) ++ if (n == 0) + goto next_ns; + if (v_circuit) + // XXX Check whether both requests failed or +@@ -1275,14 +1275,10 @@ + (*thisresplenp > *thisanssizp) + ? *thisanssizp : *thisresplenp); + +- if (recvresp1 || (buf2 != NULL && recvresp2)) { +- *resplen2 = 0; ++ if (recvresp1 || (buf2 != NULL && recvresp2)) + return resplen; +- } + if (buf2 != NULL) + { +- /* No data from the first reply. */ +- resplen = 0; + /* We are waiting for a possible second reply. */ + if (hp->id == anhp->id) + recvresp1 = 1;
