# originates from thread-local-storage.ld if(CONFIG_THREAD_LOCAL_STORAGE) zephyr_linker_section(NAME .tdata LMA FLASH NOINPUT) zephyr_linker_section_configure(SECTION .tdata INPUT ".tdata") zephyr_linker_section_configure(SECTION .tdata INPUT ".tdata.*") zephyr_linker_section_configure(SECTION .tdata INPUT ".gnu.linkonce.td.*") # GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) zephyr_linker_section(NAME .tbss LMA FLASH NOINPUT) zephyr_linker_section_configure(SECTION .tbss INPUT ".tbss") zephyr_linker_section_configure(SECTION .tbss INPUT ".tbss.*") zephyr_linker_section_configure(SECTION .tbss INPUT ".gnu.linkonce.tb.*") zephyr_linker_section_configure(SECTION .tbss INPUT ".tcommon") # GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) # # These needs to be outside of the tdata/tbss # sections or else they would be considered # thread-local variables, and the code would use # the wrong values. # # This scheme is not yet handled if(CONFIG_XIP) # /* The "master copy" of tdata should be only in flash on XIP systems */ # PROVIDE(__tdata_start = LOADADDR(tdata)); else() # PROVIDE(__tdata_start = ADDR(tdata)); endif() # PROVIDE(__tdata_size = SIZEOF(tdata)); # PROVIDE(__tdata_end = __tdata_start + __tdata_size); # PROVIDE(__tdata_align = ALIGNOF(tdata)); # # PROVIDE(__tbss_start = ADDR(tbss)); # PROVIDE(__tbss_size = SIZEOF(tbss)); # PROVIDE(__tbss_end = __tbss_start + __tbss_size); # PROVIDE(__tbss_align = ALIGNOF(tbss)); # # PROVIDE(__tls_start = __tdata_start); # PROVIDE(__tls_end = __tbss_end); # PROVIDE(__tls_size = __tbss_end - __tdata_start); endif()