DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (5b81998bb7ab)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
#
# 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/.

DEPTH		= @DEPTH@
topsrcdir	= @top_srcdir@
srcdir		= @srcdir@
VPATH		= @srcdir@

include $(DEPTH)/config/autoconf.mk

INTERNAL_TOOLS = 1

HOST_PROGRAM = elfhack
NO_DIST_INSTALL = 1
NO_PROFILE_GUIDED_OPTIMIZE = 1

VPATH += $(topsrcdir)/build

HOST_CPPSRCS = \
  elf.cpp \
  elfhack.cpp \
  $(NULL)

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

ifneq (,$(filter %86,$(TARGET_CPU)))
CPU := x86
else
ifneq (,$(filter arm%,$(TARGET_CPU)))
CPU := arm
else
CPU := $(TARGET_CPU)
endif
endif

CSRCS := \
  inject/$(CPU).c \
  inject/$(CPU)-noinit.c \
  test-ctors.c \
  test-array.c \
  $(NULL)

ifndef CROSS_COMPILE
CSRCS += dummy.c
endif

WRAP_LDFLAGS=

# need this to suppress errors due to /usr/include/linux/byteorder/swab.h
# on mozilla buildbots
OS_CXXFLAGS := $(filter-out -pedantic,$(OS_CXXFLAGS))

include $(topsrcdir)/config/rules.mk

test-array$(DLL_SUFFIX) test-ctors$(DLL_SUFFIX): %$(DLL_SUFFIX): %.$(OBJ_SUFFIX) elfhack $(filter inject/%,$(CSRCS:.c=.$(OBJ_SUFFIX)))
	$(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

inject:
	$(NSINSTALL) -D $@

inject/%.c: inject.c $(call mkdir_deps,inject)
	cp $< $@

GARBAGE_DIRS += inject

inject/%.$(OBJ_SUFFIX): DEFINES += -DBITS=$(if $(HAVE_64BIT_OS),64,32)
inject/%.$(OBJ_SUFFIX): CFLAGS := -O2 -fno-stack-protector $(filter -m% -I%,$(CFLAGS))
inject/$(CPU)-noinit.$(OBJ_SUFFIX): DEFINES += -DNOINIT
test.$(OBJ_SUFFIX): CFLAGS := -O0
host_elf.$(OBJ_SUFFIX) host_elfhack.$(OBJ_SUFFIX): elfxx.h