Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
iterable_sections.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2020, Intel Corporation
3 * Copyright (C) 2023, Nordic Semiconductor ASA
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef INCLUDE_ZEPHYR_LINKER_ITERABLE_SECTIONS_H_
8#define INCLUDE_ZEPHYR_LINKER_ITERABLE_SECTIONS_H_
9
15#define Z_LINK_ITERABLE(struct_type) \
16 _CONCAT(_##struct_type, _list_start) = .; \
17 KEEP(*(SORT_BY_NAME(._##struct_type.static.*))); \
18 _CONCAT(_##struct_type, _list_end) = .
19
20#define Z_LINK_ITERABLE_NUMERIC(struct_type) \
21 _CONCAT(_##struct_type, _list_start) = .; \
22 KEEP(*(SORT(._##struct_type.static.*_?_*))); \
23 KEEP(*(SORT(._##struct_type.static.*_??_*))); \
24 _CONCAT(_##struct_type, _list_end) = .
25
26#define Z_LINK_ITERABLE_ALIGNED(struct_type, align) \
27 . = ALIGN(align); \
28 Z_LINK_ITERABLE(struct_type);
29
30#define Z_LINK_ITERABLE_GC_ALLOWED(struct_type) \
31 _CONCAT(_##struct_type, _list_start) = .; \
32 *(SORT_BY_NAME(._##struct_type.static.*)); \
33 _CONCAT(_##struct_type, _list_end) = .
34
49#define ITERABLE_SECTION_ROM(struct_type, subalign) \
50 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
51 { \
52 Z_LINK_ITERABLE(struct_type); \
53 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
54
64#define ITERABLE_SECTION_ROM_NUMERIC(struct_type, subalign) \
65 SECTION_PROLOGUE(struct_type##_area, EMPTY, SUBALIGN(subalign)) \
66 { \
67 Z_LINK_ITERABLE_NUMERIC(struct_type); \
68 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
69
82#define ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign) \
83 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
84 { \
85 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
86 } GROUP_LINK_IN(ROMABLE_REGION)
87
102#define ITERABLE_SECTION_RAM(struct_type, subalign) \
103 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
104 { \
105 Z_LINK_ITERABLE(struct_type); \
106 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
107
117#define ITERABLE_SECTION_RAM_NUMERIC(struct_type, subalign) \
118 SECTION_PROLOGUE(struct_type##_area, EMPTY, SUBALIGN(subalign)) \
119 { \
120 Z_LINK_ITERABLE_NUMERIC(struct_type); \
121 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
122
135#define ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign) \
136 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
137 { \
138 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
139 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
140 /* end of struct_section_apis */
144
145#endif /* INCLUDE_ZEPHYR_LINKER_ITERABLE_SECTIONS_H_ */