1# The contents of this file is based on include/zephyr/linker/thread-local-storage.ld 2# Please keep in sync 3 4if(CONFIG_THREAD_LOCAL_STORAGE) 5 zephyr_linker_section(NAME .tdata LMA FLASH NOINPUT) 6 zephyr_linker_section_configure(SECTION .tdata INPUT ".tdata") 7 zephyr_linker_section_configure(SECTION .tdata INPUT ".tdata.*") 8 zephyr_linker_section_configure(SECTION .tdata INPUT ".gnu.linkonce.td.*") 9 # GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION) 10 11 zephyr_linker_section(NAME .tbss LMA FLASH NOINPUT) 12 zephyr_linker_section_configure(SECTION .tbss INPUT ".tbss") 13 zephyr_linker_section_configure(SECTION .tbss INPUT ".tbss.*") 14 zephyr_linker_section_configure(SECTION .tbss INPUT ".gnu.linkonce.tb.*") 15 zephyr_linker_section_configure(SECTION .tbss INPUT ".tcommon") 16 # GROUP_ROM_LINK_IN(RAMABLE_REGION, RAMABLE_REGION) 17 18 # 19 # These needs to be outside of the tdata/tbss 20 # sections or else they would be considered 21 # thread-local variables, and the code would use 22 # the wrong values. 23 # 24 # This scheme is not yet handled 25 if(CONFIG_XIP) 26# /* The "master copy" of tdata should be only in flash on XIP systems */ 27# PROVIDE(__tdata_start = LOADADDR(tdata)); 28 else() 29# PROVIDE(__tdata_start = ADDR(tdata)); 30 endif() 31# PROVIDE(__tdata_size = SIZEOF(tdata)); 32# PROVIDE(__tdata_end = __tdata_start + __tdata_size); 33# PROVIDE(__tdata_align = ALIGNOF(tdata)); 34# 35# PROVIDE(__tbss_start = ADDR(tbss)); 36# PROVIDE(__tbss_size = SIZEOF(tbss)); 37# PROVIDE(__tbss_end = __tbss_start + __tbss_size); 38# PROVIDE(__tbss_align = ALIGNOF(tbss)); 39# 40# PROVIDE(__tls_start = __tdata_start); 41# PROVIDE(__tls_end = __tbss_end); 42# PROVIDE(__tls_size = __tbss_end - __tdata_start); 43 44endif() 45