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