mozilla-jemalloc-symbols.patch
changeset 203 3820fe99f0fe
parent 200 ade149166873
child 205 71411f8585cd
--- a/mozilla-jemalloc-symbols.patch	Wed Nov 24 17:35:37 2010 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,166 +0,0 @@
-# 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
-      */