# HG changeset patch # User Wolfgang Rosenauer # Date 1290616537 -3600 # Node ID ade14916687359c21eac049de4973db089f4f5e7 # Parent 5baba178b43cc2291d20f19f2d910f638df121be export jemalloc symbols from xulrunner stub to make them available in libxul diff -r 5baba178b43c -r ade149166873 mozilla-jemalloc-symbols.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-jemalloc-symbols.patch Wed Nov 24 17:35:37 2010 +0100 @@ -0,0 +1,166 @@ +# HG changeset patch +# User Mike Hommey +# Parent 4510a9c913731464c0bc3636cd03d3f7fdb27186 +Bug 611405 - Export jemalloc symbols when linking with the xpcom standalone glue and avoid crash if symbols are not available for any reason + +diff --git a/build/unix/gnu-ld-scripts/jemalloc-standalone-linkage-version-script b/build/unix/gnu-ld-scripts/jemalloc-standalone-linkage-version-script +new file mode 100644 +--- /dev/null ++++ b/build/unix/gnu-ld-scripts/jemalloc-standalone-linkage-version-script +@@ -0,0 +1,19 @@ ++{ ++ global: ++ _malloc_postfork; ++ _malloc_prefork; ++ jemalloc_stats; ++ malloc_usable_size; ++ posix_memalign; ++ free; ++ realloc; ++ calloc; ++ malloc; ++ memalign; ++ valloc; ++ __free_hook; ++ __malloc_hook; ++ __realloc_hook; ++ __memalign_hook; ++ local: *; ++}; +diff --git a/config/autoconf.mk.in b/config/autoconf.mk.in +--- a/config/autoconf.mk.in ++++ b/config/autoconf.mk.in +@@ -187,16 +187,17 @@ MAKENSISU=@MAKENSISU@ + RM = rm -f + + # The MOZ_UI_LOCALE var is used to build a particular locale. Do *not* + # use the var to change any binary files. Do *not* use this var unless you + # write rules for the "clean-locale" and "locale" targets. + MOZ_UI_LOCALE = @MOZ_UI_LOCALE@ + + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS = @MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS@ ++MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS = @MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS@ + MOZ_COMPONENT_NSPR_LIBS=@MOZ_COMPONENT_NSPR_LIBS@ + + MOZ_FIX_LINK_PATHS=@MOZ_FIX_LINK_PATHS@ + + XPCOM_FROZEN_LDOPTS=@XPCOM_FROZEN_LDOPTS@ + XPCOM_LIBS=@XPCOM_LIBS@ + LIBXUL_LIBS=@LIBXUL_LIBS@ + MOZ_TIMELINE=@MOZ_TIMELINE@ +diff --git a/config/config.mk b/config/config.mk +--- a/config/config.mk ++++ b/config/config.mk +@@ -157,16 +157,21 @@ FINAL_LINK_COMPS = $(DEPTH)/config/final + FINAL_LINK_COMP_NAMES = $(DEPTH)/config/final-link-comp-names + + MOZ_UNICHARUTIL_LIBS = $(LIBXUL_DIST)/lib/$(LIB_PREFIX)unicharutil_s.$(LIB_SUFFIX) + MOZ_WIDGET_SUPPORT_LIBS = $(DIST)/lib/$(LIB_PREFIX)widgetsupport_s.$(LIB_SUFFIX) + + ifdef MOZ_MEMORY + ifneq (,$(filter-out WINNT WINCE,$(OS_ARCH))) + JEMALLOC_LIBS = $(MKSHLIB_FORCE_ALL) $(call EXPAND_MOZLIBNAME,jemalloc) $(MKSHLIB_UNFORCE_ALL) ++# If we are linking jemalloc into a program, we want the jemalloc symbols ++# to be exported ++ifneq (,$(SIMPLE_PROGRAMS)$(PROGRAM)) ++JEMALLOC_LIBS += $(MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS) ++endif + endif + endif + + CC := $(CC_WRAPPER) $(CC) + CXX := $(CXX_WRAPPER) $(CXX) + + # determine debug-related options + _DEBUG_CFLAGS := +diff --git a/configure.in b/configure.in +--- a/configure.in ++++ b/configure.in +@@ -2892,21 +2892,23 @@ case "$target" in + if test -z "$GNU_CC"; then + NO_LD_ARCHIVE_FLAGS= + fi + ;; + esac + AC_SUBST(NO_LD_ARCHIVE_FLAGS) + + dnl ======================================================== +-dnl = Flags to strip unused symbols from .so components ++dnl = Flags to strip unused symbols from .so components and ++dnl = to export jemalloc symbols when linking a program + dnl ======================================================== + case "$target" in + *-linux*|*-kfreebsd*-gnu|*-gnu*) + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-version-script' ++ MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS='-rdynamic -Wl,--version-script -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/jemalloc-standalone-linkage-version-script' + ;; + *-solaris*) + if test -z "$GNU_CC"; then + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-M $(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile' + else + if test -z "$GCC_USE_GNU_LD"; then + MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS='-Wl,-M -Wl,$(BUILD_TOOLS)/gnu-ld-scripts/components-mapfile' + else +@@ -8909,16 +8911,17 @@ AC_SUBST(MOZ_USER_DIR) + AC_SUBST(MOZ_CRASHREPORTER) + AC_SUBST(MOZ_UPDATER) + + AC_SUBST(ENABLE_STRIP) + AC_SUBST(PKG_SKIP_STRIP) + AC_SUBST(USE_ELF_DYNSTR_GC) + AC_SUBST(INCREMENTAL_LINKER) + AC_SUBST(MOZ_COMPONENTS_VERSION_SCRIPT_LDFLAGS) ++AC_SUBST(MOZ_JEMALLOC_STANDALONE_GLUE_LDOPTS) + AC_SUBST(MOZ_COMPONENT_NSPR_LIBS) + + AC_SUBST(MOZ_FIX_LINK_PATHS) + AC_SUBST(XPCOM_LIBS) + AC_SUBST(XPCOM_FROZEN_LDOPTS) + AC_SUBST(XPCOM_GLUE_LDOPTS) + AC_SUBST(XPCOM_STANDALONE_GLUE_LDOPTS) + +diff --git a/xpcom/base/nsMemoryReporterManager.cpp b/xpcom/base/nsMemoryReporterManager.cpp +--- a/xpcom/base/nsMemoryReporterManager.cpp ++++ b/xpcom/base/nsMemoryReporterManager.cpp +@@ -54,20 +54,16 @@ + # include "jemalloc.h" + # elif defined(XP_LINUX) + # define HAVE_JEMALLOC_STATS 1 + # include "jemalloc_types.h" + // jemalloc is directly linked into firefox-bin; libxul doesn't link + // with it. So if we tried to use jemalloc_stats directly here, it + // wouldn't be defined. Instead, we don't include the jemalloc header + // and weakly link against jemalloc_stats. +-// +-// NB: we don't null-check this symbol at runtime because we expect it +-// to have been resolved. If it hasn't, the crash jumping to NULL +-// will indicate the bug. + extern "C" { + extern void jemalloc_stats(jemalloc_stats_t* stats) + NS_VISIBILITY_DEFAULT __attribute__((weak)); + } + # endif // XP_LINUX + #endif // MOZ_MEMORY + + #if HAVE_JEMALLOC_STATS +@@ -214,16 +210,20 @@ NS_MEMORY_REPORTER_IMPLEMENT(Win32Privat + ** nsMemoryReporterManager implementation + **/ + + NS_IMPL_ISUPPORTS1(nsMemoryReporterManager, nsIMemoryReporterManager) + + NS_IMETHODIMP + nsMemoryReporterManager::Init() + { ++#if HAVE_JEMALLOC_STATS && defined(XP_LINUX) ++ if (!jemalloc_stats) ++ return NS_ERROR_FAILURE; ++#endif + /* + * Register our core reporters + */ + #define REGISTER(_x) RegisterReporter(new NS_MEMORY_REPORTER_NAME(_x)) + + /* + * Register our core jemalloc/malloc reporters + */ diff -r 5baba178b43c -r ade149166873 mozilla-xulrunner20/mozilla-jemalloc-symbols.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mozilla-xulrunner20/mozilla-jemalloc-symbols.patch Wed Nov 24 17:35:37 2010 +0100 @@ -0,0 +1,1 @@ +../mozilla-jemalloc-symbols.patch \ No newline at end of file diff -r 5baba178b43c -r ade149166873 mozilla-xulrunner20/mozilla-xulrunner20.changes --- a/mozilla-xulrunner20/mozilla-xulrunner20.changes Wed Nov 24 17:33:13 2010 +0100 +++ b/mozilla-xulrunner20/mozilla-xulrunner20.changes Wed Nov 24 17:35:37 2010 +0100 @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Wed Nov 24 16:34:11 UTC 2010 - wr@rosenauer.org + +- export jemalloc symbols from xulrunner stub to make stats + available within libxul + ------------------------------------------------------------------- Sat Nov 6 12:50:18 UTC 2010 - wr@rosenauer.org diff -r 5baba178b43c -r ade149166873 mozilla-xulrunner20/mozilla-xulrunner20.spec --- a/mozilla-xulrunner20/mozilla-xulrunner20.spec Wed Nov 24 17:33:13 2010 +0100 +++ b/mozilla-xulrunner20/mozilla-xulrunner20.spec Wed Nov 24 17:35:37 2010 +0100 @@ -72,6 +72,7 @@ Patch11: mozilla-cpuid.patch Patch12: mozilla-buildsymbols.patch Patch13: mozilla-language.patch +Patch14: mozilla-jemalloc-symbols.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build Requires: mozilla-js20 = %{version} Requires(post): update-alternatives coreutils @@ -213,6 +214,7 @@ %endif %patch12 -p1 %patch13 -p1 +%patch14 -p1 %build kdehelperversion=$(cat toolkit/xre/nsKDEUtils.cpp | grep '#define KMOZILLAHELPER_VERSION' | cut -d ' ' -f 3) diff -r 5baba178b43c -r ade149166873 series --- a/series Wed Nov 24 17:33:13 2010 +0100 +++ b/series Wed Nov 24 17:35:37 2010 +0100 @@ -13,6 +13,7 @@ mozilla-buildsymbols.patch #mozilla-cairo-lcd.patch mozilla-language.patch +mozilla-jemalloc-symbols.patch # Firefox patches firefox-linkorder.patch