summaryrefslogtreecommitdiffstats
path: root/recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch')
-rw-r--r--recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch142
1 files changed, 79 insertions, 63 deletions
diff --git a/recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch b/recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch
index 2abd78a8..8a9062f3 100644
--- a/recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch
+++ b/recipes-security/optee-imx/optee-os/0001-core-Define-section-attributes-for-clang.patch
@@ -1,7 +1,7 @@
1From f189457b79989543f65b8a4e8729eff2cdf9a758 Mon Sep 17 00:00:00 2001 1From b73c3d2829d3661ca66b5cc6b4181f3bf973b13f Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com> 2From: Emekcan Aras <emekcan.aras@arm.com>
3Date: Sat, 13 Aug 2022 19:24:55 -0700 3Date: Wed, 21 Dec 2022 10:55:58 +0000
4Subject: [PATCH] core: Define section attributes for clang 4Subject: [PATCH 1/4] core: Define section attributes for clang
5 5
6Clang's attribute section is not same as gcc, here we need to add flags 6Clang's attribute section is not same as gcc, here we need to add flags
7to sections so they can be eventually collected by linker into final 7to sections so they can be eventually collected by linker into final
@@ -30,16 +30,21 @@ going and match the functionality with gcc.
30 30
31Upstream-Status: Pending 31Upstream-Status: Pending
32Signed-off-by: Khem Raj <raj.khem@gmail.com> 32Signed-off-by: Khem Raj <raj.khem@gmail.com>
33Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
33--- 34---
35
34 core/arch/arm/kernel/thread.c | 19 +++++++++++++++-- 36 core/arch/arm/kernel/thread.c | 19 +++++++++++++++--
35 core/arch/arm/mm/core_mmu_lpae.c | 35 ++++++++++++++++++++++++++++---- 37 core/arch/arm/mm/core_mmu_lpae.c | 35 +++++++++++++++++++++++++++----
38 core/arch/arm/mm/core_mmu_v7.c | 36 +++++++++++++++++++++++++++++---
36 core/arch/arm/mm/pgt_cache.c | 12 ++++++++++- 39 core/arch/arm/mm/pgt_cache.c | 12 ++++++++++-
37 core/kernel/thread.c | 13 +++++++++++- 40 core/kernel/thread.c | 13 +++++++++++-
38 4 files changed, 71 insertions(+), 8 deletions(-) 41 5 files changed, 104 insertions(+), 11 deletions(-)
39 42
43diff --git a/core/arch/arm/kernel/thread.c b/core/arch/arm/kernel/thread.c
44index 22ef932f9..7a9078d2e 100644
40--- a/core/arch/arm/kernel/thread.c 45--- a/core/arch/arm/kernel/thread.c
41+++ b/core/arch/arm/kernel/thread.c 46+++ b/core/arch/arm/kernel/thread.c
42@@ -44,16 +44,31 @@ static size_t thread_user_kcode_size __n 47@@ -44,15 +44,30 @@ static size_t thread_user_kcode_size __nex_bss;
43 #if defined(CFG_CORE_UNMAP_CORE_AT_EL0) && \ 48 #if defined(CFG_CORE_UNMAP_CORE_AT_EL0) && \
44 defined(CFG_CORE_WORKAROUND_SPECTRE_BP_SEC) && defined(ARM64) 49 defined(CFG_CORE_WORKAROUND_SPECTRE_BP_SEC) && defined(ARM64)
45 long thread_user_kdata_sp_offset __nex_bss; 50 long thread_user_kdata_sp_offset __nex_bss;
@@ -55,27 +60,28 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
55 SMALL_PAGE_SIZE)] 60 SMALL_PAGE_SIZE)]
56 __aligned(SMALL_PAGE_SIZE) 61 __aligned(SMALL_PAGE_SIZE)
57+#ifndef __clang__ 62+#ifndef __clang__
58 #ifndef CFG_VIRTUALIZATION 63 #ifndef CFG_NS_VIRTUALIZATION
59- __section(".nozi.kdata_page"); 64- __section(".nozi.kdata_page");
60+ __section(".nozi.kdata_page") 65+ __section(".nozi.kdata_page")
61 #else 66 #else
62- __section(".nex_nozi.kdata_page"); 67- __section(".nex_nozi.kdata_page");
63+ __section(".nex_nozi.kdata_page") 68+ __section(".nex_nozi.kdata_page")
64 #endif 69 #endif
65 #endif 70+#endif
66+ ; 71+ ;
67+#endif 72+#endif
68+ 73+
69+/* reset BSS section to default ( .bss ) */ 74+/* reset BSS section to default ( .bss ) */
70+#ifdef __clang__ 75+#ifdef __clang__
71+#pragma clang section bss="" 76+#pragma clang section bss=""
72+#endif 77 #endif
73 78
74 #ifdef ARM32 79 #ifdef ARM32
75 uint32_t __nostackcheck thread_get_exceptions(void) 80diff --git a/core/arch/arm/mm/core_mmu_lpae.c b/core/arch/arm/mm/core_mmu_lpae.c
81index 6df2c68cf..a877e4965 100644
76--- a/core/arch/arm/mm/core_mmu_lpae.c 82--- a/core/arch/arm/mm/core_mmu_lpae.c
77+++ b/core/arch/arm/mm/core_mmu_lpae.c 83+++ b/core/arch/arm/mm/core_mmu_lpae.c
78@@ -233,19 +233,46 @@ typedef uint16_t l1_idx_t; 84@@ -238,19 +238,46 @@ typedef uint16_t l1_idx_t;
79 typedef uint64_t base_xlat_tbls_t[CFG_TEE_CORE_NB_CORE][NUM_BASE_LEVEL_ENTRIES]; 85 typedef uint64_t base_xlat_tbls_t[CFG_TEE_CORE_NB_CORE][NUM_BASE_LEVEL_ENTRIES];
80 typedef uint64_t xlat_tbl_t[XLAT_TABLE_ENTRIES]; 86 typedef uint64_t xlat_tbl_t[XLAT_TABLE_ENTRIES];
81 87
@@ -126,59 +132,11 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
126 /* 132 /*
127 * TAs page table entry inside a level 1 page table. 133 * TAs page table entry inside a level 1 page table.
128 * 134 *
129--- a/core/arch/arm/mm/pgt_cache.c 135diff --git a/core/arch/arm/mm/core_mmu_v7.c b/core/arch/arm/mm/core_mmu_v7.c
130+++ b/core/arch/arm/mm/pgt_cache.c 136index 58596be84..98fa58635 100644
131@@ -410,8 +410,18 @@ void pgt_init(void)
132 * has a large alignment, while .bss has a small alignment. The current
133 * link script is optimized for small alignment in .bss
134 */
135+#ifdef __clang__
136+#pragma clang section bss=".nozi.mmu.l2"
137+#endif
138 static uint8_t pgt_tables[PGT_CACHE_SIZE][PGT_SIZE]
139- __aligned(PGT_SIZE) __section(".nozi.pgt_cache");
140+ __aligned(PGT_SIZE)
141+#ifndef __clang__
142+ __section(".nozi.pgt_cache")
143+#endif
144+ ;
145+#ifdef __clang__
146+#pragma clang section bss=""
147+#endif
148 size_t n;
149
150 for (n = 0; n < ARRAY_SIZE(pgt_tables); n++) {
151--- a/core/kernel/thread.c
152+++ b/core/kernel/thread.c
153@@ -38,13 +38,24 @@ struct thread_core_local thread_core_loc
154 name[stack_num][sizeof(name[stack_num]) / sizeof(uint32_t) - 1]
155 #endif
156
157+#define DO_PRAGMA(x) _Pragma (#x)
158+
159+#ifdef __clang__
160+#define DECLARE_STACK(name, num_stacks, stack_size, linkage) \
161+DO_PRAGMA (clang section bss=".nozi_stack." #name) \
162+linkage uint32_t name[num_stacks] \
163+ [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \
164+ STACK_ALIGNMENT) / sizeof(uint32_t)] \
165+ __attribute__((aligned(STACK_ALIGNMENT))); \
166+DO_PRAGMA(clang section bss="")
167+#else
168 #define DECLARE_STACK(name, num_stacks, stack_size, linkage) \
169 linkage uint32_t name[num_stacks] \
170 [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \
171 STACK_ALIGNMENT) / sizeof(uint32_t)] \
172 __attribute__((section(".nozi_stack." # name), \
173 aligned(STACK_ALIGNMENT)))
174-
175+#endif
176 #define GET_STACK(stack) ((vaddr_t)(stack) + STACK_SIZE(stack))
177
178 DECLARE_STACK(stack_tmp, CFG_TEE_CORE_NB_CORE, STACK_TMP_SIZE,
179--- a/core/arch/arm/mm/core_mmu_v7.c 137--- a/core/arch/arm/mm/core_mmu_v7.c
180+++ b/core/arch/arm/mm/core_mmu_v7.c 138+++ b/core/arch/arm/mm/core_mmu_v7.c
181@@ -204,16 +204,46 @@ typedef uint32_t l1_xlat_tbl_t[NUM_L1_EN 139@@ -204,16 +204,46 @@ typedef uint32_t l1_xlat_tbl_t[NUM_L1_ENTRIES];
182 typedef uint32_t l2_xlat_tbl_t[NUM_L2_ENTRIES]; 140 typedef uint32_t l2_xlat_tbl_t[NUM_L2_ENTRIES];
183 typedef uint32_t ul1_xlat_tbl_t[NUM_UL1_ENTRIES]; 141 typedef uint32_t ul1_xlat_tbl_t[NUM_UL1_ENTRIES];
184 142
@@ -228,3 +186,61 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com>
228 186
229 struct mmu_partition { 187 struct mmu_partition {
230 l1_xlat_tbl_t *l1_table; 188 l1_xlat_tbl_t *l1_table;
189diff --git a/core/arch/arm/mm/pgt_cache.c b/core/arch/arm/mm/pgt_cache.c
190index 79553c6d2..b9efdf427 100644
191--- a/core/arch/arm/mm/pgt_cache.c
192+++ b/core/arch/arm/mm/pgt_cache.c
193@@ -410,8 +410,18 @@ void pgt_init(void)
194 * has a large alignment, while .bss has a small alignment. The current
195 * link script is optimized for small alignment in .bss
196 */
197+#ifdef __clang__
198+#pragma clang section bss=".nozi.mmu.l2"
199+#endif
200 static uint8_t pgt_tables[PGT_CACHE_SIZE][PGT_SIZE]
201- __aligned(PGT_SIZE) __section(".nozi.pgt_cache");
202+ __aligned(PGT_SIZE)
203+#ifndef __clang__
204+ __section(".nozi.pgt_cache")
205+#endif
206+ ;
207+#ifdef __clang__
208+#pragma clang section bss=""
209+#endif
210 size_t n;
211
212 for (n = 0; n < ARRAY_SIZE(pgt_tables); n++) {
213diff --git a/core/kernel/thread.c b/core/kernel/thread.c
214index e48294b3b..8de9064ca 100644
215--- a/core/kernel/thread.c
216+++ b/core/kernel/thread.c
217@@ -38,13 +38,24 @@ struct thread_core_local thread_core_local[CFG_TEE_CORE_NB_CORE] __nex_bss;
218 name[stack_num][sizeof(name[stack_num]) / sizeof(uint32_t) - 1]
219 #endif
220
221+#define DO_PRAGMA(x) _Pragma (#x)
222+
223+#ifdef __clang__
224+#define DECLARE_STACK(name, num_stacks, stack_size, linkage) \
225+DO_PRAGMA (clang section bss=".nozi_stack." #name) \
226+linkage uint32_t name[num_stacks] \
227+ [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \
228+ STACK_ALIGNMENT) / sizeof(uint32_t)] \
229+ __attribute__((aligned(STACK_ALIGNMENT))); \
230+DO_PRAGMA(clang section bss="")
231+#else
232 #define DECLARE_STACK(name, num_stacks, stack_size, linkage) \
233 linkage uint32_t name[num_stacks] \
234 [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \
235 STACK_ALIGNMENT) / sizeof(uint32_t)] \
236 __attribute__((section(".nozi_stack." # name), \
237 aligned(STACK_ALIGNMENT)))
238-
239+#endif
240 #define GET_STACK(stack) ((vaddr_t)(stack) + STACK_SIZE(stack))
241
242 DECLARE_STACK(stack_tmp, CFG_TEE_CORE_NB_CORE, STACK_TMP_SIZE,
243--
2442.40.1
245
246