19#ifndef ZEPHYR_INCLUDE_LINKER_LINKER_DEFS_H_
20#define ZEPHYR_INCLUDE_LINKER_LINKER_DEFS_H_
34#define DT_NODE_HAS_STATUS(node, status) 0
46#define Z_LINK_ITERABLE(struct_type) \
47 _CONCAT(_##struct_type, _list_start) = .; \
48 KEEP(*(SORT_BY_NAME(._##struct_type.static.*))); \
49 _CONCAT(_##struct_type, _list_end) = .
51#define Z_LINK_ITERABLE_ALIGNED(struct_type, align) \
53 Z_LINK_ITERABLE(struct_type);
55#define Z_LINK_ITERABLE_GC_ALLOWED(struct_type) \
56 _CONCAT(_##struct_type, _list_start) = .; \
57 *(SORT_BY_NAME(._##struct_type.static.*)); \
58 _CONCAT(_##struct_type, _list_end) = .
74#define ITERABLE_SECTION_ROM(struct_type, subalign) \
75 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
77 Z_LINK_ITERABLE(struct_type); \
78 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
92#define ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign) \
93 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
95 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
96 } GROUP_LINK_IN(ROMABLE_REGION)
112#define ITERABLE_SECTION_RAM(struct_type, subalign) \
113 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
115 Z_LINK_ITERABLE(struct_type); \
116 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
130#define ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign) \
131 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
133 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
134 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
146#define CREATE_OBJ_LEVEL(object, level) \
147 __##object##_##level##_start = .; \
148 KEEP(*(SORT(.z_##object##_##level[0-9]_*))); \
149 KEEP(*(SORT(.z_##object##_##level[1-9][0-9]_*)));
156#elif defined(_ASMLANGUAGE)
160GDATA(__bss_num_words)
162GDATA(__data_region_load_start)
163GDATA(__data_region_start)
164GDATA(__data_region_num_words)
181extern char _app_smem_start[];
182extern char _app_smem_end[];
183extern char _app_smem_size[];
184extern char _app_smem_rom_start[];
185extern char _app_smem_num_words[];
187#ifdef CONFIG_LINKER_USE_PINNED_SECTION
188extern char _app_smem_pinned_start[];
189extern char _app_smem_pinned_end[];
190extern char _app_smem_pinned_size[];
191extern char _app_smem_pinned_num_words[];
204extern char __kernel_ram_start[];
205extern char __kernel_ram_end[];
206extern char __kernel_ram_size[];
209extern char __bss_start[];
210extern char __bss_end[];
214extern char __data_region_load_start[];
215extern char __data_region_start[];
216extern char __data_region_end[];
221extern char z_mapped_start[];
222extern char z_mapped_end[];
226extern char __rom_region_start[];
227extern char __rom_region_end[];
228extern char __rom_region_size[];
231extern char _flash_used[];
234extern char _image_ram_start[];
235extern char _image_ram_end[];
237extern char __text_region_start[];
238extern char __text_region_end[];
239extern char __text_region_size[];
241extern char __rodata_region_start[];
242extern char __rodata_region_end[];
243extern char __rodata_region_size[];
245extern char _vector_start[];
246extern char _vector_end[];
248#ifdef CONFIG_SW_VECTOR_RELAY
249extern char __vector_relay_table[];
252#ifdef CONFIG_COVERAGE_GCOV
253extern char __gcov_bss_start[];
254extern char __gcov_bss_end[];
255extern char __gcov_bss_size[];
261#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ccm), okay)
262extern char __ccm_data_rom_start[];
263extern char __ccm_start[];
264extern char __ccm_data_start[];
265extern char __ccm_data_end[];
266extern char __ccm_bss_start[];
267extern char __ccm_bss_end[];
268extern char __ccm_noinit_start[];
269extern char __ccm_noinit_end[];
270extern char __ccm_end[];
273#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_itcm), okay)
274extern char __itcm_start[];
275extern char __itcm_end[];
276extern char __itcm_size[];
277extern char __itcm_load_start[];
280#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
281extern char __dtcm_data_start[];
282extern char __dtcm_data_end[];
283extern char __dtcm_bss_start[];
284extern char __dtcm_bss_end[];
285extern char __dtcm_noinit_start[];
286extern char __dtcm_noinit_end[];
287extern char __dtcm_data_load_start[];
288extern char __dtcm_start[];
289extern char __dtcm_end[];
292#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ocm), okay)
293extern char __ocm_data_start[];
294extern char __ocm_data_end[];
295extern char __ocm_bss_start[];
296extern char __ocm_bss_end[];
297extern char __ocm_start[];
298extern char __ocm_end[];
299extern char __ocm_size[];
305#ifdef CONFIG_ARM_FIRMWARE_HAS_SECURE_ENTRY_FUNCS
306extern char __sg_start[];
307extern char __sg_end[];
308extern char __sg_size[];
319#ifdef CONFIG_NOCACHE_MEMORY
320extern char _nocache_ram_start[];
321extern char _nocache_ram_end[];
322extern char _nocache_ram_size[];
331#ifdef CONFIG_ARCH_HAS_RAMFUNC_SUPPORT
332extern char __ramfunc_start[];
333extern char __ramfunc_end[];
334extern char __ramfunc_size[];
335extern char __ramfunc_load_start[];
344#ifdef CONFIG_USERSPACE
345extern char z_priv_stacks_ram_start[];
346extern char z_priv_stacks_ram_end[];
347extern char z_user_stacks_start[];
348extern char z_user_stacks_end[];
349extern char z_kobject_data_begin[];
352#ifdef CONFIG_THREAD_LOCAL_STORAGE
353extern char __tdata_start[];
354extern char __tdata_end[];
355extern char __tdata_size[];
356extern char __tdata_align[];
357extern char __tbss_start[];
358extern char __tbss_end[];
359extern char __tbss_size[];
360extern char __tbss_align[];
361extern char __tls_start[];
362extern char __tls_end[];
363extern char __tls_size[];
366#ifdef CONFIG_LINKER_USE_BOOT_SECTION
370extern char lnkr_boot_start[];
371extern char lnkr_boot_end[];
373extern char lnkr_boot_text_start[];
374extern char lnkr_boot_text_end[];
375extern char lnkr_boot_text_size[];
376extern char lnkr_boot_data_start[];
377extern char lnkr_boot_data_end[];
378extern char lnkr_boot_data_size[];
379extern char lnkr_boot_rodata_start[];
380extern char lnkr_boot_rodata_end[];
381extern char lnkr_boot_rodata_size[];
382extern char lnkr_boot_bss_start[];
383extern char lnkr_boot_bss_end[];
384extern char lnkr_boot_bss_size[];
385extern char lnkr_boot_noinit_start[];
386extern char lnkr_boot_noinit_end[];
387extern char lnkr_boot_noinit_size[];
390#ifdef CONFIG_LINKER_USE_PINNED_SECTION
396extern char lnkr_pinned_start[];
397extern char lnkr_pinned_end[];
399extern char lnkr_pinned_text_start[];
400extern char lnkr_pinned_text_end[];
401extern char lnkr_pinned_text_size[];
402extern char lnkr_pinned_data_start[];
403extern char lnkr_pinned_data_end[];
404extern char lnkr_pinned_data_size[];
405extern char lnkr_pinned_rodata_start[];
406extern char lnkr_pinned_rodata_end[];
407extern char lnkr_pinned_rodata_size[];
408extern char lnkr_pinned_bss_start[];
409extern char lnkr_pinned_bss_end[];
410extern char lnkr_pinned_bss_size[];
411extern char lnkr_pinned_noinit_start[];
412extern char lnkr_pinned_noinit_end[];
413extern char lnkr_pinned_noinit_size[];
416static inline bool lnkr_is_pinned(
uint8_t *addr)
418 if ((addr >= (
uint8_t *)lnkr_pinned_start) &&
419 (addr < (
uint8_t *)lnkr_pinned_end)) {
427static inline bool lnkr_is_region_pinned(
uint8_t *addr,
size_t sz)
429 if ((addr >= (
uint8_t *)lnkr_pinned_start) &&
430 ((addr + sz) < (
uint8_t *)lnkr_pinned_end)) {
Common toolchain abstraction.
Definitions of various linker Sections.
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88