Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
symbol.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_LLEXT_SYMBOL_H
8#define ZEPHYR_LLEXT_SYMBOL_H
9
12#include <zephyr/toolchain.h>
13#include <stddef.h>
14#include <stdint.h>
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
32
48 union {
50 const char *const name;
51
54 };
55
57 const void *const addr;
58};
59BUILD_ASSERT(sizeof(struct llext_const_symbol) == 2 * sizeof(uintptr_t));
60
70 const char *name;
71
73 void *addr;
74};
75
76
84 size_t sym_cnt;
85
88};
89
90
92#ifdef LL_EXTENSION_BUILD
93/* Extension build: add exported symbols to llext table */
94#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
95 static const struct llext_const_symbol \
96 Z_GENERIC_SECTION(.exported_sym) __used \
97 __llext_sym_ ## sym_name = { \
98 .name = STRINGIFY(sym_name), .addr = (const void *)&sym_ident, \
99 }
100#else
101/* No-op when not building an extension */
102#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
103#endif
105
115#define LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
116 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
117
129#define LL_EXTENSION_SYMBOL(x) Z_LL_EXTENSION_SYMBOL_NAMED(x, x)
130
132#if defined(LL_EXTENSION_BUILD)
133/* Extension build: EXPORT_SYMBOL maps to LL_EXTENSION_SYMBOL */
134#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
135 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
136#elif defined(CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID)
137/* SLID-enabled LLEXT application: export symbols, names in separate section */
138#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
139 static const char Z_GENERIC_SECTION(llext_exports_strtab) __used \
140 __llext_sym_name_ ## sym_name[] = STRINGIFY(sym_name); \
141 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
142 __llext_sym_ ## sym_name) = { \
143 .name = __llext_sym_name_ ## sym_name, \
144 .addr = (const void *)&sym_ident, \
145 }
146#elif defined(CONFIG_LLEXT)
147/* LLEXT application: export symbols */
148#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
149 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
150 __llext_sym_ ## sym_name) = { \
151 .name = STRINGIFY(sym_name), .addr = (const void *)&sym_ident, \
152 }
153#else
154/* No extension support in this build */
155#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
156#endif
158
159#if defined(LL_EXTENSION_BUILD)
160/* Extension build: No Kconfig conditionals */
161#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
162 Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
163#else
164/* LLEXT application: Export if relevant group is enabled */
165#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
166 IF_ENABLED(CONFIG_LLEXT_EXPORT_SYMBOL_GROUP_ ## group, \
167 (Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)))
168#endif /* defined(LL_EXTENSION_BUILD) */
169
184#define EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
185 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(UNASSIGNED, sym_ident, sym_name)
186
202#define EXPORT_SYMBOL(x) EXPORT_SYMBOL_NAMED(x, x)
203
219#define EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_name) \
220 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name)
221
236#define EXPORT_GROUP_SYMBOL(group, sym_ident) \
237 EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_ident)
238
242
243#ifdef __cplusplus
244}
245#endif
246
247
248#endif /* ZEPHYR_LLEXT_SYMBOL_H */
#define BUILD_ASSERT(EXPR, MSG...)
Definition llvm.h:51
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
Constant symbols are unchangeable named memory addresses.
Definition symbol.h:43
const char *const name
Name of symbol.
Definition symbol.h:50
const void *const addr
Address of symbol.
Definition symbol.h:57
const uintptr_t slid
Symbol Link Identifier.
Definition symbol.h:53
Symbols are named memory addresses.
Definition symbol.h:68
const char * name
Name of symbol.
Definition symbol.h:70
void * addr
Address of symbol.
Definition symbol.h:73
A symbol table.
Definition symbol.h:82
size_t sym_cnt
Number of symbols in the table.
Definition symbol.h:84
struct llext_symbol * syms
Array of symbols.
Definition symbol.h:87
Macros to abstract toolchain specific capabilities.
Macro utilities.