author | Mike Hommey <mh+mozilla@glandium.org> |
Mon, 24 Jan 2011 09:56:40 +0100 | |
changeset 61171 | 9a6de1e28d4bf476870fec0d01f29e4be6f05dcc |
parent 61170 | a1ccb1c489baeeb2e738ce9173b5ee079b0243f9 |
child 61172 | d461fff2e9208cacb490dcc68721b4156a8a0b1e |
push id | unknown |
push user | unknown |
push date | unknown |
reviewers | khuey, bsmedberg |
bugs | 606145 |
milestone | 2.0b10pre |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/build/unix/Makefile.in +++ b/build/unix/Makefile.in @@ -40,16 +40,20 @@ DEPTH = ../.. topsrcdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk MODULE = build +ifeq ($(USE_ELF_HACK)$(HOST_OS_ARCH)$(OS_ARCH)$(OS_TARGET),1LinuxLinuxLinux) +DIRS = elfhack +endif + include $(topsrcdir)/config/rules.mk libs:: $(srcdir)/run-mozilla.sh $(INSTALL) $< $(DIST)/bin ifeq ($(OS_ARCH),OpenVMS) libs:: vms/mozilla.com vms/install.com vms/getinfo.com $(INSTALL) $? $(DIST)/bin
new file mode 100644 --- /dev/null +++ b/build/unix/elfhack/Makefile.in @@ -0,0 +1,112 @@ +# +# ***** BEGIN LICENSE BLOCK ***** +# Version: MPL 1.1/GPL 2.0/LGPL 2.1 +# +# The contents of this file are subject to the Mozilla Public License Version +# 1.1 (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# http://www.mozilla.org/MPL/ +# +# Software distributed under the License is distributed on an "AS IS" basis, +# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License +# for the specific language governing rights and limitations under the +# License. +# +# The Original Code is elfhack +# +# The Initial Developer of the Original Code is +# Mozilla Foundation +# Portions created by the Initial Developer are Copyright (C) 2010 +# the Initial Developer. All Rights Reserved. +# +# Contributor(s): +# Mike Hommey <mh@glandium.org> +# +# Alternatively, the contents of this file may be used under the terms of +# either of the GNU General Public License Version 2 or later (the "GPL"), +# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), +# in which case the provisions of the GPL or the LGPL are applicable instead +# of those above. If you wish to allow use of your version of this file only +# under the terms of either the GPL or the LGPL, and not to allow others to +# use your version of this file under the terms of the MPL, indicate your +# decision by deleting the provisions above and replace them with the notice +# and other provisions required by the GPL or the LGPL. If you do not delete +# the provisions above, a recipient may use your version of this file under +# the terms of any one of the MPL, the GPL or the LGPL. +# +# ***** END LICENSE BLOCK ***** + +DEPTH = ../../.. +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(DEPTH)/config/autoconf.mk + +INTERNAL_TOOLS = 1 + +HOST_PROGRAM = elfhack +NO_DIST_INSTALL = 1 + +HOST_CPPSRCS = \ + elf.cpp \ + elfhack.cpp \ + $(NULL) + +OS_CXXFLAGS += -fexceptions + +ifneq (,$(filter %86,$(TARGET_CPU))) +CPU := x86 +else +CPU := $(TARGET_CPU) +endif + +CSRCS := \ + inject/$(CPU).c \ + inject/$(CPU)-noinit.c \ + $(NULL) + +libs:: $(CSRCS:.c=.$(OBJ_SUFFIX)) + +ifndef CROSS_COMPILE +test$(DLL_SUFFIX): test.$(OBJ_SUFFIX) elfhack $(CSRCS:.c=.$(OBJ_SUFFIX)) + $(MKSHLIB) $< + rm -f $@.bak + $(CURDIR)/elfhack -b $@ + # Fail if the backup file doesn't exist + [ -f "$@.bak" ] + # Fail if the new library doesn't contain less relocations + [ $$(objdump -R $@.bak | wc -l) -gt $$(objdump -R $@ | wc -l) ] + +dummy: dummy.$(OBJ_SUFFIX) test$(DLL_SUFFIX) + $(CC) -o $@ $^ + +libs:: dummy + # Will either crash or return exit code 1 if elfhack is broken + LD_LIBRARY_PATH=$(CURDIR) $(CURDIR)/dummy + +CSRCS += test.c dummy.c + +GARBAGE += dummy test$(DLL_SUFFIX) test$(DLL_SUFFIX).bak +endif + +inject: + $(NSINSTALL) -D $@ + +inject/%.c: inject.c | inject + cp $< $@ + +GARBAGE_DIRS += inject + +inject/%.$(OBJ_SUFFIX): DEFINES += -DBITS=$(if $(HAVE_64BIT_OS),64,32) +inject/$(CPU)-noinit.$(OBJ_SUFFIX): DEFINES += -DNOINIT + +# need this to suppress errors due to /usr/include/linux/byteorder/swab.h +# on mozilla buildbots +OS_CXXFLAGS := $(filter-out -pedantic,$(OS_CXXFLAGS)) + +# Avoid building as thumb code, this is not supported yet +COMMA := , +OS_CFLAGS := $(filter-out -mthumb -Wa$(COMMA)-mthumb,$(OS_CFLAGS)) + +include $(topsrcdir)/config/rules.mk
--- a/config/autoconf.mk.in +++ b/config/autoconf.mk.in @@ -112,16 +112,17 @@ MOZ_SHARK = @MOZ_SHARK@ MOZ_CALLGRIND = @MOZ_CALLGRIND@ MOZ_VTUNE = @MOZ_VTUNE@ MOZ_TRACE_JSCALLS = @MOZ_TRACE_JSCALLS@ MOZ_TRACEVIS = @MOZ_TRACEVIS@ DEHYDRA_PATH = @DEHYDRA_PATH@ NS_TRACE_MALLOC = @NS_TRACE_MALLOC@ USE_ELF_DYNSTR_GC = @USE_ELF_DYNSTR_GC@ +USE_ELF_HACK = @USE_ELF_HACK@ INCREMENTAL_LINKER = @INCREMENTAL_LINKER@ MACOSX_DEPLOYMENT_TARGET = @MACOSX_DEPLOYMENT_TARGET@ MOZ_MAIL_NEWS = @MOZ_MAIL_NEWS@ MOZ_PLAINTEXT_EDITOR_ONLY = @MOZ_PLAINTEXT_EDITOR_ONLY@ BUILD_STATIC_LIBS = @BUILD_STATIC_LIBS@ MOZ_ENABLE_LIBXUL = @MOZ_ENABLE_LIBXUL@ ENABLE_TESTS = @ENABLE_TESTS@ IBMBIDI = @IBMBIDI@
--- a/configure.in +++ b/configure.in @@ -7756,16 +7756,26 @@ dnl ==================================== dnl = --enable-elf-dynstr-gc dnl ======================================================== MOZ_ARG_ENABLE_BOOL(elf-dynstr-gc, [ --enable-elf-dynstr-gc Enable elf dynstr garbage collector (opt builds only)], USE_ELF_DYNSTR_GC=1, USE_ELF_DYNSTR_GC= ) dnl ======================================================== +dnl = --disable-elf-hack +dnl ======================================================== + +USE_ELF_HACK=1 +MOZ_ARG_DISABLE_BOOL(elf-hack, +[ --disable-elf-hack Disable elf hacks], + USE_ELF_HACK=, + USE_ELF_HACK=1) + +dnl ======================================================== dnl = dnl = Profiling and Instrumenting dnl = dnl ======================================================== MOZ_ARG_HEADER(Profiling and Instrumenting) dnl ======================================================== dnl = Enable timeline service, which provides lightweight @@ -9030,16 +9040,17 @@ AC_SUBST(MOZ_USER_DIR) AC_SUBST(MOZ_CRASHREPORTER) AC_SUBST(MOZ_UPDATER) AC_SUBST(MOZ_ANGLE) AC_SUBST(MOZ_DIRECTX_SDK_PATH) AC_SUBST(ENABLE_STRIP) AC_SUBST(PKG_SKIP_STRIP) AC_SUBST(USE_ELF_DYNSTR_GC) +AC_SUBST(USE_ELF_HACK) 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)
--- a/toolkit/mozapps/installer/packager.mk +++ b/toolkit/mozapps/installer/packager.mk @@ -536,16 +536,21 @@ else @echo "Linking XPT files..." @rm -rf $(DIST)/xpt @$(NSINSTALL) -D $(DIST)/xpt @($(XPIDL_LINK) $(DIST)/xpt/$(MOZ_PKG_APPNAME).xpt $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/components/*.xpt && rm -f $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/components/*.xpt && cp $(DIST)/xpt/$(MOZ_PKG_APPNAME).xpt $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/components && printf "interfaces $(MOZ_PKG_APPNAME).xpt\n" >$(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/components/interfaces.manifest) || echo No *.xpt files found in: $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/components/. Continuing... endif # DMG endif # MOZ_PKG_MANIFEST endif # UNIVERSAL_BINARY $(OPTIMIZE_JARS_CMD) --optimize $(DIST)/jarlog/ $(DIST)/bin/chrome $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR)/chrome +ifeq ($(USE_ELF_HACK)$(HOST_OS_ARCH)$(OS_ARCH)$(OS_TARGET),1LinuxLinuxLinux) +ifneq (,$(filter %86 x86_64 arm,$(OS_TEST))) + cd $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR); find . -name "*$(DLL_SUFFIX)" | xargs $(DEPTH)/build/unix/elfhack/elfhack +endif +endif ifndef PKG_SKIP_STRIP @echo "Stripping package directory..." @cd $(DIST)/$(STAGEPATH)$(MOZ_PKG_DIR); find . ! -type d \ ! -name "*.js" \ ! -name "*.xpt" \ ! -name "*.gif" \ ! -name "*.jpg" \ ! -name "*.png" \