build/unix/elfhack/Makefile.in
author Mike Hommey <mh+mozilla@glandium.org>
Sat, 02 Nov 2013 08:44:11 +0900
changeset 153202 53170bea23a65f04655f33cde223d40ce8e52691
parent 152931 564210bf70b39f6cc0223eec802521e83a97151c
child 153897 2eb99b1ad61f79fc78c075618aab6e55cec975f3
permissions -rw-r--r--
Bug 933120 - Move HOST_PROGRAM and HOST_SIMPLE_PROGRAMS to moz.build. r=gps

#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

INTERNAL_TOOLS = 1

NO_PROFILE_GUIDED_OPTIMIZE = 1

VPATH += $(topsrcdir)/build

OS_CXXFLAGS := $(filter-out -fno-exceptions,$(OS_CXXFLAGS)) -fexceptions

WRAP_LDFLAGS=

include $(topsrcdir)/config/rules.mk

DEFINES += -DELFHACK_BUILD

test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX): %$(DLL_SUFFIX): %.$(OBJ_SUFFIX) elfhack
	$(MKSHLIB) $(LDFLAGS) $< -nostartfiles
	@echo ===
	@echo === If you get failures below, please file a bug describing the error
	@echo === and your environment \(compiler and linker versions\), and use
	@echo === --disable-elf-hack until this is fixed.
	@echo ===
	# Fail if the library doesn't have $(DT_TYPE) .dynamic info
	$(TOOLCHAIN_PREFIX)readelf -d $@ | grep '($(DT_TYPE))'
	@rm -f $@.bak
	$(CURDIR)/elfhack -b -f $@
	# Fail if the backup file doesn't exist
	[ -f "$@.bak" ]
	# Fail if the new library doesn't contain less relocations
	[ $$($(TOOLCHAIN_PREFIX)objdump -R $@.bak | wc -l) -gt $$(objdump -R $@ | wc -l) ]

test-array$(DLL_SUFFIX): DT_TYPE=INIT_ARRAY
test-ctors$(DLL_SUFFIX): DT_TYPE=INIT

.PRECIOUS: test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX)

GARBAGE += test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX) test-array$(DLL_SUFFIX).bak test-ctors$(DLL_SUFFIX).bak

libs:: test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX)

ifndef CROSS_COMPILE
dummy: dummy.$(OBJ_SUFFIX)
	$(CC) -o $@ $^ $(LDFLAGS)

libs:: dummy
	# Will either crash or return exit code 1 if elfhack is broken
	LD_PRELOAD=$(CURDIR)/test-array$(DLL_SUFFIX) $(CURDIR)/dummy
	LD_PRELOAD=$(CURDIR)/test-ctors$(DLL_SUFFIX) $(CURDIR)/dummy

GARBAGE += dummy
endif

test.$(OBJ_SUFFIX): CFLAGS := -O0