Zephyr Project API 4.0.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
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 KEEP(*(SORT(._##struct_type.static.*_???_*))); \
25 KEEP(*(SORT(._##struct_type.static.*_????_*))); \
26 KEEP(*(SORT(._##struct_type.static.*_?????_*))); \
27 _CONCAT(_##struct_type, _list_end) = .
28
29#define Z_LINK_ITERABLE_ALIGNED(struct_type, align) \
30 . = ALIGN(align); \
31 Z_LINK_ITERABLE(struct_type);
32
33#define Z_LINK_ITERABLE_GC_ALLOWED(struct_type) \
34 _CONCAT(_##struct_type, _list_start) = .; \
35 *(SORT_BY_NAME(._##struct_type.static.*)); \
36 _CONCAT(_##struct_type, _list_end) = .
37
38#define Z_LINK_ITERABLE_SUBALIGN CONFIG_LINKER_ITERABLE_SUBALIGN
39
54#define ITERABLE_SECTION_ROM(struct_type, subalign) \
55 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
56 { \
57 Z_LINK_ITERABLE(struct_type); \
58 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
59
69#define ITERABLE_SECTION_ROM_NUMERIC(struct_type, subalign) \
70 SECTION_PROLOGUE(struct_type##_area, EMPTY, SUBALIGN(subalign)) \
71 { \
72 Z_LINK_ITERABLE_NUMERIC(struct_type); \
73 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
74
87#define ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign) \
88 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
89 { \
90 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
91 } GROUP_LINK_IN(ROMABLE_REGION)
92
107#define ITERABLE_SECTION_RAM(struct_type, subalign) \
108 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
109 { \
110 Z_LINK_ITERABLE(struct_type); \
111 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
112
122#define ITERABLE_SECTION_RAM_NUMERIC(struct_type, subalign) \
123 SECTION_PROLOGUE(struct_type##_area, EMPTY, SUBALIGN(subalign)) \
124 { \
125 Z_LINK_ITERABLE_NUMERIC(struct_type); \
126 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
127
140#define ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign) \
141 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
142 { \
143 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
144 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
145
/* end of struct_section_apis */
149
150#endif /* INCLUDE_ZEPHYR_LINKER_ITERABLE_SECTIONS_H_ */