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.
Squashed commit of the following:
Correct some additional compile-related issues.
Move include/nuttx/binfmt/builtin.h to include/nuttx/lib/builtin.h. Move apps/builtin/lib_builtin_forindex.c to libs/libc/builtin/lib_builtin_forindex.c.
Move binfmt/libbuiltin to libs/libc/builtin. There are calls made directly from apps/nshlib into this logic and hence, must be part of a library that can be shared between the OS and applications.
Provided changes add option (CONFIG_EXECFUNCS_GENERATE_SYSTEM_SYMTAB) to build complete list of available functions and syscalls automatically. The symbolic table is generated in form libsymtab.a which can be reused by application or directly pull in when "g_symtab" and "g_nsymbols" variables are requested by EXECFUNCS configuration.
I have tried to follow mechanisms for library compilation in different kernel protection modes but tested only flat no-MMU build. The basic assumption is that this library and libraries providing syscall stubs and C-library functions are available in user-space context and initial application (usually NSH) registers the symbol table through IOCTL. The table can be reused then by another applications in their address space as kernel allows. Simple for flat or protected mode, I am not sure if really support in MMU mode. It is highly probable that I have made some mistake, overlooked something, but functionality is optional (should not cause troubles in any mode if disabled) and main purpose is to lower memory overhead when more applications are loaded on memory constrained system which usually use direct kernel calling without protection or address space separation. If the table should be provided by kernel to applications then makefiles has to be adjusted.
The legacy '/' delimiter is still supported but not recommend and not advertised.
Squashed commit of the following:
Update configurations instructions in more README.txt files to show ':' delimiter vs '/' delimiter.
Update configurations instructions in various README.txt file to show ':' delimiter vs '/' delimiter.
tools: Update all configuration-related tools to accept ':' separator between board and configuration name.
Squashed commit of the following:
Last minute clean-up
libs/libc/grp/lib_find_grpfile.c: Fix some problems found in testing.
libs/libc/pwd: Finishes off implementation using /etc/passwd.
libs/libc/grp: Finishes off implementation using /etc/group.
libs/libc/pwd/lib_find_pwdfile.c: Add logic to look up user information in /etc/passwd file, if available.
libs/libc/grp/lib_find_grpfile.c: Add logic to look up group information in /etc/group file, if available.
Added stubbed implementations of getpwuid, getpwuid_r, getpwnam, and
getpwnam_r. These functions are essentially stubs pretending that NuttX
supported users and that the only configured user in the system was 'root'
with uid 0. The intend is not to provide meaningful new features, but to ease
porting of foreign source code to NuttX.
- Added an alphasort implementation
- Added a scandir implementation
- Added DT_* literals to include/dirent.h: Apparently those are not required by POSIX, but are part of 4.3BSD and available in glibc as well.
libs/libc/misc/Make.defs: For platforms whose CPP tool does not support a variable number arguments to pre-processor macros, we may still need to build the debug functions even when CONFIG_DEBUG_FEATURES is not selected. For example, __alert() may be needed is CONFIG_ARCH_STACKDUMP is set.
configs/makerlisp: Add an sdboot configuration that will load .hex files from the SD card.
Squashed commit of the following:
configs/makerlisp: Update comments about use of serial console.
configs/makerlisp: Add LED support, remove vestiges of button support (the board has no user buttons). Add support for SPI-based MMC/SD card slot.
arch/z80/src/ez80: Fix some link problems.
libs/libc/syslog/lib_syslog.c: The ZDS-II toolchain does not declare va_coy in stdarg.h. I think that the use of va_copy in vsyslog() is no necessary.
configs/makerlisp: Initial configuration directories cloned from ez80f910200zco with little more than naming changes.
Converserely, when the icon is clicked, the icon needs to be hidden on the backgound and the window needs to be restored in its current state (which may be different than the state of the window at the time it was iconified.
Squashed commit of the following:
graphics/: Add checks in all places that I can think to avoid doing something stupid with hidden windows
Improve some naming
Add a new file missing in last commit.
graphics/: Initial, incomplete support for hiding windows.
libs/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
syscall/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
wireless/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
Documentation/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
include/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
drivers/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
sched/: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
configs: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
arch/xtensa: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
arch/z80: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
arch/x86: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
arch/renesas and arch/risc-v: Remove references to CONFIG_DISABLE_SIGNALS. Signals can no longer be disabled.
arch/or1k: Remove all references to CONFIG_DISABLE_SIGNALS. Signals are always enabled.
arch/misoc: Remove all references to CONFIG_DISABLE_SIGNALS. Signals are always enabled.
arch/mips: Remove all references to CONFIG_DISABLE_SIGNALS. Signals are always enabled.
arch/avr: Remove all references to CONFIG_DISABLE_SIGNALS. Signals are always enabled.
arch/arm: Remove all references to CONFIG_DISABLE_SIGNALS. Signals are always enabled.
Squashed commit of the following:
Update .gitignore
Fix some compile-related issues.
Add support for cursors of differing pixeldepth.
Various compile-related fixes.
graphics/nxglib: Separate cursor rendering routines in nxglib/ (like all other rendering logic). graphics/nxbe: Flesh out remaining cursor methods.
libs/libnx/nxme: Add front-end, client, message handling needed for cursor support. Still actual cursor logic yet, just message handling.
graphics/nxmu and graphics/nxbe: Add back-end message handling needed for cursor support. No actual cursor logic yet, just message handling.
graphics/nxbe/nxbe_bitmap.c: Fix another coordinate system problem.
graphics/: Review use of device coordinate system with window frambebuffer and make fixes accordingly.
graphics/nxbe/nxbe_fill.c: Fix a coordinate system bug. Was trying to update the window fraembuffer using the device coordinate system. Need to use the relative coordinate system.
graphics/: Use DEBUGASSERT instead of return an error since the is no user to handle the errors within the NX server. Use CONFIG_DEBUG_GRAPHICS instead of CONFIG_DEBUG_FEATURES in most cases.
graphics/: Nothing under graphics/ should set the errno.
- Logic that generates the low lever framebuffer renderers for the per-window framebuffers,
- The logic that picks off the per-window framebuffer updates from normal graphics device updates. This logic must update both the per-window framebuffer and the graphics device (from the framebuffer).
Squashed commit of the following:
graphics: Add logic to allocate the per-window framebuffer.
graphics: A few fragmentary thoughts on how a per-window framebuffer could be represented and allocated.
graphics: nx_openwindow() and nxtk_openwindow() now accept an addtional 'flag' parameter. This argument is not used at present but will, eventually enable a RAM backed, per-window framebuffer.
graphics/Kconfig: Add configuration to support a rambacked framebuffer. Current marked as EXPERIMENTAL because this is a work in progress.
Squashed commit of the following:
graphics/: Rename nxfe_reportposition to nxmu_reportposition. The is no longer an nxfe layer.
graphics/: Renmae nxfe_redrawreq to nxmu_redrawreq. The is no longer an nxfe layer.
graphics/nxmu/nxmu.h: Renmae nxfe.h to nxmu.h. There is no long an nxfe layer.
graphics/: Rename nxfe_state_s to nxmu_state_s. There is no longer an nxfe layer.
graphics/: Rename nxfe_conn_s to nxmu_conn_s. There is no longer an nxfe layer.
Add three patches about STM32 intherupts and network loopback files
* Add the missing macro STM32_IRQ_NIRQS used by ./arch/arm/src/stm32f7/stm32_irq.c
Signed-off-by: Kejun ZHOU <zhoukejun@outlook.com>
* The struct in_addr doesn't have the member sin_addr.
Signed-off-by: Kejun ZHOU <zhoukejun@outlook.com>
* The function lib_lo_ipv6match() is for IPv6.
Correct the function it calls from lib_lo_ipv4matchto() to lib_lo_ipv6match().
Also add CONFIG_NET_IPv6 for configuration.
Signed-off-by: Kejun ZHOU <zhoukejun@outlook.com>
libs/libc/pthread/pthread_spinlock.c: Resolve several TODO issues by accessing up_testset() via the boardctl() interface rather than attempting to call it directly.
configs/boardctl.c, include/sys/boardctl.h: Add access to architecture-specific up_testset() via boardctl().
arch/Kconfig's, sched/Kconfig, and include/nuttx/spinlock.h: Spinlocks are not available unless the architecture supports the up_testset() operation.
Fixed coding standard error in several files. Use of while( is incorrect; a space is required between while and (. Also ran tools/nxstyle and fix thoses complaints as well in most files.
Changes to comply with coding standard. Mostly focused on files with missing space after keyword in if(, switch(, and for(. Offending files also got changes to comply with tools nxstyle. If there were logs of nxstyle complaints, the file also got a taste of tools/indent.sh. Still need to fix occurrences of while( with missing space. There are a lot of them.
- Numbered arguments now work by using two pass parsing and an argument list.
The maximum number of numbered args is determined by CONFIG_LIBC_NL_ARGMAX
which is then copied into NL_ARGMAX.
- Size of pointer argument ('p') is determined before output.
include/limits.h: Define NL_ARGMAX (as well as some of the other 'invariant
values' per http://pubs.opengroup.org/onlinepubs/7908799/xsh/limits.h.html)
sched/init/nx_start.c: Add support for CONFIG_BOARD_DRIVER_INITIALIZE. If this option is selected then nx_start() will call a board-provided function board_driver_initialize() immediately after calling up_initialize().
Rename CONFIG_BOARD_INITIALIZE to CONFIG_BOARD_LATE_INITIALIZE.
Raname board_initialize() to board_late_initialize()
The previous implementation was probably corect. On Cygwin with GCC I see this:
int main(int argc, char **argv)
{
printf("Value 1.2 is: [%f]\n", 1.2);
printf("Value 0.1 is: [%f]\n", 0.1);
printf("Value 0.0: [%f]\n", 0.0);
printf("Value 347.6872: [%f]\n", 347.6872);
}
Generates output
Value 1.2 is: [1.200000]
Value 0.1 is: [0.100000]
Value 0.0: [0.000000]
Value 347.6872: [347.687200]
This reverts commit eb0223bc7f.
Author: Gregory Nutt <gnutt@nuttx.org>
TODO: Remove 'Missing fscanf()' bug
Clean up remaining complaints for tools/nxstyle
Apply tools/detab, rmcr, convert-comments, lowhex, and indent.sh to the new and highly modified files.
Author: Johannes <nivus.entwicklung@gmail.com>
- Move vscanf logic to lib_sscanf.c Switched to stream interface (tricky, because the old implementation used massive read ahead, which isn't suitable for streams, chars already read are gone).
- Added scanf and fscanf
- Added hh, h, and ll modifiers
- Fixes for standard compliance in scanf
- Fixes for standard compliance in strto... function family (don't consume single '-' or '+', allow sign in strotul(l))
Squashed commit of the following:
sched/sched/sched_getsockets.c: Fix an error in conditional compilation.
fs/: Remove all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0
Documentation/: Remove all references to CONFIG_NSOCKET_DESCRIPTORS == 0
include/: Remove all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0
libs/: Remove all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0
net/: Remove all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0
sched/: Remove all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0
syscall/: Remove all conditional logic based on CONFIG_NSOCKET_DESCRIPTORS == 0
tools/: Fixups for CONFIG_NSOCKET_DESCRIPTORS no longer used to disable sockets.
Squashed commit of the following:
configs/: The few configurations that formerly set CONFIG_NFILE_DESCRIPTORS=0 should not default, rather they should set the number of descriptors to 3.
fs/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
tools/: Tools updates for changes to usage of CONFIG_NFILE_DESCRIPTORS.
syscall/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
libs/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
include/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
drivers/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
Documentation/: Remove all references to CONFIG_NFILE_DESCRIPTORS == 0
binfmt/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
arch/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
net/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
sched/: Remove all conditional logic based on CONFIG_NFILE_DESCRIPTORS == 0
sched/Kconfig: CONFIG_NFILE_DESCRIPTORS may no longer to set to a value less than 3
configs/: Remove all settings for CONFIG_NFILE_DESCRIPTORS < 3
Use STM32 DMA IP core version instead of chip family names and some minor improvements
arch/arm/src/stm32/chip/stm32_adc.h: raise error if two IP cores seleceted
libs/libdsp/Kconfig: cosmetic change
arch/arm/src/stm32/Kconfig: hide TIMER menu, HRTIM menu and USB Host debug menu if peripherals not enabled
configs/stm32f429i-disco/highpri/defconfig: fix configuration warning
Approved-by: GregoryN <gnutt@nuttx.org>
Pullreq libc libnx updates
* NuttX: make strerror() return 'Success' for 0
* NuttX: fix strrchr() so that it considers null terminator as part of string
From strrchr(3) man page:
"The terminating null byte is considered part of the string, so that if c
is specified as '\0', these functions return a pointer to the terminator."
* NuttX: mm_free(): Add DEBUGASSERT()'s to catch memory corruption early.
It's easier to find the source when asserts fail already when freeing
an overflowed buffer, than if the corruption is only detected on next
malloc().
* MM_FILL_ALLOCATIONS: Add debug option to fill all mallocs()
This is helpful for detecting uninitialized variables,
especially in C++ code. I seem to be forgetting to initialize
member variables and then they just get random values..
* NuttX: nxtk_bitmapwindow: Fix warning message when bitmap is fully off-screen.
* nxfonts_getfont: Avoid unnecessary warnings for other whitespace chars also.
* NuttX: Fix kerning of 'I' in Sans17x22 font
The I character was running together with some other
characters, e.g. in sequence "IMI".
* NXMU: Revalidate window pointer for mouse events.
NXMU caches the previous window pointer so that further mouse
events can be sent to the same window. However, if the window
is destroyed while mouse button is held down, the pointer may
become invalid and cause a crash. This patch revalidates the
pointer before using it.
Approved-by: GregoryN <gnutt@nuttx.org>
1. Move exepath_*() related code to libc/misc
1. Rename exepath_ to envpath_
2. Rename BINFMT_EXEPATH to LIB_ENVPATH
libs/libc/modlib: Add pre module library symbol table support
libs/libc/stdio/lib_libvsprintf.c: Resolves the integer field width problem if Issue 35 for the cases of long and long long integer types.
libs/libc/stdio/lib_libvsprintf.c: Resolves the integer field width problem if Issue 35 for the case of integer types.
libs/libc/stdio: Remove CONFIG_NOPRINTF_FIELDWIDTH. That option does, indeed, make the printf family of functions much smaller. But it also adds a lot of complexity and makes the functions non-standard. Removing this might break some of the tinier platforms but it is the best thing to do for long term maintanance for for OpenGroup.org compliance.
When performing a floating point conversion the parsing code could
consume more than required characters from the input buffer. This made
impossible to convert input of form "1.1K" using format "%f%c".
Fix the issue by advancing the input buffer with the actual characters
converted as a float point number.
Signed-off-by: Mihai Serban <mihai.serban@gmail.com>
A few improvements to getaddrinfo:
- Use the protocol and socktype hints in returned address
- Ignore AI_PASSIVE argument if hostname is not NULL
Approved-by: GregoryN <gnutt@nuttx.org>