diff --git a/Makefile b/Makefile index be543facb..74d518043 100644 --- a/Makefile +++ b/Makefile @@ -205,11 +205,6 @@ TF_CFLAGS += $(CPPFLAGS) $(TF_CFLAGS_$(ARCH)) \ -Os -ffunction-sections -fdata-sections GCC_V_OUTPUT := $(shell $(CC) -v 2>&1) -PIE_FOUND := $(findstring --enable-default-pie,${GCC_V_OUTPUT}) - -ifneq ($(PIE_FOUND),) -TF_CFLAGS += -fno-PIE -endif # Force the compiler to include the frame pointer ifeq (${ENABLE_BACKTRACE},1) @@ -335,6 +330,16 @@ ifeq (${ARM_ARCH_MAJOR},7) include make_helpers/armv7-a-cpus.mk endif +ifeq ($(ENABLE_PIE),1) + TF_CFLAGS += -fpie + TF_LDFLAGS += -pie +else + PIE_FOUND := $(findstring --enable-default-pie,${GCC_V_OUTPUT}) + ifneq ($(PIE_FOUND),) + TF_CFLAGS += -fno-PIE + endif +endif + # Include the CPU specific operations makefile, which provides default # values for all CPU errata workarounds and CPU specific optimisations. # This can be overridden by the platform. @@ -565,6 +570,7 @@ $(eval $(call assert_boolean,ENABLE_AMU)) $(eval $(call assert_boolean,ENABLE_ASSERTIONS)) $(eval $(call assert_boolean,ENABLE_BACKTRACE)) $(eval $(call assert_boolean,ENABLE_MPAM_FOR_LOWER_ELS)) +$(eval $(call assert_boolean,ENABLE_PIE)) $(eval $(call assert_boolean,ENABLE_PMF)) $(eval $(call assert_boolean,ENABLE_PSCI_STAT)) $(eval $(call assert_boolean,ENABLE_RUNTIME_INSTRUMENTATION)) @@ -615,6 +621,7 @@ $(eval $(call add_define,ENABLE_AMU)) $(eval $(call add_define,ENABLE_ASSERTIONS)) $(eval $(call add_define,ENABLE_BACKTRACE)) $(eval $(call add_define,ENABLE_MPAM_FOR_LOWER_ELS)) +$(eval $(call add_define,ENABLE_PIE)) $(eval $(call add_define,ENABLE_PMF)) $(eval $(call add_define,ENABLE_PSCI_STAT)) $(eval $(call add_define,ENABLE_RUNTIME_INSTRUMENTATION)) diff --git a/docs/user-guide.rst b/docs/user-guide.rst index f4ef85d2a..52cb45c09 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -371,6 +371,10 @@ Common build options partitioning in EL3, however. Platform initialisation code should configure and use partitions in EL3 as required. This option defaults to ``0``. +- ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE) + support within generic code in TF-A. This option is currently only supported + in BL31. Default is 0. + - ``ENABLE_PMF``: Boolean option to enable support for optional Performance Measurement Framework(PMF). Default is 0. diff --git a/make_helpers/defaults.mk b/make_helpers/defaults.mk index 435de20e3..4a3f54116 100644 --- a/make_helpers/defaults.mk +++ b/make_helpers/defaults.mk @@ -64,6 +64,9 @@ DYN_DISABLE_AUTH := 0 # Build option to enable MPAM for lower ELs ENABLE_MPAM_FOR_LOWER_ELS := 0 +# Flag to Enable Position Independant support (PIE) +ENABLE_PIE := 0 + # Flag to enable Performance Measurement Framework ENABLE_PMF := 0