blob: 5463a345c9f15682abd8e22bd7901d8e4e582ce8 [file] [log] [blame]
Patrick Williams92b42cb2022-09-03 06:53:57 -05001From a9d099d17ef0af6deac4c3b4d15ad0555d258ec8 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---
25diff --git a/core/arch/arm/kernel/link.mk b/core/arch/arm/kernel/link.mk
26index c39d43cb..0e96e606 100644
27--- a/core/arch/arm/kernel/link.mk
28+++ b/core/arch/arm/kernel/link.mk
29@@ -9,6 +9,11 @@ link-script-dep = $(link-out-dir)/.kern.ld.d
30
31 AWK = awk
32
33+link-ldflags-common += $(call ld-option,--no-warn-rwx-segments)
34+ifeq ($(CFG_ARM32_core),y)
35+link-ldflags-common += $(call ld-option,--no-warn-execstack)
36+endif
37+
38 link-ldflags = $(LDFLAGS)
39 ifeq ($(CFG_CORE_ASLR),y)
40 link-ldflags += -pie -Bsymbolic -z norelro $(ldflag-apply-dynamic-relocs)
41@@ -31,7 +36,7 @@ link-ldflags += -T $(link-script-pp) -Map=$(link-out-dir)/tee.map
42 link-ldflags += --sort-section=alignment
43 link-ldflags += --fatal-warnings
44 link-ldflags += --gc-sections
45-link-ldflags += $(call ld-option,--no-warn-rwx-segments)
46+link-ldflags += $(link-ldflags-common)
47
48 link-ldadd = $(LDADD)
49 link-ldadd += $(ldflags-external)
50@@ -56,7 +61,7 @@ link-script-cppflags := \
51 $(cppflagscore))
52
53 ldargs-all_objs := -T $(link-script-dummy) --no-check-sections \
54- $(call ld-option,--no-warn-rwx-segments) \
55+ $(link-ldflags-common) \
56 $(link-objs) $(link-ldadd) $(libgcccore)
57 cleanfiles += $(link-out-dir)/all_objs.o
58 $(link-out-dir)/all_objs.o: $(objs) $(libdeps) $(MAKEFILE_LIST)
59@@ -70,7 +75,7 @@ $(link-out-dir)/unpaged_entries.txt: $(link-out-dir)/all_objs.o
60 $(AWK) '/ ____keep_pager/ { printf "-u%s ", $$3 }' > $@
61
62 unpaged-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
63- $(call ld-option,--no-warn-rwx-segments)
64+ $(link-ldflags-common)
65 unpaged-ldadd := $(objs) $(link-ldadd) $(libgcccore)
66 cleanfiles += $(link-out-dir)/unpaged.o
67 $(link-out-dir)/unpaged.o: $(link-out-dir)/unpaged_entries.txt
68@@ -99,7 +104,7 @@ $(link-out-dir)/init_entries.txt: $(link-out-dir)/all_objs.o
69 $(AWK) '/ ____keep_init/ { printf "-u%s ", $$3 }' > $@
70
71 init-ldargs := -T $(link-script-dummy) --no-check-sections --gc-sections \
72- $(call ld-option,--no-warn-rwx-segments)
73+ $(link-ldflags-common)
74 init-ldadd := $(link-objs-init) $(link-out-dir)/version.o $(link-ldadd) \
75 $(libgcccore)
76 cleanfiles += $(link-out-dir)/init.o
77diff --git a/ldelf/link.mk b/ldelf/link.mk
78index 64c8212a..bd49551e 100644
79--- a/ldelf/link.mk
80+++ b/ldelf/link.mk
81@@ -20,6 +20,9 @@ link-ldflags += -z max-page-size=4096 # OP-TEE always uses 4K alignment
82 ifeq ($(CFG_CORE_BTI),y)
83 link-ldflags += $(call ld-option,-z force-bti) --fatal-warnings
84 endif
85+ifeq ($(CFG_ARM32_$(sm)), y)
86+link-ldflags += $(call ld-option,--no-warn-execstack)
87+endif
88 link-ldflags += $(link-ldflags$(sm))
89
90 link-ldadd = $(addprefix -L,$(libdirs))