@@ -210,20 +210,22 @@ SECTIONS
210210        . = ALIGN(4);
211211        /* preinit data */
212212        PROVIDE_HIDDEN (__preinit_array_start = .);
213+         PROVIDE_HIDDEN (__bothinit_array_start = .);
213214        KEEP(*(.preinit_array))
214215        PROVIDE_HIDDEN (__preinit_array_end = .);
215216
216217        . = ALIGN(4);
217218        /* init data */
218219        PROVIDE_HIDDEN (__init_array_start = .);
219-         KEEP(*(SORT (.init_array.*)))
220+         KEEP(*(SORT_BY_INIT_PRIORITY (.init_array.*)))
220221        KEEP(*(.init_array))
221222        PROVIDE_HIDDEN (__init_array_end = .);
223+         PROVIDE_HIDDEN (__bothinit_array_end = .);
222224
223225        . = ALIGN(4);
224226        /* finit data */
225227        PROVIDE_HIDDEN (__fini_array_start = .);
226-         KEEP(*(SORT (.fini_array.*)))
228+         KEEP(*(SORT_BY_INIT_PRIORITY (.fini_array.*)))
227229        KEEP(*(.fini_array))
228230        PROVIDE_HIDDEN (__fini_array_end = .);
229231
@@ -251,6 +253,10 @@ SECTIONS
251253        LONG (ADDR(.ER_CODE_SRAM))
252254        LONG (SIZEOF(.ER_CODE_SRAM) / 4)
253255#endif
256+         LONG (LOADADDR(.TFM_TDATA))
257+         LONG (ADDR(.TFM_TLS_BASE))
258+         LONG (SIZEOF(.TFM_TDATA) / 4)
259+ 
254260        __copy_table_end__ = .;
255261
256262        /* .zero.table */
@@ -265,6 +271,10 @@ SECTIONS
265271        LONG (ADDR(.TFM_SP_META_PTR))
266272        LONG (SIZEOF(.TFM_SP_META_PTR) / 4)
267273#endif
274+ 
275+         LONG (ADDR(.TFM_TLS_BASE) + SIZEOF(.TFM_TDATA))
276+         LONG ((SIZEOF(.TFM_TLS_BASE) - SIZEOF(.TFM_TDATA)) / 4)
277+ 
268278        __zero_table_end__ = .;
269279
270280        /* Capture all remaining code (except RAM code) in the privileged TF-M
@@ -552,6 +562,10 @@ SECTIONS
552562        . = ALIGN(4);
553563    } > RAM AT > FLASH
554564
565+     PROVIDE(__data_source = LOADADDR(.TFM_DATA));
566+     PROVIDE(__data_start = ADDR(.TFM_DATA));
567+     PROVIDE(__data_size = SIZEOF(.TFM_DATA));
568+ 
555569    .TFM_BSS ALIGN(4) (NOLOAD) :
556570    {
557571        __bss_start__ = .;
@@ -577,6 +591,31 @@ SECTIONS
577591        . = ALIGN(4);
578592        __bss_end__ = .;
579593    } > 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+ 
580619    Image$$ER_PART_RT_POOL$$ZI$$Base = __partition_runtime_start__;
581620    Image$$ER_PART_RT_POOL$$ZI$$Limit = __partition_runtime_end__;
582621    Image$$ER_SERV_RT_POOL$$ZI$$Base = __service_runtime_start__;
0 commit comments