summaryrefslogtreecommitdiff
path: root/source/l/glibc
diff options
context:
space:
mode:
Diffstat (limited to 'source/l/glibc')
-rw-r--r--source/l/glibc/doinst.sh-glibc36
-rw-r--r--source/l/glibc/doinst.sh-glibc-solibs36
-rw-r--r--source/l/glibc/glibc-2.14-reexport-rpc-interface.patch26
-rw-r--r--source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch27
-rw-r--r--source/l/glibc/glibc-2.14.1-fixes-1.patch159
-rw-r--r--source/l/glibc/glibc-2.15-revert-c5a0802a.diff226
-rw-r--r--source/l/glibc/glibc-2.15.nscd-race-fix.diff47
-rwxr-xr-xsource/l/glibc/glibc.SlackBuild34
-rw-r--r--source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff322
-rw-r--r--source/l/glibc/glibc.strtod.CVE-2012-3480.diff407
-rw-r--r--source/l/glibc/slack-desc.glibc-zoneinfo2
-rw-r--r--source/l/glibc/slack-desc.glibc-zoneinfo.olson19
-rw-r--r--source/l/glibc/timezone-scripts/timeconfig90
13 files changed, 1388 insertions, 43 deletions
diff --git a/source/l/glibc/doinst.sh-glibc b/source/l/glibc/doinst.sh-glibc
index 427723c2..1b3e03e3 100644
--- a/source/l/glibc/doinst.sh-glibc
+++ b/source/l/glibc/doinst.sh-glibc
@@ -111,43 +111,43 @@ rm -f etc/profile.d/glibc.sh.new
# In case there's no ldconfig, make the links manually:
if [ ! -x /sbin/ldconfig ]; then
( cd lib ; rm -rf libnss_nis.so.2 )
-( cd lib ; ln -sf libnss_nis-2.13.so libnss_nis.so.2 )
+( cd lib ; ln -sf libnss_nis-2.15.so libnss_nis.so.2 )
( cd lib ; rm -rf libm.so.6 )
-( cd lib ; ln -sf libm-2.13.so libm.so.6 )
+( cd lib ; ln -sf libm-2.15.so libm.so.6 )
( cd lib ; rm -rf libnss_files.so.2 )
-( cd lib ; ln -sf libnss_files-2.13.so libnss_files.so.2 )
+( cd lib ; ln -sf libnss_files-2.15.so libnss_files.so.2 )
( cd lib ; rm -rf libresolv.so.2 )
-( cd lib ; ln -sf libresolv-2.13.so libresolv.so.2 )
+( cd lib ; ln -sf libresolv-2.15.so libresolv.so.2 )
( cd lib ; rm -rf libnsl.so.1 )
-( cd lib ; ln -sf libnsl-2.13.so libnsl.so.1 )
+( cd lib ; ln -sf libnsl-2.15.so libnsl.so.1 )
( cd lib ; rm -rf libutil.so.1 )
-( cd lib ; ln -sf libutil-2.13.so libutil.so.1 )
+( cd lib ; ln -sf libutil-2.15.so libutil.so.1 )
( cd lib ; rm -rf libnss_compat.so.2 )
-( cd lib ; ln -sf libnss_compat-2.13.so libnss_compat.so.2 )
+( cd lib ; ln -sf libnss_compat-2.15.so libnss_compat.so.2 )
( cd lib ; rm -rf libthread_db.so.1 )
( cd lib ; ln -sf libthread_db-1.0.so libthread_db.so.1 )
( cd lib ; rm -rf libnss_hesiod.so.2 )
-( cd lib ; ln -sf libnss_hesiod-2.13.so libnss_hesiod.so.2 )
+( cd lib ; ln -sf libnss_hesiod-2.15.so libnss_hesiod.so.2 )
( cd lib ; rm -rf libanl.so.1 )
-( cd lib ; ln -sf libanl-2.13.so libanl.so.1 )
+( cd lib ; ln -sf libanl-2.15.so libanl.so.1 )
( cd lib ; rm -rf libcrypt.so.1 )
-( cd lib ; ln -sf libcrypt-2.13.so libcrypt.so.1 )
+( cd lib ; ln -sf libcrypt-2.15.so libcrypt.so.1 )
( cd lib ; rm -rf libBrokenLocale.so.1 )
-( cd lib ; ln -sf libBrokenLocale-2.13.so libBrokenLocale.so.1 )
+( cd lib ; ln -sf libBrokenLocale-2.15.so libBrokenLocale.so.1 )
( cd lib ; rm -rf ld-linux.so.2 )
-( cd lib ; ln -sf ld-2.13.so ld-linux.so.2 )
+( cd lib ; ln -sf ld-2.15.so ld-linux.so.2 )
( cd lib ; rm -rf libdl.so.2 )
-( cd lib ; ln -sf libdl-2.13.so libdl.so.2 )
+( cd lib ; ln -sf libdl-2.15.so libdl.so.2 )
( cd lib ; rm -rf libnss_dns.so.2 )
-( cd lib ; ln -sf libnss_dns-2.13.so libnss_dns.so.2 )
+( cd lib ; ln -sf libnss_dns-2.15.so libnss_dns.so.2 )
( cd lib ; rm -rf libpthread.so.0 )
-( cd lib ; ln -sf libpthread-2.13.so libpthread.so.0 )
+( cd lib ; ln -sf libpthread-2.15.so libpthread.so.0 )
( cd lib ; rm -rf libnss_nisplus.so.2 )
-( cd lib ; ln -sf libnss_nisplus-2.13.so libnss_nisplus.so.2 )
+( cd lib ; ln -sf libnss_nisplus-2.15.so libnss_nisplus.so.2 )
( cd lib ; rm -rf libc.so.6 )
-( cd lib ; ln -sf libc-2.13.so libc.so.6 )
+( cd lib ; ln -sf libc-2.15.so libc.so.6 )
( cd lib ; rm -rf librt.so.1 )
-( cd lib ; ln -sf librt-2.13.so librt.so.1 )
+( cd lib ; ln -sf librt-2.15.so librt.so.1 )
fi
# More links:
diff --git a/source/l/glibc/doinst.sh-glibc-solibs b/source/l/glibc/doinst.sh-glibc-solibs
index adcb4131..f6e41a96 100644
--- a/source/l/glibc/doinst.sh-glibc-solibs
+++ b/source/l/glibc/doinst.sh-glibc-solibs
@@ -91,41 +91,41 @@ rm -f etc/profile.d/glibc.sh.new
# In case there's no ldconfig, make the links manually:
if [ ! -x /sbin/ldconfig ]; then
( cd lib ; rm -rf libnss_nis.so.2 )
-( cd lib ; ln -sf libnss_nis-2.13.so libnss_nis.so.2 )
+( cd lib ; ln -sf libnss_nis-2.15.so libnss_nis.so.2 )
( cd lib ; rm -rf libm.so.6 )
-( cd lib ; ln -sf libm-2.13.so libm.so.6 )
+( cd lib ; ln -sf libm-2.15.so libm.so.6 )
( cd lib ; rm -rf libnss_files.so.2 )
-( cd lib ; ln -sf libnss_files-2.13.so libnss_files.so.2 )
+( cd lib ; ln -sf libnss_files-2.15.so libnss_files.so.2 )
( cd lib ; rm -rf libresolv.so.2 )
-( cd lib ; ln -sf libresolv-2.13.so libresolv.so.2 )
+( cd lib ; ln -sf libresolv-2.15.so libresolv.so.2 )
( cd lib ; rm -rf libnsl.so.1 )
-( cd lib ; ln -sf libnsl-2.13.so libnsl.so.1 )
+( cd lib ; ln -sf libnsl-2.15.so libnsl.so.1 )
( cd lib ; rm -rf libutil.so.1 )
-( cd lib ; ln -sf libutil-2.13.so libutil.so.1 )
+( cd lib ; ln -sf libutil-2.15.so libutil.so.1 )
( cd lib ; rm -rf libnss_compat.so.2 )
-( cd lib ; ln -sf libnss_compat-2.13.so libnss_compat.so.2 )
+( cd lib ; ln -sf libnss_compat-2.15.so libnss_compat.so.2 )
( cd lib ; rm -rf libthread_db.so.1 )
( cd lib ; ln -sf libthread_db-1.0.so libthread_db.so.1 )
( cd lib ; rm -rf libnss_hesiod.so.2 )
-( cd lib ; ln -sf libnss_hesiod-2.13.so libnss_hesiod.so.2 )
+( cd lib ; ln -sf libnss_hesiod-2.15.so libnss_hesiod.so.2 )
( cd lib ; rm -rf libanl.so.1 )
-( cd lib ; ln -sf libanl-2.13.so libanl.so.1 )
+( cd lib ; ln -sf libanl-2.15.so libanl.so.1 )
( cd lib ; rm -rf libcrypt.so.1 )
-( cd lib ; ln -sf libcrypt-2.13.so libcrypt.so.1 )
+( cd lib ; ln -sf libcrypt-2.15.so libcrypt.so.1 )
( cd lib ; rm -rf libBrokenLocale.so.1 )
-( cd lib ; ln -sf libBrokenLocale-2.13.so libBrokenLocale.so.1 )
+( cd lib ; ln -sf libBrokenLocale-2.15.so libBrokenLocale.so.1 )
( cd lib ; rm -rf ld-linux.so.2 )
-( cd lib ; ln -sf ld-2.13.so ld-linux.so.2 )
+( cd lib ; ln -sf ld-2.15.so ld-linux.so.2 )
( cd lib ; rm -rf libdl.so.2 )
-( cd lib ; ln -sf libdl-2.13.so libdl.so.2 )
+( cd lib ; ln -sf libdl-2.15.so libdl.so.2 )
( cd lib ; rm -rf libnss_dns.so.2 )
-( cd lib ; ln -sf libnss_dns-2.13.so libnss_dns.so.2 )
+( cd lib ; ln -sf libnss_dns-2.15.so libnss_dns.so.2 )
( cd lib ; rm -rf libpthread.so.0 )
-( cd lib ; ln -sf libpthread-2.13.so libpthread.so.0 )
+( cd lib ; ln -sf libpthread-2.15.so libpthread.so.0 )
( cd lib ; rm -rf libnss_nisplus.so.2 )
-( cd lib ; ln -sf libnss_nisplus-2.13.so libnss_nisplus.so.2 )
+( cd lib ; ln -sf libnss_nisplus-2.15.so libnss_nisplus.so.2 )
( cd lib ; rm -rf libc.so.6 )
-( cd lib ; ln -sf libc-2.13.so libc.so.6 )
+( cd lib ; ln -sf libc-2.15.so libc.so.6 )
( cd lib ; rm -rf librt.so.1 )
-( cd lib ; ln -sf librt-2.13.so librt.so.1 )
+( cd lib ; ln -sf librt-2.15.so librt.so.1 )
fi
diff --git a/source/l/glibc/glibc-2.14-reexport-rpc-interface.patch b/source/l/glibc/glibc-2.14-reexport-rpc-interface.patch
new file mode 100644
index 00000000..a0a38162
--- /dev/null
+++ b/source/l/glibc/glibc-2.14-reexport-rpc-interface.patch
@@ -0,0 +1,26 @@
+diff --git a/include/libc-symbols.h b/include/libc-symbols.h
+index 67e1ca2..5e7cca5 100644
+--- a/include/libc-symbols.h
++++ b/include/libc-symbols.h
+@@ -635,7 +635,7 @@ for linking")
+ # define libc_hidden_proto(name, attrs...) hidden_proto (name, ##attrs)
+ # define libc_hidden_def(name) hidden_def (name)
+ # define libc_hidden_weak(name) hidden_weak (name)
+-# define libc_hidden_nolink(name, version) hidden_nolink (name, libc, version)
++# define libc_hidden_nolink(name, version) hidden_def (name)
+ # define libc_hidden_ver(local, name) hidden_ver (local, name)
+ # define libc_hidden_data_def(name) hidden_data_def (name)
+ # define libc_hidden_data_weak(name) hidden_data_weak (name)
+diff --git a/sunrpc/Makefile b/sunrpc/Makefile
+index 5134ce9..40c73d1 100644
+--- a/sunrpc/Makefile
++++ b/sunrpc/Makefile
+@@ -53,7 +53,7 @@ headers-in-tirpc = $(addprefix rpc/,auth.h auth_unix.h clnt.h pmap_clnt.h \
+ des_crypt.h)
+ headers-not-in-tirpc = $(addprefix rpc/,key_prot.h rpc_des.h) \
+ $(rpcsvc:%=rpcsvc/%) rpcsvc/bootparam.h
+-headers = rpc/netdb.h
++headers = rpc/netdb.h $(headers-in-tirpc) $(headers-not-in-tirpc)
+ install-others = $(inst_sysconfdir)/rpc
+ generated = $(rpcsvc:%.x=rpcsvc/%.h) $(rpcsvc:%.x=x%.c) $(rpcsvc:%.x=x%.stmp) \
+ $(rpcsvc:%.x=rpcsvc/%.stmp) rpcgen \ No newline at end of file
diff --git a/source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch b/source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch
new file mode 100644
index 00000000..554b9e56
--- /dev/null
+++ b/source/l/glibc/glibc-2.14-reinstall-nis-rpc-headers.patch
@@ -0,0 +1,27 @@
+From bdd816a366c4e5bba5de7157d948e0c0737fb4fb Mon Sep 17 00:00:00 2001
+From: Andreas Schwab <schwab@redhat.com>
+Date: Tue, 17 May 2011 17:42:30 +0200
+Subject: [PATCH] Reinstall NIS RPC headers
+
+---
+ nis/Makefile | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/nis/Makefile b/nis/Makefile
+index b5c9609..d2934d9 100644
+--- a/nis/Makefile
++++ b/nis/Makefile
+@@ -23,9 +23,9 @@ subdir := nis
+
+ aux := nis_hash
+
++headers := $(wildcard rpcsvc/*.[hx])
+ distribute := nss-nis.h nss-nisplus.h nis_intern.h Banner \
+- nisplus-parser.h nis_xdr.h nss \
+- $(wildcard rpcsvc/*.[hx])
++ nisplus-parser.h nis_xdr.h nss
+
+ # These are the databases available for the nis (and perhaps later nisplus)
+ # service. This must be a superset of the services in nss.
+--
+1.7.5.4
diff --git a/source/l/glibc/glibc-2.14.1-fixes-1.patch b/source/l/glibc/glibc-2.14.1-fixes-1.patch
new file mode 100644
index 00000000..b2b87f12
--- /dev/null
+++ b/source/l/glibc/glibc-2.14.1-fixes-1.patch
@@ -0,0 +1,159 @@
+Submitted By: Matt Burgess <matthew_at_linuxfromscratch_dot_org>
+Date: 2011-10-07
+Initial Package Version: 2.14.1
+Upstream Status: From upstream
+Origin: Matt Burgess
+Description: Fixes Firefox crashes and a bug when programs link to
+ SDL.
+
+diff -Naur glibc-2.14.1.orig/elf/dl-close.c glibc-2.14.1/elf/dl-close.c
+--- glibc-2.14.1.orig/elf/dl-close.c 2011-10-07 09:48:55.000000000 +0000
++++ glibc-2.14.1/elf/dl-close.c 2011-10-07 19:43:10.346411120 +0000
+@@ -119,17 +119,8 @@
+ if (map->l_direct_opencount > 0 || map->l_type != lt_loaded
+ || dl_close_state != not_pending)
+ {
+- if (map->l_direct_opencount == 0)
+- {
+- if (map->l_type == lt_loaded)
+- dl_close_state = rerun;
+- else if (map->l_type == lt_library)
+- {
+- struct link_map **oldp = map->l_initfini;
+- map->l_initfini = map->l_orig_initfini;
+- _dl_scope_free (oldp);
+- }
+- }
++ if (map->l_direct_opencount == 0 && map->l_type == lt_loaded)
++ dl_close_state = rerun;
+
+ /* There are still references to this object. Do nothing more. */
+ if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
+diff -Naur glibc-2.14.1.orig/elf/dl-deps.c glibc-2.14.1/elf/dl-deps.c
+--- glibc-2.14.1.orig/elf/dl-deps.c 2011-10-07 09:48:55.000000000 +0000
++++ glibc-2.14.1/elf/dl-deps.c 2011-10-07 19:43:10.348432639 +0000
+@@ -478,6 +478,7 @@
+ nneeded * sizeof needed[0]);
+ atomic_write_barrier ();
+ l->l_initfini = l_initfini;
++ l->l_free_initfini = 1;
+ }
+
+ /* If we have no auxiliary objects just go on to the next map. */
+@@ -678,6 +679,7 @@
+ l_initfini[nlist] = NULL;
+ atomic_write_barrier ();
+ map->l_initfini = l_initfini;
++ map->l_free_initfini = 1;
+ if (l_reldeps != NULL)
+ {
+ atomic_write_barrier ();
+@@ -686,7 +688,7 @@
+ _dl_scope_free (old_l_reldeps);
+ }
+ if (old_l_initfini != NULL)
+- map->l_orig_initfini = old_l_initfini;
++ _dl_scope_free (old_l_initfini);
+
+ if (errno_reason)
+ _dl_signal_error (errno_reason == -1 ? 0 : errno_reason, objname,
+diff -Naur glibc-2.14.1.orig/elf/dl-libc.c glibc-2.14.1/elf/dl-libc.c
+--- glibc-2.14.1.orig/elf/dl-libc.c 2011-10-07 09:48:55.000000000 +0000
++++ glibc-2.14.1/elf/dl-libc.c 2011-10-07 19:43:10.352411141 +0000
+@@ -279,6 +279,10 @@
+ if (! old->dont_free)
+ free (old);
+ }
++
++ /* Free the initfini dependency list. */
++ if (l->l_free_initfini)
++ free (l->l_initfini);
+ }
+
+ if (__builtin_expect (GL(dl_ns)[ns]._ns_global_scope_alloc, 0) != 0
+diff -Naur glibc-2.14.1.orig/elf/rtld.c glibc-2.14.1/elf/rtld.c
+--- glibc-2.14.1.orig/elf/rtld.c 2011-10-07 09:48:55.000000000 +0000
++++ glibc-2.14.1/elf/rtld.c 2011-10-07 19:43:10.355406263 +0000
+@@ -2263,6 +2263,7 @@
+ lnp->dont_free = 1;
+ lnp = lnp->next;
+ }
++ l->l_free_initfini = 0;
+
+ if (l != &GL(dl_rtld_map))
+ _dl_relocate_object (l, l->l_scope, GLRO(dl_lazy) ? RTLD_LAZY : 0,
+diff -Naur glibc-2.14.1.orig/include/link.h glibc-2.14.1/include/link.h
+--- glibc-2.14.1.orig/include/link.h 2011-10-07 09:48:55.000000000 +0000
++++ glibc-2.14.1/include/link.h 2011-10-07 19:43:10.357462703 +0000
+@@ -192,6 +192,9 @@
+ during LD_TRACE_PRELINKING=1
+ contains any DT_SYMBOLIC
+ libraries. */
++ unsigned int l_free_initfini:1; /* Nonzero if l_initfini can be
++ freed, ie. not allocated with
++ the dummy malloc in ld.so. */
+
+ /* Collected information about own RPATH directories. */
+ struct r_search_path_struct l_rpath_dirs;
+@@ -240,9 +243,6 @@
+
+ /* List of object in order of the init and fini calls. */
+ struct link_map **l_initfini;
+- /* The init and fini list generated at startup, saved when the
+- object is also loaded dynamically. */
+- struct link_map **l_orig_initfini;
+
+ /* List of the dependencies introduced through symbol binding. */
+ struct link_map_reldeps
+diff -Naur glibc-2.14.1.orig/resolv/res_query.c glibc-2.14.1/resolv/res_query.c
+--- glibc-2.14.1.orig/resolv/res_query.c 2011-10-07 09:48:55.000000000 +0000
++++ glibc-2.14.1/resolv/res_query.c 2011-10-07 19:43:10.361412711 +0000
+@@ -122,6 +122,7 @@
+ int *resplen2)
+ {
+ HEADER *hp = (HEADER *) answer;
++ HEADER *hp2;
+ int n, use_malloc = 0;
+ u_int oflags = statp->_flags;
+
+@@ -239,26 +240,25 @@
+ /* __libc_res_nsend might have reallocated the buffer. */
+ hp = (HEADER *) *answerp;
+
+- /* We simplify the following tests by assigning HP to HP2. It
+- is easy to verify that this is the same as ignoring all
+- tests of HP2. */
+- HEADER *hp2 = answerp2 ? (HEADER *) *answerp2 : hp;
+-
+- if (n < (int) sizeof (HEADER) && answerp2 != NULL
+- && *resplen2 > (int) sizeof (HEADER))
++ /* We simplify the following tests by assigning HP to HP2 or
++ vice versa. It is easy to verify that this is the same as
++ ignoring all tests of HP or HP2. */
++ if (answerp2 == NULL || *resplen2 < (int) sizeof (HEADER))
+ {
+- /* Special case of partial answer. */
+- assert (hp != hp2);
+- hp = hp2;
++ hp2 = hp;
+ }
+- else if (answerp2 != NULL && *resplen2 < (int) sizeof (HEADER)
+- && n > (int) sizeof (HEADER))
++ else
+ {
+- /* Special case of partial answer. */
+- assert (hp != hp2);
+- hp2 = hp;
++ hp2 = (HEADER *) *answerp2;
++ if (n < (int) sizeof (HEADER))
++ {
++ hp = hp2;
++ }
+ }
+
++ /* Make sure both hp and hp2 are defined */
++ assert((hp != NULL) && (hp2 != NULL));
++
+ if ((hp->rcode != NOERROR || ntohs(hp->ancount) == 0)
+ && (hp2->rcode != NOERROR || ntohs(hp2->ancount) == 0)) {
+ #ifdef DEBUG
diff --git a/source/l/glibc/glibc-2.15-revert-c5a0802a.diff b/source/l/glibc/glibc-2.15-revert-c5a0802a.diff
new file mode 100644
index 00000000..b53581b3
--- /dev/null
+++ b/source/l/glibc/glibc-2.15-revert-c5a0802a.diff
@@ -0,0 +1,226 @@
+diff -rup a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S
+--- a/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2011-12-22 18:04:12.937212834 +0000
++++ b/nptl/sysdeps/unix/sysv/linux/i386/i486/pthread_cond_wait.S 2011-12-22 18:04:42.104222278 +0000
+@@ -137,7 +137,6 @@ __pthread_cond_wait:
+ cmpl $PI_BIT, %eax
+ jne 18f
+
+-90:
+ movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %ecx
+ movl %ebp, %edx
+ xorl %esi, %esi
+@@ -151,9 +150,6 @@ __pthread_cond_wait:
+ sete 16(%esp)
+ je 19f
+
+- cmpl $-EAGAIN, %eax
+- je 91f
+-
+ /* Normal and PI futexes dont mix. Use normal futex functions only
+ if the kernel does not support the PI futex functions. */
+ cmpl $-ENOSYS, %eax
+@@ -398,78 +394,6 @@ __pthread_cond_wait:
+ #endif
+ call __lll_unlock_wake
+ jmp 11b
+-
+-91:
+-.LcleanupSTART2:
+- /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN. We need to
+- call it again. */
+-
+- /* Get internal lock. */
+- movl $1, %edx
+- xorl %eax, %eax
+- LOCK
+-#if cond_lock == 0
+- cmpxchgl %edx, (%ebx)
+-#else
+- cmpxchgl %edx, cond_lock(%ebx)
+-#endif
+- jz 92f
+-
+-#if cond_lock == 0
+- movl %ebx, %edx
+-#else
+- leal cond_lock(%ebx), %edx
+-#endif
+-#if (LLL_SHARED-LLL_PRIVATE) > 255
+- xorl %ecx, %ecx
+-#endif
+- cmpl $-1, dep_mutex(%ebx)
+- setne %cl
+- subl $1, %ecx
+- andl $(LLL_SHARED-LLL_PRIVATE), %ecx
+-#if LLL_PRIVATE != 0
+- addl $LLL_PRIVATE, %ecx
+-#endif
+- call __lll_lock_wait
+-
+-92:
+- /* Increment the cond_futex value again, so it can be used as a new
+- expected value. */
+- addl $1, cond_futex(%ebx)
+- movl cond_futex(%ebx), %ebp
+-
+- /* Unlock. */
+- LOCK
+-#if cond_lock == 0
+- subl $1, (%ebx)
+-#else
+- subl $1, cond_lock(%ebx)
+-#endif
+- je 93f
+-#if cond_lock == 0
+- movl %ebx, %eax
+-#else
+- leal cond_lock(%ebx), %eax
+-#endif
+-#if (LLL_SHARED-LLL_PRIVATE) > 255
+- xorl %ecx, %ecx
+-#endif
+- cmpl $-1, dep_mutex(%ebx)
+- setne %cl
+- subl $1, %ecx
+- andl $(LLL_SHARED-LLL_PRIVATE), %ecx
+-#if LLL_PRIVATE != 0
+- addl $LLL_PRIVATE, %ecx
+-#endif
+- call __lll_unlock_wake
+-
+-93:
+- /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
+- xorl %ecx, %ecx
+- movl dep_mutex(%ebx), %edi
+- jmp 90b
+-.LcleanupEND2:
+-
+ .size __pthread_cond_wait, .-__pthread_cond_wait
+ versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
+ GLIBC_2_3_2)
+@@ -642,10 +566,6 @@ __condvar_w_cleanup:
+ .long .LcleanupEND-.Lsub_cond_futex
+ .long __condvar_w_cleanup-.LSTARTCODE
+ .uleb128 0
+- .long .LcleanupSTART2-.LSTARTCODE
+- .long .LcleanupEND2-.LcleanupSTART2
+- .long __condvar_w_cleanup-.LSTARTCODE
+- .uleb128 0
+ .long .LcallUR-.LSTARTCODE
+ .long .LENDCODE-.LcallUR
+ .long 0
+Only in b/nptl/sysdeps/unix/sysv/linux/i386/i486: pthread_cond_wait.S.orig
+diff -rup a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S
+--- a/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2011-12-22 18:04:12.941212837 +0000
++++ b/nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S 2011-12-22 18:05:05.155229737 +0000
+@@ -23,7 +23,6 @@
+ #include <lowlevelcond.h>
+ #include <tcb-offsets.h>
+ #include <pthread-pi-defines.h>
+-#include <pthread-errnos.h>
+
+ #include <kernel-features.h>
+
+@@ -137,14 +136,11 @@ __pthread_cond_wait:
+ cmpl $PI_BIT, %eax
+ jne 61f
+
+-90:
+ movl $(FUTEX_WAIT_REQUEUE_PI|FUTEX_PRIVATE_FLAG), %esi
+ movl $SYS_futex, %eax
+ syscall
+
+ movl $1, %r8d
+- cmpq $-EAGAIN, %rax
+- je 91f
+ #ifdef __ASSUME_REQUEUE_PI
+ jmp 62f
+ #else
+@@ -331,70 +327,6 @@ __pthread_cond_wait:
+
+ 13: movq %r10, %rax
+ jmp 14b
+-
+-91:
+-.LcleanupSTART2:
+- /* FUTEX_WAIT_REQUEUE_PI returned EAGAIN. We need to
+- call it again. */
+- movq 8(%rsp), %rdi
+-
+- /* Get internal lock. */
+- movl $1, %esi
+- xorl %eax, %eax
+- LOCK
+-#if cond_lock == 0
+- cmpxchgl %esi, (%rdi)
+-#else
+- cmpxchgl %esi, cond_lock(%rdi)
+-#endif
+- jz 92f
+-
+-#if cond_lock != 0
+- addq $cond_lock, %rdi
+-#endif
+- cmpq $-1, dep_mutex-cond_lock(%rdi)
+- movl $LLL_PRIVATE, %eax
+- movl $LLL_SHARED, %esi
+- cmovne %eax, %esi
+- callq __lll_lock_wait
+-#if cond_lock != 0
+- subq $cond_lock, %rdi
+-#endif
+-92:
+- /* Increment the cond_futex value again, so it can be used as a new
+- expected value. */
+- incl cond_futex(%rdi)
+- movl cond_futex(%rdi), %edx
+-
+- /* Release internal lock. */
+- LOCK
+-#if cond_lock == 0
+- decl (%rdi)
+-#else
+- decl cond_lock(%rdi)
+-#endif
+- jz 93f
+-
+-#if cond_lock != 0
+- addq $cond_lock, %rdi
+-#endif
+- cmpq $-1, dep_mutex-cond_lock(%rdi)
+- movl $LLL_PRIVATE, %eax
+- movl $LLL_SHARED, %esi
+- cmovne %eax, %esi
+- /* The call preserves %rdx. */
+- callq __lll_unlock_wake
+-#if cond_lock != 0
+- subq $cond_lock, %rdi
+-#endif
+-93:
+- /* Set the rest of SYS_futex args for FUTEX_WAIT_REQUEUE_PI. */
+- xorq %r10, %r10
+- movq dep_mutex(%rdi), %r8
+- leaq cond_futex(%rdi), %rdi
+- jmp 90b
+-.LcleanupEND2:
+-
+ .size __pthread_cond_wait, .-__pthread_cond_wait
+ versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait,
+ GLIBC_2_3_2)
+@@ -547,15 +479,11 @@ __condvar_cleanup1:
+ .uleb128 .LcleanupSTART-.LSTARTCODE
+ .uleb128 .LcleanupEND-.LcleanupSTART
+ .uleb128 __condvar_cleanup1-.LSTARTCODE
+- .uleb128 0
+- .uleb128 .LcleanupSTART2-.LSTARTCODE
+- .uleb128 .LcleanupEND2-.LcleanupSTART2
+- .uleb128 __condvar_cleanup1-.LSTARTCODE
+- .uleb128 0
++ .uleb128 0
+ .uleb128 .LcallUR-.LSTARTCODE
+ .uleb128 .LENDCODE-.LcallUR
+ .uleb128 0
+- .uleb128 0
++ .uleb128 0
+ .Lcstend:
+
diff --git a/source/l/glibc/glibc-2.15.nscd-race-fix.diff b/source/l/glibc/glibc-2.15.nscd-race-fix.diff
new file mode 100644
index 00000000..f1323570
--- /dev/null
+++ b/source/l/glibc/glibc-2.15.nscd-race-fix.diff
@@ -0,0 +1,47 @@
+--- c/nscd/nscd_gethst_r.c 2012-01-01 05:16:32.000000000 -0700
++++ c/nscd/nscd_gethst_r.c 2012-03-28 10:45:51.546600822 -0600
+@@ -101,9 +101,27 @@ libc_freeres_fn (hst_map_free)
+ uint32_t
+ __nscd_get_nl_timestamp (void)
+ {
++ uint32_t retval;
+ if (__nss_not_use_nscd_hosts != 0)
+ return 0;
+
++ int cnt = 0;
++ /* __nscd_get_mapping can change hst_map_handle.mapped to NO_MAPPING.
++ However, __nscd_get_mapping assumes the prior value was not NO_MAPPING.
++ Thus we have to acquire the lock to prevent this thread from changing
++ hst_map_handle.mapped to NO_MAPPING while another thread is inside
++ __nscd_get_mapping. */
++ while (__builtin_expect
++ (atomic_compare_and_exchange_val_acq (&__hst_map_handle.lock,
++ 1, 0) != 0, 0))
++ {
++ // XXX Best number of rounds?
++ if (__builtin_expect (++cnt > 5, 0))
++ return 0;
++
++ atomic_delay ();
++ }
++
+ struct mapped_database *map = __hst_map_handle.mapped;
+
+ if (map == NULL
+@@ -113,9 +131,14 @@ __nscd_get_nl_timestamp (void)
+ map = __nscd_get_mapping (GETFDHST, "hosts", &__hst_map_handle.mapped);
+
+ if (map == NO_MAPPING)
+- return 0;
++ retval = 0;
++ else
++ retval = map->head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP];
++
++ /* Release the lock. */
++ __hst_map_handle.lock = 0;
+
+- return map->head->extra_data[NSCD_HST_IDX_CONF_TIMESTAMP];
++ return retval;
+ }
+
+
diff --git a/source/l/glibc/glibc.SlackBuild b/source/l/glibc/glibc.SlackBuild
index d3f21ae5..0ab9e714 100755
--- a/source/l/glibc/glibc.SlackBuild
+++ b/source/l/glibc/glibc.SlackBuild
@@ -1,6 +1,6 @@
#!/bin/sh
-# Copyright 2006, 2008, 2009, 2010, 2011 Patrick J. Volkerding, Sebeka, MN, USA
+# Copyright 2006, 2008, 2009, 2010, 2011, 2012 Patrick J. Volkerding, Sebeka, MN, USA
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
@@ -22,9 +22,9 @@
## build glibc-$VERSION for Slackware
-VERSION=${VERSION:-2.13}
+VERSION=${VERSION:-2.15}
CHECKOUT=${CHECKOUT:-""}
-BUILD=${BUILD:-4}
+BUILD=${BUILD:-7}
## Included in glibc now:
## glibc-libidn version
@@ -134,6 +134,13 @@ fix_doinst() {
# This is a patch function to put all glibc patches in the build script
# up near the top.
apply_patches() {
+ # Reexport the RPC interfaces that were removed in glibc-2.14.
+ # Sure, it's crufy code, but stuff needs it, so rather than pull the
+ # rug out from under you, we'll just humbly recommend that you consider
+ # transitioning away from it... :-)
+ zcat $CWD/glibc-2.14-reexport-rpc-interface.patch.gz | patch -p1 --verbose || exit 1
+ # Add back the NIS and RPC headers:
+ zcat $CWD/glibc-2.14-reinstall-nis-rpc-headers.patch.gz | patch -p1 --verbose || exit 1
# Use old-style locale directories rather than a single (and strangely
# formatted) /usr/lib/locale/locale-archive file:
zcat $CWD/glibc.locale.no-archive.diff.gz | patch -p1 --verbose || exit 1
@@ -165,7 +172,17 @@ apply_patches() {
# Avoid the Intel optimized asm routines for now because they break
# the flash player. We'll phase this in when it's safer to do so.
zcat $CWD/glibc.disable.broken.optimized.memcpy.diff.gz | patch -p1 --verbose || exit 1
- # Update the timezone information.
+ # Upstream fixes to avert Firefox crashes: (still applies to 2.15... probably better not to drop it)
+ zcat $CWD/glibc-2.14.1-fixes-1.patch.gz | patch -p1 --verbose || exit 1
+ # Upstream patch to fix relocation sorting related crashes:
+ zcat $CWD/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff.gz | patch -p1 --verbose || exit 1
+ # Upstream patch to fix crashes when nscd is not running:
+ zcat $CWD/glibc-2.15.nscd-race-fix.diff.gz | patch -p1 --verbose || exit 1
+ # Revert a patch that went into 2.15 that causes NPTL related crashes:
+ zcat $CWD/glibc-2.15-revert-c5a0802a.diff.gz | patch -p1 --verbose || exit 1
+ # Patch integer overflows in strtod*() functions:
+ zcat $CWD/glibc.strtod.CVE-2012-3480.diff.gz | patch -p1 --verbose || exit 1
+ # Update the timezone information:
( cd timezone
tar xzf $CWD/tzdata?????.tar.gz
chown root:root *
@@ -175,6 +192,8 @@ apply_patches() {
mkdir tzcode
cd tzcode
tar xzf $CWD/tzcode?????.tar.gz
+ # A partial build is needed here to update TZVERSION in version.h:
+ make -i
chown -R root:root .
chmod 644 *
cp -a *.c *.h ..
@@ -256,7 +275,7 @@ CFLAGS="-g $OPTIMIZ" \
../configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
- --enable-kernel=2.6.18 \
+ --enable-kernel=2.6.32 \
--with-headers=/usr/include \
--enable-add-ons=libidn,nptl \
--enable-profile \
@@ -358,6 +377,9 @@ rm $PKG/etc/ld.so.cache
##################################
# glibc-zoneinfo. We will start with an easy one to avoid breaking a sweat. ;-)
+cd $CWD
+ZONE_VERSIONS="$(echo tzcode* | cut -f1 -d . | cut -b7-11)_$(echo tzdata* | cut -f1 -d . | cut -b7-11)"
+echo $ZONE_VERSIONS
cd $PZONE
# Install some scripts to help select a timezone:
mkdir -p $PZONE/var/log/setup
@@ -379,7 +401,7 @@ mkdir -p $PZONE/etc
# This is already hard-coded into doinst.sh (like it'll be there anyway ;-):
rm -f etc/localtime
# Wrap it up:
-makepkg -l y -c n $TMP/glibc-zoneinfo-$VERSION-noarch-$BUILD.txz
+makepkg -l y -c n $TMP/glibc-zoneinfo-$ZONE_VERSIONS-noarch-$BUILD.txz
# glibc-profile:
cd $PPROFILE
diff --git a/source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff b/source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff
new file mode 100644
index 00000000..e9b3ba40
--- /dev/null
+++ b/source/l/glibc/glibc.git-6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4.diff
@@ -0,0 +1,322 @@
+From 6ee65ed6ddbf04402fad0bec6aa9c73b9d982ae4 Mon Sep 17 00:00:00 2001
+From: Ulrich Drepper <drepper@gmail.com>
+Date: Fri, 27 Jan 2012 15:05:19 -0500
+Subject: [PATCH] Sort objects before relocations
+
+---
+ ChangeLog | 11 ++++
+ Makeconfig | 6 ++
+ NEWS | 4 +-
+ elf/Makefile | 15 +++++-
+ elf/dl-open.c | 128 ++++++++++++++++++++++++++++++++++++------------
+ elf/tst-relsort1.c | 19 +++++++
+ elf/tst-relsort1mod1.c | 7 +++
+ elf/tst-relsort1mod2.c | 7 +++
+ 8 files changed, 160 insertions(+), 37 deletions(-)
+ create mode 100644 elf/tst-relsort1.c
+ create mode 100644 elf/tst-relsort1mod1.c
+ create mode 100644 elf/tst-relsort1mod2.c
+
+#diff --git a/ChangeLog b/ChangeLog
+#index 24c9550..2efe17a 100644
+#--- a/ChangeLog
+#+++ b/ChangeLog
+#@@ -1,3 +1,14 @@
+#+2012-01-27 Ulrich Drepper <drepper@gmail.com>
+#+
+#+ [BZ #13618]
+#+ * elf/dl-open.c (dl_open_worker): Sort objects by dependency before
+#+ relocation.
+#+ * Makeconfig (libm): Define.
+#+ * elf/Makefile: Add rules to build and run tst-relsort1.
+#+ * elf/tst-relsort1.c: New file.
+#+ * elf/tst-relsort1mod1.c: New file.
+#+ * elf/tst-relsort1mod2.c: New file.
+#+
+ 2012-01-26 Joseph Myers <joseph@codesourcery.com>
+
+ * crypt/md5.h: Remove __STDC__ conditionals.
+diff --git a/Makeconfig b/Makeconfig
+index 2db2821..68547b2 100644
+--- a/Makeconfig
++++ b/Makeconfig
+@@ -900,6 +900,12 @@ else
+ libdl = $(common-objpfx)dlfcn/libdl.a
+ endif
+
++ifeq ($(build-shared),yes)
++libm = $(common-objpfx)math/libm.so$(libm.so-version)
++else
++libm = $(common-objpfx)math/libm.a
++endif
++
+ # These are the subdirectories containing the library source. The order
+ # is more or less arbitrary. The sorting step will take care of the
+ # dependencies.
+#diff --git a/NEWS b/NEWS
+#index 42e09c1..3b502b7 100644
+#--- a/NEWS
+#+++ b/NEWS
+#@@ -1,4 +1,4 @@
+#-GNU C Library NEWS -- history of user-visible changes. 2012-1-26
+#+GNU C Library NEWS -- history of user-visible changes. 2012-1-27
+ #Copyright (C) 1992-2009, 2010, 2011, 2012 Free Software Foundation, Inc.
+ #See the end for copying conditions.
+#
+#@@ -10,7 +10,7 @@ Version 2.16
+ #* The following bugs are resolved with this release:
+#
+ #13525, 13526, 13527, 13528, 13529, 13531, 13532, 13533, 13547, 13530,
+#- 13551, 13552, 13553, 13555, 13559, 13583
+#+ 13551, 13552, 13553, 13555, 13559, 13583, 13618
+#
+ #* ISO C11 support:
+#
+diff --git a/elf/Makefile b/elf/Makefile
+index 052e763..3f1772a 100644
+--- a/elf/Makefile
++++ b/elf/Makefile
+@@ -124,7 +124,8 @@ distribute := rtld-Rules \
+ tst-initordera1.c tst-initordera2.c tst-initorderb1.c \
+ tst-initorderb2.c tst-initordera3.c tst-initordera4.c \
+ tst-initorder.c \
+- tst-initorder2.c
++ tst-initorder2.c \
++ tst-relsort1.c tst-relsort1mod1.c tst-relsort1mod2.c
+
+ CFLAGS-dl-runtime.c = -fexceptions -fasynchronous-unwind-tables
+ CFLAGS-dl-lookup.c = -fexceptions -fasynchronous-unwind-tables
+@@ -227,7 +228,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
+ tst-audit1 tst-audit2 \
+ tst-stackguard1 tst-addr1 tst-thrlock \
+ tst-unique1 tst-unique2 tst-unique3 tst-unique4 \
+- tst-initorder tst-initorder2
++ tst-initorder tst-initorder2 tst-relsort1
+ # reldep9
+ test-srcs = tst-pathopt
+ selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
+@@ -290,7 +291,9 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
+ tst-initordera1 tst-initorderb1 \
+ tst-initordera2 tst-initorderb2 \
+ tst-initordera3 tst-initordera4 \
+- tst-initorder2a tst-initorder2b tst-initorder2c tst-initorder2d
++ tst-initorder2a tst-initorder2b tst-initorder2c \
++ tst-initorder2d \
++ tst-relsort1mod1 tst-relsort1mod2
+ ifeq (yes,$(have-initfini-array))
+ modules-names += tst-array2dep tst-array5dep
+ endif
+@@ -1195,3 +1198,9 @@ CFLAGS-tst-auditmod6b.c += $(AVX-CFLAGS)
+ CFLAGS-tst-auditmod6c.c += $(AVX-CFLAGS)
+ CFLAGS-tst-auditmod7b.c += $(AVX-CFLAGS)
+ endif
++
++$(objpfx)tst-relsort1: $(libdl)
++$(objpfx)tst-relsort1mod1.so: $(libm) $(objpfx)tst-relsort1mod2.so
++$(objpfx)tst-relsort1mod2.so: $(libm)
++$(objpfx)tst-relsort1.out: $(objpfx)tst-relsort1mod1.so \
++ $(objpfx)tst-relsort1mod2.so
+diff --git a/elf/dl-open.c b/elf/dl-open.c
+index a0b5c50..a56bdc1 100644
+--- a/elf/dl-open.c
++++ b/elf/dl-open.c
+@@ -1,5 +1,5 @@
+ /* Load a shared object at runtime, relocate it, and run its initializer.
+- Copyright (C) 1996-2007, 2009, 2010, 2011 Free Software Foundation, Inc.
++ Copyright (C) 1996-2007, 2009, 2010, 2011, 2012 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
+@@ -302,45 +302,109 @@ dl_open_worker (void *a)
+ if (GLRO(dl_lazy))
+ reloc_mode |= mode & RTLD_LAZY;
+
+- /* Relocate the objects loaded. We do this in reverse order so that copy
+- relocs of earlier objects overwrite the data written by later objects. */
+-
++ /* Sort the objects by dependency for the relocation process. This
++ allows IFUNC relocations to work and it also means copy
++ relocation of dependencies are if necessary overwritten. */
++ size_t nmaps = 0;
+ struct link_map *l = new;
+- while (l->l_next)
+- l = l->l_next;
+- while (1)
++ do
++ {
++ if (! l->l_real->l_relocated)
++ ++nmaps;
++ l = l->l_next;
++ }
++ while (l != NULL);
++ struct link_map *maps[nmaps];
++ nmaps = 0;
++ l = new;
++ do
+ {
+ if (! l->l_real->l_relocated)
++ maps[nmaps++] = l;
++ l = l->l_next;
++ }
++ while (l != NULL);
++ if (nmaps > 1)
++ {
++ char seen[nmaps];
++ memset (seen, '\0', nmaps);
++ size_t i = 0;
++ while (1)
+ {
+-#ifdef SHARED
+- if (__builtin_expect (GLRO(dl_profile) != NULL, 0))
++ ++seen[i];
++ struct link_map *thisp = maps[i];
++
++ /* Find the last object in the list for which the current one is
++ a dependency and move the current object behind the object
++ with the dependency. */
++ size_t k = nmaps - 1;
++ while (k > i)
+ {
+- /* If this here is the shared object which we want to profile
+- make sure the profile is started. We can find out whether
+- this is necessary or not by observing the `_dl_profile_map'
+- variable. If was NULL but is not NULL afterwars we must
+- start the profiling. */
+- struct link_map *old_profile_map = GL(dl_profile_map);
++ struct link_map **runp = maps[k]->l_initfini;
++ if (runp != NULL)
++ /* Look through the dependencies of the object. */
++ while (*runp != NULL)
++ if (__builtin_expect (*runp++ == thisp, 0))
++ {
++ /* Move the current object to the back past the last
++ object with it as the dependency. */
++ memmove (&maps[i], &maps[i + 1],
++ (k - i) * sizeof (maps[0]));
++ maps[k] = thisp;
++
++ if (seen[i + 1] > 1)
++ {
++ ++i;
++ goto next_clear;
++ }
++
++ char this_seen = seen[i];
++ memmove (&seen[i], &seen[i + 1],
++ (k - i) * sizeof (seen[0]));
++ seen[k] = this_seen;
++
++ goto next;
++ }
++
++ --k;
++ }
+
+- _dl_relocate_object (l, l->l_scope, reloc_mode | RTLD_LAZY, 1);
++ if (++i == nmaps)
++ break;
++ next_clear:
++ memset (&seen[i], 0, (nmaps - i) * sizeof (seen[0]));
++ next:;
++ }
++ }
+
+- if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
+- {
+- /* We must prepare the profiling. */
+- _dl_start_profile ();
++ for (size_t i = nmaps; i-- > 0; )
++ {
++ l = maps[i];
+
+- /* Prevent unloading the object. */
+- GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE;
+- }
++#ifdef SHARED
++ if (__builtin_expect (GLRO(dl_profile) != NULL, 0))
++ {
++ /* If this here is the shared object which we want to profile
++ make sure the profile is started. We can find out whether
++ this is necessary or not by observing the `_dl_profile_map'
++ variable. If it was NULL but is not NULL afterwars we must
++ start the profiling. */
++ struct link_map *old_profile_map = GL(dl_profile_map);
++
++ _dl_relocate_object (l, l->l_scope, reloc_mode | RTLD_LAZY, 1);
++
++ if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
++ {
++ /* We must prepare the profiling. */
++ _dl_start_profile ();
++
++ /* Prevent unloading the object. */
++ GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE;
+ }
+- else
+-#endif
+- _dl_relocate_object (l, l->l_scope, reloc_mode, 0);
+ }
+-
+- if (l == new)
+- break;
+- l = l->l_prev;
++ else
++#endif
++ _dl_relocate_object (l, l->l_scope, reloc_mode, 0);
+ }
+
+ /* If the file is not loaded now as a dependency, add the search
+diff --git a/elf/tst-relsort1.c b/elf/tst-relsort1.c
+new file mode 100644
+index 0000000..972100c
+--- /dev/null
++++ b/elf/tst-relsort1.c
+@@ -0,0 +1,19 @@
++#include <dlfcn.h>
++#include <stdio.h>
++
++
++static int
++do_test ()
++{
++ const char lib[] = "$ORIGIN/tst-relsort1mod1.so";
++ void *h = dlopen (lib, RTLD_NOW);
++ if (h == NULL)
++ {
++ puts (dlerror ());
++ return 1;
++ }
++ return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+diff --git a/elf/tst-relsort1mod1.c b/elf/tst-relsort1mod1.c
+new file mode 100644
+index 0000000..9e4a943
+--- /dev/null
++++ b/elf/tst-relsort1mod1.c
+@@ -0,0 +1,7 @@
++extern int foo (double);
++
++int
++bar (void)
++{
++ return foo (1.2);
++}
+diff --git a/elf/tst-relsort1mod2.c b/elf/tst-relsort1mod2.c
+new file mode 100644
+index 0000000..a2c3e55
+--- /dev/null
++++ b/elf/tst-relsort1mod2.c
+@@ -0,0 +1,7 @@
++#include <math.h>
++
++int
++foo (double d)
++{
++ return floor (d) != 0.0;
++}
+--
+1.7.3.4
+
diff --git a/source/l/glibc/glibc.strtod.CVE-2012-3480.diff b/source/l/glibc/glibc.strtod.CVE-2012-3480.diff
new file mode 100644
index 00000000..7a7bdeb7
--- /dev/null
+++ b/source/l/glibc/glibc.strtod.CVE-2012-3480.diff
@@ -0,0 +1,407 @@
+From 8a780f7f68a1cd4c575bb17973a9e18826b05ef9 Mon Sep 17 00:00:00 2001
+From: Joseph Myers <joseph@codesourcery.com>
+Date: Mon, 27 Aug 2012 15:59:24 +0000
+Subject: [PATCH 1/1] Fix strtod integer/buffer overflow (bug 14459).
+ (cherry picked from commit d6e70f4368533224e66d10b7f2126b899a3fd5e4)
+
+Conflicts:
+
+ ChangeLog
+ NEWS
+ stdlib/Makefile
+---
+ ChangeLog | 17 +++++
+ NEWS | 2 +-
+ stdlib/Makefile | 2 +-
+ stdlib/strtod_l.c | 142 ++++++++++++++++++++++++++++++++---------
+ stdlib/tst-strtod-overflow.c | 48 ++++++++++++++
+ 5 files changed, 178 insertions(+), 33 deletions(-)
+ create mode 100644 stdlib/tst-strtod-overflow.c
+
+diff --git a/stdlib/Makefile b/stdlib/Makefile
+index 04c6ac5..b55f573 100644
+--- a/stdlib/Makefile
++++ b/stdlib/Makefile
+@@ -71,7 +71,7 @@ tests := tst-strtol tst-strtod testmb testrand testsort testdiv \
+ tst-atof1 tst-atof2 tst-strtod2 tst-strtod3 tst-rand48-2 \
+ tst-makecontext tst-strtod4 tst-strtod5 tst-qsort2 \
+ tst-makecontext2 tst-strtod6 tst-unsetenv1 \
+- tst-makecontext3 bug-getcontext
++ tst-makecontext3 bug-getcontext tst-strtod-overflow
+
+ include ../Makeconfig
+
+diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c
+index f24d4de..0deaebf 100644
+--- a/stdlib/strtod_l.c
++++ b/stdlib/strtod_l.c
+@@ -62,6 +62,7 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **,
+ #include <math.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <stdint.h>
+
+ /* The gmp headers need some configuration frobs. */
+ #define HAVE_ALLOCA 1
+@@ -74,7 +75,6 @@ extern unsigned long long int ____strtoull_l_internal (const char *, char **,
+ #include "longlong.h"
+ #include "fpioconst.h"
+
+-#define NDEBUG 1
+ #include <assert.h>
+
+
+@@ -176,19 +176,19 @@ extern const mp_limb_t _tens_in_limb[MAX_DIG_PER_LIMB + 1];
+ /* Return a floating point number of the needed type according to the given
+ multi-precision number after possible rounding. */
+ static FLOAT
+-round_and_return (mp_limb_t *retval, int exponent, int negative,
++round_and_return (mp_limb_t *retval, intmax_t exponent, int negative,
+ mp_limb_t round_limb, mp_size_t round_bit, int more_bits)
+ {
+ if (exponent < MIN_EXP - 1)
+ {
+- mp_size_t shift = MIN_EXP - 1 - exponent;
+-
+- if (shift > MANT_DIG)
++ if (exponent < MIN_EXP - 1 - MANT_DIG)
+ {
+ __set_errno (ERANGE);
+ return 0.0;
+ }
+
++ mp_size_t shift = MIN_EXP - 1 - exponent;
++
+ more_bits |= (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0;
+ if (shift == MANT_DIG)
+ /* This is a special case to handle the very seldom case where
+@@ -235,6 +235,9 @@ round_and_return (mp_limb_t *retval, int exponent, int negative,
+ __set_errno (ERANGE);
+ }
+
++ if (exponent > MAX_EXP)
++ goto overflow;
++
+ if ((round_limb & (((mp_limb_t) 1) << round_bit)) != 0
+ && (more_bits || (retval[0] & 1) != 0
+ || (round_limb & ((((mp_limb_t) 1) << round_bit) - 1)) != 0))
+@@ -260,6 +263,7 @@ round_and_return (mp_limb_t *retval, int exponent, int negative,
+ }
+
+ if (exponent > MAX_EXP)
++ overflow:
+ return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
+
+ return MPN2FLOAT (retval, exponent, negative);
+@@ -273,7 +277,7 @@ round_and_return (mp_limb_t *retval, int exponent, int negative,
+ factor for the resulting number (see code) multiply by it. */
+ static const STRING_TYPE *
+ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+- int *exponent
++ intmax_t *exponent
+ #ifndef USE_WIDE_CHAR
+ , const char *decimal, size_t decimal_len, const char *thousands
+ #endif
+@@ -303,6 +307,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+ cy += __mpn_add_1 (n, n, *nsize, low);
+ if (cy != 0)
+ {
++ assert (*nsize < MPNSIZE);
+ n[*nsize] = cy;
+ ++(*nsize);
+ }
+@@ -337,7 +342,7 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+ }
+ while (--digcnt > 0);
+
+- if (*exponent > 0 && cnt + *exponent <= MAX_DIG_PER_LIMB)
++ if (*exponent > 0 && *exponent <= MAX_DIG_PER_LIMB - cnt)
+ {
+ low *= _tens_in_limb[*exponent];
+ start = _tens_in_limb[cnt + *exponent];
+@@ -357,7 +362,10 @@ str_to_mpn (const STRING_TYPE *str, int digcnt, mp_limb_t *n, mp_size_t *nsize,
+ cy = __mpn_mul_1 (n, n, *nsize, start);
+ cy += __mpn_add_1 (n, n, *nsize, low);
+ if (cy != 0)
+- n[(*nsize)++] = cy;
++ {
++ assert (*nsize < MPNSIZE);
++ n[(*nsize)++] = cy;
++ }
+ }
+
+ return str;
+@@ -415,7 +423,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ {
+ int negative; /* The sign of the number. */
+ MPN_VAR (num); /* MP representation of the number. */
+- int exponent; /* Exponent of the number. */
++ intmax_t exponent; /* Exponent of the number. */
+
+ /* Numbers starting `0X' or `0x' have to be processed with base 16. */
+ int base = 10;
+@@ -437,7 +445,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ /* Points at the character following the integer and fractional digits. */
+ const STRING_TYPE *expp;
+ /* Total number of digit and number of digits in integer part. */
+- int dig_no, int_no, lead_zero;
++ size_t dig_no, int_no, lead_zero;
+ /* Contains the last character read. */
+ CHAR_TYPE c;
+
+@@ -769,7 +777,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ are all or any is really a fractional digit will be decided
+ later. */
+ int_no = dig_no;
+- lead_zero = int_no == 0 ? -1 : 0;
++ lead_zero = int_no == 0 ? (size_t) -1 : 0;
+
+ /* Read the fractional digits. A special case are the 'american
+ style' numbers like `16.' i.e. with decimal point but without
+@@ -791,12 +799,13 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ (base == 16 && ({ CHAR_TYPE lo = TOLOWER (c);
+ lo >= L_('a') && lo <= L_('f'); })))
+ {
+- if (c != L_('0') && lead_zero == -1)
++ if (c != L_('0') && lead_zero == (size_t) -1)
+ lead_zero = dig_no - int_no;
+ ++dig_no;
+ c = *++cp;
+ }
+ }
++ assert (dig_no <= (uintmax_t) INTMAX_MAX);
+
+ /* Remember start of exponent (if any). */
+ expp = cp;
+@@ -819,24 +828,80 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+
+ if (c >= L_('0') && c <= L_('9'))
+ {
+- int exp_limit;
++ intmax_t exp_limit;
+
+ /* Get the exponent limit. */
+ if (base == 16)
+- exp_limit = (exp_negative ?
+- -MIN_EXP + MANT_DIG + 4 * int_no :
+- MAX_EXP - 4 * int_no + 4 * lead_zero + 3);
++ {
++ if (exp_negative)
++ {
++ assert (int_no <= (uintmax_t) (INTMAX_MAX
++ + MIN_EXP - MANT_DIG) / 4);
++ exp_limit = -MIN_EXP + MANT_DIG + 4 * (intmax_t) int_no;
++ }
++ else
++ {
++ if (int_no)
++ {
++ assert (lead_zero == 0
++ && int_no <= (uintmax_t) INTMAX_MAX / 4);
++ exp_limit = MAX_EXP - 4 * (intmax_t) int_no + 3;
++ }
++ else if (lead_zero == (size_t) -1)
++ {
++ /* The number is zero and this limit is
++ arbitrary. */
++ exp_limit = MAX_EXP + 3;
++ }
++ else
++ {
++ assert (lead_zero
++ <= (uintmax_t) (INTMAX_MAX - MAX_EXP - 3) / 4);
++ exp_limit = (MAX_EXP
++ + 4 * (intmax_t) lead_zero
++ + 3);
++ }
++ }
++ }
+ else
+- exp_limit = (exp_negative ?
+- -MIN_10_EXP + MANT_DIG + int_no :
+- MAX_10_EXP - int_no + lead_zero + 1);
++ {
++ if (exp_negative)
++ {
++ assert (int_no
++ <= (uintmax_t) (INTMAX_MAX + MIN_10_EXP - MANT_DIG));
++ exp_limit = -MIN_10_EXP + MANT_DIG + (intmax_t) int_no;
++ }
++ else
++ {
++ if (int_no)
++ {
++ assert (lead_zero == 0
++ && int_no <= (uintmax_t) INTMAX_MAX);
++ exp_limit = MAX_10_EXP - (intmax_t) int_no + 1;
++ }
++ else if (lead_zero == (size_t) -1)
++ {
++ /* The number is zero and this limit is
++ arbitrary. */
++ exp_limit = MAX_10_EXP + 1;
++ }
++ else
++ {
++ assert (lead_zero
++ <= (uintmax_t) (INTMAX_MAX - MAX_10_EXP - 1));
++ exp_limit = MAX_10_EXP + (intmax_t) lead_zero + 1;
++ }
++ }
++ }
++
++ if (exp_limit < 0)
++ exp_limit = 0;
+
+ do
+ {
+- exponent *= 10;
+- exponent += c - L_('0');
+-
+- if (__builtin_expect (exponent > exp_limit, 0))
++ if (__builtin_expect ((exponent > exp_limit / 10
++ || (exponent == exp_limit / 10
++ && c - L_('0') > exp_limit % 10)), 0))
+ /* The exponent is too large/small to represent a valid
+ number. */
+ {
+@@ -845,7 +910,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ /* We have to take care for special situation: a joker
+ might have written "0.0e100000" which is in fact
+ zero. */
+- if (lead_zero == -1)
++ if (lead_zero == (size_t) -1)
+ result = negative ? -0.0 : 0.0;
+ else
+ {
+@@ -864,6 +929,9 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ /* NOTREACHED */
+ }
+
++ exponent *= 10;
++ exponent += c - L_('0');
++
+ c = *++cp;
+ }
+ while (c >= L_('0') && c <= L_('9'));
+@@ -932,7 +1000,14 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ }
+ #endif
+ startp += lead_zero + decimal_len;
+- exponent -= base == 16 ? 4 * lead_zero : lead_zero;
++ assert (lead_zero <= (base == 16
++ ? (uintmax_t) INTMAX_MAX / 4
++ : (uintmax_t) INTMAX_MAX));
++ assert (lead_zero <= (base == 16
++ ? ((uintmax_t) exponent
++ - (uintmax_t) INTMAX_MIN) / 4
++ : ((uintmax_t) exponent - (uintmax_t) INTMAX_MIN)));
++ exponent -= base == 16 ? 4 * (intmax_t) lead_zero : (intmax_t) lead_zero;
+ dig_no -= lead_zero;
+ }
+
+@@ -974,7 +1049,10 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ }
+
+ /* Adjust the exponent for the bits we are shifting in. */
+- exponent += bits - 1 + (int_no - 1) * 4;
++ assert (int_no <= (uintmax_t) (exponent < 0
++ ? (INTMAX_MAX - bits + 1) / 4
++ : (INTMAX_MAX - exponent - bits + 1) / 4));
++ exponent += bits - 1 + ((intmax_t) int_no - 1) * 4;
+
+ while (--dig_no > 0 && idx >= 0)
+ {
+@@ -1014,13 +1092,15 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ really integer digits or belong to the fractional part; i.e. we normalize
+ 123e-2 to 1.23. */
+ {
+- register int incr = (exponent < 0 ? MAX (-int_no, exponent)
+- : MIN (dig_no - int_no, exponent));
++ register intmax_t incr = (exponent < 0
++ ? MAX (-(intmax_t) int_no, exponent)
++ : MIN ((intmax_t) dig_no - (intmax_t) int_no,
++ exponent));
+ int_no += incr;
+ exponent -= incr;
+ }
+
+- if (__builtin_expect (int_no + exponent > MAX_10_EXP + 1, 0))
++ if (__builtin_expect (exponent > MAX_10_EXP + 1 - (intmax_t) int_no, 0))
+ {
+ __set_errno (ERANGE);
+ return negative ? -FLOAT_HUGE_VAL : FLOAT_HUGE_VAL;
+@@ -1205,7 +1285,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ digits we should have enough bits for the result. The remaining
+ decimal digits give us the information that more bits are following.
+ This can be used while rounding. (Two added as a safety margin.) */
+- if (dig_no - int_no > (MANT_DIG - bits + 2) / 3 + 2)
++ if ((intmax_t) dig_no > (intmax_t) int_no + (MANT_DIG - bits + 2) / 3 + 2)
+ {
+ dig_no = int_no + (MANT_DIG - bits + 2) / 3 + 2;
+ more_bits = 1;
+@@ -1213,7 +1293,7 @@ ____STRTOF_INTERNAL (nptr, endptr, group, loc)
+ else
+ more_bits = 0;
+
+- neg_exp = dig_no - int_no - exponent;
++ neg_exp = (intmax_t) dig_no - (intmax_t) int_no - exponent;
+
+ /* Construct the denominator. */
+ densize = 0;
+diff --git a/stdlib/tst-strtod-overflow.c b/stdlib/tst-strtod-overflow.c
+new file mode 100644
+index 0000000..668d55b
+--- /dev/null
++++ b/stdlib/tst-strtod-overflow.c
+@@ -0,0 +1,48 @@
++/* Test for integer/buffer overflow in strtod.
++ Copyright (C) 2012 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, see
++ <http://www.gnu.org/licenses/>. */
++
++#include <stdio.h>
++#include <stdlib.h>
++#include <string.h>
++
++#define EXPONENT "e-2147483649"
++#define SIZE 214748364
++
++static int
++do_test (void)
++{
++ char *p = malloc (1 + SIZE + sizeof (EXPONENT));
++ if (p == NULL)
++ {
++ puts ("malloc failed, cannot test for overflow");
++ return 0;
++ }
++ p[0] = '1';
++ memset (p + 1, '0', SIZE);
++ memcpy (p + 1 + SIZE, EXPONENT, sizeof (EXPONENT));
++ double d = strtod (p, NULL);
++ if (d != 0)
++ {
++ printf ("strtod returned wrong value: %a\n", d);
++ return 1;
++ }
++ return 0;
++}
++
++#define TEST_FUNCTION do_test ()
++#include "../test-skeleton.c"
+--
+1.7.3.4
diff --git a/source/l/glibc/slack-desc.glibc-zoneinfo b/source/l/glibc/slack-desc.glibc-zoneinfo
index 24dfd0e9..69420f78 100644
--- a/source/l/glibc/slack-desc.glibc-zoneinfo
+++ b/source/l/glibc/slack-desc.glibc-zoneinfo
@@ -12,7 +12,7 @@ glibc-zoneinfo: This package allows you to configure your time zone.
glibc-zoneinfo:
glibc-zoneinfo: This timezone database comes from the tzdata and tzcode packages by
glibc-zoneinfo: Arthur David Olson et.al. The latest version and more information
-glibc-zoneinfo: may be found at ftp://elsie.nci.nih.gov/pub/
+glibc-zoneinfo: may be found at: http://www.iana.org/time-zones
glibc-zoneinfo:
glibc-zoneinfo: Use the timeconfig utility to set your local time zone.
glibc-zoneinfo:
diff --git a/source/l/glibc/slack-desc.glibc-zoneinfo.olson b/source/l/glibc/slack-desc.glibc-zoneinfo.olson
new file mode 100644
index 00000000..24dfd0e9
--- /dev/null
+++ b/source/l/glibc/slack-desc.glibc-zoneinfo.olson
@@ -0,0 +1,19 @@
+# HOW TO EDIT THIS FILE:
+# The "handy ruler" below makes it easier to edit a package description. Line
+# up the first '|' above the ':' following the base package name, and the '|' on
+# the right side marks the last column you can put a character in. You must make
+# exactly 11 lines for the formatting to be correct. It's also customary to
+# leave one space after the ':'.
+
+ |-----handy-ruler------------------------------------------------------|
+glibc-zoneinfo: glibc-zoneinfo (timezone database)
+glibc-zoneinfo:
+glibc-zoneinfo: This package allows you to configure your time zone.
+glibc-zoneinfo:
+glibc-zoneinfo: This timezone database comes from the tzdata and tzcode packages by
+glibc-zoneinfo: Arthur David Olson et.al. The latest version and more information
+glibc-zoneinfo: may be found at ftp://elsie.nci.nih.gov/pub/
+glibc-zoneinfo:
+glibc-zoneinfo: Use the timeconfig utility to set your local time zone.
+glibc-zoneinfo:
+glibc-zoneinfo:
diff --git a/source/l/glibc/timezone-scripts/timeconfig b/source/l/glibc/timezone-scripts/timeconfig
index 33dc89d4..56e786c3 100644
--- a/source/l/glibc/timezone-scripts/timeconfig
+++ b/source/l/glibc/timezone-scripts/timeconfig
@@ -165,6 +165,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"Africa/Gaborone" " " \
"Africa/Harare" " " \
"Africa/Johannesburg" " " \
+"Africa/Juba" " " \
"Africa/Kampala" " " \
"Africa/Khartoum" " " \
"Africa/Kigali" " " \
@@ -215,6 +216,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"America/Atikokan" " " \
"America/Atka" " " \
"America/Bahia" " " \
+"America/Bahia_Banderas" " " \
"America/Barbados" " " \
"America/Belem" " " \
"America/Belize" " " \
@@ -278,19 +280,23 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"America/Kentucky/Louisville" " " \
"America/Kentucky/Monticello" " " \
"America/Knox_IN" " " \
+"America/Kralendijk" " " \
"America/La_Paz" " " \
"America/Lima" " " \
"America/Los_Angeles" " " \
"America/Louisville" " " \
+"America/Lower_Princes" " " \
"America/Maceio" " " \
"America/Managua" " " \
"America/Manaus" " " \
"America/Marigot" " " \
"America/Martinique" " " \
+"America/Matamoros" " " \
"America/Mazatlan" " " \
"America/Mendoza" " " \
"America/Menominee" " " \
"America/Merida" " " \
+"America/Metlakatla" " " \
"America/Mexico_City" " " \
"America/Miquelon" " " \
"America/Moncton" " " \
@@ -303,8 +309,10 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"America/Nipigon" " " \
"America/Nome" " " \
"America/Noronha" " " \
+"America/North_Dakota/Beulah" " " \
"America/North_Dakota/Center" " " \
"America/North_Dakota/New_Salem" " " \
+"America/Ojinaga" " " \
"America/Panama" " " \
"America/Pangnirtung" " " \
"America/Paramaribo" " " \
@@ -321,12 +329,14 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"America/Resolute" " " \
"America/Rio_Branco" " " \
"America/Rosario" " " \
+"America/Santa_Isabel" " " \
"America/Santarem" " " \
"America/Santiago" " " \
"America/Santo_Domingo" " " \
"America/Sao_Paulo" " " \
"America/Scoresbysund" " " \
"America/Shiprock" " " \
+"America/Sitka" " " \
"America/St_Barthelemy" " " \
"America/St_Johns" " " \
"America/St_Kitts" " " \
@@ -349,6 +359,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"Antarctica/Casey" " " \
"Antarctica/Davis" " " \
"Antarctica/DumontDUrville" " " \
+"Antarctica/Macquarie" " " \
"Antarctica/Mawson" " " \
"Antarctica/McMurdo" " " \
"Antarctica/Palmer" " " \
@@ -385,6 +396,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"Asia/Dushanbe" " " \
"Asia/Gaza" " " \
"Asia/Harbin" " " \
+"Asia/Hebron" " " \
"Asia/Ho_Chi_Minh" " " \
"Asia/Hong_Kong" " " \
"Asia/Hovd" " " \
@@ -411,6 +423,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"Asia/Manila" " " \
"Asia/Muscat" " " \
"Asia/Nicosia" " " \
+"Asia/Novokuznetsk" " " \
"Asia/Novosibirsk" " " \
"Asia/Omsk" " " \
"Asia/Oral" " " \
@@ -643,6 +656,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"Pacific/Apia" " " \
"Pacific/Auckland" " " \
"Pacific/Chatham" " " \
+"Pacific/Chuuk" " " \
"Pacific/Easter" " " \
"Pacific/Efate" " " \
"Pacific/Enderbury" " " \
@@ -668,6 +682,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"Pacific/Pago_Pago" " " \
"Pacific/Palau" " " \
"Pacific/Pitcairn" " " \
+"Pacific/Pohnpei" " " \
"Pacific/Ponape" " " \
"Pacific/Port_Moresby" " " \
"Pacific/Rarotonga" " " \
@@ -718,6 +733,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/Africa/Gaborone" " " \
"posix/Africa/Harare" " " \
"posix/Africa/Johannesburg" " " \
+"posix/Africa/Juba" " " \
"posix/Africa/Kampala" " " \
"posix/Africa/Khartoum" " " \
"posix/Africa/Kigali" " " \
@@ -768,6 +784,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/America/Atikokan" " " \
"posix/America/Atka" " " \
"posix/America/Bahia" " " \
+"posix/America/Bahia_Banderas" " " \
"posix/America/Barbados" " " \
"posix/America/Belem" " " \
"posix/America/Belize" " " \
@@ -831,19 +848,23 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/America/Kentucky/Louisville" " " \
"posix/America/Kentucky/Monticello" " " \
"posix/America/Knox_IN" " " \
+"posix/America/Kralendijk" " " \
"posix/America/La_Paz" " " \
"posix/America/Lima" " " \
"posix/America/Los_Angeles" " " \
"posix/America/Louisville" " " \
+"posix/America/Lower_Princes" " " \
"posix/America/Maceio" " " \
"posix/America/Managua" " " \
"posix/America/Manaus" " " \
"posix/America/Marigot" " " \
"posix/America/Martinique" " " \
+"posix/America/Matamoros" " " \
"posix/America/Mazatlan" " " \
"posix/America/Mendoza" " " \
"posix/America/Menominee" " " \
"posix/America/Merida" " " \
+"posix/America/Metlakatla" " " \
"posix/America/Mexico_City" " " \
"posix/America/Miquelon" " " \
"posix/America/Moncton" " " \
@@ -856,8 +877,10 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/America/Nipigon" " " \
"posix/America/Nome" " " \
"posix/America/Noronha" " " \
+"posix/America/North_Dakota/Beulah" " " \
"posix/America/North_Dakota/Center" " " \
"posix/America/North_Dakota/New_Salem" " " \
+"posix/America/Ojinaga" " " \
"posix/America/Panama" " " \
"posix/America/Pangnirtung" " " \
"posix/America/Paramaribo" " " \
@@ -874,12 +897,14 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/America/Resolute" " " \
"posix/America/Rio_Branco" " " \
"posix/America/Rosario" " " \
+"posix/America/Santa_Isabel" " " \
"posix/America/Santarem" " " \
"posix/America/Santiago" " " \
"posix/America/Santo_Domingo" " " \
"posix/America/Sao_Paulo" " " \
"posix/America/Scoresbysund" " " \
"posix/America/Shiprock" " " \
+"posix/America/Sitka" " " \
"posix/America/St_Barthelemy" " " \
"posix/America/St_Johns" " " \
"posix/America/St_Kitts" " " \
@@ -902,6 +927,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/Antarctica/Casey" " " \
"posix/Antarctica/Davis" " " \
"posix/Antarctica/DumontDUrville" " " \
+"posix/Antarctica/Macquarie" " " \
"posix/Antarctica/Mawson" " " \
"posix/Antarctica/McMurdo" " " \
"posix/Antarctica/Palmer" " " \
@@ -938,6 +964,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/Asia/Dushanbe" " " \
"posix/Asia/Gaza" " " \
"posix/Asia/Harbin" " " \
+"posix/Asia/Hebron" " " \
"posix/Asia/Ho_Chi_Minh" " " \
"posix/Asia/Hong_Kong" " " \
"posix/Asia/Hovd" " " \
@@ -964,6 +991,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/Asia/Manila" " " \
"posix/Asia/Muscat" " " \
"posix/Asia/Nicosia" " " \
+"posix/Asia/Novokuznetsk" " " \
"posix/Asia/Novosibirsk" " " \
"posix/Asia/Omsk" " " \
"posix/Asia/Oral" " " \
@@ -1196,6 +1224,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/Pacific/Apia" " " \
"posix/Pacific/Auckland" " " \
"posix/Pacific/Chatham" " " \
+"posix/Pacific/Chuuk" " " \
"posix/Pacific/Easter" " " \
"posix/Pacific/Efate" " " \
"posix/Pacific/Enderbury" " " \
@@ -1221,6 +1250,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"posix/Pacific/Pago_Pago" " " \
"posix/Pacific/Palau" " " \
"posix/Pacific/Pitcairn" " " \
+"posix/Pacific/Pohnpei" " " \
"posix/Pacific/Ponape" " " \
"posix/Pacific/Port_Moresby" " " \
"posix/Pacific/Rarotonga" " " \
@@ -1284,6 +1314,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/Africa/Gaborone" " " \
"right/Africa/Harare" " " \
"right/Africa/Johannesburg" " " \
+"right/Africa/Juba" " " \
"right/Africa/Kampala" " " \
"right/Africa/Khartoum" " " \
"right/Africa/Kigali" " " \
@@ -1334,6 +1365,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/America/Atikokan" " " \
"right/America/Atka" " " \
"right/America/Bahia" " " \
+"right/America/Bahia_Banderas" " " \
"right/America/Barbados" " " \
"right/America/Belem" " " \
"right/America/Belize" " " \
@@ -1397,19 +1429,23 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/America/Kentucky/Louisville" " " \
"right/America/Kentucky/Monticello" " " \
"right/America/Knox_IN" " " \
+"right/America/Kralendijk" " " \
"right/America/La_Paz" " " \
"right/America/Lima" " " \
"right/America/Los_Angeles" " " \
"right/America/Louisville" " " \
+"right/America/Lower_Princes" " " \
"right/America/Maceio" " " \
"right/America/Managua" " " \
"right/America/Manaus" " " \
"right/America/Marigot" " " \
"right/America/Martinique" " " \
+"right/America/Matamoros" " " \
"right/America/Mazatlan" " " \
"right/America/Mendoza" " " \
"right/America/Menominee" " " \
"right/America/Merida" " " \
+"right/America/Metlakatla" " " \
"right/America/Mexico_City" " " \
"right/America/Miquelon" " " \
"right/America/Moncton" " " \
@@ -1422,8 +1458,10 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/America/Nipigon" " " \
"right/America/Nome" " " \
"right/America/Noronha" " " \
+"right/America/North_Dakota/Beulah" " " \
"right/America/North_Dakota/Center" " " \
"right/America/North_Dakota/New_Salem" " " \
+"right/America/Ojinaga" " " \
"right/America/Panama" " " \
"right/America/Pangnirtung" " " \
"right/America/Paramaribo" " " \
@@ -1440,12 +1478,14 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/America/Resolute" " " \
"right/America/Rio_Branco" " " \
"right/America/Rosario" " " \
+"right/America/Santa_Isabel" " " \
"right/America/Santarem" " " \
"right/America/Santiago" " " \
"right/America/Santo_Domingo" " " \
"right/America/Sao_Paulo" " " \
"right/America/Scoresbysund" " " \
"right/America/Shiprock" " " \
+"right/America/Sitka" " " \
"right/America/St_Barthelemy" " " \
"right/America/St_Johns" " " \
"right/America/St_Kitts" " " \
@@ -1468,6 +1508,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/Antarctica/Casey" " " \
"right/Antarctica/Davis" " " \
"right/Antarctica/DumontDUrville" " " \
+"right/Antarctica/Macquarie" " " \
"right/Antarctica/Mawson" " " \
"right/Antarctica/McMurdo" " " \
"right/Antarctica/Palmer" " " \
@@ -1504,6 +1545,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/Asia/Dushanbe" " " \
"right/Asia/Gaza" " " \
"right/Asia/Harbin" " " \
+"right/Asia/Hebron" " " \
"right/Asia/Ho_Chi_Minh" " " \
"right/Asia/Hong_Kong" " " \
"right/Asia/Hovd" " " \
@@ -1530,6 +1572,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/Asia/Manila" " " \
"right/Asia/Muscat" " " \
"right/Asia/Nicosia" " " \
+"right/Asia/Novokuznetsk" " " \
"right/Asia/Novosibirsk" " " \
"right/Asia/Omsk" " " \
"right/Asia/Oral" " " \
@@ -1762,6 +1805,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/Pacific/Apia" " " \
"right/Pacific/Auckland" " " \
"right/Pacific/Chatham" " " \
+"right/Pacific/Chuuk" " " \
"right/Pacific/Easter" " " \
"right/Pacific/Efate" " " \
"right/Pacific/Enderbury" " " \
@@ -1787,6 +1831,7 @@ if [ "$COLOR" = "on" -o -r $TMP/SeTcolor -o "$T_PX" = "/" ]; then
"right/Pacific/Pago_Pago" " " \
"right/Pacific/Palau" " " \
"right/Pacific/Pitcairn" " " \
+"right/Pacific/Pohnpei" " " \
"right/Pacific/Ponape" " " \
"right/Pacific/Port_Moresby" " " \
"right/Pacific/Rarotonga" " " \
@@ -1889,6 +1934,7 @@ Africa/Freetown
Africa/Gaborone
Africa/Harare
Africa/Johannesburg
+Africa/Juba
Africa/Kampala
Africa/Khartoum
Africa/Kigali
@@ -1939,6 +1985,7 @@ America/Asuncion
America/Atikokan
America/Atka
America/Bahia
+America/Bahia_Banderas
America/Barbados
America/Belem
America/Belize
@@ -2002,19 +2049,23 @@ America/Juneau
America/Kentucky/Louisville
America/Kentucky/Monticello
America/Knox_IN
+America/Kralendijk
America/La_Paz
America/Lima
America/Los_Angeles
America/Louisville
+America/Lower_Princes
America/Maceio
America/Managua
America/Manaus
America/Marigot
America/Martinique
+America/Matamoros
America/Mazatlan
America/Mendoza
America/Menominee
America/Merida
+America/Metlakatla
America/Mexico_City
America/Miquelon
America/Moncton
@@ -2027,8 +2078,10 @@ America/New_York
America/Nipigon
America/Nome
America/Noronha
+America/North_Dakota/Beulah
America/North_Dakota/Center
America/North_Dakota/New_Salem
+America/Ojinaga
America/Panama
America/Pangnirtung
America/Paramaribo
@@ -2045,12 +2098,14 @@ America/Regina
America/Resolute
America/Rio_Branco
America/Rosario
+America/Santa_Isabel
America/Santarem
America/Santiago
America/Santo_Domingo
America/Sao_Paulo
America/Scoresbysund
America/Shiprock
+America/Sitka
America/St_Barthelemy
America/St_Johns
America/St_Kitts
@@ -2073,6 +2128,7 @@ America/Yellowknife
Antarctica/Casey
Antarctica/Davis
Antarctica/DumontDUrville
+Antarctica/Macquarie
Antarctica/Mawson
Antarctica/McMurdo
Antarctica/Palmer
@@ -2109,6 +2165,7 @@ Asia/Dubai
Asia/Dushanbe
Asia/Gaza
Asia/Harbin
+Asia/Hebron
Asia/Ho_Chi_Minh
Asia/Hong_Kong
Asia/Hovd
@@ -2135,6 +2192,7 @@ Asia/Makassar
Asia/Manila
Asia/Muscat
Asia/Nicosia
+Asia/Novokuznetsk
Asia/Novosibirsk
Asia/Omsk
Asia/Oral
@@ -2367,6 +2425,7 @@ PST8PDT
Pacific/Apia
Pacific/Auckland
Pacific/Chatham
+Pacific/Chuuk
Pacific/Easter
Pacific/Efate
Pacific/Enderbury
@@ -2392,6 +2451,7 @@ Pacific/Noumea
Pacific/Pago_Pago
Pacific/Palau
Pacific/Pitcairn
+Pacific/Pohnpei
Pacific/Ponape
Pacific/Port_Moresby
Pacific/Rarotonga
@@ -2442,6 +2502,7 @@ posix/Africa/Freetown
posix/Africa/Gaborone
posix/Africa/Harare
posix/Africa/Johannesburg
+posix/Africa/Juba
posix/Africa/Kampala
posix/Africa/Khartoum
posix/Africa/Kigali
@@ -2492,6 +2553,7 @@ posix/America/Asuncion
posix/America/Atikokan
posix/America/Atka
posix/America/Bahia
+posix/America/Bahia_Banderas
posix/America/Barbados
posix/America/Belem
posix/America/Belize
@@ -2555,19 +2617,23 @@ posix/America/Juneau
posix/America/Kentucky/Louisville
posix/America/Kentucky/Monticello
posix/America/Knox_IN
+posix/America/Kralendijk
posix/America/La_Paz
posix/America/Lima
posix/America/Los_Angeles
posix/America/Louisville
+posix/America/Lower_Princes
posix/America/Maceio
posix/America/Managua
posix/America/Manaus
posix/America/Marigot
posix/America/Martinique
+posix/America/Matamoros
posix/America/Mazatlan
posix/America/Mendoza
posix/America/Menominee
posix/America/Merida
+posix/America/Metlakatla
posix/America/Mexico_City
posix/America/Miquelon
posix/America/Moncton
@@ -2580,8 +2646,10 @@ posix/America/New_York
posix/America/Nipigon
posix/America/Nome
posix/America/Noronha
+posix/America/North_Dakota/Beulah
posix/America/North_Dakota/Center
posix/America/North_Dakota/New_Salem
+posix/America/Ojinaga
posix/America/Panama
posix/America/Pangnirtung
posix/America/Paramaribo
@@ -2598,12 +2666,14 @@ posix/America/Regina
posix/America/Resolute
posix/America/Rio_Branco
posix/America/Rosario
+posix/America/Santa_Isabel
posix/America/Santarem
posix/America/Santiago
posix/America/Santo_Domingo
posix/America/Sao_Paulo
posix/America/Scoresbysund
posix/America/Shiprock
+posix/America/Sitka
posix/America/St_Barthelemy
posix/America/St_Johns
posix/America/St_Kitts
@@ -2626,6 +2696,7 @@ posix/America/Yellowknife
posix/Antarctica/Casey
posix/Antarctica/Davis
posix/Antarctica/DumontDUrville
+posix/Antarctica/Macquarie
posix/Antarctica/Mawson
posix/Antarctica/McMurdo
posix/Antarctica/Palmer
@@ -2662,6 +2733,7 @@ posix/Asia/Dubai
posix/Asia/Dushanbe
posix/Asia/Gaza
posix/Asia/Harbin
+posix/Asia/Hebron
posix/Asia/Ho_Chi_Minh
posix/Asia/Hong_Kong
posix/Asia/Hovd
@@ -2688,6 +2760,7 @@ posix/Asia/Makassar
posix/Asia/Manila
posix/Asia/Muscat
posix/Asia/Nicosia
+posix/Asia/Novokuznetsk
posix/Asia/Novosibirsk
posix/Asia/Omsk
posix/Asia/Oral
@@ -2920,6 +2993,7 @@ posix/PST8PDT
posix/Pacific/Apia
posix/Pacific/Auckland
posix/Pacific/Chatham
+posix/Pacific/Chuuk
posix/Pacific/Easter
posix/Pacific/Efate
posix/Pacific/Enderbury
@@ -2945,6 +3019,7 @@ posix/Pacific/Noumea
posix/Pacific/Pago_Pago
posix/Pacific/Palau
posix/Pacific/Pitcairn
+posix/Pacific/Pohnpei
posix/Pacific/Ponape
posix/Pacific/Port_Moresby
posix/Pacific/Rarotonga
@@ -3008,6 +3083,7 @@ right/Africa/Freetown
right/Africa/Gaborone
right/Africa/Harare
right/Africa/Johannesburg
+right/Africa/Juba
right/Africa/Kampala
right/Africa/Khartoum
right/Africa/Kigali
@@ -3058,6 +3134,7 @@ right/America/Asuncion
right/America/Atikokan
right/America/Atka
right/America/Bahia
+right/America/Bahia_Banderas
right/America/Barbados
right/America/Belem
right/America/Belize
@@ -3121,19 +3198,23 @@ right/America/Juneau
right/America/Kentucky/Louisville
right/America/Kentucky/Monticello
right/America/Knox_IN
+right/America/Kralendijk
right/America/La_Paz
right/America/Lima
right/America/Los_Angeles
right/America/Louisville
+right/America/Lower_Princes
right/America/Maceio
right/America/Managua
right/America/Manaus
right/America/Marigot
right/America/Martinique
+right/America/Matamoros
right/America/Mazatlan
right/America/Mendoza
right/America/Menominee
right/America/Merida
+right/America/Metlakatla
right/America/Mexico_City
right/America/Miquelon
right/America/Moncton
@@ -3146,8 +3227,10 @@ right/America/New_York
right/America/Nipigon
right/America/Nome
right/America/Noronha
+right/America/North_Dakota/Beulah
right/America/North_Dakota/Center
right/America/North_Dakota/New_Salem
+right/America/Ojinaga
right/America/Panama
right/America/Pangnirtung
right/America/Paramaribo
@@ -3164,12 +3247,14 @@ right/America/Regina
right/America/Resolute
right/America/Rio_Branco
right/America/Rosario
+right/America/Santa_Isabel
right/America/Santarem
right/America/Santiago
right/America/Santo_Domingo
right/America/Sao_Paulo
right/America/Scoresbysund
right/America/Shiprock
+right/America/Sitka
right/America/St_Barthelemy
right/America/St_Johns
right/America/St_Kitts
@@ -3192,6 +3277,7 @@ right/America/Yellowknife
right/Antarctica/Casey
right/Antarctica/Davis
right/Antarctica/DumontDUrville
+right/Antarctica/Macquarie
right/Antarctica/Mawson
right/Antarctica/McMurdo
right/Antarctica/Palmer
@@ -3228,6 +3314,7 @@ right/Asia/Dubai
right/Asia/Dushanbe
right/Asia/Gaza
right/Asia/Harbin
+right/Asia/Hebron
right/Asia/Ho_Chi_Minh
right/Asia/Hong_Kong
right/Asia/Hovd
@@ -3254,6 +3341,7 @@ right/Asia/Makassar
right/Asia/Manila
right/Asia/Muscat
right/Asia/Nicosia
+right/Asia/Novokuznetsk
right/Asia/Novosibirsk
right/Asia/Omsk
right/Asia/Oral
@@ -3486,6 +3574,7 @@ right/PST8PDT
right/Pacific/Apia
right/Pacific/Auckland
right/Pacific/Chatham
+right/Pacific/Chuuk
right/Pacific/Easter
right/Pacific/Efate
right/Pacific/Enderbury
@@ -3511,6 +3600,7 @@ right/Pacific/Noumea
right/Pacific/Pago_Pago
right/Pacific/Palau
right/Pacific/Pitcairn
+right/Pacific/Pohnpei
right/Pacific/Ponape
right/Pacific/Port_Moresby
right/Pacific/Rarotonga