mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
Squashed commit of the following:
task_spawn() and posix_spawn() are NuttX OS interfaces. In PROTECTED and KERNEL build modes, then can be reached from applications only via a system call. Currently, the number of parameters in a system call is limited to six; these spawn function have seven parameters. Rather than extend the maximum number of parameters across all architectures, I opted instead to marshal the seven parameters into a structure.
*
In order to support builtin in function in protected mode, a task_spawn() system call must be supported. Unfortunately this is overly complex because there is a (soft) limit of 6 parameters in a system call; task_spawn has seven paramters. This is a soft limit but still difficult to extend because it involves assembly language changes to numerous architectures. Better to get more creative.
This commit is contained in:
+1
-2
@@ -63,6 +63,7 @@
|
||||
"mq_timedreceive","mqueue.h","!defined(CONFIG_DISABLE_MQUEUE)","ssize_t","mqd_t","char*","size_t","FAR unsigned int*","const struct timespec*"
|
||||
"mq_timedsend","mqueue.h","!defined(CONFIG_DISABLE_MQUEUE)","int","mqd_t","const char*","size_t","unsigned int","const struct timespec*"
|
||||
"mq_unlink","mqueue.h","!defined(CONFIG_DISABLE_MQUEUE)","int","const char*"
|
||||
"nx_task_spawn","nuttx/spawn.h","!defined(CONFIG_BUILD_KERNEL)","int","FAR const struct spawn_syscall_parms_s *"
|
||||
"nx_vsyslog","nuttx/syslog/syslog.h","","int","int","FAR const IPTR char*","FAR va_list*"
|
||||
"on_exit","stdlib.h","defined(CONFIG_SCHED_ONEXIT)","int","CODE void (*)(int, FAR void *)","FAR void *"
|
||||
"open","fcntl.h","","int","const char*","int","..."
|
||||
@@ -162,7 +163,6 @@
|
||||
"stat","sys/stat.h","","int","const char*","FAR struct stat*"
|
||||
"statfs","sys/statfs.h","","int","FAR const char*","FAR struct statfs*"
|
||||
"task_create","sched.h","!defined(CONFIG_BUILD_KERNEL)", "int","FAR const char*","int","int","main_t","FAR char * const []|FAR char * const *"
|
||||
#"task_create","sched.h","","int","const char*","int","main_t","FAR char * const []|FAR char * const *"
|
||||
"task_delete","sched.h","","int","pid_t"
|
||||
"task_restart","sched.h","","int","pid_t"
|
||||
"task_setcancelstate","sched.h","","int","int","FAR int*"
|
||||
@@ -180,7 +180,6 @@
|
||||
"unlink","unistd.h","!defined(CONFIG_DISABLE_MOUNTPOINT)","int","FAR const char*"
|
||||
"unsetenv","stdlib.h","!defined(CONFIG_DISABLE_ENVIRON)","int","const char*"
|
||||
"up_assert","assert.h","","void","FAR const uint8_t*","int"
|
||||
#"up_assert","assert.h","","void"
|
||||
"vfork","unistd.h","defined(CONFIG_SCHED_WAITPID) && defined(CONFIG_ARCH_HAVE_VFORK)","pid_t"
|
||||
"wait","sys/wait.h","defined(CONFIG_SCHED_WAITPID) && defined(CONFIG_SCHED_HAVE_PARENT)","pid_t","int*"
|
||||
"waitid","sys/wait.h","defined(CONFIG_SCHED_WAITPID) && defined(CONFIG_SCHED_HAVE_PARENT)","int","idtype_t","id_t"," FAR siginfo_t *","int"
|
||||
|
||||
|
Can't render this file because it contains an unexpected character in line 165 and column 2.
|
@@ -90,6 +90,7 @@ SYSCALL_LOOKUP(sem_unlink, 1, STUB_sem_unlink)
|
||||
|
||||
#ifndef CONFIG_BUILD_KERNEL
|
||||
SYSCALL_LOOKUP(task_create, 5, STUB_task_create)
|
||||
SYSCALL_LOOKUP(nx_task_spawn, 1, STUB_nx_task_spawn)
|
||||
#else
|
||||
SYSCALL_LOOKUP(pgalloc, 2, STUB_pgalloc)
|
||||
#endif
|
||||
|
||||
@@ -90,7 +90,8 @@ uintptr_t STUB_getgid(int nbr);
|
||||
uintptr_t STUB_sem_close(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_sem_destroy(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_sem_open(int nbr, uintptr_t parm1, uintptr_t parm2,
|
||||
uintptr_t parm3, uintptr_t parm4, uintptr_t parm5, uintptr_t parm6);
|
||||
uintptr_t parm3, uintptr_t parm4, uintptr_t parm5,
|
||||
uintptr_t parm6);
|
||||
uintptr_t STUB_sem_post(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_sem_setprotocol(int nbr, uintptr_t parm1, uintptr_t parm2);
|
||||
uintptr_t STUB_sem_timedwait(int nbr, uintptr_t parm1, uintptr_t parm2);
|
||||
@@ -101,6 +102,7 @@ uintptr_t STUB_sem_wait(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_pgalloc(int nbr, uintptr_t parm1, uintptr_t parm2);
|
||||
uintptr_t STUB_task_create(int nbr, uintptr_t parm1, uintptr_t parm2,
|
||||
uintptr_t parm3, uintptr_t parm4, uintptr_t parm5);
|
||||
uintptr_t STUB_nx_task_spawn(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_task_delete(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_task_restart(int nbr, uintptr_t parm1);
|
||||
uintptr_t STUB_task_setcancelstate(int nbr, uintptr_t parm1,
|
||||
|
||||
Reference in New Issue
Block a user