mirror of
https://github.com/apache/nuttx.git
synced 2026-09-27 10:46:02 +08:00
Adapt dlfcn/modlib to use the instruction memory allocator
This commit is contained in:
committed by
patacongo
parent
855751b534
commit
061b796d47
@@ -237,7 +237,12 @@ FAR void *insmod(FAR const char *filename, FAR const char *modname)
|
||||
|
||||
/* Save the load information */
|
||||
|
||||
#if defined(CONFIG_ARCH_USE_MODULE_TEXT)
|
||||
modp->textalloc = (FAR void *)loadinfo.textalloc;
|
||||
modp->dataalloc = (FAR void *)loadinfo.datastart;
|
||||
#else
|
||||
modp->alloc = (FAR void *)loadinfo.textalloc;
|
||||
#endif
|
||||
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_MODULE)
|
||||
modp->textsize = loadinfo.textsize;
|
||||
modp->datasize = loadinfo.datasize;
|
||||
|
||||
@@ -152,9 +152,18 @@ static int modprocfs_callback(FAR struct module_s *modp, FAR void *arg)
|
||||
"%s,%p,%p,%p,%u,%p,%lu,%p,%lu\n",
|
||||
modp->modname, modp->initializer,
|
||||
modp->modinfo.uninitializer, modp->modinfo.arg,
|
||||
modp->modinfo.nexports, modp->alloc,
|
||||
modp->modinfo.nexports,
|
||||
#if defined(CONFIG_ARCH_USE_MODULE_TEXT)
|
||||
modp->textalloc,
|
||||
#else
|
||||
modp->alloc,
|
||||
#endif
|
||||
(unsigned long)modp->textsize,
|
||||
#if defined(CONFIG_ARCH_USE_MODULE_TEXT)
|
||||
(FAR uint8_t *)modp->dataalloc,
|
||||
#else
|
||||
(FAR uint8_t *)modp->alloc + modp->textsize,
|
||||
#endif
|
||||
(unsigned long)modp->datasize);
|
||||
copysize = procfs_memcpy(priv->line, linesize, priv->buffer,
|
||||
priv->remaining, &priv->offset);
|
||||
|
||||
@@ -128,15 +128,25 @@ int rmmod(FAR void *handle)
|
||||
|
||||
/* Release resources held by the module */
|
||||
|
||||
#if defined(CONFIG_ARCH_USE_MODULE_TEXT)
|
||||
if (modp->textalloc != NULL || modp->dataalloc != NULL)
|
||||
#else
|
||||
if (modp->alloc != NULL)
|
||||
#endif
|
||||
{
|
||||
/* Free the module memory */
|
||||
/* Free the module memory
|
||||
* and nullify so that the memory cannot be freed again
|
||||
*/
|
||||
|
||||
#if defined(CONFIG_ARCH_USE_MODULE_TEXT)
|
||||
up_module_text_free((FAR void *)modp->textalloc);
|
||||
kmm_free((FAR void *)modp->dataalloc);
|
||||
modp->textalloc = NULL;
|
||||
modp->dataalloc = NULL;
|
||||
#else
|
||||
kmm_free((FAR void *)modp->alloc);
|
||||
|
||||
/* Nullify so that the memory cannot be freed again */
|
||||
|
||||
modp->alloc = NULL;
|
||||
#endif
|
||||
#if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_FS_PROCFS_EXCLUDE_MODULE)
|
||||
modp->textsize = 0;
|
||||
modp->datasize = 0;
|
||||
|
||||
Reference in New Issue
Block a user