7#ifndef ZEPHYR_LLEXT_SYMBOL_H
8#define ZEPHYR_LLEXT_SYMBOL_H
92#ifdef LL_EXTENSION_BUILD
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, \
102#define Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
115#define LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name) \
116 Z_LL_EXTENSION_SYMBOL_NAMED(sym_ident, sym_name)
129#define LL_EXTENSION_SYMBOL(x) Z_LL_EXTENSION_SYMBOL_NAMED(x, x)
132#if defined(LL_EXTENSION_BUILD)
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)
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, \
146#elif defined(CONFIG_LLEXT)
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, \
155#define Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
159#if defined(LL_EXTENSION_BUILD)
161#define Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name) \
162 Z_EXPORT_SYMBOL_NAMED(sym_ident, sym_name)
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)))
184#define EXPORT_SYMBOL_NAMED(sym_ident, sym_name) \
185 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(UNASSIGNED, sym_ident, sym_name)
202#define EXPORT_SYMBOL(x) EXPORT_SYMBOL_NAMED(x, x)
219#define EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_name) \
220 Z_EXPORT_SYMBOL_NAMED_IN_GROUP(group, sym_ident, sym_name)
236#define EXPORT_GROUP_SYMBOL(group, sym_ident) \
237 EXPORT_GROUP_SYMBOL_NAMED(group, sym_ident, sym_ident)
__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