1 /*
2  * Copyright (c) 2013-2014, Wind River Systems, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief Definitions of various linker Sections.
10  *
11  * Linker Section declarations used by linker script, C files and Assembly
12  * files.
13  */
14 
15 #ifndef ZEPHYR_INCLUDE_LINKER_SECTIONS_H_
16 #define ZEPHYR_INCLUDE_LINKER_SECTIONS_H_
17 
18 #define _TEXT_SECTION_NAME text
19 #define _RODATA_SECTION_NAME rodata
20 #define _CTOR_SECTION_NAME ctors
21 /* Linker issue with XIP where the name "data" cannot be used */
22 #define _DATA_SECTION_NAME datas
23 #define _BSS_SECTION_NAME bss
24 #define _NOINIT_SECTION_NAME noinit
25 
26 #define _APP_SMEM_SECTION_NAME		app_smem
27 #define _APP_DATA_SECTION_NAME		app_datas
28 #define _APP_BSS_SECTION_NAME		app_bss
29 #define _APP_NOINIT_SECTION_NAME	app_noinit
30 
31 #define _APP_SMEM_PINNED_SECTION_NAME	app_smem_pinned
32 
33 #define _UNDEFINED_SECTION_NAME undefined
34 
35 /* Interrupts */
36 #define _IRQ_VECTOR_TABLE_SECTION_NAME	.gnu.linkonce.irq_vector_table
37 #define _IRQ_VECTOR_TABLE_SECTION_SYMS	.gnu.linkonce.irq_vector_table*
38 
39 #define _SW_ISR_TABLE_SECTION_NAME	.gnu.linkonce.sw_isr_table
40 #define _SW_ISR_TABLE_SECTION_SYMS	.gnu.linkonce.sw_isr_table*
41 
42 #ifdef CONFIG_SHARED_INTERRUPTS
43 #define _SHARED_SW_ISR_TABLE_SECTION_NAME	.gnu.linkonce.shared_sw_isr_table
44 #define _SHARED_SW_ISR_TABLE_SECTION_SYMS	.gnu.linkonce.shared_sw_isr_table*
45 #endif /* CONFIG_SHARED_INTERRUPTS */
46 
47 /* Architecture-specific sections */
48 #if defined(CONFIG_ARM)
49 #define _KINETIS_FLASH_CONFIG_SECTION_NAME  kinetis_flash_config
50 #define _TI_CCFG_SECTION_NAME	        .ti_ccfg
51 
52 #define _CCM_DATA_SECTION_NAME		.ccm_data
53 #define _CCM_BSS_SECTION_NAME		.ccm_bss
54 #define _CCM_NOINIT_SECTION_NAME	.ccm_noinit
55 
56 #define _ITCM_SECTION_NAME		.itcm
57 
58 #define _DTCM_DATA_SECTION_NAME	        .dtcm_data
59 #define _DTCM_BSS_SECTION_NAME		.dtcm_bss
60 #define _DTCM_NOINIT_SECTION_NAME	.dtcm_noinit
61 
62 #define _OCM_DATA_SECTION_NAME	        .ocm_data
63 #define _OCM_BSS_SECTION_NAME		.ocm_bss
64 #endif
65 
66 #define _IMX_BOOT_CONF_SECTION_NAME	.boot_hdr.conf
67 #define _IMX_BOOT_DATA_SECTION_NAME	.boot_hdr.data
68 #define _IMX_BOOT_IVT_SECTION_NAME	.boot_hdr.ivt
69 #define _IMX_BOOT_DCD_SECTION_NAME	.boot_hdr.dcd_data
70 #define _IMX_BOOT_CONTAINER_SECTION_NAME .boot_hdr.container
71 
72 #define _STM32_SDRAM1_SECTION_NAME	.stm32_sdram1
73 #define _STM32_SDRAM2_SECTION_NAME	.stm32_sdram2
74 
75 #define _STM32_BACKUP_SRAM_SECTION_NAME	.stm32_backup_sram
76 
77 #ifdef CONFIG_NOCACHE_MEMORY
78 #define _NOCACHE_SECTION_NAME nocache
79 #endif
80 
81 /* Symbol table section */
82 #if defined(CONFIG_SYMTAB)
83 #define _SYMTAB_INFO_SECTION_NAME	.gnu.linkonce.symtab.info
84 #define _SYMTAB_ENTRY_SECTION_NAME	.gnu.linkonce.symtab.entry
85 #define _SYMTAB_SECTION_SYMS		.gnu.linkonce.symtab*
86 #endif /* CONFIG_SYMTAB */
87 
88 #if defined(CONFIG_LINKER_USE_BOOT_SECTION)
89 #define BOOT_TEXT_SECTION_NAME		boot_text
90 #define BOOT_BSS_SECTION_NAME		boot_bss
91 #define BOOT_RODATA_SECTION_NAME	boot_rodata
92 #define BOOT_DATA_SECTION_NAME		boot_data
93 #define BOOT_NOINIT_SECTION_NAME	boot_noinit
94 #endif
95 
96 #if defined(CONFIG_LINKER_USE_PINNED_SECTION)
97 #define PINNED_TEXT_SECTION_NAME	pinned_text
98 #define PINNED_BSS_SECTION_NAME		pinned_bss
99 #define PINNED_RODATA_SECTION_NAME	pinned_rodata
100 #define PINNED_DATA_SECTION_NAME	pinned_data
101 #define PINNED_NOINIT_SECTION_NAME	pinned_noinit
102 #endif
103 
104 #if defined(CONFIG_LINKER_USE_ONDEMAND_SECTION)
105 #define ONDEMAND_TEXT_SECTION_NAME	ondemand_text
106 #define ONDEMAND_RODATA_SECTION_NAME	ondemand_rodata
107 #endif
108 
109 /* Short section references for use in ASM files */
110 #if defined(_ASMLANGUAGE)
111 /* Various text section names */
112 #define TEXT text
113 
114 /* Various data type section names */
115 #define BSS bss
116 #define RODATA rodata
117 #define DATA data
118 #define NOINIT noinit
119 
120 #if defined(CONFIG_LINKER_USE_BOOT_SECTION)
121 #define BOOT_TEXT			BOOT_TEXT_SECTION_NAME
122 #define BOOT_BSS			BOOT_BSS_SECTION_NAME
123 #define BOOT_RODATA			BOOT_RODATA_SECTION_NAME
124 #define BOOT_DATA			BOOT_DATA_SECTION_NAME
125 #define BOOT_NOINIT			BOOT_NOINIT_SECTION_NAME
126 #else
127 #define BOOT_TEXT			TEXT
128 #define BOOT_BSS			BSS
129 #define BOOT_RODATA			RODATA
130 #define BOOT_DATA			DATA
131 #define BOOT_NOINIT			NOINIT
132 #endif /* CONFIG_LINKER_USE_BOOT_SECTION */
133 
134 #if defined(CONFIG_LINKER_USE_PINNED_SECTION)
135 #define PINNED_TEXT			PINNED_TEXT_SECTION_NAME
136 #define PINNED_BSS			PINNED_BSS_SECTION_NAME
137 #define PINNED_RODATA			PINNED_RODATA_SECTION_NAME
138 #define PINNED_DATA			PINNED_DATA_SECTION_NAME
139 #define PINNED_NOINIT			PINNED_NOINIT_SECTION_NAME
140 #else
141 #define PINNED_TEXT			TEXT
142 #define PINNED_BSS			BSS
143 #define PINNED_RODATA			RODATA
144 #define PINNED_DATA			DATA
145 #define PINNED_NOINIT			NOINIT
146 #endif /* CONFIG_LINKER_USE_PINNED_SECTION */
147 
148 #if defined(CONFIG_LINKER_USE_ONDEMAND_SECTION)
149 #define ONDEMAND_TEXT			ONDEMAND_TEXT_SECTION_NAME
150 #define ONDEMAND_RODATA		ONDEMAND_RODATA_SECTION_NAME
151 #else
152 #define ONDEMAND_TEXT			TEXT
153 #define ONDEMAND_RODATA		RODATA
154 #endif /* CONFIG_LINKER_USE_ONDEMAND_SECTION */
155 
156 #endif /* _ASMLANGUAGE */
157 
158 #include <zephyr/linker/section_tags.h>
159 
160 #endif /* ZEPHYR_INCLUDE_LINKER_SECTIONS_H_ */
161