export jemalloc symbols from xulrunner stub to make them available in libxul
authorWolfgang Rosenauer <wr@rosenauer.org>
Wed, 24 Nov 2010 17:35:37 +0100
changeset 200 ade149166873
parent 199 5baba178b43c
child 203 3820fe99f0fe
export jemalloc symbols from xulrunner stub to make them available in libxul
mozilla-jemalloc-symbols.patch
mozilla-xulrunner20/mozilla-jemalloc-symbols.patch
mozilla-xulrunner20/mozilla-xulrunner20.changes
mozilla-xulrunner20/mozilla-xulrunner20.spec
series
--- /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
+      */
--- /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
--- 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
 
--- 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)
--- 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