From: Arkadiusz Miśkiewicz Date: Mon, 24 Nov 2014 17:02:21 +0000 (+0100) Subject: - rel 4; prevent TLS slots exhaution (patch from FC) X-Git-Tag: auto/th/glibc-2.20-4 X-Git-Url: http://git.pld-linux.org/gitweb.cgi?a=commitdiff_plain;h=e35398607b43d978141c3a3b73f121633109b3f9;p=packages%2Fglibc.git - rel 4; prevent TLS slots exhaution (patch from FC) --- diff --git a/glibc-rh1124987.patch b/glibc-rh1124987.patch new file mode 100644 index 0000000..0b0c3ab --- /dev/null +++ b/glibc-rh1124987.patch @@ -0,0 +1,32 @@ +# +# This is an experimental patch that should go into rawhide and +# Fedora 21 to fix failures where python applications fail to +# load graphics applications because of the slot usages for TLS. +# This should eventually go upstream. +# +# - Carlos O'Donell +# +diff -urN glibc-2.19-886-gdd763fd/sysdeps/generic/ldsodefs.h glibc-2.19-886-gdd763fd.mod/sysdeps/generic/ldsodefs.h +--- glibc-2.19-886-gdd763fd/sysdeps/generic/ldsodefs.h 2014-08-21 01:00:55.000000000 -0400 ++++ glibc-2.19-886-gdd763fd.mod/sysdeps/generic/ldsodefs.h 2014-09-04 19:29:42.929692810 -0400 +@@ -388,8 +388,18 @@ + have to iterate beyond the first element in the slotinfo list. */ + #define TLS_SLOTINFO_SURPLUS (62) + +-/* Number of additional slots in the dtv allocated. */ +-#define DTV_SURPLUS (14) ++/* Number of additional allocated dtv slots. This was initially ++ 14, but problems with python, MESA, and X11's uses of static TLS meant ++ that most distributions were very close to this limit when they loaded ++ dynamically interpreted languages that used graphics. The simplest ++ solution was to roughly double the number of slots. The actual static ++ image space usage was relatively small, for example in MESA you ++ had only two dispatch pointers for a total of 16 bytes. If we hit up ++ against this limit again we should start a campaign with the ++ distributions to coordinate the usage of static TLS. Any user of this ++ resource is effectively coordinating a global resource since this ++ surplus is allocated for each thread at startup. */ ++#define DTV_SURPLUS (32) + + /* Initial dtv of the main thread, not allocated with normal malloc. */ + EXTERN void *_dl_initial_dtv; diff --git a/glibc.spec b/glibc.spec index 24ffa58..0f79977 100644 --- a/glibc.spec +++ b/glibc.spec @@ -35,7 +35,7 @@ Summary(tr.UTF-8): GNU libc Summary(uk.UTF-8): GNU libc версії Name: glibc Version: %{core_version} -Release: 3 +Release: 4 Epoch: 6 License: LGPL v2.1+ Group: Libraries @@ -84,7 +84,7 @@ Patch27: %{name}-locale-C.patch.xz # Patch27-md5: 34ebe52a2afb923e33af0fb7c541f540 Patch28: %{name}-locale-C-pld.patch Patch29: %{name}-arm-alignment-fix.patch - +Patch30: glibc-rh1124987.patch Patch31: %{name}-origin.patch Patch32: %{name}-Os-fail-workaround.patch @@ -973,7 +973,7 @@ exit 1 %patch27 -p1 %patch28 -p1 %patch29 -p1 - +%patch30 -p1 %patch31 -p1 %patch32 -p1