From 4c2d1a64fb49e706a8c7877bb40212ada78d25d7 Mon Sep 17 00:00:00 2001 From: Dmitriy Ivanov Date: Mon, 20 Apr 2015 16:59:05 -0700 Subject: [PATCH] Pack relocation tables for dynamic executables Add replocation-packer step for dynmic executables. Enable it by default for arm and arm64 platforms. Bug: http://b/18051137 Change-Id: I0c88fd31595bcea62a087f219acb9ecf9c80f2e5 --- core/clear_vars.mk | 1 + core/combo/TARGET_linux-arm.mk | 2 +- core/combo/TARGET_linux-arm64.mk | 2 +- core/combo/TARGET_linux-mips.mk | 2 -- core/combo/TARGET_linux-mips64.mk | 2 -- core/combo/TARGET_linux-x86.mk | 2 -- core/combo/TARGET_linux-x86_64.mk | 2 -- core/config.mk | 4 ++++ core/definitions.mk | 9 ++++++++ core/dynamic_binary.mk | 38 ++++++++++++++++++++++++++++--- 10 files changed, 51 insertions(+), 13 deletions(-) diff --git a/core/clear_vars.mk b/core/clear_vars.mk index 8bf4c5797..6bc363248 100644 --- a/core/clear_vars.mk +++ b/core/clear_vars.mk @@ -93,6 +93,7 @@ LOCAL_COPY_HEADERS:= LOCAL_FORCE_STATIC_EXECUTABLE:= LOCAL_ADDITIONAL_DEPENDENCIES:= LOCAL_STRIP_MODULE:= +LOCAL_PACK_MODULE_RELOCATIONS:= LOCAL_JNI_SHARED_LIBRARIES:= LOCAL_JNI_SHARED_LIBRARIES_ABI:= LOCAL_PREBUILT_JNI_LIBS:= diff --git a/core/combo/TARGET_linux-arm.mk b/core/combo/TARGET_linux-arm.mk index 8059b2ade..3651c39d9 100644 --- a/core/combo/TARGET_linux-arm.mk +++ b/core/combo/TARGET_linux-arm.mk @@ -188,7 +188,7 @@ $(combo_2nd_arch_prefix)TARGET_CRTEND_O := $($(combo_2nd_arch_prefix)TARGET_OUT_ $(combo_2nd_arch_prefix)TARGET_CRTBEGIN_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o $(combo_2nd_arch_prefix)TARGET_CRTEND_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -$(combo_2nd_arch_prefix)TARGET_STRIP_MODULE:=true +$(combo_2nd_arch_prefix)TARGET_PACK_MODULE_RELOCATIONS := true $(combo_2nd_arch_prefix)TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libm diff --git a/core/combo/TARGET_linux-arm64.mk b/core/combo/TARGET_linux-arm64.mk index 07a1de9b9..0819d13df 100644 --- a/core/combo/TARGET_linux-arm64.mk +++ b/core/combo/TARGET_linux-arm64.mk @@ -158,7 +158,7 @@ TARGET_CRTEND_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o TARGET_CRTEND_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -TARGET_STRIP_MODULE:=true +TARGET_PACK_MODULE_RELOCATIONS := true TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libm diff --git a/core/combo/TARGET_linux-mips.mk b/core/combo/TARGET_linux-mips.mk index 55566ebef..b17d59ab2 100644 --- a/core/combo/TARGET_linux-mips.mk +++ b/core/combo/TARGET_linux-mips.mk @@ -162,8 +162,6 @@ $(combo_2nd_arch_prefix)TARGET_CRTEND_O := $($(combo_2nd_arch_prefix)TARGET_OUT_ $(combo_2nd_arch_prefix)TARGET_CRTBEGIN_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o $(combo_2nd_arch_prefix)TARGET_CRTEND_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -$(combo_2nd_arch_prefix)TARGET_STRIP_MODULE:=true - $(combo_2nd_arch_prefix)TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libm $(combo_2nd_arch_prefix)TARGET_LINKER := /system/bin/linker diff --git a/core/combo/TARGET_linux-mips64.mk b/core/combo/TARGET_linux-mips64.mk index c6f9f29b2..82ce11d98 100644 --- a/core/combo/TARGET_linux-mips64.mk +++ b/core/combo/TARGET_linux-mips64.mk @@ -169,8 +169,6 @@ TARGET_CRTEND_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o TARGET_CRTEND_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -TARGET_STRIP_MODULE:=true - TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libstdc++ libm TARGET_LINKER := /system/bin/linker64 diff --git a/core/combo/TARGET_linux-x86.mk b/core/combo/TARGET_linux-x86.mk index f17a514fa..8d73fee9f 100644 --- a/core/combo/TARGET_linux-x86.mk +++ b/core/combo/TARGET_linux-x86.mk @@ -142,8 +142,6 @@ $(combo_2nd_arch_prefix)TARGET_CRTEND_O := $($(combo_2nd_arch_prefix)TARGET_OUT_ $(combo_2nd_arch_prefix)TARGET_CRTBEGIN_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o $(combo_2nd_arch_prefix)TARGET_CRTEND_SO_O := $($(combo_2nd_arch_prefix)TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -$(combo_2nd_arch_prefix)TARGET_STRIP_MODULE:=true - $(combo_2nd_arch_prefix)TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libm $(combo_2nd_arch_prefix)TARGET_LINKER := /system/bin/linker diff --git a/core/combo/TARGET_linux-x86_64.mk b/core/combo/TARGET_linux-x86_64.mk index 2adb157ef..0b2905c9c 100644 --- a/core/combo/TARGET_linux-x86_64.mk +++ b/core/combo/TARGET_linux-x86_64.mk @@ -151,8 +151,6 @@ TARGET_CRTEND_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_android.o TARGET_CRTBEGIN_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtbegin_so.o TARGET_CRTEND_SO_O := $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/crtend_so.o -TARGET_STRIP_MODULE:=true - TARGET_DEFAULT_SYSTEM_SHARED_LIBRARIES := libc libm TARGET_LINKER := /system/bin/linker64 diff --git a/core/config.mk b/core/config.mk index 60ea592b8..83295d9be 100644 --- a/core/config.mk +++ b/core/config.mk @@ -425,6 +425,10 @@ ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX) # dx is java behind a shell script; no .exe necessary. DX := $(HOST_OUT_EXECUTABLES)/dx ZIPALIGN := $(HOST_OUT_EXECUTABLES)/zipalign$(HOST_EXECUTABLE_SUFFIX) + +# relocation packer +RELOCATION_PACKER := prebuilts/misc/$(BUILD_OS)-$(HOST_PREBUILT_ARCH)/relocation_packer/relocation_packer + FINDBUGS_DIR := external/owasp/sanitizer/tools/findbugs/bin FINDBUGS := $(FINDBUGS_DIR)/findbugs EMMA_JAR := external/emma/lib/emma$(COMMON_JAVA_PACKAGE_SUFFIX) diff --git a/core/definitions.mk b/core/definitions.mk index 8087f7968..b6e5277f4 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -1452,6 +1452,15 @@ $(hide) $(PRIVATE_OBJCOPY) \ $(TARGET_STRIP_KEEP_SYMBOLS_EXTRA) $< $@ endef +########################################################### +## Commands for packing a target executable or library +########################################################### + +define pack-elf-relocations +$(copy-file-to-target) +@echo "target Pack Relocations: $(PRIVATE_MODULE) ($@)" +$(hide) $(RELOCATION_PACKER) $@ +endef ########################################################### ## Commands for running gcc to link an executable diff --git a/core/dynamic_binary.mk b/core/dynamic_binary.mk index 7a423db43..fe498edd4 100644 --- a/core/dynamic_binary.mk +++ b/core/dynamic_binary.mk @@ -57,11 +57,11 @@ $(symbolic_output) : $(symbolic_input) | $(ACP) ## Strip ########################################################### strip_input := $(symbolic_output) -strip_output := $(LOCAL_BUILT_MODULE) +strip_output := $(intermediates)/STRIPPED/$(my_built_module_stem) my_strip_module := $(LOCAL_STRIP_MODULE) ifeq ($(my_strip_module),) - my_strip_module := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_STRIP_MODULE) + my_strip_module := true endif $(strip_output): PRIVATE_STRIP := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_STRIP) @@ -107,7 +107,39 @@ $(strip_output): $(strip_input) endif endif # my_strip_module +########################################################### +## Pack relocation tables +########################################################### +relocation_packer_input := $(strip_output) +relocation_packer_output := $(LOCAL_BUILT_MODULE) + +my_pack_module_relocations := $(LOCAL_PACK_MODULE_RELOCATIONS) + +ifeq ($(my_pack_module_relocations),) + my_pack_module_relocations := $($(LOCAL_2ND_ARCH_VAR_PREFIX)TARGET_PACK_MODULE_RELOCATIONS) +endif + +# Do not pack relocations for static executables. +ifeq ($(LOCAL_FORCE_STATIC_EXECUTABLE),true) + my_pack_module_relocations := false +endif + +# TODO (dimitry): Relocation packer is not yet available for darwin +ifneq ($(HOST_OS),linux) + my_pack_module_relocations := false +endif + +ifeq (true,$(my_pack_module_relocations)) +# Pack relocations +$(relocation_packer_output): $(relocation_packer_input) | $(ACP) + $(pack-elf-relocations) +else +$(relocation_packer_output): $(relocation_packer_input) | $(ACP) + @echo "target Unpacked: $(PRIVATE_MODULE) ($@)" + $(copy-file-to-target) +endif $(cleantarget): PRIVATE_CLEAN_FILES += \ $(linked_module) \ - $(symbolic_output) + $(symbolic_output) \ + $(strip_output)