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 
71 #define _STM32_SDRAM1_SECTION_NAME	.stm32_sdram1
72 #define _STM32_SDRAM2_SECTION_NAME	.stm32_sdram2
73 
74 #define _STM32_BACKUP_SRAM_SECTION_NAME	.stm32_backup_sram
75 
76 #ifdef CONFIG_NOCACHE_MEMORY
77 #define _NOCACHE_SECTION_NAME nocache
78 #endif
79 
80 /* Symbol table section */
81 #if defined(CONFIG_SYMTAB)
82 #define _SYMTAB_INFO_SECTION_NAME	.gnu.linkonce.symtab.info
83 #define _SYMTAB_ENTRY_SECTION_NAME	.gnu.linkonce.symtab.entry
84 #define _SYMTAB_SECTION_SYMS		.gnu.linkonce.symtab*
85 #endif /* CONFIG_SYMTAB */
86 
87 #if defined(CONFIG_LINKER_USE_BOOT_SECTION)
88 #define BOOT_TEXT_SECTION_NAME		boot_text
89 #define BOOT_BSS_SECTION_NAME		boot_bss
90 #define BOOT_RODATA_SECTION_NAME	boot_rodata
91 #define BOOT_DATA_SECTION_NAME		boot_data
92 #define BOOT_NOINIT_SECTION_NAME	boot_noinit
93 #endif
94 
95 #if defined(CONFIG_LINKER_USE_PINNED_SECTION)
96 #define PINNED_TEXT_SECTION_NAME	pinned_text
97 #define PINNED_BSS_SECTION_NAME		pinned_bss
98 #define PINNED_RODATA_SECTION_NAME	pinned_rodata
99 #define PINNED_DATA_SECTION_NAME	pinned_data
100 #define PINNED_NOINIT_SECTION_NAME	pinned_noinit
101 #endif
102 
103 /* Short section references for use in ASM files */
104 #if defined(_ASMLANGUAGE)
105 /* Various text section names */
106 #define TEXT text
107 
108 /* Various data type section names */
109 #define BSS bss
110 #define RODATA rodata
111 #define DATA data
112 #define NOINIT noinit
113 
114 #if defined(CONFIG_LINKER_USE_BOOT_SECTION)
115 #define BOOT_TEXT			BOOT_TEXT_SECTION_NAME
116 #define BOOT_BSS			BOOT_BSS_SECTION_NAME
117 #define BOOT_RODATA			BOOT_RODATA_SECTION_NAME
118 #define BOOT_DATA			BOOT_DATA_SECTION_NAME
119 #define BOOT_NOINIT			BOOT_NOINIT_SECTION_NAME
120 #else
121 #define BOOT_TEXT			TEXT
122 #define BOOT_BSS			BSS
123 #define BOOT_RODATA			RODATA
124 #define BOOT_DATA			DATA
125 #define BOOT_NOINIT			NOINIT
126 #endif /* CONFIG_LINKER_USE_BOOT_SECTION */
127 
128 #if defined(CONFIG_LINKER_USE_PINNED_SECTION)
129 #define PINNED_TEXT			PINNED_TEXT_SECTION_NAME
130 #define PINNED_BSS			PINNED_BSS_SECTION_NAME
131 #define PINNED_RODATA			PINNED_RODATA_SECTION_NAME
132 #define PINNED_DATA			PINNED_DATA_SECTION_NAME
133 #define PINNED_NOINIT			PINNED_NOINIT_SECTION_NAME
134 #else
135 #define PINNED_TEXT			TEXT
136 #define PINNED_BSS			BSS
137 #define PINNED_RODATA			RODATA
138 #define PINNED_DATA			DATA
139 #define PINNED_NOINIT			NOINIT
140 #endif /* CONFIG_LINKER_USE_PINNED_SECTION */
141 
142 #endif /* _ASMLANGUAGE */
143 
144 #include <zephyr/linker/section_tags.h>
145 
146 #endif /* ZEPHYR_INCLUDE_LINKER_SECTIONS_H_ */
147