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)
127#define Z_MARKUP_NOT_EXPORTED_SYMBOL(grp, sym_ident, sym_name) \
128 static const char Z_LLEXT_DISCARD_STRTAB __used \
129 __llext_sym_name_ ## sym_name[] = STRINGIFY(sym_name); \
130 static const char Z_LLEXT_DISCARD_STRTAB __used \
131 __llext_sym_group_ ## sym_name[] = STRINGIFY(grp); \
132 static const struct z_llext_discarded_const_symbol \
133 Z_GENERIC_SECTION(llext_discarded_exports_table) __used \
134 __llext_sym_discarded_ ## sym_name = { \
135 .name = __llext_sym_name_ ## sym_name, \
136 .group = __llext_sym_group_ ## sym_name, \
140#define Z_MARKUP_NOT_EXPORTED_SYMBOL(grp, sym_ident, sym_name)
146#ifdef LL_EXTENSION_BUILD
148#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
149 static const struct llext_const_symbol \
150 Z_GENERIC_SECTION(.exported_sym) __used \
151 __llext_sym_ ## sym_name = { \
152 .name = STRINGIFY(sym_name), .addr = (const void *)&sym_ident, \
156#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
169#define LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
170 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
183#define LL_EXTENSION_SYMBOL(x) Z_LL_EXTENSION_SYMBOL_NAMED(x, x)
186#if defined(LL_EXTENSION_BUILD)
188#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
189 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
190#elif defined(CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID)
192#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
193 static const char Z_GENERIC_SECTION(llext_exports_strtab) __used \
194 __llext_sym_name_ ## sym_name[] = STRINGIFY(sym_name); \
195 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
196 __llext_sym_ ## sym_name) = { \
197 .name = __llext_sym_name_ ## sym_name, \
198 .addr = (const void *)&sym_ident, \
200#elif defined(CONFIG_LLEXT)
202#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
203 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
204 __llext_sym_ ## sym_name) = { \
205 .name = STRINGIFY(sym_name), .addr = (const void *)&sym_ident, \
209#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
213#if defined(LL_EXTENSION_BUILD)
215#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
216 Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
219#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
220 COND_CODE_1(CONFIG_LLEXT_EXPORT_SYMBOL_GROUP_ ## group, \
221 (Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)), \
222 (Z_MARKUP_NOT_EXPORTED_SYMBOL(group, sym_ident, sym_name)))
239#define EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
240 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(UNASSIGNED, sym_ident, sym_name)
257#define EXPORT_SYMBOL(x) EXPORT_SYMBOL_NAMED(x, x)
274#define EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_name) \
275 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name)
291#define EXPORT_GROUP_SYMBOL(group, sym_ident) \
292 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