patacongo opened a new pull request #1168:
URL: https://github.com/apache/incubator-nuttx/pull/1168


   ## Summary
   
   In the FLAT build if CONFIG_LIB_SYSCALL=y, then the function task_spawn() 
will be duplicated.:  One version in libs/libc/spawn and one version in 
sched/task.
   
   The version of task_spawn in lib/libc/spawn exists only if 
CONFIG_LIB_SYSCALL is selected.  In that case, the one in 
sched/task/task_spawn.c should be static, at least in the FLAT build.
   
   The version of task_spawn.c in libs/libc/spawn simply marshals the 
parameters into a structure and calls nx_task_spawn().  If CONFIG_LIB_SYSCALL 
is defined then nx_task_spawn() will un-marshal the data can call the real task 
spawn.  This nonsense is only necessary because task_spawn has 8 parameters and 
the maximum number of parameters in a system call is only 6.
   
   Without syscalls:  Application should call directly in task_spawn() in 
sched/task/task_spawn.c and, hence, it must not be static
   
   With syscalls:  Application should call the marshalling task_spawn() in 
libs/libc/spawn/lib_task_spawn.c -> That will call the autogenerated 
nx_task_spawn() proxy -> And generate a system call -> The system call will the 
unmarshalling nx_task_spawn() in sched/task/task_spawn.c -> Which will, 
finally, call the real task_spawn().
   
   The side-effect of making task_spawn() static is that it then cannot be used 
within the OS.  But as far as I can tell, nothing in the OS itself currently 
uses task_spawn() so I think it is safe to make it conditionally static.  But 
that only protects from duplicate symbols in the useless case mentioned above.
   


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to