Source code
Revision control
Copy as Markdown
Other Tools
#
# 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
include $(topsrcdir)/config/rules.mk
ifdef COMPILE_ENVIRONMENT
ifndef RELRHACK
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
@echo === provide the pre-elfhacked library as an attachment.
@echo === Use --disable-elf-hack until this is fixed.
@echo ===
# Fail if the library doesn't have $(DT_TYPE) .dynamic info
$(READELF) -d $@ | grep '\b$(DT_TYPE)\b'
@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
[ $$($(READELF) -r $@.bak | wc -l) -gt $$($(READELF) -r $@ | wc -l) ]
test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX): DSO_SONAME=$@
test-array$(DLL_SUFFIX): DT_TYPE=INIT_ARRAY
test-ctors$(DLL_SUFFIX): DT_TYPE=INIT
libs:: test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX)
.PRECIOUS: 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
endif
endif
endif