diff options
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.patch | 142 |
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 @@ | |||
1 | From f189457b79989543f65b8a4e8729eff2cdf9a758 Mon Sep 17 00:00:00 2001 | 1 | From b73c3d2829d3661ca66b5cc6b4181f3bf973b13f Mon Sep 17 00:00:00 2001 |
2 | From: Khem Raj <raj.khem@gmail.com> | 2 | From: Emekcan Aras <emekcan.aras@arm.com> |
3 | Date: Sat, 13 Aug 2022 19:24:55 -0700 | 3 | Date: Wed, 21 Dec 2022 10:55:58 +0000 |
4 | Subject: [PATCH] core: Define section attributes for clang | 4 | Subject: [PATCH 1/4] core: Define section attributes for clang |
5 | 5 | ||
6 | Clang's attribute section is not same as gcc, here we need to add flags | 6 | Clang's attribute section is not same as gcc, here we need to add flags |
7 | to sections so they can be eventually collected by linker into final | 7 | to sections so they can be eventually collected by linker into final |
@@ -30,16 +30,21 @@ going and match the functionality with gcc. | |||
30 | 30 | ||
31 | Upstream-Status: Pending | 31 | Upstream-Status: Pending |
32 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | 32 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
33 | Signed-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 | ||
43 | diff --git a/core/arch/arm/kernel/thread.c b/core/arch/arm/kernel/thread.c | ||
44 | index 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) | 80 | diff --git a/core/arch/arm/mm/core_mmu_lpae.c b/core/arch/arm/mm/core_mmu_lpae.c |
81 | index 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 | 135 | diff --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 | 136 | index 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; |
189 | diff --git a/core/arch/arm/mm/pgt_cache.c b/core/arch/arm/mm/pgt_cache.c | ||
190 | index 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++) { | ||
213 | diff --git a/core/kernel/thread.c b/core/kernel/thread.c | ||
214 | index 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 | -- | ||
244 | 2.40.1 | ||
245 | |||
246 | |||