]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
PIE: pass PIE options only to BL31
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 17 Jan 2020 04:44:37 +0000 (13:44 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Fri, 24 Jan 2020 13:34:25 +0000 (22:34 +0900)
docs/getting_started/build-options.rst clearly says ENABLE_PIE is
currently only supported in BL31, but in fact, it has a stronger
limitation:

  Defining ENABLE_PIE may corrupt BL1 and BL2. So, ENABLE_PIE is
  supported only for platforms where BL31 is the only image built
  in the TF-A tree.

Currently, ENABLE_PIE is enabled by two platforms,
plat/arm/common/arm_common.mk and ti/k3/common/plat_common.mk,
both of which enable ENABLE_PIE together with RESET_TO_BL31.

For platforms with the full boot sequence, ENABLE_PIE may break earlier
BL stages. For example, if I build PLAT=qemu with ENABLE_PIE=1, it
fails in BL1.

When ENABLE_PIE is enabled, PIE options are added to TF_CFLAGS and
TF_LDFLAGS, so all BL images are affected. It is problematic because
currently only the BL31 linker script handles it. Even if BL1/BL2
works, the image size would increase needlessly, at least.

Pass the PIE options only to BL images that support it.

Change-Id: I550e95148aa3c63571c8ad2081082c554a848f57
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
Makefile

index c740993f4a122c93eee18e0847a224ec8e0009e5..89653b72df21ba96df03e189e353143dd772156b 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -452,18 +452,20 @@ ifeq (${ARM_ARCH_MAJOR},7)
 include make_helpers/armv7-a-cpus.mk
 endif
 
-ifeq ($(ENABLE_PIE),1)
-    TF_CFLAGS          +=      -fpie
-       ifneq ($(findstring gcc,$(notdir $(LD))),)
-               TF_LDFLAGS      +=      -Wl,-pie -Wl,--no-dynamic-linker
-       else
-               TF_LDFLAGS      +=      -pie --no-dynamic-linker
-       endif
+PIE_FOUND              :=      $(findstring --enable-default-pie,${GCC_V_OUTPUT})
+ifneq ($(PIE_FOUND),)
+       TF_CFLAGS       +=      -fno-PIE
+endif
+
+ifneq ($(findstring gcc,$(notdir $(LD))),)
+       PIE_LDFLAGS     +=      -Wl,-pie -Wl,--no-dynamic-linker
 else
-    PIE_FOUND          :=      $(findstring --enable-default-pie,${GCC_V_OUTPUT})
-    ifneq ($(PIE_FOUND),)
-        TF_CFLAGS              +=      -fno-PIE
-    endif
+       PIE_LDFLAGS     +=      -pie --no-dynamic-linker
+endif
+
+ifeq ($(ENABLE_PIE),1)
+       BL31_CFLAGS     +=      -fpie
+       BL31_LDFLAGS    +=      $(PIE_LDFLAGS)
 endif
 
 # Include the CPU specific operations makefile, which provides default