@@ -210,20 +210,22 @@ SECTIONS
210
210
. = ALIGN(4);
211
211
/* preinit data */
212
212
PROVIDE_HIDDEN (__preinit_array_start = .);
213
+ PROVIDE_HIDDEN (__bothinit_array_start = .);
213
214
KEEP(*(.preinit_array))
214
215
PROVIDE_HIDDEN (__preinit_array_end = .);
215
216
216
217
. = ALIGN(4);
217
218
/* init data */
218
219
PROVIDE_HIDDEN (__init_array_start = .);
219
- KEEP(*(SORT (.init_array.*)))
220
+ KEEP(*(SORT_BY_INIT_PRIORITY (.init_array.*)))
220
221
KEEP(*(.init_array))
221
222
PROVIDE_HIDDEN (__init_array_end = .);
223
+ PROVIDE_HIDDEN (__bothinit_array_end = .);
222
224
223
225
. = ALIGN(4);
224
226
/* finit data */
225
227
PROVIDE_HIDDEN (__fini_array_start = .);
226
- KEEP(*(SORT (.fini_array.*)))
228
+ KEEP(*(SORT_BY_INIT_PRIORITY (.fini_array.*)))
227
229
KEEP(*(.fini_array))
228
230
PROVIDE_HIDDEN (__fini_array_end = .);
229
231
@@ -251,6 +253,10 @@ SECTIONS
251
253
LONG (ADDR(.ER_CODE_SRAM))
252
254
LONG (SIZEOF(.ER_CODE_SRAM) / 4)
253
255
#endif
256
+ LONG (LOADADDR(.TFM_TDATA))
257
+ LONG (ADDR(.TFM_TLS_BASE))
258
+ LONG (SIZEOF(.TFM_TDATA) / 4)
259
+
254
260
__copy_table_end__ = .;
255
261
256
262
/* .zero.table */
@@ -265,6 +271,10 @@ SECTIONS
265
271
LONG (ADDR(.TFM_SP_META_PTR))
266
272
LONG (SIZEOF(.TFM_SP_META_PTR) / 4)
267
273
#endif
274
+
275
+ LONG (ADDR(.TFM_TLS_BASE) + SIZEOF(.TFM_TDATA))
276
+ LONG ((SIZEOF(.TFM_TLS_BASE) - SIZEOF(.TFM_TDATA)) / 4)
277
+
268
278
__zero_table_end__ = .;
269
279
270
280
/* Capture all remaining code (except RAM code) in the privileged TF-M
@@ -552,6 +562,10 @@ SECTIONS
552
562
. = ALIGN(4);
553
563
} > RAM AT > FLASH
554
564
565
+ PROVIDE(__data_source = LOADADDR(.TFM_DATA));
566
+ PROVIDE(__data_start = ADDR(.TFM_DATA));
567
+ PROVIDE(__data_size = SIZEOF(.TFM_DATA));
568
+
555
569
.TFM_BSS ALIGN(4) (NOLOAD) :
556
570
{
557
571
__bss_start__ = .;
@@ -577,6 +591,31 @@ SECTIONS
577
591
. = ALIGN(4);
578
592
__bss_end__ = .;
579
593
} > RAM
594
+
595
+ PROVIDE(__bss_start = ADDR(.TFM_BSS));
596
+ PROVIDE(__bss_size = SIZEOF(.TFM_BSS));
597
+
598
+ .TFM_TDATA :
599
+ {
600
+ PROVIDE( __tls_start_addr = . );
601
+ *(.tdata .tdata.* .gnu.linkonce.td.*)
602
+ } > RAM
603
+
604
+ .TFM_TBSS :
605
+ {
606
+ *(.tbss .tbss.* .gnu.linkonce.tb.*)
607
+ *(.tcommon)
608
+ PROVIDE( __tls_end_addr = . );
609
+ } > RAM
610
+
611
+ .TFM_TLS_BASE : {
612
+ . = . + (__tls_end_addr - __tls_start_addr);
613
+ } > RAM
614
+ PROVIDE( __tls_base = ADDR(.TFM_TLS_BASE) );
615
+ PROVIDE( __tls_align = MAX(ALIGNOF(.TFM_TDATA), ALIGNOF(.TFM_TBSS)) );
616
+ PROVIDE( __arm32_tls_tcb_offset = MAX(8, __tls_align) );
617
+ PROVIDE( __arm64_tls_tcb_offset = MAX(16, __tls_align) );
618
+
580
619
Image$$ER_PART_RT_POOL$$ZI$$Base = __partition_runtime_start__;
581
620
Image$$ER_PART_RT_POOL$$ZI$$Limit = __partition_runtime_end__;
582
621
Image$$ER_SERV_RT_POOL$$ZI$$Base = __service_runtime_start__;
0 commit comments