Zephyr API Documentation 4.0.0-rc3
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
11#include <zephyr/toolchain.h>
12#include <stddef.h>
13#include <stdint.h>
14
15#ifdef __cplusplus
16extern "C" {
17#endif
18
47 union {
49 const char *const name;
50
53 };
54
56 const void *const addr;
57};
58BUILD_ASSERT(sizeof(struct llext_const_symbol) == 2 * sizeof(uintptr_t));
59
69 const char *name;
70
72 void *addr;
73};
74
75
83 size_t sym_cnt;
84
87};
88
89
91#ifdef LL_EXTENSION_BUILD
92/* Extension build: add exported symbols to llext table */
93#define Z_LL_EXTENSION_SYMBOL(x) \
94 static const struct llext_const_symbol \
95 Z_GENERIC_SECTION(".exported_sym") __used \
96 __llext_sym_ ## x = { \
97 .name = STRINGIFY(x), .addr = (const void *)&x, \
98 }
99#else
100/* No-op when not building an extension */
101#define Z_LL_EXTENSION_SYMBOL(x)
102#endif
116#define LL_EXTENSION_SYMBOL(x) Z_LL_EXTENSION_SYMBOL(x)
117
119#if defined(LL_EXTENSION_BUILD)
120/* Extension build: EXPORT_SYMBOL maps to LL_EXTENSION_SYMBOL */
121#define Z_EXPORT_SYMBOL(x) Z_LL_EXTENSION_SYMBOL(x)
122#elif defined(CONFIG_LLEXT_EXPORT_BUILTINS_BY_SLID)
123/* SLID-enabled LLEXT application: export symbols, names in separate section */
124#define Z_EXPORT_SYMBOL(x) \
125 static const char Z_GENERIC_SECTION("llext_exports_strtab") __used \
126 __llext_sym_name_ ## x[] = STRINGIFY(x); \
127 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
128 __llext_sym_ ## x) = { \
129 .name = __llext_sym_name_ ## x, .addr = (const void *)&x, \
130 }
131#elif defined(CONFIG_LLEXT)
132/* LLEXT application: export symbols */
133#define Z_EXPORT_SYMBOL(x) \
134 static const STRUCT_SECTION_ITERABLE(llext_const_symbol, \
135 __llext_sym_ ## x) = { \
136 .name = STRINGIFY(x), .addr = (const void *)&x, \
137 }
138#else
139/* No extension support in this build */
140#define Z_EXPORT_SYMBOL(x)
141#endif
155#define EXPORT_SYMBOL(x) Z_EXPORT_SYMBOL(x)
156
161#ifdef __cplusplus
162}
163#endif
164
165
166#endif /* ZEPHYR_LLEXT_SYMBOL_H */
__UINTPTR_TYPE__ uintptr_t
Definition stdint.h:105
Constant symbols are unchangeable named memory addresses.
Definition symbol.h:42
const char *const name
Name of symbol.
Definition symbol.h:49
const void *const addr
Address of symbol.
Definition symbol.h:56
const uintptr_t slid
Symbol Link Identifier.
Definition symbol.h:52
Symbols are named memory addresses.
Definition symbol.h:67
const char * name
Name of symbol.
Definition symbol.h:69
void * addr
Address of symbol.
Definition symbol.h:72
A symbol table.
Definition symbol.h:81
size_t sym_cnt
Number of symbols in the table.
Definition symbol.h:83
struct llext_symbol * syms
Array of symbols.
Definition symbol.h:86
Macros to abstract toolchain specific capabilities.