7#ifndef ZEPHYR_LLEXT_SYMBOL_H
8#define ZEPHYR_LLEXT_SYMBOL_H
116struct z_llext_discarded_const_symbol {
118 const char *
const name;
121 const char *
const group;
124#define Z_LLEXT_DISCARD_STRTAB Z_GENERIC_SECTION(llext_discarded_exports_strtab)
126#define Z_MARKUP_NOT_EXPORTED_SYMBOL(grp, sym_ident, sym_name) \
127 static const char Z_LLEXT_DISCARD_STRTAB __used \
128 __llext_sym_name_ ## sym_name[] = STRINGIFY(sym_name); \
129 static const char Z_LLEXT_DISCARD_STRTAB __used \
130 __llext_sym_group_ ## sym_name[] = STRINGIFY(grp); \
131 static const struct z_llext_discarded_const_symbol \
132 Z_GENERIC_SECTION(llext_discarded_exports_table) __used \
133 __llext_sym_discarded_ ## sym_name = { \
134 .name = __llext_sym_name_ ## sym_name, \
135 .group = __llext_sym_group_ ## sym_name, \
140#ifdef LL_EXTENSION_BUILD
142#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
143 static const struct llext_const_symbol \
144 Z_GENERIC_SECTION(.exported_sym) __used \
145 __llext_sym_ ## sym_name = { \
146 .name = STRINGIFY(sym_name), .addr = (const void *)&sym_ident, \
150#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
163#define LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
164 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
177#define LL_EXTENSION_SYMBOL(x) Z_LL_EXTENSION_SYMBOL_NAMED(x, x)
180#if defined(LL_EXTENSION_BUILD)
182#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
183 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
184#elif defined(CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID)
186#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
187 static const char Z_GENERIC_SECTION(llext_exports_strtab) __used \
188 __llext_sym_name_ ## sym_name[] = STRINGIFY(sym_name); \
189 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
190 __llext_sym_ ## sym_name) = { \
191 .name = __llext_sym_name_ ## sym_name, \
192 .addr = (const void *)&sym_ident, \
194#elif defined(CONFIG_LLEXT)
196#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
197 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
198 __llext_sym_ ## sym_name) = { \
199 .name = STRINGIFY(sym_name), .addr = (const void *)&sym_ident, \
203#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
207#if defined(LL_EXTENSION_BUILD)
209#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
210 Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
213#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
214 COND_CODE_1(CONFIG_LLEXT_EXPORT_SYMBOL_GROUP_ ## group, \
215 (Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)), \
216 (Z_MARKUP_NOT_EXPORTED_SYMBOL(group, sym_ident, sym_name)))
233#define EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
234 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(UNASSIGNED, sym_ident, sym_name)
251#define EXPORT_SYMBOL(x) EXPORT_SYMBOL_NAMED(x, x)
268#define EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_name) \
269 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name)
285#define EXPORT_GROUP_SYMBOL(group, sym_ident) \
286 EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_ident)
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
Group structure.
Definition grp.h:18
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