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 #if defined(CONFIG_LINKER_USE_BOOT_SECTION)
81 #define BOOT_TEXT_SECTION_NAME		boot_text
82 #define BOOT_BSS_SECTION_NAME		boot_bss
83 #define BOOT_RODATA_SECTION_NAME	boot_rodata
84 #define BOOT_DATA_SECTION_NAME		boot_data
85 #define BOOT_NOINIT_SECTION_NAME	boot_noinit
86 #endif
87 
88 #if defined(CONFIG_LINKER_USE_PINNED_SECTION)
89 #define PINNED_TEXT_SECTION_NAME	pinned_text
90 #define PINNED_BSS_SECTION_NAME		pinned_bss
91 #define PINNED_RODATA_SECTION_NAME	pinned_rodata
92 #define PINNED_DATA_SECTION_NAME	pinned_data
93 #define PINNED_NOINIT_SECTION_NAME	pinned_noinit
94 #endif
95 
96 /* Short section references for use in ASM files */
97 #if defined(_ASMLANGUAGE)
98 /* Various text section names */
99 #define TEXT text
100 
101 /* Various data type section names */
102 #define BSS bss
103 #define RODATA rodata
104 #define DATA data
105 #define NOINIT noinit
106 
107 #if defined(CONFIG_LINKER_USE_BOOT_SECTION)
108 #define BOOT_TEXT			BOOT_TEXT_SECTION_NAME
109 #define BOOT_BSS			BOOT_BSS_SECTION_NAME
110 #define BOOT_RODATA			BOOT_RODATA_SECTION_NAME
111 #define BOOT_DATA			BOOT_DATA_SECTION_NAME
112 #define BOOT_NOINIT			BOOT_NOINIT_SECTION_NAME
113 #else
114 #define BOOT_TEXT			TEXT
115 #define BOOT_BSS			BSS
116 #define BOOT_RODATA			RODATA
117 #define BOOT_DATA			DATA
118 #define BOOT_NOINIT			NOINIT
119 #endif /* CONFIG_LINKER_USE_BOOT_SECTION */
120 
121 #if defined(CONFIG_LINKER_USE_PINNED_SECTION)
122 #define PINNED_TEXT			PINNED_TEXT_SECTION_NAME
123 #define PINNED_BSS			PINNED_BSS_SECTION_NAME
124 #define PINNED_RODATA			PINNED_RODATA_SECTION_NAME
125 #define PINNED_DATA			PINNED_DATA_SECTION_NAME
126 #define PINNED_NOINIT			PINNED_NOINIT_SECTION_NAME
127 #else
128 #define PINNED_TEXT			TEXT
129 #define PINNED_BSS			BSS
130 #define PINNED_RODATA			RODATA
131 #define PINNED_DATA			DATA
132 #define PINNED_NOINIT			NOINIT
133 #endif /* CONFIG_LINKER_USE_PINNED_SECTION */
134 
135 #endif /* _ASMLANGUAGE */
136 
137 #include <zephyr/linker/section_tags.h>
138 
139 #endif /* ZEPHYR_INCLUDE_LINKER_SECTIONS_H_ */
140