Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4803ce26 authored by Dan Albert's avatar Dan Albert
Browse files

Fix uses of -fPIC and -fPIE.

We've been using -fPIC and -fPIE together in the global cflags all this
time. These options are incompatible. The only reason we haven't been
hit by this before is because of the forced -Bsymbolic in GCC. To fix
this, pass -fpic when compiling objects for shared libraries and -fpie
when compiling objects for executables. For static libraries, also use
-fpic. We have to do this because static libraries might be included in
either a shared library or an executable. Code compiled with -fpie
cannot be included in a shared library, but code compiled with -fpic
may be included in an executable.

We've also been using -fpic and -fPIC together. These are different
options, and only the latter will take effect.
http://stackoverflow.com/a/967010

The final thing this fixes is that we had -f(PIC|PIE) flags being passed
to link commands. These are compile time flags, and don't do anything at
link time.

Bug: 16823325
Change-Id: Ic76f47e63dc2c81b7e1a8058bae1b3dc8565d606
parent ce06199a
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -113,6 +113,12 @@ my_cxx := $(LOCAL_CXX)
my_c_includes := $(LOCAL_C_INCLUDES)
my_generated_sources := $(LOCAL_GENERATED_SOURCES)

ifeq ($(LOCAL_MODULE_CLASS),EXECUTABLES)
my_cflags += -fpie
else
my_cflags += -fPIC
endif

my_src_files += $(LOCAL_SRC_FILES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_SRC_FILES_$(my_32_64_bit_suffix))
my_shared_libraries += $(LOCAL_SHARED_LIBRARIES_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_SHARED_LIBRARIES_$(my_32_64_bit_suffix))
my_cflags += $(LOCAL_CFLAGS_$($(my_prefix)$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_CFLAGS_$(my_32_64_bit_suffix))
+2 −2
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ endif
android_config_h := $(call select-android-config-h,linux-arm)

$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += \
			-msoft-float -fpic -fPIE \
			-msoft-float \
			-ffunction-sections \
			-fdata-sections \
			-funwind-tables \
@@ -221,7 +221,7 @@ $(hide) $(PRIVATE_CXX) \
endef

define $(combo_2nd_arch_prefix)transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \
	-Wl,-dynamic-linker,/system/bin/linker \
	-Wl,--gc-sections \
	-Wl,-z,nocopyreloc \
+1 −2
Original line number Diff line number Diff line
@@ -73,7 +73,6 @@ TARGET_GLOBAL_CFLAGS += \
android_config_h := $(call select-android-config-h,linux-arm64)

TARGET_GLOBAL_CFLAGS += \
			-fpic -fPIE \
			-fstack-protector \
			-ffunction-sections \
			-fdata-sections \
@@ -186,7 +185,7 @@ $(hide) $(PRIVATE_CXX) \
endef

define transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \
	-Wl,-dynamic-linker,/system/bin/linker64 \
	-Wl,--gc-sections \
	-Wl,-z,nocopyreloc \
+1 −2
Original line number Diff line number Diff line
@@ -84,7 +84,6 @@ android_config_h := $(call select-android-config-h,linux-mips)
$(combo_2nd_arch_prefix)TARGET_GLOBAL_CFLAGS += \
			$(TARGET_mips_CFLAGS) \
			-U__unix -U__unix__ -Umips \
			-fpic -fPIE\
			-ffunction-sections \
			-fdata-sections \
			-funwind-tables \
@@ -194,7 +193,7 @@ $(hide) $(PRIVATE_CXX) \
endef

define $(combo_2nd_arch_prefix)transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \
	-Wl,-dynamic-linker,/system/bin/linker \
	-Wl,--gc-sections \
	-Wl,-z,nocopyreloc \
+1 −2
Original line number Diff line number Diff line
@@ -84,7 +84,6 @@ android_config_h := $(call select-android-config-h,linux-mips64)
TARGET_GLOBAL_CFLAGS += \
			$(TARGET_mips_CFLAGS) \
			-U__unix -U__unix__ -Umips \
			-fpic -fPIE\
			-ffunction-sections \
			-fdata-sections \
			-funwind-tables \
@@ -198,7 +197,7 @@ $(hide) $(PRIVATE_CXX) \
endef

define transform-o-to-executable-inner
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -fPIE -pie \
$(hide) $(PRIVATE_CXX) -nostdlib -Bdynamic -pie \
	-Wl,-dynamic-linker,/system/bin/linker64 \
	-Wl,--gc-sections \
	-Wl,-z,nocopyreloc \
Loading