Zephyr Project API 4.1.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/* clang-format off */
16#define Z_LINK_ITERABLE(struct_type) \
17 PLACE_SYMBOL_HERE(_CONCAT(_##struct_type, _list_start)); \
18 KEEP(*(SORT_BY_NAME(._##struct_type.static.*))); \
19 PLACE_SYMBOL_HERE(_CONCAT(_##struct_type, _list_end));
20
21
22#define Z_LINK_ITERABLE_NUMERIC(struct_type) \
23 PLACE_SYMBOL_HERE(_CONCAT(_##struct_type, _list_start)); \
24 KEEP(*(SORT(._##struct_type.static.*_?_*))); \
25 KEEP(*(SORT(._##struct_type.static.*_??_*))); \
26 KEEP(*(SORT(._##struct_type.static.*_???_*))); \
27 KEEP(*(SORT(._##struct_type.static.*_????_*))); \
28 KEEP(*(SORT(._##struct_type.static.*_?????_*))); \
29 PLACE_SYMBOL_HERE(_CONCAT(_##struct_type, _list_end));
30
31#define Z_LINK_ITERABLE_ALIGNED(struct_type, align) \
32 . = ALIGN(align); \
33 Z_LINK_ITERABLE(struct_type);
34
35#define Z_LINK_ITERABLE_GC_ALLOWED(struct_type) \
36 PLACE_SYMBOL_HERE(_CONCAT(_##struct_type, _list_start)); \
37 *(SORT_BY_NAME(._##struct_type.static.*)); \
38 PLACE_SYMBOL_HERE(_CONCAT(_##struct_type, _list_end));
39/* clang-format on */
40
41#define Z_LINK_ITERABLE_SUBALIGN CONFIG_LINKER_ITERABLE_SUBALIGN
42
57#define ITERABLE_SECTION_ROM(struct_type, subalign) \
58 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
59 { \
60 Z_LINK_ITERABLE(struct_type); \
61 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
62
72#define ITERABLE_SECTION_ROM_NUMERIC(struct_type, subalign) \
73 SECTION_PROLOGUE(struct_type##_area, EMPTY, SUBALIGN(subalign)) \
74 { \
75 Z_LINK_ITERABLE_NUMERIC(struct_type); \
76 } GROUP_ROM_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
77
90#define ITERABLE_SECTION_ROM_GC_ALLOWED(struct_type, subalign) \
91 SECTION_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
92 { \
93 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
94 } GROUP_LINK_IN(ROMABLE_REGION)
95
110#define ITERABLE_SECTION_RAM(struct_type, subalign) \
111 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
112 { \
113 Z_LINK_ITERABLE(struct_type); \
114 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
115
125#define ITERABLE_SECTION_RAM_NUMERIC(struct_type, subalign) \
126 SECTION_PROLOGUE(struct_type##_area, EMPTY, SUBALIGN(subalign)) \
127 { \
128 Z_LINK_ITERABLE_NUMERIC(struct_type); \
129 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
130
143#define ITERABLE_SECTION_RAM_GC_ALLOWED(struct_type, subalign) \
144 SECTION_DATA_PROLOGUE(struct_type##_area,,SUBALIGN(subalign)) \
145 { \
146 Z_LINK_ITERABLE_GC_ALLOWED(struct_type); \
147 } GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
148
/* end of struct_section_apis */
152
153#endif /* INCLUDE_ZEPHYR_LINKER_ITERABLE_SECTIONS_H_ */