Bug 1278456 - Bump glibc requirement to 2.12. r?froydnj draft
authorMike Hommey <mh+mozilla@glandium.org>
Tue, 07 Jun 2016 13:49:47 +0900
changeset 376667 353ab3e4876c1c7ed3e60d91a411e1e3f62aaaeb
parent 376666 74e887c08f20fd40ebef662bf4ec1826fa786572
child 376668 c44586acd1521edf3c354ec53b11f00446943c51
push id20634
push userbmo:mh+mozilla@glandium.org
push dateWed, 08 Jun 2016 12:25:06 +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