Bug 1278456 - Bump glibc requirement to 2.12. r=froydnj
authorMike Hommey <mh+mozilla@glandium.org>
Tue, 07 Jun 2016 13:49:47 +0900
changeset 377803 92c44ebd3d6eea3154d72738421d58b62d2dbe07
parent 377802 6f78f70eb2ee57fb0b65b99ebc9a5a55ffd88f9f
child 377804 42c217cffdf87f4e4c6bd8f0a386b950823d9678
push id20857
push userbmo:james@hoppipolla.co.uk
push dateSun, 12 Jun 2016 16:59:39 +0000
reviewersfroydnj
bugs1278456
milestone50.0a1
Bug 1278456 - Bump glibc requirement to 2.12. r=froydnj The requirement for glibc has been set to version 2.7 for a long while. Spidermonkey uses the pthread_setname_np symbol, which is only available since glibc 2.12. So far, we've been fortunate that the symbol doesn't end up in libxul, or tests that link to js directly, because the symbol is eliminated as being called by effectively dead code. There are multiple reasons why this is going to change, one of which being changes to the way things are linked, that will make the linker not eliminate that code in some cases. Another is that eventually, the separation of build systems between js and top-level is going to fade, and the glibc checks, which apply to all gecko binaries, will also apply to js binaries. They currently are not happening, and would fail because of pthread_setname_np if they were. Taking a step back, as of version 46, the mozilla.org builds require at least Gtk+3 3.4. Which means the requirements for the underlying system have received a dramatic bump, and it's time to revisit the requirements for binary compatibility. I went through all my notes from all the recent times binary compatibility has been considered, and put together a compatibility matrix on MDN from that data as well as more recent data that I could find here and there, about the major non-rolling-release distros (RHEL, Fedora, SuSE, Debian, Ubuntu) https://developer.mozilla.org/en-US/Firefox/Linux_compatibility_matrix Considering the data there, none of the distros that have at least Gtk+3 3.4 have a glibc older than 2.13. The list of symbols that 2.13 provides that 2.12 doesn't have is not large enough, though, to really care about depending on 2.13.
config/config.mk
--- a/config/config.mk
+++ b/config/config.mk
@@ -551,17 +551,17 @@ END { \
 	if (found) { \
 		exit(1) \
 	} \
 }'
 endef
 
 ifneq (,$(MOZ_LIBSTDCXX_TARGET_VERSION)$(MOZ_LIBSTDCXX_HOST_VERSION))
 CHECK_STDCXX = $(call CHECK_SYMBOLS,$(1),GLIBCXX,libstdc++,v[1] > 3 || (v[1] == 3 && v[2] == 4 && v[3] > 10))
-CHECK_GLIBC = $(call CHECK_SYMBOLS,$(1),GLIBC,libc,v[1] > 2 || (v[1] == 2 && v[2] > 7))
+CHECK_GLIBC = $(call CHECK_SYMBOLS,$(1),GLIBC,libc,v[1] > 2 || (v[1] == 2 && v[2] > 12))
 endif
 
 ifeq (,$(filter $(OS_TARGET),WINNT Darwin))
 CHECK_TEXTREL = @$(TOOLCHAIN_PREFIX)readelf -d $(1) | grep TEXTREL > /dev/null && echo 'TEST-UNEXPECTED-FAIL | check_textrel | We do not want text relocations in libraries and programs' || true
 endif
 
 ifeq ($(MOZ_WIDGET_TOOLKIT),android)
 # While this is very unlikely (libc being added by the compiler at the end