Add syscall support for insmod and rmmod
This commit is contained in:
parent
040835de00
commit
303123deb9
@ -152,12 +152,24 @@
|
||||
# ifdef CONFIG_SCHED_HAVE_PARENT
|
||||
# define SYS_wait (__SYS_waitpid+1)
|
||||
# define SYS_waitid (__SYS_waitpid+2)
|
||||
# define __SYS_posix_spawn (__SYS_waitpid+3)
|
||||
# define __SYS_insmod (__SYS_waitpid+3)
|
||||
# else
|
||||
# define __SYS_posix_spawn (__SYS_waitpid+1)
|
||||
# define __SYS_insmod (__SYS_waitpid+1)
|
||||
#endif
|
||||
#else
|
||||
# define __SYS_posix_spawn __SYS_waitpid
|
||||
# define __SYS_insmod __SYS_waitpid
|
||||
#endif
|
||||
|
||||
/* The following can only be defined if we are configured to load
|
||||
* OS modules from a file system.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MODULE
|
||||
# define SYS_insmod __SYS_insmod
|
||||
# define SYS_rmmod (__SYS_insmod+1)
|
||||
# define __SYS_posix_spawn (__SYS_insmod+2)
|
||||
#else
|
||||
# define __SYS_posix_spawn __SYS_insmod
|
||||
#endif
|
||||
|
||||
/* The following can only be defined if we are configured to execute
|
||||
|
@ -83,15 +83,24 @@ int rmmod(FAR struct module_s *modp)
|
||||
sdbg("ERROR: Failed to uninitialize the module: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Nullify so that the uninitializer cannot be called again */
|
||||
|
||||
modp->uninitializer = NULL;
|
||||
modp->arg = NULL;
|
||||
}
|
||||
|
||||
/* Free the module memory */
|
||||
|
||||
/* Release memory holding the relocated ELF image */
|
||||
/* Release resources held by the module */
|
||||
|
||||
if (modp->alloc != 0)
|
||||
{
|
||||
/* Free the module memory */
|
||||
|
||||
kmm_free((FAR void *)modp->alloc);
|
||||
|
||||
/* Nullify so that the memory cannot be freed again */
|
||||
|
||||
modp->alloc = NULL;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -28,6 +28,7 @@
|
||||
"getenv","stdlib.h","!defined(CONFIG_DISABLE_ENVIRON)","FAR char*","FAR const char*"
|
||||
"getpid","unistd.h","","pid_t"
|
||||
"getsockopt","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","int","int","FAR void*","FAR socklen_t*"
|
||||
"insmod","nuttx/module.h",defined(CONFIG_MODULE),"int","FAR struct module_s *"
|
||||
"ioctl","sys/ioctl.h","!defined(CONFIG_LIBC_IOCTL_VARIADIC) && (CONFIG_NSOCKET_DESCRIPTORS > 0 || CONFIG_NFILE_DESCRIPTORS > 0)","int","int","int","unsigned long"
|
||||
"kill","signal.h","!defined(CONFIG_DISABLE_SIGNALS)","int","pid_t","int"
|
||||
"listen","sys/socket.h","CONFIG_NSOCKET_DESCRIPTORS > 0 && defined(CONFIG_NET)","int","int","int"
|
||||
@ -97,6 +98,7 @@
|
||||
"rename","stdio.h","CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)","int","FAR const char*","FAR const char*"
|
||||
"rewinddir","dirent.h","CONFIG_NFILE_DESCRIPTORS > 0","void","FAR DIR*"
|
||||
"rmdir","unistd.h","CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)","int","FAR const char*"
|
||||
"rmmod","nuttx/module.h",defined(CONFIG_MODULE),"int","FAR struct module_s *"
|
||||
"sched_getparam","sched.h","","int","pid_t","struct sched_param*"
|
||||
"sched_getscheduler","sched.h","","int","pid_t"
|
||||
"sched_getstreams","nuttx/sched.h","CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NFILE_STREAMS > 0","FAR struct streamlist*"
|
||||
|
Can't render this file because it has a wrong number of fields in line 2.
|
@ -106,6 +106,15 @@ SYSCALL_LOOKUP(up_assert, 2, STUB_up_assert)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* The following can only be defined if we are configured to load
|
||||
* OS modules from a file system.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MODULE
|
||||
SYSCALL_LOOKUP(insmod, 1, STUB_insmod)
|
||||
SYSCALL_LOOKUP(rmmod, 1, STUB_rmmod)
|
||||
#endif
|
||||
|
||||
/* The following can only be defined if we are configured to execute
|
||||
* programs from a file system.
|
||||
*/
|
||||
|
@ -107,6 +107,15 @@ uintptr_t STUB_wait(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_waitid(int nbr, uintptr_t parm1, uintptr_t parm2,
|
||||
uintptr_t parm3, uintptr_t parm4);
|
||||
|
||||
/* The following can only be defined if we are configured to load
|
||||
* OS modules from a file system.
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_MODULE
|
||||
uintptr_t STUB_insmod(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_rmmod(int nbr, uintptr_t parm1);
|
||||
#endif
|
||||
|
||||
/* The following can only be defined if we are configured to execute
|
||||
* programs from a file system.
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user