| # |
| # 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/. |
| |
| OS_CXXFLAGS := $(filter-out -fno-exceptions,$(OS_CXXFLAGS)) -fexceptions |
| |
| include $(topsrcdir)/config/rules.mk |
| |
| 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) test-ctors$(DLL_SUFFIX): DSO_SONAME=$@ |
| 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 |
| |
| ifndef CROSS_COMPILE |
| ifdef COMPILE_ENVIRONMENT |
| libs:: test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX) |
| |
| 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 |
| endif |