blob: 616a0fff5a2a760be3973fdb7296b07ada9f65f0 [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001From cb4349edce6ce360436f10da8b6aa32e68fb778d Mon Sep 17 00:00:00 2001
2From: Jerome Forissier <jerome.forissier@linaro.org>
3Date: Tue, 23 Aug 2022 11:41:00 +0000
4Subject: [PATCH] core, ldelf: link: add -z execstack
5
6When building for arm32 with GNU binutils 2.39, the linker outputs
7warnings when generating some TEE core binaries (all_obj.o, init.o,
8unpaged.o and tee.elf) as well as ldelf.elf:
9
10 arm-poky-linux-gnueabi-ld.bfd: warning: atomic_a32.o: missing .note.GNU-stack section implies executable stack
11 arm-poky-linux-gnueabi-ld.bfd: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
12
13The permissions used when mapping the TEE core stacks do not depend on
14any metadata found in the ELF file. Similarly when the TEE core loads
15ldelf it already creates a non-executable stack regardless of ELF
16information. Therefore we can safely ignore the warnings. This is done
17by adding the '-z execstack' option.
18
19Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
20
21Signed-off-by: Anton Antonov <Anton.Antonov@arm.com>
22Upstream-Status: Backport [https://github.com/OP-TEE/optee_os/pull/5499]
23
24---
25 core/arch/arm/kernel/link.mk | 13 +++++++++----
26 ldelf/link.mk | 4 ++++
27 2 files changed, 13 insertions(+), 4 deletions(-)
28
29diff --git a/core/arch/arm/kernel/link.mk b/core/arch/arm/kernel/link.mk
30index 3dc459d6..85cde58e 100644
31--- a/core/arch/arm/kernel/link.mk
32+++ b/core/arch/arm/kernel/link.mk
33@@ -9,6 +9,11 @@ link-script-dep = $(link-out-dir)/.kern.ld.d
34
35 AWK = awk
36
37+link-ldflags-common += $(call ld-option,--no-warn-rwx-segments)
38+ifeq ($(CFG_ARM32_core),y)
39+link-ldflags-common += $(call ld-option,--no-warn-execstack)
40+endif
41+
42 link-ldflags = $(LDFLAGS)
43 ifeq ($(CFG_CORE_ASLR),y)
44 link-ldflags += -pie -Bsymbolic -z notext -z norelro $(ldflag-apply-dynamic-relocs)
45@@ -17,7 +22,7 @@ link-ldflags += -T $(link-script-pp) -Map=$(link-out-dir)/tee.map
46 link-ldflags += --sort-section=alignment
47 link-ldflags += --fatal-warnings
48 link-ldflags += --gc-sections
49-link-ldflags += $(call ld-option,--no-warn-rwx-segments)
50+link-ldflags += $(link-ldflags-common)
51
52 link-ldadd = $(LDADD)
53 link-ldadd += $(ldflags-external)
54@@ -39,7 +44,7 @@ link-script-cppflags := \
55 $(cppflagscore))
56
57 ldargs-all_objs := -T $(link-script-dummy) --no-check-sections \
58- $(call ld-option,--no-warn-rwx-segments) \
59+ $(link-ldflags-common) \
60 $(link-objs) $(link-ldadd) $(libgcccore)
61 cleanfiles += $(link-out-dir)/all_objs.o
62 $(link-out-dir)/all_objs.o: $(objs) $(libdeps) $(MAKEFILE_LIST)
63@@ -53,7 +58,7 @@ $(link-out-dir)/unpaged_entries.txt: $(link-out-dir)/all_objs.o
64 $(AWK) '/ ____keep_pager/ { printf "-u%s ", $$3 }' > $@
65
66 unpaged-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
67- $(call ld-option,--no-warn-rwx-segments)
68+ $(link-ldflags-common)
69 unpaged-ldadd := $(objs) $(link-ldadd) $(libgcccore)
70 cleanfiles += $(link-out-dir)/unpaged.o
71 $(link-out-dir)/unpaged.o: $(link-out-dir)/unpaged_entries.txt
72@@ -82,7 +87,7 @@ $(link-out-dir)/init_entries.txt: $(link-out-dir)/all_objs.o
73 $(AWK) '/ ____keep_init/ { printf "-u%s ", $$3 }' > $@
74
75 init-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
76- $(call ld-option,--no-warn-rwx-segments)
77+ $(link-ldflags-common)
78 init-ldadd := $(link-objs-init) $(link-out-dir)/version.o $(link-ldadd) \
79 $(libgcccore)
80 cleanfiles += $(link-out-dir)/init.o
81diff --git a/ldelf/link.mk b/ldelf/link.mk
82index 8fafc879..d8a05ea6 100644
83--- a/ldelf/link.mk
84+++ b/ldelf/link.mk
85@@ -19,6 +19,10 @@ link-ldflags += --sort-section=alignment
86 link-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment
87 link-ldflags += $(link-ldflags$(sm))
88
89+ifeq ($(CFG_ARM32_$(sm)), y)
90+link-ldflags += $(call ld-option,--no-warn-execstack)
91+endif
92+
93 link-ldadd = $(addprefix -L,$(libdirs))
94 link-ldadd += --start-group $(addprefix -l,$(libnames)) --end-group
95 ldargs-ldelf.elf := $(link-ldflags) $(objs) $(link-ldadd) $(libgcc$(sm))