MISRA rules (see #9892) forbid alloca() and family, even though those features can be valuable performance and memory size optimizations useful to Zephyr. Introduce a MISRA_SANE kconfig, which when true enables a gcc error condition whenever a variable length array is used. When enabled, the mempool code will use a theoretical-maximum array size on the stack instead of one tailored to the current pool configuration. The rbtree code will do similarly, but because the theoretical maximum is quite a bit larger (236 bytes on 32 bit platforms) the array is placed into struct rbtree instead so it can live in static data (and also so I don't have to go and retune all the test stack sizes!). Current code only uses at most two of these (one in the scheduler when SCHED_SCALABLE is selected, and one for dynamic kernel objects when USERSPACE and DYNAMIC_OBJECTS are set). This tunable is false by default, but is selected in a single test (a subcase of tests/kernel/common) for coverage. Note that the I2C and SPI subsystems contain uncorrected VLAs, so a few platforms need to be blacklisted with a filter. Signed-off-by: Andy Ross <andrew.j.ross@intel.com>
14 lines
326 B
YAML
14 lines
326 B
YAML
tests:
|
|
kernel.common:
|
|
tags: kernel
|
|
min_flash: 33
|
|
min_ram: 32
|
|
kernel.common.misra:
|
|
tags: kernel
|
|
min_flash: 33
|
|
min_ram: 32
|
|
# Some configurations are known-incompliant and won't build
|
|
filter: not ((CONFIG_I2C or CONFIG_SPI) and CONFIG_USERSPACE)
|
|
extra_configs:
|
|
- CONFIG_MISRA_SANE=y
|