Skip to content

Commit 9fa6a95

Browse files
pillo79nashif
authored andcommitted
llext: add storage-specific buffer loaders
This patch adds three new macros to initialize an llext_buf_loader structure with a specific storage type. The existing LLEXT_BUF_LOADER macro is discouraged, since its storage type is not explicitly defined in the code but relies on the CONFIG_LLEXT_STORAGE_WRITABLE option. Signed-off-by: Luca Burelli <[email protected]>
1 parent 6c2b5f6 commit 9fa6a95

File tree

1 file changed

+62
-11
lines changed

1 file changed

+62
-11
lines changed

include/zephyr/llext/buf_loader.h

Lines changed: 62 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,8 @@ struct llext_buf_loader {
3939
int llext_buf_read(struct llext_loader *ldr, void *buf, size_t len);
4040
int llext_buf_seek(struct llext_loader *ldr, size_t pos);
4141
void *llext_buf_peek(struct llext_loader *ldr, size_t pos);
42-
/** @endcond */
4342

44-
/**
45-
* @brief Initializer for an llext_buf_loader structure
46-
*
47-
* @param _buf Buffer containing the ELF binary
48-
* @param _buf_len Buffer length in bytes
49-
*/
50-
#define LLEXT_BUF_LOADER(_buf, _buf_len) \
43+
#define Z_LLEXT_BUF_LOADER(_buf, _buf_len, _storage) \
5144
{ \
5245
.loader = \
5346
{ \
@@ -56,14 +49,72 @@ void *llext_buf_peek(struct llext_loader *ldr, size_t pos);
5649
.seek = llext_buf_seek, \
5750
.peek = llext_buf_peek, \
5851
.finalize = NULL, \
59-
.storage = IS_ENABLED(CONFIG_LLEXT_STORAGE_WRITABLE) ? \
60-
LLEXT_STORAGE_WRITABLE : \
61-
LLEXT_STORAGE_PERSISTENT, \
52+
.storage = _storage, \
6253
}, \
6354
.buf = (_buf), \
6455
.len = (_buf_len), \
6556
.pos = 0, \
6657
}
58+
/** @endcond */
59+
60+
/**
61+
* @brief Initializer for an llext_buf_loader structure
62+
*
63+
* The storage type for the provided buffer depends on the value of the
64+
* @kconfig{CONFIG_LLEXT_STORAGE_WRITABLE} option: if it is defined, the
65+
* buffer is assumed to be writable; otherwise it is assumed to be persistent.
66+
*
67+
* Consider using one of the alternative macros instead.
68+
*
69+
* @see LLEXT_TEMPORARY_BUF_LOADER
70+
* @see LLEXT_PERSISTENT_BUF_LOADER
71+
* @see LLEXT_WRITABLE_BUF_LOADER
72+
*
73+
* @param _buf Buffer containing the ELF binary
74+
* @param _buf_len Buffer length in bytes
75+
*/
76+
#define LLEXT_BUF_LOADER(_buf, _buf_len) \
77+
Z_LLEXT_BUF_LOADER(_buf, _buf_len, \
78+
IS_ENABLED(CONFIG_LLEXT_STORAGE_WRITABLE) ? \
79+
LLEXT_STORAGE_WRITABLE : LLEXT_STORAGE_PERSISTENT)
80+
81+
/* @brief Initialize an llext_buf_loader structure for a temporary buffer
82+
*
83+
* ELF data from the specified buffer can only be used during llext_load().
84+
* The LLEXT subsystem will copy all necessary data to internal buffers at load
85+
* time.
86+
*
87+
* @param _buf Buffer containing the ELF binary
88+
* @param _buf_len Buffer length in bytes
89+
*/
90+
#define LLEXT_TEMPORARY_BUF_LOADER(_buf, _buf_len) \
91+
Z_LLEXT_BUF_LOADER(_buf, _buf_len, LLEXT_STORAGE_TEMPORARY)
92+
93+
/**
94+
* @brief Initialize an llext_buf_loader structure for a persistent, read-only buffer
95+
*
96+
* ELF data from the specified buffer is guaranteed to be accessible for as
97+
* long as the extension is loaded. The LLEXT subsystem may directly access the
98+
* ELF data, as long as no modification is required during loading.
99+
*
100+
* @param _buf Buffer containing the ELF binary
101+
* @param _buf_len Buffer length in bytes
102+
*/
103+
#define LLEXT_PERSISTENT_BUF_LOADER(_buf, _buf_len) \
104+
Z_LLEXT_BUF_LOADER(_buf, _buf_len, LLEXT_STORAGE_PERSISTENT)
105+
106+
/**
107+
* @brief Initialize an llext_buf_loader structure for a persistent, writable buffer
108+
*
109+
* ELF data from the specified buffer is guaranteed to be accessible for as
110+
* long as the extension is loaded. The LLEXT subsystem may directly access and
111+
* modify the ELF data.
112+
*
113+
* @param _buf Buffer containing the ELF binary
114+
* @param _buf_len Buffer length in bytes
115+
*/
116+
#define LLEXT_WRITABLE_BUF_LOADER(_buf, _buf_len) \
117+
Z_LLEXT_BUF_LOADER(_buf, _buf_len, LLEXT_STORAGE_WRITABLE)
67118

68119
/**
69120
* @}

0 commit comments

Comments
 (0)