summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.txt23
-rw-r--r--bsp-howto/coding-doxygen-bsp.rst4
-rw-r--r--c-user/config/ada.rst15
-rw-r--r--c-user/config/bdbuf.rst373
-rw-r--r--c-user/config/bsp-related.rst268
-rw-r--r--c-user/config/classic-api.rst439
-rw-r--r--c-user/config/classic-init-task.rst238
-rw-r--r--c-user/config/device-driver.rst594
-rw-r--r--c-user/config/event-record.rst140
-rw-r--r--c-user/config/filesystem.rst802
-rw-r--r--c-user/config/general.rst814
-rw-r--r--c-user/config/idle-task.rst122
-rw-r--r--c-user/config/index.rst31
-rw-r--r--c-user/config/intro.rst369
-rw-r--r--c-user/config/libpci.rst55
-rw-r--r--c-user/config/mpci.rst237
-rw-r--r--c-user/config/obsolete.rst234
-rw-r--r--c-user/config/posix-api.rst424
-rw-r--r--c-user/config/posix-init-thread.rst104
-rw-r--r--c-user/config/scheduler-clustered.rst220
-rw-r--r--c-user/config/scheduler-general.rst560
-rw-r--r--c-user/config/task-stack-alloc.rst173
-rw-r--r--c-user/configuring_a_system.rst4974
-rw-r--r--c-user/glossary.rst1415
-rw-r--r--c-user/index.rst2
-rw-r--r--c-user/multiprocessing.rst2
-rw-r--r--c-user/rate_monotonic_manager.rst7
-rw-r--r--c-user/scheduling_concepts.rst80
-rw-r--r--c-user/self_contained_objects.rst3
-rw-r--r--c-user/symmetric_multiprocessing_services.rst2
-rw-r--r--c-user/task_manager.rst64
-rw-r--r--c-user/user_extensions.rst40
-rw-r--r--common/_static/my-styles.css5
-rw-r--r--common/conf.py16
-rw-r--r--common/rtemsstyle.sty2
-rw-r--r--common/version.py25
-rw-r--r--common/waf.py8
-rw-r--r--eng/doc-guide.rst79
-rw-r--r--eng/glossary.rst150
-rw-r--r--eng/index.rst1
-rw-r--r--eng/management.rst2
-rw-r--r--eng/python-devel.rst163
-rw-r--r--eng/release-mgmt.rst4
-rw-r--r--eng/release-process.rst270
-rw-r--r--eng/req-eng.rst6
-rwxr-xr-xposix-compliance/RTEMS-Standards-Compliance-v8.csv (renamed from posix-compliance/RTEMS-Standards-Compliance-v7.csv)438
-rw-r--r--posix-compliance/wscript2
-rw-r--r--user/bsps/arm/beagle.rst6
-rw-r--r--user/bsps/arm/gdbarmsim.rst8
-rw-r--r--user/bsps/arm/raspberrypi.rst2
-rw-r--r--user/bsps/bsps-arm.rst1
-rw-r--r--user/bsps/bsps-m68k.rst190
-rw-r--r--user/bsps/bsps-sparc.rst9
-rw-r--r--user/exe/initialization.rst2
-rw-r--r--user/hosts/posix.rst20
-rw-r--r--user/index.rst9
-rw-r--r--user/installation/developer.rst1
-rw-r--r--user/migration/index.rst17
-rw-r--r--user/migration/v4_11-to-v5.rst96
-rw-r--r--user/rsb/commands.rst10
-rw-r--r--user/rsb/configuration.rst55
-rw-r--r--user/rsb/cross-canadian-cross.rst2
-rw-r--r--user/rsb/index.rst2
-rw-r--r--user/rsb/project-sets.rst2
-rw-r--r--user/rsb/third-party-packages.rst2
-rw-r--r--user/start/app.rst245
-rw-r--r--user/start/bootstrap.rst72
-rw-r--r--user/start/bsp-build.rst142
-rw-r--r--user/start/bsp-test.rst2
-rw-r--r--user/start/gsoc.rst132
-rw-r--r--user/start/host.rst21
-rw-r--r--user/start/index.rst4
-rw-r--r--user/start/prefixes.rst35
-rw-r--r--user/start/preparation.rst113
-rw-r--r--user/start/rsb-packages.rst184
-rw-r--r--user/start/sources.rst133
-rw-r--r--user/start/tools.rst161
-rw-r--r--user/tools/boot-image.rst2
-rw-r--r--user/tools/tester.rst2
-rw-r--r--wscript3
80 files changed, 9546 insertions, 6138 deletions
diff --git a/README.txt b/README.txt
index cdd44fd..ce30505 100644
--- a/README.txt
+++ b/README.txt
@@ -101,6 +101,26 @@ command.
Please add your host as you set it up.
+The best environment to use is `virtualenv`. It can create a specific python
+environment using `pip`.
+
+Virtualenv
+~~~~~~~~~~
+
+Create a directory to house the virtualenv, create the envrionment and the
+activate it:
+
+ $ mkdir sphinx
+ $ virtualenv sphinx
+ $ . ./sphinx/bin/activate
+
+The prompt will now change. You can install Sphinx with:
+
+ $ pip install sphinx
+ $ pip install sphinxcontrib-bibtex
+
+When you have finished you enter `deactivate`.
+
Sphinx Per User Install
~~~~~~~~~~~~~~~~~~~~~~~
@@ -190,7 +210,7 @@ Python 3:
By default, CentOS 7 has Python 2.x. Luckily they now have Software
Collections which lets you install and use a "collection" of newer
-software. As root,
+software. As root,
# yum install centos-release-scl
# yum install rh-python36
@@ -266,6 +286,7 @@ Arch Linux
Sphinx:
# pacman -S python-sphinx
+ # pacman -S python-sphinxcontrib-bibtex
PDF:
diff --git a/bsp-howto/coding-doxygen-bsp.rst b/bsp-howto/coding-doxygen-bsp.rst
index d5ab21e..59c0e0b 100644
--- a/bsp-howto/coding-doxygen-bsp.rst
+++ b/bsp-howto/coding-doxygen-bsp.rst
@@ -138,8 +138,8 @@ by all BSPs of that architecture.
$ ls
acinclude.m4 edb7312 gumstix Makefile.am realview-pbx-a9 stm32f4
configure.ac gba lm3s69xx nds rtl22xx xilinx-zynq
- csb336 gdbarmsim lpc24xx preinstall.am shared
- csb337 gp32 lpc32xx raspberrypi smdk2410
+ csb336 lpc24xx preinstall.am shared csb337 gp32
+ lpc32xx raspberrypi smdk2410
Finally, if we cd into a specific BSP, we see the files and .h's that
compose the package for that particular board. You may recognize the
diff --git a/c-user/config/ada.rst b/c-user/config/ada.rst
new file mode 100644
index 0000000..49db1f7
--- /dev/null
+++ b/c-user/config/ada.rst
@@ -0,0 +1,15 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+.. _ConfigAda:
+
+Ada Configuration
+=================
+
+The GNU Ada runtime library (libgnarl) uses threads, mutexes, condition
+variables, and signals from the pthreads API. It uses also thread-local storage
+for the Ada Task Control Block (ATCB). From these resources only the threads
+need to be accounted for in the configuration. You should include the Ada tasks
+in your setting of the :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS` configuration
+option.
diff --git a/c-user/config/bdbuf.rst b/c-user/config/bdbuf.rst
new file mode 100644
index 0000000..604f887
--- /dev/null
+++ b/c-user/config/bdbuf.rst
@@ -0,0 +1,373 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Block Device Cache Configuration
+================================
+
+This section describes configuration options related to the Block Device Cache
+(bdbuf).
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
+
+.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
+
+CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
+------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Block Device Cache is
+ initialized during system initialization.
+
+NOTES:
+ Each option of the Block Device Cache (bdbuf) configuration can be explicitly
+ set by the user with the configuration options below. The Block Device Cache
+ is used for example by the RFS and DOSFS filesystems.
+
+.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
+
+.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
+
+CONFIGURE_BDBUF_BUFFER_MAX_SIZE
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 4096.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be an integral multiple of :ref:`CONFIGURE_BDBUF_BUFFER_MIN_SIZE`.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum size of a buffer
+ in bytes.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
+
+.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
+
+CONFIGURE_BDBUF_BUFFER_MIN_SIZE
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 512.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the minimum size of a buffer
+ in bytes.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
+
+.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
+
+CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
+---------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 32768.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``SIZE_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the size of the cache memory
+ in bytes.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
+
+.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
+
+CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
+-------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum blocks per
+ read-ahead request.
+
+NOTES:
+ A value of 0 disables the read-ahead task (default). The read-ahead task
+ will issue speculative read transfers if a sequential access pattern is
+ detected. This can improve the performance on some systems.
+
+.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
+
+.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
+
+CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
+--------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 16.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum blocks per write
+ request.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
+
+.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
+
+CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
+----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 15.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid Classic API task
+ priority. The set of valid task priorities is scheduler-specific.
+
+DESCRIPTION:
+ The value of this configuration option defines the read-ahead task priority.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
+
+.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
+
+CONFIGURE_BDBUF_TASK_STACK_SIZE
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is ``RTEMS_MINIMUM_STACK_SIZE``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the task stack size of the
+ Block Device Cache tasks in bytes.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
+
+.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
+
+CONFIGURE_SWAPOUT_BLOCK_HOLD
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 1000.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the swapout task maximum block
+ hold time in milliseconds.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
+
+.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
+
+CONFIGURE_SWAPOUT_SWAP_PERIOD
+-----------------------------
+
+CONSTANT:
+ ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 250.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the swapout task swap period
+ in milliseconds.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
+
+.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
+
+CONFIGURE_SWAPOUT_TASK_PRIORITY
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 15.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid Classic API task
+ priority. The set of valid task priorities is scheduler-specific.
+
+DESCRIPTION:
+ The value of this configuration option defines the swapout task priority.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
+
+.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
+
+CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 15.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid Classic API task
+ priority. The set of valid task priorities is scheduler-specific.
+
+DESCRIPTION:
+ The value of this configuration option defines the swapout worker task
+ priority.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
+
+.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
+
+CONFIGURE_SWAPOUT_WORKER_TASKS
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SWAPOUT_WORKER_TASKS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the swapout worker task count.
+
+NOTES:
+ None.
diff --git a/c-user/config/bsp-related.rst b/c-user/config/bsp-related.rst
new file mode 100644
index 0000000..ba5ca93
--- /dev/null
+++ b/c-user/config/bsp-related.rst
@@ -0,0 +1,268 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+BSP Related Configuration Options
+=================================
+
+This section describes configuration options related to the BSP. Some
+configuration options may have a BSP-specific setting which is defined by
+``<bsp.h>``. The BSP-specific settings can be disabled by the
+:ref:`CONFIGURE_DISABLE_BSP_SETTINGS` configuration option.
+
+.. index:: BSP_IDLE_TASK_BODY
+
+.. _BSP_IDLE_TASK_BODY:
+
+BSP_IDLE_TASK_BODY
+------------------
+
+CONSTANT:
+ ``BSP_IDLE_TASK_BODY``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is BSP-specific.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void *( *idle_body )( uintptr_t )``.
+
+DESCRIPTION:
+ If
+
+ * this configuration option is defined by the BSP
+
+ * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+
+ then the value of this configuration option defines the default value of
+ :ref:`CONFIGURE_IDLE_TASK_BODY`.
+
+NOTES:
+ As it has knowledge of the specific CPU model, system controller logic, and
+ peripheral buses, a BSP-specific IDLE task may be capable of turning
+ components off to save power during extended periods of no task activity.
+
+.. index:: BSP_IDLE_TASK_STACK_SIZE
+
+.. _BSP_IDLE_TASK_STACK_SIZE:
+
+BSP_IDLE_TASK_STACK_SIZE
+------------------------
+
+CONSTANT:
+ ``BSP_IDLE_TASK_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is BSP-specific.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+ * It shall be small enough so that the IDLE
+ task stack area calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``size_t``.
+
+DESCRIPTION:
+ If
+
+ * this configuration option is defined by the BSP
+
+ * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+
+ then the value of this configuration option defines the default value of
+ :ref:`CONFIGURE_IDLE_TASK_SIZE`.
+
+NOTES:
+ None.
+
+.. index:: BSP_INITIAL_EXTENSION
+
+.. _BSP_INITIAL_EXTENSION:
+
+BSP_INITIAL_EXTENSION
+---------------------
+
+CONSTANT:
+ ``BSP_INITIAL_EXTENSION``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is BSP-specific.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a list of initializers for
+ structures of type :c:type:`rtems_extensions_table`.
+
+DESCRIPTION:
+ If
+
+ * this configuration option is defined by the BSP
+
+ * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+
+ then the value of this configuration option is used to initialize the table
+ of initial user extensions.
+
+NOTES:
+ The value of this configuration option is placed after the entries of all
+ other initial user extensions.
+
+.. index:: BSP_INTERRUPT_STACK_SIZE
+
+.. _BSP_INTERRUPT_STACK_SIZE:
+
+BSP_INTERRUPT_STACK_SIZE
+------------------------
+
+CONSTANT:
+ ``BSP_INTERRUPT_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is BSP-specific.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+ * It shall be small enough so that the
+ interrupt stack area calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``size_t``.
+
+ * It shall be aligned according to
+ ``CPU_INTERRUPT_STACK_ALIGNMENT``.
+
+DESCRIPTION:
+ If
+
+ * this configuration option is defined by the BSP
+
+ * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+
+ then the value of this configuration option defines the default value of
+ :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
+
+.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
+
+CONFIGURE_BSP_PREREQUISITE_DRIVERS
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is BSP-specific.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a list of initializers for
+ structures of type :c:type:`rtems_extensions_table`.
+
+DESCRIPTION:
+ If
+
+ * this configuration option is defined by the BSP
+
+ * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+
+ then the value of this configuration option is used to initialize the table
+ of initial user extensions.
+
+NOTES:
+ The value of this configuration option is placed before the entries of all
+ other initial user extensions (including
+ :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`).
+
+.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
+
+.. _CONFIGURE_DISABLE_BSP_SETTINGS:
+
+CONFIGURE_DISABLE_BSP_SETTINGS
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_DISABLE_BSP_SETTINGS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the following BSP related
+ configuration options are undefined:
+
+ - :ref:`BSP_IDLE_TASK_BODY`
+
+ - :ref:`BSP_IDLE_TASK_STACK_SIZE`
+
+ - :ref:`BSP_INITIAL_EXTENSION`
+
+ - :ref:`BSP_INTERRUPT_STACK_SIZE`
+
+ - :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS`
+
+ - :ref:`CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK`
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+
+.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
+
+CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ If
+
+ * this configuration option is defined by the BSP
+
+ * and :ref:`CONFIGURE_DISABLE_BSP_SETTINGS` is undefined,
+
+ then not all memory is made available to the C Program Heap immediately at
+ system initialization time. When :c:func:`malloc()` or other standard memory
+ allocation functions are unable to allocate memory, they will call the BSP
+ supplied :c:func:`sbrk()` function to obtain more memory.
+
+NOTES:
+ This option should not be defined by the application. Only the BSP knows how
+ it allocates memory to the C Program Heap.
diff --git a/c-user/config/classic-api.rst b/c-user/config/classic-api.rst
new file mode 100644
index 0000000..bd2fa00
--- /dev/null
+++ b/c-user/config/classic-api.rst
@@ -0,0 +1,439 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Classic API Configuration
+=========================
+
+This section describes configuration options related to the Classic API.
+
+.. index:: CONFIGURE_MAXIMUM_BARRIERS
+
+.. _CONFIGURE_MAXIMUM_BARRIERS:
+
+CONFIGURE_MAXIMUM_BARRIERS
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_BARRIERS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Barriers that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
+
+.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
+
+CONFIGURE_MAXIMUM_MESSAGE_QUEUES
+--------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Message Queues that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`. You have to account for the memory used to
+ store the messages of each message queue, see
+ :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
+
+.. index:: CONFIGURE_MAXIMUM_PARTITIONS
+
+.. _CONFIGURE_MAXIMUM_PARTITIONS:
+
+CONFIGURE_MAXIMUM_PARTITIONS
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_PARTITIONS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Partitions that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_PERIODS
+
+.. _CONFIGURE_MAXIMUM_PERIODS:
+
+CONFIGURE_MAXIMUM_PERIODS
+-------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_PERIODS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Periods that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_PORTS
+
+.. _CONFIGURE_MAXIMUM_PORTS:
+
+CONFIGURE_MAXIMUM_PORTS
+-----------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_PORTS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Ports that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_REGIONS
+
+.. _CONFIGURE_MAXIMUM_REGIONS:
+
+CONFIGURE_MAXIMUM_REGIONS
+-------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_REGIONS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Regions that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
+
+.. _CONFIGURE_MAXIMUM_SEMAPHORES:
+
+CONFIGURE_MAXIMUM_SEMAPHORES
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_SEMAPHORES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Semaphore that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+ In SMP configurations, the size of a Semaphore Control Block depends on the
+ scheduler count (see :ref:`ConfigurationSchedulerTable`). The semaphores
+ using the :ref:`MrsP` need a ceiling priority per scheduler.
+
+.. index:: CONFIGURE_MAXIMUM_TASKS
+
+.. _CONFIGURE_MAXIMUM_TASKS:
+
+CONFIGURE_MAXIMUM_TASKS
+-----------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_TASKS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Tasks that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+ The calculations for the required memory in the RTEMS Workspace for tasks
+ assume that each task has a minimum stack size and has floating point
+ support enabled. The configuration parameter
+ ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify task stack requirements
+ *ABOVE* the minimum size required. See :ref:`Reserve Task/Thread Stack
+ Memory Above Minimum` for more information about
+ ``CONFIGURE_EXTRA_TASK_STACKS``.
+
+ The maximum number of POSIX threads is specified by
+ :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`.
+
+ A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
+ assumption that all tasks have floating point enabled. This would require
+ the addition of a new configuration parameter to specify the number of
+ tasks which enable floating point support.
+
+.. index:: CONFIGURE_MAXIMUM_TIMERS
+
+.. _CONFIGURE_MAXIMUM_TIMERS:
+
+CONFIGURE_MAXIMUM_TIMERS
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_TIMERS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API Timers that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
+
+.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
+
+CONFIGURE_MAXIMUM_USER_EXTENSIONS
+---------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of Classic
+ API User Extensions that can be concurrently active.
+
+NOTES:
+ This object class cannot be configured in unlimited allocation mode.
diff --git a/c-user/config/classic-init-task.rst b/c-user/config/classic-init-task.rst
new file mode 100644
index 0000000..ca300e7
--- /dev/null
+++ b/c-user/config/classic-init-task.rst
@@ -0,0 +1,238 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Classic API Initialization Task Configuration
+=============================================
+
+This section describes configuration options related to the Classic API
+initialization task.
+
+.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
+
+.. _CONFIGURE_INIT_TASK_ARGUMENTS:
+
+CONFIGURE_INIT_TASK_ARGUMENTS
+-----------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_ARGUMENTS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid integer of type
+ ``rtems_task_argument``.
+
+DESCRIPTION:
+ The value of this configuration option defines task argument of the Classic
+ API initialization task.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
+
+.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
+
+CONFIGURE_INIT_TASK_ATTRIBUTES
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_ATTRIBUTES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid task attribute set.
+
+DESCRIPTION:
+ The value of this configuration option defines the task attributes of the
+ Classic API initialization task.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
+
+.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
+
+CONFIGURE_INIT_TASK_ENTRY_POINT
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_ENTRY_POINT``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is ``Init``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void ( *entry_point )( rtems_task_argument )``.
+
+DESCRIPTION:
+ The value of this configuration option initializes the entry point of the
+ Classic API initialization task.
+
+NOTES:
+ The application shall provide the function referenced by this configuration
+ option.
+
+.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
+
+.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
+
+CONFIGURE_INIT_TASK_INITIAL_MODES
+---------------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_INITIAL_MODES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ In SMP configurations, the default value is ``RTEMS_DEFAULT_MODES``,
+ otherwise the default value is ``RTEMS_NO_PREEMPT``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid task mode set.
+
+DESCRIPTION:
+ The value of this configuration option defines the initial execution mode of
+ the Classic API initialization task.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_INIT_TASK_NAME
+
+.. _CONFIGURE_INIT_TASK_NAME:
+
+CONFIGURE_INIT_TASK_NAME
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_NAME``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid integer of type
+ ``rtems_name``.
+
+DESCRIPTION:
+ The value of this configuration option defines the name of the Classic API
+ initialization task.
+
+NOTES:
+ Use :c:func:`rtems_build_name` to define the task name.
+
+.. index:: CONFIGURE_INIT_TASK_PRIORITY
+
+.. _CONFIGURE_INIT_TASK_PRIORITY:
+
+CONFIGURE_INIT_TASK_PRIORITY
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 1.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid Classic API task
+ priority. The set of valid task priorities is scheduler-specific.
+
+DESCRIPTION:
+ The value of this configuration option defines the initial priority of the
+ Classic API initialization task.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
+
+.. _CONFIGURE_INIT_TASK_STACK_SIZE:
+
+CONFIGURE_INIT_TASK_STACK_SIZE
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_INIT_TASK_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the task stack size of the
+ Classic API initialization task.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
+
+CONFIGURE_RTEMS_INIT_TASKS_TABLE
+--------------------------------
+
+CONSTANT:
+ ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then exactly one Classic API
+ initialization task is configured.
+
+NOTES:
+ The application shall define exactly one of the following configuration
+ options
+
+ * `CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
+
+ * :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
+
+ * :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
+
+ otherwise a compile time error in the configuration file will occur.
diff --git a/c-user/config/device-driver.rst b/c-user/config/device-driver.rst
new file mode 100644
index 0000000..627c346
--- /dev/null
+++ b/c-user/config/device-driver.rst
@@ -0,0 +1,594 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Device Driver Configuration
+===========================
+
+This section describes configuration options related to the device drivers.
+Note that network device drivers are not covered by the following options.
+
+.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+
+.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
+
+CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
+------------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then a Clock Driver may be
+ initialized during system initialization.
+
+DESCRIPTION:
+ In case this configuration option is defined, then **no** Clock Driver is
+ initialized during system initialization.
+
+NOTES:
+ This configuration parameter is intended to prevent the common user error
+ of using the Hello World example as the baseline for an application and
+ leaving out a clock tick source.
+
+ The application shall define exactly one of the following configuration options
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
+
+ * `CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+
+ otherwise a compile time error in the configuration file will occur.
+
+.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
+
+.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
+
+CONFIGURE_APPLICATION_EXTRA_DRIVERS
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is the empty list.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a list of initializers for
+ structures of type :c:type:`rtems_driver_address_table`.
+
+DESCRIPTION:
+ The value of this configuration option is used to initialize the Device
+ Driver Table.
+
+NOTES:
+ The value of this configuration option is placed after the entries of other
+ device driver configuration options.
+
+ See :ref:`CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS` for an alternative
+ placement of application device driver initializers.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the ATA Driver is
+ initialized during system initialization.
+
+NOTES:
+ Most BSPs do not include support for an ATA Driver.
+
+ If this option is defined and the BSP does not have this device driver, then
+ the user will get a link time error for an undefined symbol.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Clock Driver is
+ initialized during system initialization.
+
+NOTES:
+ The Clock Driver is responsible for providing a regular interrupt
+ which invokes a clock tick directive.
+
+ The application shall define exactly one of the following configuration options
+
+ * `CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
+
+ * :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+
+ otherwise a compile time error in the configuration file will occur.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Console Driver is
+ initialized during system initialization.
+
+NOTES:
+ The Console Driver is responsible for providing the :file:`/dev/console`
+ device file. This device is used to initialize the standard input, output,
+ and error file descriptors.
+
+ BSPs should be constructed in a manner that allows :c:func:`printk` to work
+ properly without the need for the Console Driver to be configured.
+
+ The
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+
+ configuration options are mutually exclusive.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
+-----------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Frame Buffer Driver is
+ initialized during system initialization.
+
+NOTES:
+ Most BSPs do not include support for a Frame Buffer Driver. This is
+ because many boards do not include the required hardware.
+
+ If this option is defined and the BSP does not have this device driver, then
+ the user will get a link time error for an undefined symbol.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_IDE_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the IDE Driver is
+ initialized during system initialization.
+
+NOTES:
+ Most BSPs do not include support for an IDE Driver.
+
+ If this option is defined and the BSP does not have this device driver, then
+ the user will get a link time error for an undefined symbol.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
+.. index:: /dev/null
+
+.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the :file:`/dev/null`
+ Driver is initialized during system initialization.
+
+NOTES:
+ This device driver is supported by all BSPs.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Real-Time Clock Driver
+ is initialized during system initialization.
+
+NOTES:
+ Most BSPs do not include support for a real-time clock (RTC). This is because
+ many boards do not include the required hardware.
+
+ If this is defined and the BSP does not have this device driver, then the
+ user will get a link time error for an undefined symbol.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
+-------------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Simple Console Driver
+ is initialized during system initialization.
+
+NOTES:
+ This device driver is responsible for providing the :file:`/dev/console`
+ device file. This device is used to initialize the standard input, output,
+ and error file descriptors.
+
+ This device driver reads via :c:func:`getchark`.
+
+ This device driver writes via :c:func:`rtems_putc`.
+
+ The Termios framework is not used. There is no support to change device
+ settings, e.g. baud, stop bits, parity, etc.
+
+ The
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+
+ configuration options are mutually exclusive.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
+------------------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Simple Task Console
+ Driver is initialized during system initialization.
+
+NOTES:
+ This device driver is responsible for providing the :file:`/dev/console`
+ device file. This device is used to initialize the standard input, output,
+ and error file descriptors.
+
+ This device driver reads via :c:func:`getchark`.
+
+ This device driver writes into a write buffer. The count of characters
+ written into the write buffer is returned. It might be less than the
+ requested count, in case the write buffer is full. The write is
+ non-blocking and may be called from interrupt context. A dedicated task
+ reads from the write buffer and outputs the characters via
+ :c:func:`rtems_putc`. This task runs with the least important priority.
+ The write buffer size is 2047 characters and it is not configurable.
+
+ Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the
+ write buffer.
+
+ The Termios framework is not used. There is no support to change device
+ settings, e.g. baud, stop bits, parity, etc.
+
+ The
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`,
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`, and
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`
+
+ configuration options are mutually exclusive.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Stub Driver is
+ initialized during system initialization.
+
+NOTES:
+ This device driver simply provides entry points that return successful and
+ is primarily a test fixture. It is supported by all BSPs.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
+----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Benchmark Timer Driver is
+ initialized during system initialization.
+
+NOTES:
+ The Benchmark Timer Driver is intended for the benchmark tests of the RTEMS
+ Testsuite. Applications should not use this driver.
+
+ The application shall define exactly one of the following configuration options
+
+ * :ref:`CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`,
+
+ * :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`, or
+
+ * `CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`,
+
+ otherwise a compile time error will occur.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
+
+.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
+-------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Watchdog Driver is
+ initialized during system initialization.
+
+NOTES:
+ Most BSPs do not include support for a watchdog device driver. This is
+ because many boards do not include the required hardware.
+
+ If this is defined and the BSP does not have this device driver, then the
+ user will get a link time error for an undefined symbol.
+
+.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
+.. index:: /dev/zero
+
+.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
+
+CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the :file:`/dev/zero`
+ Driver is initialized during system initialization.
+
+NOTES:
+ This device driver is supported by all BSPs.
+
+.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
+
+.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
+
+CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
+------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is the empty list.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a list of initializers for
+ structures of type :c:type:`rtems_driver_address_table`.
+
+DESCRIPTION:
+ The value of this configuration option is used to initialize the Device
+ Driver Table.
+
+NOTES:
+ The value of this configuration option is placed after the entries defined by
+ :ref:`CONFIGURE_BSP_PREREQUISITE_DRIVERS` and before all other device driver
+ configuration options.
+
+ See :ref:`CONFIGURE_APPLICATION_EXTRA_DRIVERS` for an alternative placement
+ of application device driver initializers.
+
+.. index:: CONFIGURE_ATA_DRIVER_TASK_PRIORITY
+
+.. _CONFIGURE_ATA_DRIVER_TASK_PRIORITY:
+
+CONFIGURE_ATA_DRIVER_TASK_PRIORITY
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_ATA_DRIVER_TASK_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 140.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid Classic API task
+ priority. The set of valid task priorities is scheduler-specific.
+
+DESCRIPTION:
+ The value of this configuration option defines the ATA task priority.
+
+NOTES:
+ This configuration option is only evaluated if the configuration option
+ :ref:`CONFIGURE_APPLICATION_NEEDS_ATA_DRIVER` is defined.
+
+.. index:: CONFIGURE_MAXIMUM_DRIVERS
+
+.. _CONFIGURE_MAXIMUM_DRIVERS:
+
+CONFIGURE_MAXIMUM_DRIVERS
+-------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_DRIVERS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ This is computed by default, and is set to the number of device drivers
+ configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
+ configuration options.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be less than or equal to ``SIZE_MAX``.
+
+ * It shall be greater than or equal than the number of statically configured
+ device drivers.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the number of device drivers.
+
+NOTES:
+ If the application will dynamically install device drivers, then this
+ configuration parameter shall be larger than the number of statically
+ configured device drivers. Drivers configured using the
+ ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration options are
+ statically installed.
diff --git a/c-user/config/event-record.rst b/c-user/config/event-record.rst
new file mode 100644
index 0000000..6c93a3a
--- /dev/null
+++ b/c-user/config/event-record.rst
@@ -0,0 +1,140 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2019, 2020 embedded brains GmbH (http://www.embedded-brains.de)
+
+Event Recording Configuration
+=============================
+
+This section describes configuration options related to the event recording.
+
+.. index:: CONFIGURE_RECORD_EXTENSIONS_ENABLED
+
+.. _CONFIGURE_RECORD_EXTENSIONS_ENABLED:
+
+CONFIGURE_RECORD_EXTENSIONS_ENABLED
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_RECORD_EXTENSIONS_ENABLED``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case
+
+ * this configuration option is defined
+
+ * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+
+ then the event record extensions are enabled.
+
+NOTES:
+ The record extensions capture thread create, start, restart, delete, switch,
+ begin, exitted and terminate events.
+
+.. index:: CONFIGURE_RECORD_FATAL_DUMP_BASE64
+
+.. _CONFIGURE_RECORD_FATAL_DUMP_BASE64:
+
+CONFIGURE_RECORD_FATAL_DUMP_BASE64
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_RECORD_FATAL_DUMP_BASE64``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case
+
+ * this configuration option is defined
+
+ * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+
+ * and :ref:`CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB` is undefined,
+
+ then the event records are dumped in Base64 encoding in a fatal error
+ extension (see :ref:`Terminate`).
+
+NOTES:
+ This extension can be used to produce crash dumps.
+
+.. index:: CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
+
+.. _CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB:
+
+CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_RECORD_FATAL_DUMP_BASE64_ZLIB``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case
+
+ * this configuration option is defined
+
+ * and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS` is properly defined,
+
+ then the event records are compressed by zlib and dumped in Base64 encoding
+ in a fatal error extension (see :ref:`Terminate`).
+
+NOTES:
+ The zlib compression needs about 512KiB of RAM. This extension can be used
+ to produce crash dumps.
+
+.. index:: CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
+
+.. _CONFIGURE_RECORD_PER_PROCESSOR_ITEMS:
+
+CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
+------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_RECORD_PER_PROCESSOR_ITEMS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 16.
+
+ * It shall be less than or equal to ``SIZE_MAX``.
+
+ * It shall be a power of two.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the event record item count
+ per processor.
+
+NOTES:
+ The event record buffers are statically allocated for each configured
+ processor (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). If the value of this
+ configuration option is zero, then nothing is allocated.
diff --git a/c-user/config/filesystem.rst b/c-user/config/filesystem.rst
new file mode 100644
index 0000000..ef37307
--- /dev/null
+++ b/c-user/config/filesystem.rst
@@ -0,0 +1,802 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Filesystem Configuration
+========================
+
+This section describes configuration options related to filesytems.
+By default, the In-Memory Filesystem (IMFS) is used as the base filesystem (also
+known as root filesystem). In order to save some memory for your application,
+you can disable the filesystem support with the
+:ref:`CONFIGURE_APPLICATION_DISABLE_FILESYSTEM` configuration option.
+Alternatively, you can strip down the features of the base filesystem with the
+:ref:`CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM` and
+:ref:`CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM` configuration options. These
+three configuration options are mutually exclusive. They are intended for an
+advanced application configuration.
+
+Features of the IMFS can be disabled and enabled with the following
+configuration options:
+
+* :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_LINK`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_READDIR`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_READLINK`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_RENAME`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`
+
+* :ref:`CONFIGURE_IMFS_DISABLE_UTIME`
+
+* :ref:`CONFIGURE_IMFS_ENABLE_MKFIFO`
+
+.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+
+.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
+
+CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
+----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then a base filesystem and the
+ configured filesystems are initialized during system initialization.
+
+DESCRIPTION:
+ In case this configuration option is defined, then **no** base filesystem is
+ initialized during system initialization and **no** filesystems are
+ configured.
+
+NOTES:
+ Filesystems shall be initialized to support file descriptor based device
+ drivers and basic input/output functions such as :c:func:`printf`.
+ Filesystems can be disabled to reduce the memory footprint of an application.
+
+.. index:: CONFIGURE_FILESYSTEM_ALL
+
+.. _CONFIGURE_FILESYSTEM_ALL:
+
+CONFIGURE_FILESYSTEM_ALL
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_ALL``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the following
+ configuration options will be defined as well
+
+ - :ref:`CONFIGURE_FILESYSTEM_DOSFS`,
+
+ - :ref:`CONFIGURE_FILESYSTEM_FTPFS`,
+
+ - :ref:`CONFIGURE_FILESYSTEM_IMFS`,
+
+ - :ref:`CONFIGURE_FILESYSTEM_JFFS2`,
+
+ - :ref:`CONFIGURE_FILESYSTEM_NFS`,
+
+ - :ref:`CONFIGURE_FILESYSTEM_RFS`, and
+
+ - :ref:`CONFIGURE_FILESYSTEM_TFTPFS`.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_FILESYSTEM_DOSFS
+
+.. _CONFIGURE_FILESYSTEM_DOSFS:
+
+CONFIGURE_FILESYSTEM_DOSFS
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_DOSFS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the DOS (FAT) filesystem
+ is registered, so that instances of this filesystem can be mounted by the
+ application.
+
+NOTES:
+ This filesystem requires a Block Device Cache configuration, see
+ :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`.
+
+.. index:: CONFIGURE_FILESYSTEM_FTPFS
+
+.. _CONFIGURE_FILESYSTEM_FTPFS:
+
+CONFIGURE_FILESYSTEM_FTPFS
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_FTPFS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the FTP filesystem (FTP
+ client) is registered, so that instances of this filesystem
+ can be mounted by the application.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_FILESYSTEM_IMFS
+
+.. _CONFIGURE_FILESYSTEM_IMFS:
+
+CONFIGURE_FILESYSTEM_IMFS
+-------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_IMFS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the In-Memory Filesystem
+ (IMFS) is registered, so that instances of this filesystem can be mounted by
+ the application.
+
+NOTES:
+ Applications will rarely need this configuration option. This configuration
+ option is intended for test programs. You do not need to define this
+ configuration option for the base filesystem (also known as root filesystem).
+
+.. index:: CONFIGURE_FILESYSTEM_JFFS2
+
+.. _CONFIGURE_FILESYSTEM_JFFS2:
+
+CONFIGURE_FILESYSTEM_JFFS2
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_JFFS2``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the JFFS2 filesystem
+ is registered, so that instances of this filesystem can be mounted by the
+ application.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_FILESYSTEM_NFS
+
+.. _CONFIGURE_FILESYSTEM_NFS:
+
+CONFIGURE_FILESYSTEM_NFS
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_NFS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Network Filesystem
+ (NFS) client is registered, so that instances of this filesystem can be
+ mounted by the application.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_FILESYSTEM_RFS
+
+.. _CONFIGURE_FILESYSTEM_RFS:
+
+CONFIGURE_FILESYSTEM_RFS
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_RFS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the RTEMS Filesystem (RFS)
+ is registered, so that instances of this filesystem can be mounted by the
+ application.
+
+NOTES:
+ This filesystem requires a Block Device Cache configuration, see
+ :ref:`CONFIGURE_APPLICATION_NEEDS_LIBBLOCK`.
+
+.. index:: CONFIGURE_FILESYSTEM_TFTPFS
+
+.. _CONFIGURE_FILESYSTEM_TFTPFS:
+
+CONFIGURE_FILESYSTEM_TFTPFS
+---------------------------
+
+CONSTANT:
+ ``CONFIGURE_FILESYSTEM_TFTPFS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the TFTP filesystem (TFTP
+ client) is registered, so that instances of this filesystem can be mounted by
+ the application.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
+
+.. _CONFIGURE_IMFS_DISABLE_CHMOD:
+
+CONFIGURE_IMFS_DISABLE_CHMOD
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_CHMOD``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ changing the mode of files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support changing the mode of files (no support for :c:func:`chmod`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
+
+.. _CONFIGURE_IMFS_DISABLE_CHOWN:
+
+CONFIGURE_IMFS_DISABLE_CHOWN
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_CHOWN``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ changing the ownership of files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support changing the ownership of files (no support for :c:func:`chown`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_LINK
+
+.. _CONFIGURE_IMFS_DISABLE_LINK:
+
+CONFIGURE_IMFS_DISABLE_LINK
+---------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_LINK``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports hard
+ links.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support hard links (no support for :c:func:`link`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
+
+.. _CONFIGURE_IMFS_DISABLE_MKNOD:
+
+CONFIGURE_IMFS_DISABLE_MKNOD
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_MKNOD``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports making
+ files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support making files (no support for :c:func:`mknod`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
+
+.. _CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE:
+
+CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_MKNOD_DEVICE``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports making
+ device files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support making device files.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
+
+.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
+
+CONFIGURE_IMFS_DISABLE_MKNOD_FILE
+---------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports making
+ regular files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support making regular files.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
+
+.. _CONFIGURE_IMFS_DISABLE_MOUNT:
+
+CONFIGURE_IMFS_DISABLE_MOUNT
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_MOUNT``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ mounting other filesystems.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support mounting other filesystems (no support for :c:func:`mount`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_READDIR
+
+.. _CONFIGURE_IMFS_DISABLE_READDIR:
+
+CONFIGURE_IMFS_DISABLE_READDIR
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_READDIR``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ reading directories.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support reading directories (no support for :c:func:`readdir`). It is still
+ possible to open files in a directory.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_READLINK
+
+.. _CONFIGURE_IMFS_DISABLE_READLINK:
+
+CONFIGURE_IMFS_DISABLE_READLINK
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_READLINK``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ reading symbolic links.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support reading symbolic links (no support for :c:func:`readlink`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_RENAME
+
+.. _CONFIGURE_IMFS_DISABLE_RENAME:
+
+CONFIGURE_IMFS_DISABLE_RENAME
+-----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_RENAME``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ renaming files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support renaming files (no support for :c:func:`rename`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
+
+.. _CONFIGURE_IMFS_DISABLE_RMNOD:
+
+CONFIGURE_IMFS_DISABLE_RMNOD
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_RMNOD``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ removing files.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support removing files (no support for :c:func:`rmnod`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
+
+.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
+
+CONFIGURE_IMFS_DISABLE_SYMLINK
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_SYMLINK``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ creating symbolic links.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support creating symbolic links (no support for :c:func:`symlink`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
+
+.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
+
+CONFIGURE_IMFS_DISABLE_UNMOUNT
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ unmounting other filesystems.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support unmounting other filesystems (no support for :c:func:`unmount`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_DISABLE_UTIME
+
+.. _CONFIGURE_IMFS_DISABLE_UTIME:
+
+CONFIGURE_IMFS_DISABLE_UTIME
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_DISABLE_UTIME``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS supports
+ changing file times.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS does not
+ support changing file times (no support for :c:func:`utime`).
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_ENABLE_MKFIFO
+
+.. _CONFIGURE_IMFS_ENABLE_MKFIFO:
+
+CONFIGURE_IMFS_ENABLE_MKFIFO
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_ENABLE_MKFIFO``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the root IMFS does not
+ support making FIFOs (no support for :c:func:`mkfifo`).
+
+DESCRIPTION:
+ In case this configuration option is defined, then the root IMFS supports
+ making FIFOs.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
+
+.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
+
+CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 128.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be
+ an element of {16, 32, 64, 128, 256, 512}.
+
+DESCRIPTION:
+ The value of this configuration option defines the block size for in-memory
+ files managed by the IMFS.
+
+NOTES:
+ The configured block size has two impacts. The first is the average amount of
+ unused memory in the last block of each file. For example, when the block
+ size is 512, on average one-half of the last block of each file will remain
+ unused and the memory is wasted. In contrast, when the block size is 16, the
+ average unused memory per file is only 8 bytes. However, it requires more
+ allocations for the same size file and thus more overhead per block for the
+ dynamic memory management.
+
+ Second, the block size has an impact on the maximum size file that can be
+ stored in the IMFS. With smaller block size, the maximum file size is
+ correspondingly smaller. The following shows the maximum file size possible
+ based on the configured block size:
+
+ - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
+
+ - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
+
+ - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
+
+ - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
+
+ - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
+
+ - when the block size is 512 bytes, the maximum file size is 1,082,195,456
+ bytes.
+
+.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
+
+.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
+
+CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then an IMFS with a reduced
+ feature set will be the base filesystem (also known as root filesystem).
+
+NOTES:
+ In case this configuration option is defined, then the following
+ configuration options will be defined as well
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_LINK`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_READDIR`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_READLINK`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_RENAME`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`.
+
+ In addition, a simplified path evaluation is enabled. It allows only a look
+ up of absolute paths.
+
+ This configuration of the IMFS is basically a device-only filesystem. It is
+ comparable in functionality to the pseudo-filesystem name space provided
+ before RTEMS release 4.5.0.
+
+.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
+
+.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
+
+CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
+-----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then an IMFS with a reduced
+ feature set will be the base filesystem (also known as root filesystem).
+
+NOTES:
+ In case this configuration option is defined, then the following
+ configuration options will be defined as well
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_LINK`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_READLINK`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_RENAME`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`,
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_UTIME`, and
+
+ - :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`.
diff --git a/c-user/config/general.rst b/c-user/config/general.rst
new file mode 100644
index 0000000..b1bca61
--- /dev/null
+++ b/c-user/config/general.rst
@@ -0,0 +1,814 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+General System Configuration
+============================
+
+This section describes general system configuration options.
+
+.. index:: CONFIGURE_DIRTY_MEMORY
+
+.. _CONFIGURE_DIRTY_MEMORY:
+
+CONFIGURE_DIRTY_MEMORY
+----------------------
+
+CONSTANT:
+ ``CONFIGURE_DIRTY_MEMORY``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the memory areas used for
+ the RTEMS Workspace and the C Program Heap are dirtied with a ``0xCF`` byte
+ pattern during system initialization.
+
+NOTES:
+ Dirtying memory can add significantly to system initialization time. It may
+ assist in finding code that incorrectly assumes the contents of free memory
+ areas is cleared to zero during system initialization. In case
+ :ref:`CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY` is also defined, then the
+ memory is first dirtied and then zeroed.
+
+ See also :ref:`CONFIGURE_MALLOC_DIRTY`.
+
+.. index:: CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+
+.. _CONFIGURE_DISABLE_NEWLIB_REENTRANCY:
+
+CONFIGURE_DISABLE_NEWLIB_REENTRANCY
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_DISABLE_NEWLIB_REENTRANCY``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the Newlib reentrancy
+ support per thread is disabled and a global reentrancy structure is used.
+
+NOTES:
+ You can enable this option to reduce the size of the :term:`TCB`. Use this
+ option with care, since it can lead to race conditions and undefined system
+ behaviour. For example, :c:data:`errno` is no longer a thread-local variable
+ if this option is enabled.
+
+.. index:: CONFIGURE_EXECUTIVE_RAM_SIZE
+
+.. _CONFIGURE_EXECUTIVE_RAM_SIZE:
+
+CONFIGURE_EXECUTIVE_RAM_SIZE
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_EXECUTIVE_RAM_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ If this configuration option is undefined, then the RTEMS Workspace and task
+ stack space size is calculated by ``<rtems/confdefs.h>`` based on the values
+ configuration options.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to ``UINTPTR_MAX``.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the RTEMS Workspace size in
+ bytes.
+
+NOTES:
+ This is an advanced configuration option. Use it only if you know exactly
+ what you are doing.
+
+.. index:: CONFIGURE_EXTRA_TASK_STACKS
+.. index:: memory for task tasks
+
+.. _CONFIGURE_EXTRA_TASK_STACKS:
+
+CONFIGURE_EXTRA_TASK_STACKS
+---------------------------
+
+CONSTANT:
+ ``CONFIGURE_EXTRA_TASK_STACKS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the number of bytes the
+ applications wishes to add to the task stack requirements calculated by
+ ``<rtems/confdefs.h>``.
+
+NOTES:
+ This parameter is very important. If the application creates tasks with
+ stacks larger then the minimum, then that memory is **not** accounted for by
+ ``<rtems/confdefs.h>``.
+
+.. index:: CONFIGURE_INITIAL_EXTENSIONS
+
+.. _CONFIGURE_INITIAL_EXTENSIONS:
+
+CONFIGURE_INITIAL_EXTENSIONS
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_INITIAL_EXTENSIONS``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is the empty list.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a list of initializers for
+ structures of type :c:type:`rtems_extensions_table`.
+
+DESCRIPTION:
+ The value of this configuration option is used to initialize the table of
+ initial user extensions.
+
+NOTES:
+ The value of this configuration option is placed before the entries of
+ :ref:`BSP_INITIAL_EXTENSION` and after the entries of all other initial
+ user extensions.
+
+.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
+.. index:: interrupt stack size
+
+.. _CONFIGURE_INTERRUPT_STACK_SIZE:
+
+CONFIGURE_INTERRUPT_STACK_SIZE
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_INTERRUPT_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is :ref:`BSP_INTERRUPT_STACK_SIZE` in case it is defined,
+ otherwise the default value is ``CPU_STACK_MINIMUM_SIZE``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+ * It shall be small enough so that the
+ interrupt stack area calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``size_t``.
+
+ * It shall be aligned according to
+ ``CPU_INTERRUPT_STACK_ALIGNMENT``.
+
+DESCRIPTION:
+ The value of this configuration option defines the size of an interrupt stack
+ in bytes.
+
+NOTES:
+ There is one interrupt stack available for each configured processor
+ (:ref:`CONFIGURE_MAXIMUM_PROCESSORS`). The interrupt stack areas are
+ statically allocated in a special linker section (``.rtemsstack.interrupt``).
+ The placement of this linker section is BSP-specific.
+
+ Some BSPs use the interrupt stack as the initialization stack which is used
+ to perform the sequential system initialization before the multithreading
+ is started.
+
+ The interrupt stacks are covered by the :ref:`stack checker
+ <CONFIGURE_STACK_CHECKER_ENABLED>`. However, using a too small interrupt
+ stack size may still result in undefined behaviour.
+
+ In releases before RTEMS 5.1 the default value was
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE` instead of ``CPU_STACK_MINIMUM_SIZE``.
+
+.. index:: CONFIGURE_MALLOC_DIRTY
+
+.. _CONFIGURE_MALLOC_DIRTY:
+
+CONFIGURE_MALLOC_DIRTY
+----------------------
+
+CONSTANT:
+ ``CONFIGURE_MALLOC_DIRTY``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then each memory area returned
+ by C Program Heap allocator functions such as :c:func:`malloc` is dirtied
+ with a ``0xCF`` byte pattern before it is handed over to the application.
+
+NOTES:
+ The dirtying performed by this option is carried out for each successful
+ memory allocation from the C Program Heap in contrast to
+ :ref:`CONFIGURE_DIRTY_MEMORY` which dirties the memory only once during the
+ system initialization.
+
+.. index:: CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
+.. index:: maximum file descriptors
+
+.. _CONFIGURE_MAXIMUM_FILE_DESCRIPTORS:
+
+CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_FILE_DESCRIPTORS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 3.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to ``SIZE_MAX``.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of file
+ like objects that can be concurrently open.
+
+NOTES:
+ The default value of three file descriptors allows RTEMS to support standard
+ input, output, and error I/O streams on ``/dev/console``.
+
+.. index:: CONFIGURE_MAXIMUM_PROCESSORS
+
+.. _CONFIGURE_MAXIMUM_PROCESSORS:
+
+CONFIGURE_MAXIMUM_PROCESSORS
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_PROCESSORS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 1.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``CPU_MAXIMUM_PROCESSORS``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of
+ processors an application intends to use. The number of actually available
+ processors depends on the hardware and may be less. It is recommended to use
+ the smallest value suitable for the application in order to save memory.
+ Each processor needs an IDLE task stack and interrupt stack for example.
+
+NOTES:
+ If there are more processors available than configured, the rest will be
+ ignored.
+
+ This configuration option is only evaluated in SMP configurations (e.g. RTEMS
+ was built with the ``--enable-smp`` build configuration option). In all
+ other configurations it has no effect.
+
+.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
+.. index:: maximum thread name size
+
+.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
+
+CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 16.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to ``SIZE_MAX``.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum thread name size
+ including the terminating ``NUL`` character.
+
+NOTES:
+ The default value was chosen for Linux compatibility, see
+ `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
+
+ The size of the thread control block is increased by the maximum thread name
+ size.
+
+ This configuration option is available since RTEMS 5.1.
+
+.. index:: CONFIGURE_MEMORY_OVERHEAD
+
+.. _CONFIGURE_MEMORY_OVERHEAD:
+
+CONFIGURE_MEMORY_OVERHEAD
+-------------------------
+
+CONSTANT:
+ ``CONFIGURE_MEMORY_OVERHEAD``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the
+ RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the number of kilobytes the
+ application wishes to add to the RTEMS Workspace size calculated by
+ ``<rtems/confdefs.h>``.
+
+NOTES:
+ This configuration option should only be used when it is suspected that a bug
+ in ``<rtems/confdefs.h>`` has resulted in an underestimation. Typically the
+ memory allocation will be too low when an application does not account for
+ all message queue buffers or task stacks, see
+ :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
+
+.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
+.. index:: configure message queue buffer memory
+.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
+.. index:: memory for a single message queue's buffers
+
+.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
+
+CONFIGURE_MESSAGE_BUFFER_MEMORY
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the
+ RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the number of bytes reserved
+ for message queue buffers in the RTEMS Workspace.
+
+NOTES:
+ The configuration options :ref:`CONFIGURE_MAXIMUM_MESSAGE_QUEUES` and
+ :ref:`CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES` define only how many message
+ queues can be created by the application. The memory for the message
+ buffers is configured by this option. For each message queue you have to
+ reserve some memory for the message buffers. The size dependes on the
+ maximum number of pending messages and the maximum size of the messages of
+ a message queue. Use the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` macro
+ to specify the message buffer memory for each message queue and sum them up
+ to define the value for ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``.
+
+ The interface for the ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()`` help
+ macro is as follows:
+
+ .. code-block:: c
+
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( max_messages, max_msg_size )
+
+ Where ``max_messages`` is the maximum number of pending messages and
+ ``max_msg_size`` is the maximum size in bytes of the messages of the
+ corresponding message queue. Both parameters shall be compile time
+ constants. Not using this help macro (e.g. just using
+ ``max_messages * max_msg_size``) may result in an underestimate of the
+ RTEMS Workspace size.
+
+ The following example illustrates how the
+ `CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE()` help macro can be used to assist in
+ calculating the message buffer memory required. In this example, there are
+ two message queues used in this application. The first message queue has a
+ maximum of 24 pending messages with the message structure defined by the
+ type ``one_message_type``. The other message queue has a maximum of 500
+ pending messages with the message structure defined by the type
+ ``other_message_type``.
+
+ .. code-block:: c
+
+ #define CONFIGURE_MESSAGE_BUFFER_MEMORY ( \
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
+ 24, \
+ sizeof( one_message_type ) \
+ ) \
+ + CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
+ 500, \
+ sizeof( other_message_type ) \
+ ) \
+ )
+
+.. index:: CONFIGURE_MICROSECONDS_PER_TICK
+.. index:: clock tick quantum
+.. index:: tick quantum
+
+.. _CONFIGURE_MICROSECONDS_PER_TICK:
+
+CONFIGURE_MICROSECONDS_PER_TICK
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MICROSECONDS_PER_TICK``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 10000.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to a Clock Driver specific value.
+
+ * It shall be less than or equal to a Clock Driver specific value.
+
+ * The resulting clock ticks per second should be an integer.
+
+DESCRIPTION:
+ The value of this configuration option defines the length of time in
+ microseconds between clock ticks (clock tick quantum).
+
+ When the clock tick quantum value is too low, the system will spend so much
+ time processing clock ticks that it does not have processing time available
+ to perform application work. In this case, the system will become
+ unresponsive.
+
+ The lowest practical time quantum varies widely based upon the speed of the
+ target hardware and the architectural overhead associated with
+ interrupts. In general terms, you do not want to configure it lower than is
+ needed for the application.
+
+ The clock tick quantum should be selected such that it all blocking and
+ delay times in the application are evenly divisible by it. Otherwise,
+ rounding errors will be introduced which may negatively impact the
+ application.
+
+NOTES:
+ This configuration option has no impact if the Clock Driver is not
+ configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`.
+
+ There may be Clock Driver specific limits on the resolution or maximum value
+ of a clock tick quantum.
+
+.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
+.. index:: minimum task stack size
+
+.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
+
+CONFIGURE_MINIMUM_TASK_STACK_SIZE
+---------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is ``CPU_STACK_MINIMUM_SIZE``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+ * It shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+DESCRIPTION:
+ The value of this configuration option defines the minimum stack size in
+ bytes for every user task or thread in the system.
+
+NOTES:
+ Adjusting this parameter should be done with caution. Examining the actual
+ stack usage using the stack checker usage reporting facility is recommended
+ (see also :ref:`CONFIGURE_STACK_CHECKER_ENABLED`).
+
+ This parameter can be used to lower the minimum from that recommended. This
+ can be used in low memory systems to reduce memory consumption for
+ stacks. However, this shall be done with caution as it could increase the
+ possibility of a blown task stack.
+
+ This parameter can be used to increase the minimum from that
+ recommended. This can be used in higher memory systems to reduce the risk
+ of stack overflow without performing analysis on actual consumption.
+
+ By default, this configuration parameter defines also the minimum stack
+ size of POSIX threads. This can be changed with the
+ :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`
+ configuration option.
+
+ In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
+ used to define the default value of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE`.
+
+.. index:: CONFIGURE_STACK_CHECKER_ENABLED
+
+.. _CONFIGURE_STACK_CHECKER_ENABLED:
+
+CONFIGURE_STACK_CHECKER_ENABLED
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_STACK_CHECKER_ENABLED``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the stack checker is
+ enabled.
+
+NOTES:
+ The stack checker performs run-time stack bounds checking. This increases
+ the time required to create tasks as well as adding overhead to each context
+ switch.
+
+ In 4.9 and older, this configuration option was named ``STACK_CHECKER_ON``.
+
+.. index:: CONFIGURE_TICKS_PER_TIMESLICE
+.. index:: ticks per timeslice
+
+.. _CONFIGURE_TICKS_PER_TIMESLICE:
+
+CONFIGURE_TICKS_PER_TIMESLICE
+-----------------------------
+
+CONSTANT:
+ ``CONFIGURE_TICKS_PER_TIMESLICE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 50.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the length of the timeslice
+ quantum in ticks for each task.
+
+NOTES:
+ This configuration option has no impact if the Clock Driver is not
+ configured, see :ref:`CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`.
+
+.. index:: CONFIGURE_UNIFIED_WORK_AREAS
+.. index:: unified work areas
+.. index:: separate work areas
+.. index:: RTEMS Workspace
+.. index:: C Program Heap
+
+.. _CONFIGURE_UNIFIED_WORK_AREAS:
+
+CONFIGURE_UNIFIED_WORK_AREAS
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_UNIFIED_WORK_AREAS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then there will be separate memory
+ pools for the RTEMS Workspace and C Program Heap.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the RTEMS Workspace and
+ the C Program Heap will be one pool of memory.
+
+NOTES:
+ Having separate pools does have some advantages in the event a task blows a
+ stack or writes outside its memory area. However, in low memory systems the
+ overhead of the two pools plus the potential for unused memory in either
+ pool is very undesirable.
+
+ In high memory environments, this is desirable when you want to use the
+ :ref:`ConfigUnlimitedObjects` option. You will be able to create objects
+ until you run out of all available memory rather then just until you run out
+ of RTEMS Workspace.
+
+.. index:: CONFIGURE_UNLIMITED_ALLOCATION_SIZE
+
+.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
+
+CONFIGURE_UNLIMITED_ALLOCATION_SIZE
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 8.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall meet the constraints of all
+ object classes to which it is applied.
+
+DESCRIPTION:
+ If :ref:`CONFIGURE_UNLIMITED_OBJECTS` is defined, then the value of this
+ configuration option defines the default objects maximum of all object
+ classes supporting :ref:`ConfigUnlimitedObjects` to
+ ``rtems_resource_unlimited(CONFIGURE_UNLIMITED_ALLOCATION_SIZE)``.
+
+NOTES:
+ By allowing users to declare all resources as being unlimited the user can
+ avoid identifying and limiting the resources used.
+
+ The object maximum of each class can be configured also individually using
+ the :c:func:`rtems_resource_unlimited` macro.
+
+.. index:: CONFIGURE_UNLIMITED_OBJECTS
+
+.. _CONFIGURE_UNLIMITED_OBJECTS:
+
+CONFIGURE_UNLIMITED_OBJECTS
+---------------------------
+
+CONSTANT:
+ ``CONFIGURE_UNLIMITED_OBJECTS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then unlimited objects are used
+ by default.
+
+NOTES:
+ When using unlimited objects, it is common practice to also specify
+ :ref:`CONFIGURE_UNIFIED_WORK_AREAS` so the system operates with a single pool
+ of memory for both RTEMS Workspace and C Program Heap.
+
+ This option does not override an explicit configuration for a particular
+ object class by the user.
+
+ See also :ref:`CONFIGURE_UNLIMITED_ALLOCATION_SIZE`.
+
+.. index:: CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
+
+.. _CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION:
+
+CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the system initialization
+ is verbose.
+
+NOTES:
+ You may use this feature to debug system initialization issues. The
+ :c:func:`printk` function is used to print the information.
+
+.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
+.. index:: clear C Program Heap
+.. index:: clear RTEMS Workspace
+.. index:: zero C Program Heap
+.. index:: zero RTEMS Workspace
+
+.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
+
+CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the memory areas used for
+ the RTEMS Workspace and the C Program Heap are zeroed with a ``0x00`` byte
+ pattern during system initialization.
+
+NOTES:
+ Zeroing memory can add significantly to the system initialization time. It is
+ not necessary for RTEMS but is often assumed by support libraries. In case
+ :ref:`CONFIGURE_DIRTY_MEMORY` is also defined, then the memory is first
+ dirtied and then zeroed.
diff --git a/c-user/config/idle-task.rst b/c-user/config/idle-task.rst
new file mode 100644
index 0000000..12e7f46
--- /dev/null
+++ b/c-user/config/idle-task.rst
@@ -0,0 +1,122 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Idle Task Configuration
+=======================
+
+This section describes configuration options related to the idle tasks.
+
+.. index:: CONFIGURE_IDLE_TASK_BODY
+
+.. _CONFIGURE_IDLE_TASK_BODY:
+
+CONFIGURE_IDLE_TASK_BODY
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_IDLE_TASK_BODY``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ If :ref:`BSP_IDLE_TASK_BODY` is defined, then this will be the default value,
+ otherwise the default value is ``_CPU_Thread_Idle_body``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void *( *idle_body )( uintptr_t )``.
+
+DESCRIPTION:
+ The value of this configuration option initializes the IDLE thread body.
+
+NOTES:
+ IDLE threads shall not block. A blocking IDLE thread results in undefined
+ system behaviour because the scheduler assume that at least one ready thread
+ exists.
+
+ IDLE threads can be used to initialize the application, see configuration
+ option :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`.
+
+.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+
+.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
+
+CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
+-------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the user is assumed to
+ provide one or more initialization tasks.
+
+DESCRIPTION:
+ This configuration option is defined to indicate that the user has configured
+ **no** user initialization tasks or threads and that the user provided IDLE
+ task will perform application initialization and then transform itself into
+ an IDLE task.
+
+NOTES:
+ If you use this option be careful, the user IDLE task **cannot** block at all
+ during the initialization sequence. Further, once application
+ initialization is complete, it shall make itself preemptible and enter an idle
+ body loop.
+
+ The IDLE task shall run at the lowest priority of all tasks in the system.
+
+ If this configuration option is defined, then it is mandatory to configure a
+ user IDLE task with the :ref:`CONFIGURE_IDLE_TASK_BODY` configuration option,
+ otherwise a compile time error in the configuration file will occur.
+
+ The application shall define exactly one of the following configuration
+ options
+
+ * :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
+
+ * :ref:`CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
+
+ * `CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
+
+ otherwise a compile time error in the configuration file will occur.
+
+.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
+
+.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
+
+CONFIGURE_IDLE_TASK_STACK_SIZE
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_IDLE_TASK_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+ * It shall be small enough so that the IDLE
+ task stack area calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``size_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the task stack size for an
+ IDLE task.
+
+NOTES:
+ In SMP configurations, there is one IDLE task per configured processor, see
+ :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
diff --git a/c-user/config/index.rst b/c-user/config/index.rst
new file mode 100644
index 0000000..b0e21a4
--- /dev/null
+++ b/c-user/config/index.rst
@@ -0,0 +1,31 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+.. index:: configuring a system
+.. _Configuring a System:
+
+Configuring a System
+********************
+
+.. toctree::
+
+ intro
+ general
+ device-driver
+ classic-api
+ classic-init-task
+ posix-api
+ posix-init-thread
+ event-record
+ filesystem
+ bdbuf
+ task-stack-alloc
+ idle-task
+ scheduler-general
+ scheduler-clustered
+ bsp-related
+ mpci
+ libpci
+ ada
+ obsolete
diff --git a/c-user/config/intro.rst b/c-user/config/intro.rst
new file mode 100644
index 0000000..4c2f715
--- /dev/null
+++ b/c-user/config/intro.rst
@@ -0,0 +1,369 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2012 Gedare Bloom
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Introduction
+============
+
+RTEMS must be configured for an application. This configuration encompasses a
+variety of information including the length of each clock tick, the maximum
+number of each information RTEMS object that can be created, the application
+initialization tasks, the task scheduling algorithm to be used, and the device
+drivers in the application.
+
+Although this information is contained in data structures that are used by
+RTEMS at system initialization time, the data structures themselves must not be
+generated by hand. RTEMS provides a set of macros system which provides a
+simple standard mechanism to automate the generation of these structures.
+
+.. index:: confdefs.h
+.. index:: <rtems/confdefs.h>
+
+The RTEMS header file ``<rtems/confdefs.h>`` is at the core of the automatic
+generation of system configuration. It is based on the idea of setting macros
+which define configuration parameters of interest to the application and
+defaulting or calculating all others. This variety of macros can automatically
+produce all of the configuration data required for an RTEMS application.
+
+.. sidebar: Trivia:
+
+ The term ``confdefs`` is shorthand for a *Configuration Defaults*.
+
+As a general rule, application developers only specify values for the
+configuration parameters of interest to them. They define what resources or
+features they require. In most cases, when a parameter is not specified, it
+defaults to zero (0) instances, a standards compliant value, or disabled as
+appropriate. For example, by default there will be 256 task priority levels but
+this can be lowered by the application. This number of priority levels is
+required to be compliant with the RTEID/ORKID standards upon which the Classic
+API is based. There are similar cases where the default is selected to be
+compliant with the POSIX standard.
+
+For each configuration parameter in the configuration tables, the macro
+corresponding to that field is discussed. The RTEMS Maintainers expect that all
+systems can be easily configured using the ``<rtems/confdefs.h>`` mechanism and
+that using this mechanism will avoid internal RTEMS configuration changes
+impacting applications.
+
+Default Value Selection Philosophy
+==================================
+
+The user should be aware that the defaults are intentionally set as low as
+possible. By default, no application resources are configured. The
+``<rtems/confdefs.h>`` file ensures that at least one application task or
+thread is configured and that at least one of the initialization task/thread
+tables is configured.
+
+.. _Sizing the RTEMS Workspace:
+
+Sizing the RTEMS Workspace
+==========================
+
+The RTEMS Workspace is a user-specified block of memory reserved for use by
+RTEMS. The application should NOT modify this memory. This area consists
+primarily of the RTEMS data structures whose exact size depends upon the values
+specified in the Configuration Table. In addition, task stacks and floating
+point context areas are dynamically allocated from the RTEMS Workspace.
+
+The ``<rtems/confdefs.h>`` mechanism calculates the size of the RTEMS Workspace
+automatically. It assumes that all tasks are floating point and that all will
+be allocated the minimum stack space. This calculation includes the amount of
+memory that will be allocated for internal use by RTEMS. The automatic
+calculation may underestimate the workspace size truly needed by the
+application, in which case one can use the ``CONFIGURE_MEMORY_OVERHEAD`` macro
+to add a value to the estimate. See :ref:`Specify Memory Overhead` for more
+details.
+
+The memory area for the RTEMS Workspace is determined by the BSP. In case the
+RTEMS Workspace is too large for the available memory, then a fatal run-time
+error occurs and the system terminates.
+
+The file ``<rtems/confdefs.h>`` will calculate the value of the
+``work_space_size`` parameter of the Configuration Table. There are many
+parameters the application developer can specify to help ``<rtems/confdefs.h>``
+in its calculations. Correctly specifying the application requirements via
+parameters such as ``CONFIGURE_EXTRA_TASK_STACKS`` and
+``CONFIGURE_MAXIMUM_TASKS`` is critical for production software.
+
+For each class of objects, the allocation can operate in one of two ways. The
+default way has an ceiling on the maximum number of object instances which can
+concurrently exist in the system. Memory for all instances of that object class
+is reserved at system initialization. The second way allocates memory for an
+initial number of objects and increases the current allocation by a fixed
+increment when required. Both ways allocate space from inside the RTEMS
+Workspace.
+
+See :ref:`ConfigUnlimitedObjects` for more details about the second way, which
+allows for dynamic allocation of objects and therefore does not provide
+determinism. This mode is useful mostly for when the number of objects cannot
+be determined ahead of time or when porting software for which you do not know
+the object requirements.
+
+The space needed for stacks and for RTEMS objects will vary from one version of
+RTEMS and from one target processor to another. Therefore it is safest to use
+``<rtems/confdefs.h>`` and specify your application's requirements in terms of
+the numbers of objects and multiples of ``RTEMS_MINIMUM_STACK_SIZE``, as far as
+is possible. The automatic estimates of space required will in general change
+when:
+
+- a configuration parameter is changed,
+
+- task or interrupt stack sizes change,
+
+- the floating point attribute of a task changes,
+
+- task floating point attribute is altered,
+
+- RTEMS is upgraded, or
+
+- the target processor is changed.
+
+Failure to provide enough space in the RTEMS Workspace may result in fatal
+run-time errors terminating the system.
+
+Potential Issues with RTEMS Workspace Size Estimation
+=====================================================
+
+The ``<rtems/confdefs.h>`` file estimates the amount of memory required for the
+RTEMS Workspace. This estimate is only as accurate as the information given to
+``<rtems/confdefs.h>`` and may be either too high or too low for a variety of
+reasons. Some of the reasons that ``<rtems/confdefs.h>`` may reserve too much
+memory for RTEMS are:
+
+- All tasks/threads are assumed to be floating point.
+
+Conversely, there are many more reasons that the resource estimate could be too
+low:
+
+- Task/thread stacks greater than minimum size must be accounted for explicitly
+ by developer.
+
+- Memory for messages is not included.
+
+- Device driver requirements are not included.
+
+- Network stack requirements are not included.
+
+- Requirements for add-on libraries are not included.
+
+In general, ``<rtems/confdefs.h>`` is very accurate when given enough
+information. However, it is quite easy to use a library and forget to account
+for its resources.
+
+Configuration Example
+=====================
+
+In the following example, the configuration information for a system with a
+single message queue, four (4) tasks, and a timeslice of fifty (50)
+milliseconds is as follows:
+
+.. code-block:: c
+
+ #include <bsp.h>
+ #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+ #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+ #define CONFIGURE_MICROSECONDS_PER_TICK 1000 /* 1 millisecond */
+ #define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50 milliseconds */
+ #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+ #define CONFIGURE_MAXIMUM_TASKS 4
+ #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
+ #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
+ #define CONFIGURE_INIT
+ #include <rtems/confdefs.h>
+
+In this example, only a few configuration parameters are specified. The impact
+of these are as follows:
+
+- The example specified ``CONFIGURE_RTEMS_INIT_TASK_TABLE`` but did not specify
+ any additional parameters. This results in a configuration of an application
+ which will begin execution of a single initialization task named ``Init``
+ which is non-preemptible and at priority one (1).
+
+- By specifying ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``, this application
+ is configured to have a clock tick device driver. Without a clock tick device
+ driver, RTEMS has no way to know that time is passing and will be unable to
+ support delays and wall time. Further configuration details about time are
+ provided. Per ``CONFIGURE_MICROSECONDS_PER_TICK`` and
+ ``CONFIGURE_TICKS_PER_TIMESLICE``, the user specified they wanted a clock
+ tick to occur each millisecond, and that the length of a timeslice would be
+ fifty (50) milliseconds.
+
+- By specifying ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``, the application
+ will include a console device driver. Although the console device driver may
+ support a combination of multiple serial ports and display and keyboard
+ combinations, it is only required to provide a single device named
+ ``/dev/console``. This device will be used for Standard Input, Output and
+ Error I/O Streams. Thus when ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
+ is specified, implicitly three (3) file descriptors are reserved for the
+ Standard I/O Streams and those file descriptors are associated with
+ ``/dev/console`` during initialization. All console devices are expected to
+ support the POSIX*termios* interface.
+
+- The example above specifies via ``CONFIGURE_MAXIMUM_TASKS`` that the
+ application requires a maximum of four (4) simultaneously existing Classic
+ API tasks. Similarly, by specifying ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``,
+ there may be a maximum of only one (1) concurrently existent Classic API
+ message queues.
+
+- The most surprising configuration parameter in this example is the use of
+ ``CONFIGURE_MESSAGE_BUFFER_MEMORY``. Message buffer memory is allocated from
+ the RTEMS Workspace and must be accounted for. In this example, the single
+ message queue will have up to twenty (20) messages of type ``struct
+ USER_MESSAGE``.
+
+- The ``CONFIGURE_INIT`` constant must be defined in order to make
+ ``<rtems/confdefs.h>`` instantiate the configuration data structures. This
+ can only be defined in one source file per application that includes
+ ``<rtems/confdefs.h>`` or the symbol table will be instantiated multiple
+ times and linking errors produced.
+
+This example illustrates that parameters have default values. Among other
+things, the application implicitly used the following defaults:
+
+- All unspecified types of communications and synchronization objects in the
+ Classic and POSIX Threads API have maximums of zero (0).
+
+- The filesystem will be the default filesystem which is the In-Memory File
+ System (IMFS).
+
+- The application will have the default number of priority levels.
+
+- The minimum task stack size will be that recommended by RTEMS for the target
+ architecture.
+
+.. _ConfigUnlimitedObjects:
+
+Unlimited Objects
+=================
+
+In real-time embedded systems the RAM is normally a limited, critical resource
+and dynamic allocation is avoided as much as possible to ensure predictable,
+deterministic execution times. For such cases, see :ref:`Sizing the RTEMS
+Workspace` for an overview of how to tune the size of the workspace.
+Frequently when users are porting software to RTEMS the precise resource
+requirements of the software is unknown. In these situations users do not need
+to control the size of the workspace very tightly because they just want to get
+the new software to run; later they can tune the workspace size as needed.
+
+The following object classes in the Classic API can be configured in unlimited
+mode:
+
+- Barriers
+
+- Message Queues
+
+- Partitions
+
+- Periods
+
+- Ports
+
+- Regions
+
+- Semaphores
+
+- Tasks
+
+- Timers
+
+Additionally, the following object classes from the POSIX API can be configured
+in unlimited mode:
+
+- Keys -- :c:func:`pthread_key_create`
+
+- Key Value Pairs -- :c:func:`pthread_setspecific`
+
+- Message Queues -- :c:func:`mq_open`
+
+- Named Semaphores -- :c:func:`sem_open`
+
+- Shared Memory -- :c:func:`shm_open`
+
+- Threads -- :c:func:`pthread_create`
+
+- Timers -- :c:func:`timer_create`
+
+.. warning::
+
+ The following object classes can *not* be configured in unlimited mode:
+
+ - Drivers
+
+ - File Descriptors
+
+ - POSIX Queued Signals
+
+ - User Extensions
+
+Due to the memory requirements of unlimited objects it is strongly recommended
+to use them only in combination with the unified work areas. See :ref:`Separate
+or Unified Work Areas` for more information on unified work areas.
+
+The following example demonstrates how the two simple configuration defines for
+unlimited objects and unified works areas can replace many seperate
+configuration defines for supported object classes:
+
+.. code-block:: c
+
+ #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+ #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+ #define CONFIGURE_UNIFIED_WORK_AREAS
+ #define CONFIGURE_UNLIMITED_OBJECTS
+ #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+ #define CONFIGURE_INIT
+ #include <rtems/confdefs.h>
+
+Users are cautioned that using unlimited objects is not recommended for
+production software unless the dynamic growth is absolutely required. It is
+generally considered a safer embedded systems programming practice to know the
+system limits rather than experience an out of memory error at an arbitrary and
+largely unpredictable time in the field.
+
+.. index:: rtems_resource_unlimited
+
+.. _ConfigUnlimitedObjectsClass:
+
+Unlimited Objects by Class
+--------------------------
+
+When the number of objects is not known ahead of time, RTEMS provides an
+auto-extending mode that can be enabled individually for each object type by
+using the macro ``rtems_resource_unlimited``. This takes a value as a
+parameter, and is used to set the object maximum number field in an API
+Configuration table. The value is an allocation unit size. When RTEMS is
+required to grow the object table it is grown by this size. The kernel will
+return the object memory back to the RTEMS Workspace when an object is
+destroyed. The kernel will only return an allocated block of objects to the
+RTEMS Workspace if at least half the allocation size of free objects remain
+allocated. RTEMS always keeps one allocation block of objects allocated. Here
+is an example of using ``rtems_resource_unlimited``:
+
+.. code-block:: c
+
+ #define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
+
+.. index:: rtems_resource_is_unlimited
+.. index:: rtems_resource_maximum_per_allocation
+
+Object maximum specifications can be evaluated with the
+``rtems_resource_is_unlimited`` and``rtems_resource_maximum_per_allocation``
+macros.
+
+.. _ConfigUnlimitedObjectsDefault:
+
+Unlimited Objects by Default
+----------------------------
+
+To ease the burden of developers who are porting new software RTEMS also
+provides the capability to make all object classes listed above operate in
+unlimited mode in a simple manner. The application developer is only
+responsible for enabling unlimited objects
+(:ref:`CONFIGURE_UNLIMITED_OBJECTS`) and specifying the allocation size
+(:ref:`CONFIGURE_UNLIMITED_ALLOCATION_SIZE`).
+
+.. code-block:: c
+
+ #define CONFIGURE_UNLIMITED_OBJECTS
+ #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
diff --git a/c-user/config/libpci.rst b/c-user/config/libpci.rst
new file mode 100644
index 0000000..b62a56c
--- /dev/null
+++ b/c-user/config/libpci.rst
@@ -0,0 +1,55 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+PCI Library Configuration
+=========================
+
+This section defines the system configuration parameters supported by
+``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
+
+The PCI Library startup behaviour can be configured in four different ways
+depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
+
+.. index:: PCI_LIB_AUTO
+
+``PCI_LIB_AUTO``
+ Used to enable the PCI auto configuration software. PCI will be automatically
+ probed, PCI buses enumerated, all devices and bridges will be initialized
+ using Plug & Play software routines. The PCI device tree will be populated
+ based on the PCI devices found in the system, PCI devices will be configured
+ by allocating address region resources automatically in PCI space according
+ to the BSP or host bridge driver set up.
+
+.. index:: PCI_LIB_READ
+
+``PCI_LIB_READ``
+ Used to enable the PCI read configuration software. The current PCI
+ configuration is read to create the RAM representation (the PCI device tree)
+ of the PCI devices present. PCI devices are assumed to already have been
+ initialized and PCI buses enumerated, it is therefore required that a BIOS or
+ a boot loader has set up configuration space prior to booting into RTEMS.
+
+.. index:: PCI_LIB_STATIC
+
+``PCI_LIB_STATIC``
+ Used to enable the PCI static configuration software. The user provides a PCI
+ tree with information how all PCI devices are to be configured at compile
+ time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
+ library will not probe PCI for devices, instead it will assume that all
+ devices defined by the user are present, it will enumerate the PCI buses and
+ configure all PCI devices in static configuration accordingly. Since probe
+ and allocation software is not needed the startup is faster, has smaller
+ footprint and does not require dynamic memory allocation.
+
+.. index:: PCI_LIB_PERIPHERAL
+
+``PCI_LIB_PERIPHERAL``
+ Used to enable the PCI peripheral configuration. It is similar to
+ ``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
+ devices since PCI peripherals are not allowed to access PCI configuration
+ space.
+
+Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
+defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
+Plug & Play is not performed.
diff --git a/c-user/config/mpci.rst b/c-user/config/mpci.rst
new file mode 100644
index 0000000..854600b
--- /dev/null
+++ b/c-user/config/mpci.rst
@@ -0,0 +1,237 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Multiprocessing Configuration
+=============================
+
+This section describes multiprocessing related configuration options. The
+options are only used if RTEMS was built with the ``--enable-multiprocessing``
+build configuration option. Additionally, this class of configuration options
+are only applicable if the configuration option :ref:`CONFIGURE_MP_APPLICATION`
+is defined. The multiprocessing (MPCI) support must not be confused with the
+SMP support.
+
+.. index:: CONFIGURE_MP_APPLICATION
+
+.. _CONFIGURE_MP_APPLICATION:
+
+CONFIGURE_MP_APPLICATION
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_MP_APPLICATION``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the multiprocessing services
+ are not initialized.
+
+DESCRIPTION:
+ This configuration option is defined to indicate that the application intends
+ to be part of a multiprocessing configuration. Additional configuration
+ options are assumed to be provided.
+
+NOTES:
+ This configuration option shall be undefined if the multiprocessing support
+ is not enabled (e.g. RTEMS was built without the ``--enable-multiprocessing``
+ build configuration option). Otherwise a compile time error in the
+ configuration file will occur.
+
+.. index:: CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
+
+.. _CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK:
+
+CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK
+-----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_EXTRA_MPCI_RECEIVE_SERVER_STACK``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to ``UINT32_MAX``.
+
+ * It shall be small enough so that the
+ MPCI receive server stack area calculation carried out by
+ ``<rtems/confdefs.h>`` does not overflow an integer of type ``size_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the number of bytes the
+ applications wishes to add to the MPCI task stack on top of
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+NOTES:
+ This configuration option is only evaluated if
+ :ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
+
+.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
+
+CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 32.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of
+ concurrently active global objects in a multiprocessor system.
+
+NOTES:
+ This value corresponds to the total number of objects which can be created
+ with the ``RTEMS_GLOBAL`` attribute.
+
+ This configuration option is only evaluated if
+ :ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. index:: CONFIGURE_MP_MAXIMUM_NODES
+
+.. _CONFIGURE_MP_MAXIMUM_NODES:
+
+CONFIGURE_MP_MAXIMUM_NODES
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_MP_MAXIMUM_NODES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 2.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of nodes in
+ a multiprocessor system.
+
+NOTES:
+ This configuration option is only evaluated if
+ :ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
+
+.. _CONFIGURE_MP_MAXIMUM_PROXIES:
+
+CONFIGURE_MP_MAXIMUM_PROXIES
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_MP_MAXIMUM_PROXIES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 32.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of
+ concurrently active thread/task proxies on this node in a multiprocessor
+ system.
+
+NOTES:
+ Since a proxy is used to represent a remote task/thread which is blocking
+ on this node. This configuration parameter reflects the maximum number of
+ remote tasks/threads which can be blocked on objects on this node, see
+ :ref:`MPCIProxies`.
+
+ This configuration option is only evaluated if
+ :ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
+
+.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
+
+CONFIGURE_MP_MPCI_TABLE_POINTER
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MP_MPCI_TABLE_POINTER``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is ``&MPCI_table``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a pointer to
+ :c:type:`rtems_mpci_table`.
+
+DESCRIPTION:
+ The value of this configuration option initializes the MPCI Configuration
+ Table.
+
+NOTES:
+ RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
+ Multiprocessor System assuming the BSP provides the proper set of
+ supporting methods.
+
+ This configuration option is only evaluated if
+ :ref:`CONFIGURE_MP_APPLICATION` is defined.
+
+.. index:: CONFIGURE_MP_NODE_NUMBER
+
+.. _CONFIGURE_MP_NODE_NUMBER:
+
+CONFIGURE_MP_NODE_NUMBER
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_MP_NODE_NUMBER``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is ``NODE_NUMBER``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be greater than or equal to 0
+ and less than or equal to ``UINT32_MAX``.
+
+DESCRIPTION:
+ The value of this configuration option defines the node number of this node
+ in a multiprocessor system.
+
+NOTES:
+ In the RTEMS Multiprocessing Test Suite, the node number is derived from
+ the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
+ ``NODE_NUMBER`` set to different values. The test programs behave
+ differently based upon their node number.
+
+ This configuration option is only evaluated if
+ :ref:`CONFIGURE_MP_APPLICATION` is defined.
diff --git a/c-user/config/obsolete.rst b/c-user/config/obsolete.rst
new file mode 100644
index 0000000..77cc148
--- /dev/null
+++ b/c-user/config/obsolete.rst
@@ -0,0 +1,234 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Obsolete Configuration Options
+==============================
+
+.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
+
+CONFIGURE_BDBUF_BUFFER_COUNT
+----------------------------
+
+This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
+RTEMS 4.10.0.
+
+.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
+
+CONFIGURE_BDBUF_BUFFER_SIZE
+---------------------------
+
+This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
+RTEMS 4.10.0.
+
+.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
+
+CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
+--------------------------------------
+
+This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
+RTEMS 5.1.
+
+.. index:: CONFIGURE_ENABLE_GO
+
+CONFIGURE_ENABLE_GO
+-------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_GNAT_RTEMS
+
+CONFIGURE_GNAT_RTEMS
+--------------------
+
+This configuration option was present in all RTEMS versions since 1997 and is
+obsolete since RTEMS 5.1. See also :ref:`ConfigAda`.
+
+.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
+
+CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
+-------------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
+
+CONFIGURE_HAS_OWN_BDBUF_TABLE
+-----------------------------
+
+This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
+RTEMS 4.10.0.
+
+.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
+
+CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
+-------------------------------------
+
+This configuration option was present in all RTEMS versions since at least 1995
+and is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
+
+.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
+
+CONFIGURE_HAS_OWN_INIT_TASK_TABLE
+---------------------------------
+
+This configuration option was present in all RTEMS versions since at least 1995
+and is obsolete since RTEMS 5.1. If you used this configuration option or you
+think that there should be a way to configure more than one Classic API
+initialization task, then please ask on the :r:list:`users`.
+
+.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
+
+CONFIGURE_HAS_OWN_MOUNT_TABLE
+-----------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
+
+CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
+---------------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
+
+CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
+--------------------------------
+
+This configuration option was present in all RTEMS versions since 1998 and is
+obsolete since RTEMS 5.1. See also :ref:`CONFIGURE_MAXIMUM_FILE_DESCRIPTORS`.
+
+.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
+
+CONFIGURE_MAXIMUM_ADA_TASKS
+---------------------------
+
+This configuration option was present in all RTEMS versions since 1997 and is
+obsolete since RTEMS 5.1. See also :ref:`ConfigAda`.
+
+.. index:: CONFIGURE_MAXIMUM_DEVICES
+
+.. _CONFIGURE_MAXIMUM_DEVICES:
+
+CONFIGURE_MAXIMUM_DEVICES
+-------------------------
+
+This configuration option was present in all RTEMS versions since at least 1995
+and is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
+
+CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
+--------------------------------
+
+This configuration option was present in all RTEMS versions since 1997 and is
+obsolete since RTEMS 5.1. See also :ref:`ConfigAda`.
+
+.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
+
+CONFIGURE_MAXIMUM_GO_CHANNELS
+-----------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_GOROUTINES
+
+CONFIGURE_MAXIMUM_GOROUTINES
+----------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
+
+CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
+---------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
+
+CONFIGURE_NUMBER_OF_TERMIOS_PORTS
+---------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
+
+CONFIGURE_MAXIMUM_POSIX_BARRIERS
+--------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
+
+CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
+-------------------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
+
+CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
+-------------------------------
+
+This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
+RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
+
+CONFIGURE_MAXIMUM_POSIX_MUTEXES
+-------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
+
+CONFIGURE_MAXIMUM_POSIX_RWLOCKS
+-------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
+
+CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
+---------------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
+
+.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
+
+.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
+
+CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
+-----------------------------------------
+
+This configuration option was present in all RTEMS versions since at least 1995
+and is obsolete since RTEMS 5.1. If you used this configuration option or you
+think that there should be a way to configure more than one POSIX initialization
+thread, then please ask on the :r:list:`users`.
+
+.. index:: CONFIGURE_SMP_APPLICATION
+
+CONFIGURE_SMP_APPLICATION
+-------------------------
+
+This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
+RTEMS 5.1.
+
+.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
+
+CONFIGURE_SMP_MAXIMUM_PROCESSORS
+--------------------------------
+
+This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
+RTEMS 5.1. See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
+
+.. index:: CONFIGURE_TERMIOS_DISABLED
+
+CONFIGURE_TERMIOS_DISABLED
+--------------------------
+
+This configuration option is obsolete since RTEMS 5.1.
diff --git a/c-user/config/posix-api.rst b/c-user/config/posix-api.rst
new file mode 100644
index 0000000..1359909
--- /dev/null
+++ b/c-user/config/posix-api.rst
@@ -0,0 +1,424 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+POSIX API Configuration
+=======================
+
+This section describes configuration options related to the POSIX API. Most
+POSIX API objects are available by default since RTEMS 5.1. The queued signals
+and timers are only available if RTEMS was built with the ``--enable-posix``
+build configuration option.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
+
+.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
+
+CONFIGURE_MAXIMUM_POSIX_KEYS
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_KEYS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Keys that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
+
+.. _CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS:
+
+CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is
+ :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS` *
+ :ref:`CONFIGURE_MAXIMUM_TASKS` +
+ :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of key
+ value pairs used by POSIX API Keys that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+ A key value pair is created by :c:func:`pthread_setspecific` if the value
+ is not :c:macro:`NULL`, otherwise it is deleted.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
+
+.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
+
+CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the
+ RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``uintptr_t``.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Message Queues that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`. You have to account for the memory used to
+ store the messages of each message queue, see
+ :ref:`CONFIGURE_MESSAGE_BUFFER_MEMORY`.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+
+.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
+
+CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the
+ RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``uintptr_t``.
+
+ * It shall be zero if the POSIX API is not
+ enabled (e.g. RTEMS was built without the ``--enable-posix`` build
+ configuration option). Otherwise a compile time error in the configuration
+ file will occur.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Queued Signals that can be concurrently active.
+
+NOTES:
+ Unlimited objects are not available for queued signals.
+
+ Queued signals are only available if RTEMS was built with the
+ ``--enable-posix`` build configuration option.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
+
+.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
+
+CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
+----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the
+ RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``uintptr_t``.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Named Semaphores that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+ Named semaphores are created with :c:func:`sem_open()`. Semaphores
+ initialized with :c:func:`sem_init()` are not affected by this configuration
+ option since the storage space for these semaphores is user-provided.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_SHMS
+
+.. _CONFIGURE_MAXIMUM_POSIX_SHMS:
+
+CONFIGURE_MAXIMUM_POSIX_SHMS
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_SHMS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the
+ RTEMS Workspace size calculation carried out by ``<rtems/confdefs.h>`` does
+ not overflow an integer of type ``uintptr_t``.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Shared Memory objects that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
+
+.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
+
+CONFIGURE_MAXIMUM_POSIX_THREADS
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_THREADS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Threads that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+ This calculations for the required memory in the RTEMS Workspace for
+ threads assume that each thread has a minimum stack size and has floating
+ point support enabled. The configuration option
+ :ref:`CONFIGURE_EXTRA_TASK_STACKS` is used to specify thread stack
+ requirements **above** the minimum size required. See :ref:`Reserve
+ Task/Thread Stack Memory Above Minimum` for more information about
+ ``CONFIGURE_EXTRA_TASK_STACKS``.
+
+ The maximum number of Classic API Tasks is specified by
+ :ref:`CONFIGURE_MAXIMUM_TASKS`.
+
+ All POSIX threads have floating point enabled.
+
+.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
+
+.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
+
+CONFIGURE_MAXIMUM_POSIX_TIMERS
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 0.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to 65535.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+ * It may be defined through
+ :c:func:`rtems_resource_unlimited` the enable unlimited objects for this
+ object class, if the value passed to :c:func:`rtems_resource_unlimited`
+ satisfies all other constraints of this configuration option.
+
+ * It shall be zero if the POSIX API is not
+ enabled (e.g. RTEMS was built without the ``--enable-posix`` build
+ configuration option). Otherwise a compile time error in the configuration
+ file will occur.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number of POSIX
+ API Timers that can be concurrently active.
+
+NOTES:
+ This object class can be configured in unlimited allocation mode, see
+ :ref:`ConfigUnlimitedObjects`.
+
+ Timers are only available if RTEMS was built with the
+ ``--enable-posix`` build configuration option.
+
+.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
+.. index:: minimum POSIX thread stack size
+
+.. _CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE:
+
+CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
+-----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is two times the value of
+ :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+ * It shall be greater than or equal to a
+ BSP-specific and application-specific minimum value.
+
+DESCRIPTION:
+ The value of this configuration option defines the minimum stack size in
+ bytes for every POSIX thread in the system.
+
+NOTES:
+ None.
diff --git a/c-user/config/posix-init-thread.rst b/c-user/config/posix-init-thread.rst
new file mode 100644
index 0000000..65ccfe8
--- /dev/null
+++ b/c-user/config/posix-init-thread.rst
@@ -0,0 +1,104 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+POSIX Initialization Thread Configuration
+=========================================
+
+This section describes configuration options related to the POSIX
+initialization thread.
+
+.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
+
+.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
+
+CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
+---------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is ``POSIX_Init``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void *( *entry_point )( void * )``.
+
+DESCRIPTION:
+ The value of this configuration option initializes the entry point of the
+ POSIX API initialization thread.
+
+NOTES:
+ The application shall provide the function referenced by this configuration
+ option.
+
+.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
+
+.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
+
+CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
+--------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE`.
+
+ * It shall be small enough so that the task
+ stack space calculation carried out by ``<rtems/confdefs.h>`` does not
+ overflow an integer of type ``uintptr_t``.
+
+DESCRIPTION:
+ The value of this configuration option defines the thread stack size of the
+ POSIX API initialization thread.
+
+NOTES:
+ None.
+
+.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
+
+.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
+
+CONFIGURE_POSIX_INIT_THREAD_TABLE
+---------------------------------
+
+CONSTANT:
+ ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then exactly one POSIX
+ initialization thread is configured.
+
+NOTES:
+ The application shall define exactly one of the following configuration
+ options
+
+ * :ref:`CONFIGURE_RTEMS_INIT_TASKS_TABLE`,
+
+ * `CONFIGURE_POSIX_INIT_THREAD_TABLE`, or
+
+ * :ref:`CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`
+
+ otherwise a compile time error in the configuration file will occur.
diff --git a/c-user/config/scheduler-clustered.rst b/c-user/config/scheduler-clustered.rst
new file mode 100644
index 0000000..535829f
--- /dev/null
+++ b/c-user/config/scheduler-clustered.rst
@@ -0,0 +1,220 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+.. _ConfigurationSchedulersClustered:
+
+Clustered Scheduler Configuration
+=================================
+
+This section describes configuration options related to clustered scheduling.
+A clustered scheduler configuration is optional. It is an advanced
+configuration area and only necessary in specific circumstances.
+
+Clustered scheduling helps to control the worst-case latencies in a
+multiprocessor system (SMP). The goal is to reduce the amount of shared state
+in the system and thus prevention of lock contention. Modern multiprocessor
+systems tend to have several layers of data and instruction caches. With
+clustered scheduling it is possible to honour the cache topology of a system
+and thus avoid expensive cache synchronization traffic.
+
+We have clustered scheduling in case the set of processors of a system is
+partitioned into non-empty pairwise-disjoint subsets. These subsets are called
+clusters. Clusters with a cardinality of one are partitions. Each cluster is
+owned by exactly one scheduler.
+
+In order to use clustered scheduling the application designer has to answer two
+questions.
+
+#. How is the set of processors partitioned into clusters?
+
+#. Which scheduler algorithm is used for which cluster?
+
+The schedulers are statically configured.
+
+Configuration Step 1 - Scheduler Algorithms
+-------------------------------------------
+
+Firstly, the application must select which scheduling algorithms are available
+with the following defines
+
+- :ref:`CONFIGURE_SCHEDULER_EDF_SMP <CONFIGURE_SCHEDULER_EDF_SMP>`,
+
+- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP>`,
+
+- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_SMP>`, and
+
+- :ref:`CONFIGURE_SCHEDULER_SIMPLE_SMP <CONFIGURE_SCHEDULER_SIMPLE_SMP>`.
+
+This is necessary to calculate the per-thread overhead introduced by the
+scheduler algorithms. After these definitions the configuration file must
+``#include <rtems/scheduler.h>`` to have access to scheduler-specific
+configuration macros.
+
+It is possible to make more than one scheduler algorithm available to the
+application. For example a :ref:`Simple Priority SMP Scheduler
+<SchedulerSMPPrioritySimple>` could be used in a partition for low latency
+tasks in addition to an :ref:`EDF SMP Scheduler <SchedulerSMPEDF>` for a
+general-purpose cluster. Since the per-thread overhead depends on the
+scheduler algorithm only the scheduler algorithms used by the application
+should be configured.
+
+Configuration Step 2 - Schedulers
+---------------------------------
+
+Each scheduler needs some data structures. Use the following macros to create
+the scheduler data structures for a particular scheduler identified in the
+configuration by ``name``.
+
+- ``RTEMS_SCHEDULER_EDF_SMP(name, max_cpu_count)``,
+
+- ``RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP(name, prio_count)``,
+
+- ``RTEMS_SCHEDULER_PRIORITY_SMP(name, prio_count)``, and
+
+- ``RTEMS_SCHEDULER_SIMPLE_SMP(name)``.
+
+The ``name`` parameter is used as part of a designator for scheduler-specific
+data structures, so the usual C/C++ designator rules apply. This ``name`` is
+not the scheduler object name. Additional parameters are scheduler-specific.
+
+.. _ConfigurationSchedulerTable:
+
+Configuration Step 3 - Scheduler Table
+--------------------------------------
+
+The schedulers are registered in the system via the scheduler table. To
+populate the scheduler table define ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` to a
+list of the following scheduler table entry initializers
+
+- ``RTEMS_SCHEDULER_TABLE_EDF_SMP(name, obj_name)``,
+
+- ``RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP(name, obj_name)``,
+
+- ``RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(name, obj_name)``, and
+
+- ``RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(name, obj_name)``.
+
+The ``name`` parameter must correspond to the parameter defining the scheduler
+data structures of configuration step 2. The ``obj_name`` determines the
+scheduler object name and can be used in :ref:`rtems_scheduler_ident()
+<rtems_scheduler_ident>` to get the scheduler object identifier. The scheduler
+index is defined by the index of the scheduler table. It is a configuration
+error to add a scheduler multiple times to the scheduler table.
+
+Configuration Step 4 - Processor to Scheduler Assignment
+--------------------------------------------------------
+
+The last step is to define which processor uses which scheduler. For this
+purpose a scheduler assignment table must be defined. The entry count of this
+table must be equal to the configured maximum processors
+(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`). A
+processor assignment to a scheduler can be optional or mandatory. The boot
+processor must have a scheduler assigned. In case the system needs more
+mandatory processors than available then a fatal run-time error will occur. To
+specify the scheduler assignments define
+``CONFIGURE_SCHEDULER_ASSIGNMENTS`` to a list of
+
+- ``RTEMS_SCHEDULER_ASSIGN(scheduler_index, attr)`` and
+
+- ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
+
+macros. The ``scheduler_index`` parameter must be a valid index into the
+scheduler table defined by configuration step 3. The ``attr`` parameter
+defines the scheduler assignment attributes. By default, a scheduler
+assignment to a processor is optional. For the scheduler assignment attribute
+use one of the mutually exclusive variants
+
+- ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
+
+- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
+
+- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
+
+It is possible to add/remove processors to/from schedulers at run-time, see
+:ref:`rtems_scheduler_add_processor() <rtems_scheduler_add_processor>` and
+:ref:`rtems_scheduler_remove_processor() <rtems_scheduler_remove_processor>`.
+
+Configuration Example
+---------------------
+
+The following example shows a scheduler configuration for a hypothetical
+product using two chip variants. One variant has four processors which is used
+for the normal product line and another provides eight processors for the
+high-performance product line. The first processor performs hard-real time
+control of actuators and sensors. The second processor is not used by RTEMS at
+all and runs a Linux instance to provide a graphical user interface. The
+additional processors are used for a worker thread pool to perform data
+processing operations.
+
+The processors managed by RTEMS use two Deterministic Priority SMP schedulers
+capable of dealing with 256 priority levels. The scheduler with index zero has
+the name ``"IO "``. The scheduler with index one has the name ``"WORK"``. The
+scheduler assignments of the first, third and fourth processor are mandatory,
+so the system must have at least four processors, otherwise a fatal run-time
+error will occur during system startup. The processor assignments for the
+fifth up to the eighth processor are optional so that the same application can
+be used for the normal and high-performance product lines. The second
+processor has no scheduler assigned and runs Linux. A hypervisor will ensure
+that the two systems cannot interfere in an undesirable way.
+
+.. code-block:: c
+
+ #define CONFIGURE_MAXIMUM_PROCESSORS 8
+ #define CONFIGURE_MAXIMUM_PRIORITY 255
+
+ /* Configuration Step 1 - Scheduler Algorithms */
+ #define CONFIGURE_SCHEDULER_PRIORITY_SMP
+ #include <rtems/scheduler.h>
+
+ /* Configuration Step 2 - Schedulers */
+ RTEMS_SCHEDULER_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
+ RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
+
+ /* Configuration Step 3 - Scheduler Table */
+ #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
+ RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
+ io, \
+ rtems_build_name('I', 'O', ' ', ' ') \
+ ), \
+ RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
+ work, \
+ rtems_build_name('W', 'O', 'R', 'K') \
+ )
+
+ /* Configuration Step 4 - Processor to Scheduler Assignment */
+ #define CONFIGURE_SCHEDULER_ASSIGNMENTS \
+ RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
+ RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
+
+Configuration Errors
+--------------------
+
+In case one of the scheduler indices in ``CONFIGURE_SCHEDULER_ASSIGNMENTS``
+is invalid a link-time error will occur with an undefined reference to
+``RTEMS_SCHEDULER_INVALID_INDEX``.
+
+Some fatal errors may occur in case of scheduler configuration inconsistencies
+or a lack of processors on the system. The fatal source is
+``RTEMS_FATAL_SOURCE_SMP``.
+
+- ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot processor
+ must have a scheduler assigned.
+
+- ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
+ processor beyond the range of physically or virtually available processors.
+ The processor demand must be reduced for this system.
+
+- ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a mandatory
+ processor failed during system initialization. The system may not have this
+ processor at all or it could be a problem with a boot loader for example.
+ Check the ``CONFIGURE_SCHEDULER_ASSIGNMENTS`` definition.
+
+- ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not allowed
+ to start multitasking on a processor with no scheduler assigned.
diff --git a/c-user/config/scheduler-general.rst b/c-user/config/scheduler-general.rst
new file mode 100644
index 0000000..438e9a3
--- /dev/null
+++ b/c-user/config/scheduler-general.rst
@@ -0,0 +1,560 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 2010 Gedare Bloom
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+General Scheduler Configuration
+===============================
+
+This section describes configuration options related to selecting a
+scheduling algorithm for an application. A scheduler configuration is optional
+and only necessary in very specific circumstances. A normal application
+configuration does not need any of the configuration options described in this
+section.
+
+By default, the :ref:`Deterministic Priority Scheduler <SchedulerPriority>`
+algorithm is used in uniprocessor configurations. In case SMP is enabled and
+the configured maximum processors
+(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`) is greater
+than one, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
+<SchedulerSMPEDF>` is selected as the default scheduler algorithm.
+
+For the :ref:`schedulers built into
+RTEMS <SchedulingConcepts>`, the configuration is straightforward. All that is
+required is to define the configuration option which specifies which scheduler
+you want for in your application.
+
+The pluggable scheduler interface also enables the user to provide their own
+scheduling algorithm. If you choose to do this, you must define multiple
+configuration option.
+
+.. index:: CONFIGURE_CBS_MAXIMUM_SERVERS
+
+.. _CONFIGURE_CBS_MAXIMUM_SERVERS:
+
+CONFIGURE_CBS_MAXIMUM_SERVERS
+-----------------------------
+
+CONSTANT:
+ ``CONFIGURE_CBS_MAXIMUM_SERVERS``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is :ref:`CONFIGURE_MAXIMUM_TASKS`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to 0.
+
+ * It shall be less than or equal to ``SIZE_MAX``.
+
+ * It shall be less than or equal to a
+ BSP-specific and application-specific value which depends on the size of the
+ memory available to the application.
+
+DESCRIPTION:
+ The value of this configuration option defines the maximum number Constant
+ Bandwidth Servers that can be concurrently active.
+
+NOTES:
+ This configuration option is only evaluated if the configuration option
+ :ref:`CONFIGURE_SCHEDULER_CBS` is defined.
+
+.. index:: CONFIGURE_MAXIMUM_PRIORITY
+.. index:: maximum priority
+.. index:: number of priority levels
+
+.. _CONFIGURE_MAXIMUM_PRIORITY:
+
+CONFIGURE_MAXIMUM_PRIORITY
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_MAXIMUM_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is 255.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be
+ an element of {3, 7, 31, 63, 127, 255}.
+
+DESCRIPTION:
+ For the following schedulers
+
+ * :ref:`SchedulerPriority`, which is the default in uniprocessor
+ configurations and can be configured through the
+ :ref:`CONFIGURE_SCHEDULER_PRIORITY` configuration option,
+
+ * :ref:`SchedulerSMPPriority` which can be configured through the
+ :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP` configuration option, and
+
+ * :ref:`SchedulerSMPPriorityAffinity` which can be configured through the
+ :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP` configuration option
+
+ this configuration option specifies the maximum numeric priority of any task
+ for these schedulers and one less that the number of priority levels for
+ these schedulers. For all other schedulers provided by RTEMS, this
+ configuration option has no effect.
+
+NOTES:
+ The numerically greatest priority is the logically lowest priority in the
+ system and will thus be used by the IDLE task.
+
+ Priority zero is reserved for internal use by RTEMS and is not available to
+ applications.
+
+ Reducing the number of priorities through this configuration option reduces
+ the amount of memory allocated by the schedulers listed above. These
+ schedulers use a chain control structure per priority and this structure
+ consists of three pointers. On a 32-bit architecture, the allocated memory
+ is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256
+ priority levels (default), 48 bytes for 4 priority levels
+ (``CONFIGURE_MAXIMUM_PRIORITY == 3``).
+
+ The default value is 255, because RTEMS shall support 256 priority levels to
+ be compliant with various standards. These priorities range from 0 to 255.
+
+.. index:: CONFIGURE_SCHEDULER_ASSIGNMENTS
+
+.. _CONFIGURE_SCHEDULER_ASSIGNMENTS:
+
+CONFIGURE_SCHEDULER_ASSIGNMENTS
+-------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_ASSIGNMENTS``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value of this configuration option is computed so that the
+ default scheduler is assigned to each configured processor (up to 32).
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be a list of the following
+ macros:
+
+ * ``RTEMS_SCHEDULER_ASSIGN( processor_index, attributes )``
+
+ * :c:macro:`RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER`
+
+ * It shall be a list of exactly
+ :ref:`CONFIGURE_MAXIMUM_PROCESSORS` elements.
+
+DESCRIPTION:
+ The value of this configuration option is used to initialize the initial
+ scheduler to processor assignments.
+
+NOTES:
+ This configuration option is only evaluated in SMP configurations.
+
+ This is an advanced configuration option, see
+ :ref:`ConfigurationSchedulersClustered`.
+
+.. index:: CONFIGURE_SCHEDULER_CBS
+
+.. _CONFIGURE_SCHEDULER_CBS:
+
+CONFIGURE_SCHEDULER_CBS
+-----------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_CBS``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Constant Bandwidth Server (CBS) Scheduler <SchedulerCBS>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for exactly one processor.
+
+.. index:: CONFIGURE_SCHEDULER_EDF
+
+.. _CONFIGURE_SCHEDULER_EDF:
+
+CONFIGURE_SCHEDULER_EDF
+-----------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_EDF``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Earliest Deadline First (EDF) Scheduler <SchedulerEDF>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for exactly one processor.
+
+.. index:: CONFIGURE_SCHEDULER_EDF_SMP
+
+.. _CONFIGURE_SCHEDULER_EDF_SMP:
+
+CONFIGURE_SCHEDULER_EDF_SMP
+---------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_EDF_SMP``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Earliest Deadline First (EDF) SMP Scheduler <SchedulerSMPEDF>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ This scheduler algorithm is only available when RTEMS is built with SMP
+ support enabled.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for up to 32 processors.
+
+ This scheduler algorithm is the default in SMP configurations if
+ :ref:`CONFIGURE_MAXIMUM_PROCESSORS` is
+ greater than one.
+
+.. index:: CONFIGURE_SCHEDULER_NAME
+
+.. _CONFIGURE_SCHEDULER_NAME:
+
+CONFIGURE_SCHEDULER_NAME
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_NAME``
+
+OPTION TYPE:
+ This configuration option is an integer define.
+
+DEFAULT VALUE:
+ The default value is
+
+ * ``"MEDF"`` for the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`,
+
+ * ``"MPA "`` for the :ref:`Arbitrary Processor Affinity Priority SMP Scheduler <SchedulerSMPPriorityAffinity>`,
+
+ * ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`,
+
+ * ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`,
+
+ * ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler <SchedulerCBS>`,
+
+ * ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler <SchedulerEDF>`,
+
+ * ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler <SchedulerPriority>`, and
+
+ * ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler <SchedulerPrioritySimple>`.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be a valid integer of type
+ ``rtems_name``.
+
+DESCRIPTION:
+ The value of this configuration option defines the name of the default
+ scheduler.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ Schedulers can be identified via c:func:`rtems_scheduler_ident`.
+
+ Use :c:func:`rtems_build_name` to define the scheduler name.
+
+.. index:: CONFIGURE_SCHEDULER_PRIORITY
+
+.. _CONFIGURE_SCHEDULER_PRIORITY:
+
+CONFIGURE_SCHEDULER_PRIORITY
+----------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_PRIORITY``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Deterministic Priority Scheduler <SchedulerPriority>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for exactly one processor.
+
+ This scheduler algorithm is the default when
+ :ref:`CONFIGURE_MAXIMUM_PROCESSORS` is
+ exactly one.
+
+ The memory allocated for this scheduler depends on the
+ :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
+
+.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
+
+.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
+
+CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
+-----------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Arbitrary Processor Affinity SMP Scheduler <SchedulerSMPPriorityAffinity>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ This scheduler algorithm is only available when RTEMS is built with SMP
+ support enabled.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for up to 32 processors.
+
+ The memory allocated for this scheduler depends on the
+ :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
+
+.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
+
+.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
+
+CONFIGURE_SCHEDULER_PRIORITY_SMP
+--------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ This scheduler algorithm is only available when RTEMS is built with SMP
+ support enabled.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for up to 32 processors.
+
+ The memory allocated for this scheduler depends on the
+ :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
+
+.. index:: CONFIGURE_SCHEDULER_SIMPLE
+
+.. _CONFIGURE_SCHEDULER_SIMPLE:
+
+CONFIGURE_SCHEDULER_SIMPLE
+--------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_SIMPLE``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Simple Priority Scheduler <SchedulerPrioritySimple>`
+ algorithm is made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for exactly one processor.
+
+.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
+
+.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
+
+CONFIGURE_SCHEDULER_SIMPLE_SMP
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then
+ :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`
+ algorithm is made available to the application.
+ application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ This scheduler algorithm is only available when RTEMS is built with SMP
+ support enabled.
+
+ In case no explicit :ref:`clustered scheduler configuration
+ <ConfigurationSchedulersClustered>` is present, then it is used as the
+ scheduler for up to 32 processors.
+
+.. index:: CONFIGURE_SCHEDULER_STRONG_APA
+
+.. _CONFIGURE_SCHEDULER_STRONG_APA:
+
+CONFIGURE_SCHEDULER_STRONG_APA
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_STRONG_APA``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then Strong APA algorithm is
+ made available to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ This scheduler algorithm is only available when RTEMS is built with SMP
+ support enabled.
+
+ This scheduler algorithm is not correctly implemented. Do not use it.
+
+.. index:: CONFIGURE_SCHEDULER_USER
+
+.. _CONFIGURE_SCHEDULER_USER:
+
+CONFIGURE_SCHEDULER_USER
+------------------------
+
+CONSTANT:
+ ``CONFIGURE_SCHEDULER_USER``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the user shall provide a
+ scheduler algorithm to the application.
+
+NOTES:
+ This scheduler configuration option is an advanced configuration option.
+ Think twice before you use it.
+
+ RTEMS allows the application to provide its own task/thread scheduling
+ algorithm. In order to do this, one shall define
+ ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
+ scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
+ following additional macros shall be defined:
+
+ - ``CONFIGURE_SCHEDULER`` shall be defined to a static definition of
+ the scheduler data structures of the user scheduler.
+
+ - ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` shall be defined to a scheduler
+ table entry initializer for the user scheduler.
+
+ - ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` shall be defined to the type of
+ the per-thread information of the user scheduler.
+
+ At this time, the mechanics and requirements for writing a new scheduler
+ are evolving and not fully documented. It is recommended that you look at
+ the existing Deterministic Priority Scheduler in
+ ``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on
+ the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
+ for how these are defined for the Deterministic Priority Scheduler.
diff --git a/c-user/config/task-stack-alloc.rst b/c-user/config/task-stack-alloc.rst
new file mode 100644
index 0000000..005a643
--- /dev/null
+++ b/c-user/config/task-stack-alloc.rst
@@ -0,0 +1,173 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
+
+Task Stack Allocator Configuration
+==================================
+
+This section describes configuration options related to the task stack
+allocator. RTEMS allows the application or BSP to define its own allocation
+and deallocation methods for task stacks. This can be used to place task stacks
+in special areas of memory or to utilize a Memory Management Unit so that stack
+overflows are detected in hardware.
+
+.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
+.. index:: task stack allocator
+
+.. _CONFIGURE_TASK_STACK_ALLOCATOR:
+
+CONFIGURE_TASK_STACK_ALLOCATOR
+------------------------------
+
+CONSTANT:
+ ``CONFIGURE_TASK_STACK_ALLOCATOR``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is ``_Workspace_Allocate``, which indicates that task
+ stacks will be allocated from the RTEMS Workspace.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void *( *allocate )( size_t )``.
+
+DESCRIPTION:
+ The value of this configuration option initializes the stack allocator
+ allocate handler.
+
+NOTES:
+ A correctly configured system shall configure the following to be consistent:
+
+ - :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
+
+ - `CONFIGURE_TASK_STACK_ALLOCATOR`
+
+ - :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR`
+
+.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
+
+.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
+
+CONFIGURE_TASK_STACK_ALLOCATOR_INIT
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is ``NULL``.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void ( *initialize )( size_t )`` or to ``NULL``.
+
+DESCRIPTION:
+ The value of this configuration option initializes the stack allocator
+ initialization handler.
+
+NOTES:
+ A correctly configured system shall configure the following to be consistent:
+
+ - `CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
+
+ - :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`
+
+ - :ref:`CONFIGURE_TASK_STACK_DEALLOCATOR`
+
+.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
+.. index:: task stack deallocator
+
+.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
+
+CONFIGURE_TASK_STACK_DEALLOCATOR
+--------------------------------
+
+CONSTANT:
+ ``CONFIGURE_TASK_STACK_DEALLOCATOR``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is ``_Workspace_Free``, which indicates that task stacks
+ will be allocated from the RTEMS Workspace.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a valid function
+ pointer of the type ``void ( *deallocate )( void * )``.
+
+DESCRIPTION:
+ The value of this configuration option initializes the stack allocator
+ deallocate handler.
+
+NOTES:
+ A correctly configured system shall configure the following to be consistent:
+
+ - :ref:`CONFIGURE_TASK_STACK_ALLOCATOR_INIT`
+
+ - :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`
+
+ - `CONFIGURE_TASK_STACK_DEALLOCATOR`
+
+.. index:: CONFIGURE_TASK_STACK_FROM_ALLOCATOR
+.. index:: task stack allocator
+
+.. _CONFIGURE_TASK_STACK_FROM_ALLOCATOR:
+
+CONFIGURE_TASK_STACK_FROM_ALLOCATOR
+-----------------------------------
+
+CONSTANT:
+ ``CONFIGURE_TASK_STACK_FROM_ALLOCATOR``
+
+OPTION TYPE:
+ This configuration option is an initializer define.
+
+DEFAULT VALUE:
+ The default value is a macro which supports the system heap allocator.
+
+VALUE CONSTRAINTS:
+ The value of this configuration option shall be defined to a macro which
+ accepts exactly one parameter and returns an unsigned integer. The
+ parameter will be an allocation size and the macro shall return this size
+ plus the overhead of the allocator to manage an allocation request for this
+ size.
+
+DESCRIPTION:
+ The value of this configuration option is used to calculate the task stack
+ space size.
+
+NOTES:
+ This configuration option may be used if a custom task stack allocator is
+ configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`.
+
+.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
+
+.. _CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE:
+
+CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE
+------------------------------------------------
+
+CONSTANT:
+ ``CONFIGURE_TASK_STACK_ALLOCATOR_AVOIDS_WORK_SPACE``
+
+OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+DESCRIPTION:
+ In case this configuration option is defined, then the system is informed
+ that the task stack allocator does not use the RTEMS Workspace.
+
+NOTES:
+ This configuration option may be used if a custom task stack allocator is
+ configured, see :ref:`CONFIGURE_TASK_STACK_ALLOCATOR`.
diff --git a/c-user/configuring_a_system.rst b/c-user/configuring_a_system.rst
deleted file mode 100644
index 230d6b6..0000000
--- a/c-user/configuring_a_system.rst
+++ /dev/null
@@ -1,4974 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. Copyright (C) 2011 Petr Benes
-.. Copyright (C) 2010 Gedare Bloom
-.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
-
-.. index:: configuring a system
-.. _Configuring a System:
-
-Configuring a System
-********************
-
-Introduction
-============
-
-RTEMS must be configured for an application. This configuration encompasses a
-variety of information including the length of each clock tick, the maximum
-number of each information RTEMS object that can be created, the application
-initialization tasks, the task scheduling algorithm to be used, and the device
-drivers in the application.
-
-Although this information is contained in data structures that are used by
-RTEMS at system initialization time, the data structures themselves must not be
-generated by hand. RTEMS provides a set of macros system which provides a
-simple standard mechanism to automate the generation of these structures.
-
-.. index:: confdefs.h
-.. index:: <rtems/confdefs.h>
-
-The RTEMS header file ``<rtems/confdefs.h>`` is at the core of the automatic
-generation of system configuration. It is based on the idea of setting macros
-which define configuration parameters of interest to the application and
-defaulting or calculating all others. This variety of macros can automatically
-produce all of the configuration data required for an RTEMS application.
-
-.. sidebar: Trivia:
-
- The term ``confdefs`` is shorthand for a *Configuration Defaults*.
-
-As a general rule, application developers only specify values for the
-configuration parameters of interest to them. They define what resources or
-features they require. In most cases, when a parameter is not specified, it
-defaults to zero (0) instances, a standards compliant value, or disabled as
-appropriate. For example, by default there will be 256 task priority levels but
-this can be lowered by the application. This number of priority levels is
-required to be compliant with the RTEID/ORKID standards upon which the Classic
-API is based. There are similar cases where the default is selected to be
-compliant with the POSIX standard.
-
-For each configuration parameter in the configuration tables, the macro
-corresponding to that field is discussed. The RTEMS Maintainers expect that all
-systems can be easily configured using the ``<rtems/confdefs.h>`` mechanism and
-that using this mechanism will avoid internal RTEMS configuration changes
-impacting applications.
-
-Default Value Selection Philosophy
-==================================
-
-The user should be aware that the defaults are intentionally set as low as
-possible. By default, no application resources are configured. The
-``<rtems/confdefs.h>`` file ensures that at least one application task or
-thread is configured and that at least one of the initialization task/thread
-tables is configured.
-
-.. _Sizing the RTEMS Workspace:
-
-Sizing the RTEMS Workspace
-==========================
-
-The RTEMS Workspace is a user-specified block of memory reserved for use by
-RTEMS. The application should NOT modify this memory. This area consists
-primarily of the RTEMS data structures whose exact size depends upon the values
-specified in the Configuration Table. In addition, task stacks and floating
-point context areas are dynamically allocated from the RTEMS Workspace.
-
-The ``<rtems/confdefs.h>`` mechanism calculates the size of the RTEMS Workspace
-automatically. It assumes that all tasks are floating point and that all will
-be allocated the minimum stack space. This calculation includes the amount of
-memory that will be allocated for internal use by RTEMS. The automatic
-calculation may underestimate the workspace size truly needed by the
-application, in which case one can use the ``CONFIGURE_MEMORY_OVERHEAD`` macro
-to add a value to the estimate. See :ref:`Specify Memory Overhead` for more
-details.
-
-The memory area for the RTEMS Workspace is determined by the BSP. In case the
-RTEMS Workspace is too large for the available memory, then a fatal run-time
-error occurs and the system terminates.
-
-The file ``<rtems/confdefs.h>`` will calculate the value of the
-``work_space_size`` parameter of the Configuration Table. There are many
-parameters the application developer can specify to help ``<rtems/confdefs.h>``
-in its calculations. Correctly specifying the application requirements via
-parameters such as ``CONFIGURE_EXTRA_TASK_STACKS`` and
-``CONFIGURE_MAXIMUM_TASKS`` is critical for production software.
-
-For each class of objects, the allocation can operate in one of two ways. The
-default way has an ceiling on the maximum number of object instances which can
-concurrently exist in the system. Memory for all instances of that object class
-is reserved at system initialization. The second way allocates memory for an
-initial number of objects and increases the current allocation by a fixed
-increment when required. Both ways allocate space from inside the RTEMS
-Workspace.
-
-See :ref:`ConfigUnlimitedObjects` for more details about the second way, which
-allows for dynamic allocation of objects and therefore does not provide
-determinism. This mode is useful mostly for when the number of objects cannot
-be determined ahead of time or when porting software for which you do not know
-the object requirements.
-
-The space needed for stacks and for RTEMS objects will vary from one version of
-RTEMS and from one target processor to another. Therefore it is safest to use
-``<rtems/confdefs.h>`` and specify your application's requirements in terms of
-the numbers of objects and multiples of ``RTEMS_MINIMUM_STACK_SIZE``, as far as
-is possible. The automatic estimates of space required will in general change
-when:
-
-- a configuration parameter is changed,
-
-- task or interrupt stack sizes change,
-
-- the floating point attribute of a task changes,
-
-- task floating point attribute is altered,
-
-- RTEMS is upgraded, or
-
-- the target processor is changed.
-
-Failure to provide enough space in the RTEMS Workspace may result in fatal
-run-time errors terminating the system.
-
-Potential Issues with RTEMS Workspace Size Estimation
-=====================================================
-
-The ``<rtems/confdefs.h>`` file estimates the amount of memory required for the
-RTEMS Workspace. This estimate is only as accurate as the information given to
-``<rtems/confdefs.h>`` and may be either too high or too low for a variety of
-reasons. Some of the reasons that ``<rtems/confdefs.h>`` may reserve too much
-memory for RTEMS are:
-
-- All tasks/threads are assumed to be floating point.
-
-Conversely, there are many more reasons that the resource estimate could be too
-low:
-
-- Task/thread stacks greater than minimum size must be accounted for explicitly
- by developer.
-
-- Memory for messages is not included.
-
-- Device driver requirements are not included.
-
-- Network stack requirements are not included.
-
-- Requirements for add-on libraries are not included.
-
-In general, ``<rtems/confdefs.h>`` is very accurate when given enough
-information. However, it is quite easy to use a library and forget to account
-for its resources.
-
-Format to be followed for making changes in this file
-=====================================================
-
-MACRO NAME:
- Should be alphanumeric. Can have '_' (underscore).
-
-DATA TYPE:
- Please refer to all existing formats.
-
-RANGE:
- The range depends on the Data Type of the macro.
-
- - If the data type is of type task priority, then its value should be an
- integer in the range of 1 to 255.
-
- - If the data type is an integer, then it can have numbers, characters (in
- case the value is defined using another macro) and arithmetic operations
- (+, -, \*, /).
-
- - If the data type is a function pointer the first character should be an
- alphabet or an underscore. The rest of the string can be alphanumeric.
-
- - If the data type is RTEMS Attributes or RTEMS Mode then the string should
- be alphanumeric.
-
- - If the data type is RTEMS NAME then the value should be an integer>=0 or
- ``RTEMS_BUILD_NAME( 'U', 'I', '1', ' ' )``
-
-DEFAULT VALUE:
- The default value should be in the following formats- Please note that the
- '.' (full stop) is necessary.
-
- - In case the value is not defined then: This is not defined by default.
-
- - If we know the default value then: The default value is XXX.
-
- - If the default value is BSP Specific then: This option is BSP specific.
-
-DESCRIPTION:
- The description of the macro. (No specific format)
-
-NOTES:
- Any further notes. (No specific format)
-
-Configuration Example
-=====================
-
-In the following example, the configuration information for a system with a
-single message queue, four (4) tasks, and a timeslice of fifty (50)
-milliseconds is as follows:
-
-.. code-block:: c
-
- #include <bsp.h>
- #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
- #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
- #define CONFIGURE_MICROSECONDS_PER_TICK 1000 /* 1 millisecond */
- #define CONFIGURE_TICKS_PER_TIMESLICE 50 /* 50 milliseconds */
- #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
- #define CONFIGURE_MAXIMUM_TASKS 4
- #define CONFIGURE_MAXIMUM_MESSAGE_QUEUES 1
- #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(20, sizeof(struct USER_MESSAGE))
- #define CONFIGURE_INIT
- #include <rtems/confdefs.h>
-
-In this example, only a few configuration parameters are specified. The impact
-of these are as follows:
-
-- The example specified ``CONFIGURE_RTEMS_INIT_TASK_TABLE`` but did not specify
- any additional parameters. This results in a configuration of an application
- which will begin execution of a single initialization task named ``Init``
- which is non-preemptible and at priority one (1).
-
-- By specifying ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``, this application
- is configured to have a clock tick device driver. Without a clock tick device
- driver, RTEMS has no way to know that time is passing and will be unable to
- support delays and wall time. Further configuration details about time are
- provided. Per ``CONFIGURE_MICROSECONDS_PER_TICK`` and
- ``CONFIGURE_TICKS_PER_TIMESLICE``, the user specified they wanted a clock
- tick to occur each millisecond, and that the length of a timeslice would be
- fifty (50) milliseconds.
-
-- By specifying ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``, the application
- will include a console device driver. Although the console device driver may
- support a combination of multiple serial ports and display and keyboard
- combinations, it is only required to provide a single device named
- ``/dev/console``. This device will be used for Standard Input, Output and
- Error I/O Streams. Thus when ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
- is specified, implicitly three (3) file descriptors are reserved for the
- Standard I/O Streams and those file descriptors are associated with
- ``/dev/console`` during initialization. All console devices are expected to
- support the POSIX*termios* interface.
-
-- The example above specifies via ``CONFIGURE_MAXIMUM_TASKS`` that the
- application requires a maximum of four (4) simultaneously existing Classic
- API tasks. Similarly, by specifying ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``,
- there may be a maximum of only one (1) concurrently existent Classic API
- message queues.
-
-- The most surprising configuration parameter in this example is the use of
- ``CONFIGURE_MESSAGE_BUFFER_MEMORY``. Message buffer memory is allocated from
- the RTEMS Workspace and must be accounted for. In this example, the single
- message queue will have up to twenty (20) messages of type ``struct
- USER_MESSAGE``.
-
-- The ``CONFIGURE_INIT`` constant must be defined in order to make
- ``<rtems/confdefs.h>`` instantiate the configuration data structures. This
- can only be defined in one source file per application that includes
- ``<rtems/confdefs.h>`` or the symbol table will be instantiated multiple
- times and linking errors produced.
-
-This example illustrates that parameters have default values. Among other
-things, the application implicitly used the following defaults:
-
-- All unspecified types of communications and synchronization objects in the
- Classic and POSIX Threads API have maximums of zero (0).
-
-- The filesystem will be the default filesystem which is the In-Memory File
- System (IMFS).
-
-- The application will have the default number of priority levels.
-
-- The minimum task stack size will be that recommended by RTEMS for the target
- architecture.
-
-.. _ConfigUnlimitedObjects:
-
-Unlimited Objects
-=================
-
-In real-time embedded systems the RAM is normally a limited, critical resource
-and dynamic allocation is avoided as much as possible to ensure predictable,
-deterministic execution times. For such cases, see :ref:`Sizing the RTEMS
-Workspace` for an overview of how to tune the size of the workspace.
-Frequently when users are porting software to RTEMS the precise resource
-requirements of the software is unknown. In these situations users do not need
-to control the size of the workspace very tightly because they just want to get
-the new software to run; later they can tune the workspace size as needed.
-
-The following object classes in the Classic API can be configured in unlimited
-mode:
-
-- Barriers
-
-- Message Queues
-
-- Partitions
-
-- Periods
-
-- Ports
-
-- Regions
-
-- Semaphores
-
-- Tasks
-
-- Timers
-
-Additionally, the following object classes from the POSIX API can be configured
-in unlimited mode:
-
-- Keys -- :c:func:`pthread_key_create`
-
-- Key Value Pairs -- :c:func:`pthread_setspecific`
-
-- Message Queues -- :c:func:`mq_open`
-
-- Named Semaphores -- :c:func:`sem_open`
-
-- Shared Memory -- :c:func:`shm_open`
-
-- Threads -- :c:func:`pthread_create`
-
-- Timers -- :c:func:`timer_create`
-
-.. warning::
-
- The following object classes can *not* be configured in unlimited mode:
-
- - Drivers
-
- - File Descriptors
-
- - POSIX Queued Signals
-
- - User Extensions
-
-Due to the memory requirements of unlimited objects it is strongly recommended
-to use them only in combination with the unified work areas. See :ref:`Separate
-or Unified Work Areas` for more information on unified work areas.
-
-The following example demonstrates how the two simple configuration defines for
-unlimited objects and unified works areas can replace many seperate
-configuration defines for supported object classes:
-
-.. code-block:: c
-
- #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
- #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
- #define CONFIGURE_UNIFIED_WORK_AREAS
- #define CONFIGURE_UNLIMITED_OBJECTS
- #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
- #define CONFIGURE_INIT
- #include <rtems/confdefs.h>
-
-Users are cautioned that using unlimited objects is not recommended for
-production software unless the dynamic growth is absolutely required. It is
-generally considered a safer embedded systems programming practice to know the
-system limits rather than experience an out of memory error at an arbitrary and
-largely unpredictable time in the field.
-
-.. index:: rtems_resource_unlimited
-
-.. _ConfigUnlimitedObjectsClass:
-
-Unlimited Objects by Class
---------------------------
-
-When the number of objects is not known ahead of time, RTEMS provides an
-auto-extending mode that can be enabled individually for each object type by
-using the macro ``rtems_resource_unlimited``. This takes a value as a
-parameter, and is used to set the object maximum number field in an API
-Configuration table. The value is an allocation unit size. When RTEMS is
-required to grow the object table it is grown by this size. The kernel will
-return the object memory back to the RTEMS Workspace when an object is
-destroyed. The kernel will only return an allocated block of objects to the
-RTEMS Workspace if at least half the allocation size of free objects remain
-allocated. RTEMS always keeps one allocation block of objects allocated. Here
-is an example of using ``rtems_resource_unlimited``:
-
-.. code-block:: c
-
- #define CONFIGURE_MAXIMUM_TASKS rtems_resource_unlimited(5)
-
-.. index:: rtems_resource_is_unlimited
-.. index:: rtems_resource_maximum_per_allocation
-
-Object maximum specifications can be evaluated with the
-``rtems_resource_is_unlimited`` and``rtems_resource_maximum_per_allocation``
-macros.
-
-.. _ConfigUnlimitedObjectsDefault:
-
-Unlimited Objects by Default
-----------------------------
-
-To ease the burden of developers who are porting new software RTEMS also
-provides the capability to make all object classes listed above operate in
-unlimited mode in a simple manner. The application developer is only
-responsible for enabling unlimited objects
-(:ref:`CONFIGURE_UNLIMITED_OBJECTS`) and specifying the allocation size
-(:ref:`CONFIGURE_UNLIMITED_ALLOCATION_SIZE`).
-
-.. code-block:: c
-
- #define CONFIGURE_UNLIMITED_OBJECTS
- #define CONFIGURE_UNLIMITED_ALLOCATION_SIZE 5
-
-General System Configuration
-============================
-
-This section defines the general system configuration options supported by
-``<rtems/confdefs.h>``.
-
-.. index:: CONFIGURE_DIRTY_MEMORY
-
-.. _CONFIGURE_DIRTY_MEMORY:
-
-CONFIGURE_DIRTY_MEMORY
-----------------------
-
-CONSTANT:
- ``CONFIGURE_DIRTY_MEMORY``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- By default, the memory used by the RTEMS Workspace and the C Program Heap
- is uninitialized memory.
-
-DESCRIPTION:
- This macro indicates whether RTEMS should dirty the memory used by the
- RTEMS Workspace and the C Program Heap as part of its initialization. If
- defined, the memory areas are dirtied with a ``0xCF`` byte pattern.
- Otherwise, they are not.
-
-NOTES:
- Dirtying memory can add significantly to system boot time. It may assist in
- finding code that incorrectly assumes the contents of free memory areas is
- cleared to zero during system initialization. In case
- :ref:`CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY` is also defined, then the
- memory is first dirtied and then zeroed.
-
-.. index:: CONFIGURE_EXTRA_TASK_STACKS
-.. index:: memory for task tasks
-
-.. _CONFIGURE_EXTRA_TASK_STACKS:
-
-CONFIGURE_EXTRA_TASK_STACKS
----------------------------
-
-CONSTANT:
- ``CONFIGURE_EXTRA_TASK_STACKS``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Undefined or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- This configuration parameter is set to the number of bytes the applications
- wishes to add to the task stack requirements calculated by
- ``<rtems/confdefs.h>``.
-
-NOTES:
- This parameter is very important. If the application creates tasks with
- stacks larger then the minimum, then that memory is NOT accounted for by
- ``<rtems/confdefs.h>``.
-
-.. index:: CONFIGURE_INITIAL_EXTENSIONS
-
-.. _CONFIGURE_INITIAL_EXTENSIONS:
-
-CONFIGURE_INITIAL_EXTENSIONS
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_INITIAL_EXTENSIONS``
-
-DATA TYPE:
- List of user extension initializers (``rtems_extensions_table``).
-
-RANGE:
- Undefined or a list of one or more user extensions.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If ``CONFIGURE_INITIAL_EXTENSIONS`` is defined by the application, then
- this application specific set of initial extensions will be placed in the
- initial extension table.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_INTERRUPT_STACK_SIZE
-.. index:: interrupt stack size
-
-.. _CONFIGURE_INTERRUPT_STACK_SIZE:
-
-CONFIGURE_INTERRUPT_STACK_SIZE
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_INTERRUPT_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer.
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is ``BSP_INTERRUPT_STACK_SIZE`` in case it is defined,
- otherwise the default value is ``CPU_STACK_MINIMUM_SIZE``.
-
-DESCRIPTION:
- The ``CONFIGURE_INTERRUPT_STACK_SIZE`` configuration option defines the
- size of an interrupt stack in bytes.
-
-NOTES:
- The interrupt stack size must be aligned according to
- ``CPU_INTERRUPT_STACK_ALIGNMENT``.
-
- There is one interrupt stack available for each configured processor
- (:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`). The
- interrupt stack areas are statically allocated in a special linker section
- (``.rtemsstack.interrupt``). The placement of this linker section is
- BSP-specific.
-
- Some BSPs use the interrupt stack as the initialization stack which is used
- to perform the sequential system initialization before the multithreading
- is started.
-
- The interrupt stacks are covered by the :ref:`stack checker
- <CONFIGURE_STACK_CHECKER_ENABLED>`. However, using a too small interrupt
- stack size may still result in undefined behaviour.
-
- In releases before RTEMS 5.1 the default value was
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE
- <CONFIGURE_MINIMUM_TASK_STACK_SIZE>` instead of ``CPU_STACK_MINIMUM_SIZE``.
-
-.. index:: CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
-.. index:: maximum file descriptors
-
-.. _CONFIGURE_MAXIMUM_FILE_DESCRIPTORS:
-
-CONFIGURE_MAXIMUM_FILE_DESCRIPTORS
-----------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_FILE_DESCRIPTORS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- If ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined, then the
- default value is 3, otherwise the default value is 0. Three file
- descriptors allows RTEMS to support standard input, output, and error I/O
- streams on ``/dev/console``.
-
-DESCRIPTION:
- This configuration parameter is set to the maximum number of file like
- objects that can be concurrently open.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_MAXIMUM_PRIORITY
-.. index:: maximum priority
-.. index:: number of priority levels
-
-.. _CONFIGURE_MAXIMUM_PRIORITY:
-
-CONFIGURE_MAXIMUM_PRIORITY
---------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PRIORITY``
-
-DATA TYPE:
- Unsigned integer (``uint8_t``).
-
-RANGE:
- Valid values for this configuration parameter must be one (1) less than
- than a power of two (2) between 4 and 256 inclusively. In other words,
- valid values are 3, 7, 31, 63, 127, and 255.
-
-DEFAULT VALUE:
- The default value is 255, because RTEMS must support 256 priority levels to
- be compliant with various standards. These priorities range from zero (0)
- to 255.
-
-DESCRIPTION:
- For the schedulers
-
- * :ref:`SchedulerPriority`, which is the default in uniprocessor
- configurations and can be configured through the
- :ref:`CONFIGURE_SCHEDULER_PRIORITY` configuration option,
-
- * :ref:`SchedulerSMPPriority` which can be configured through the
- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP` configuration option, and
-
- * :ref:`SchedulerSMPPriorityAffinity` which can be configured through the
- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP` configuration option
-
- this configuration option specifies the maximum numeric priority of any task
- for these schedulers and one less that the number of priority levels for
- these schedulers. For all other schedulers provided by RTEMS, this
- configuration option has no effect.
-
-NOTES:
- The numerically greatest priority is the logically lowest priority in the
- system and will thus be used by the IDLE task.
-
- Priority zero (0) is reserved for internal use by RTEMS and is not available
- to applications.
-
- Reducing the number of priorities through this configuration option reduces
- the amount of memory allocated by the schedulers listed above. These
- schedulers use a chain control structure per priority and this structure
- consists of three pointers. On a 32-bit architecture, the allocated memory
- is 12 bytes * (``CONFIGURE_MAXIMUM_PRIORITY`` + 1), e.g. 3072 bytes for 256
- priority levels (default), 48 bytes for 4 priority levels
- (``CONFIGURE_MAXIMUM_PRIORITY == 3``).
-
-.. index:: CONFIGURE_MAXIMUM_PROCESSORS
-
-.. _CONFIGURE_MAXIMUM_PROCESSORS:
-
-CONFIGURE_MAXIMUM_PROCESSORS
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PROCESSORS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 1.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_PROCESSORS`` must be set to the maximum number of
- processors an application intends to use. The number of actually available
- processors depends on the hardware and may be less. It is recommended to
- use the smallest value suitable for the application in order to save
- memory. Each processor needs an idle thread and interrupt stack for
- example.
-
-NOTES:
- If there are more processors available than configured, the rest will be
- ignored. This configuration define is ignored in uniprocessor
- configurations.
-
-.. index:: CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
-.. index:: maximum thread name size
-
-.. _CONFIGURE_MAXIMUM_THREAD_NAME_SIZE:
-
-CONFIGURE_MAXIMUM_THREAD_NAME_SIZE
-----------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_THREAD_NAME_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- No restrictions.
-
-DEFAULT VALUE:
- The default value is 16. This value was chosen for Linux compatibility,
- see
- `PTHREAD_SETNAME_NP(3) <http://man7.org/linux/man-pages/man3/pthread_setname_np.3.html>`_.
-
-DESCRIPTION:
- This configuration parameter specifies the maximum thread name size
- including the terminating `NUL` character.
-
-NOTE:
- The size of the thread control block is increased by the maximum thread name
- size. This configuration option is available since RTEMS 5.1.
-
-.. index:: CONFIGURE_MEMORY_OVERHEAD
-
-.. _CONFIGURE_MEMORY_OVERHEAD:
-
-CONFIGURE_MEMORY_OVERHEAD
--------------------------
-
-CONSTANT:
- ``CONFIGURE_MEMORY_OVERHEAD``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- This parameter is set to the number of kilobytes the application wishes to
- add to the requirements calculated by ``<rtems/confdefs.h>``.
-
-NOTES:
- This configuration parameter should only be used when it is suspected that
- a bug in ``<rtems/confdefs.h>`` has resulted in an underestimation.
- Typically the memory allocation will be too low when an application does
- not account for all message queue buffers or task stacks.
-
-.. index:: CONFIGURE_MICROSECONDS_PER_TICK
-.. index:: tick quantum
-
-.. _CONFIGURE_MICROSECONDS_PER_TICK:
-
-CONFIGURE_MICROSECONDS_PER_TICK
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_MICROSECONDS_PER_TICK``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- This is not defined by default. When not defined, the clock tick quantum is
- configured to be 10,000 microseconds which is ten (10) milliseconds.
-
-DESCRIPTION:
- This constant is used to specify the length of time between clock ticks.
-
- When the clock tick quantum value is too low, the system will spend so much
- time processing clock ticks that it does not have processing time available
- to perform application work. In this case, the system will become
- unresponsive.
-
- The lowest practical time quantum varies widely based upon the speed of the
- target hardware and the architectural overhead associated with
- interrupts. In general terms, you do not want to configure it lower than is
- needed for the application.
-
- The clock tick quantum should be selected such that it all blocking and
- delay times in the application are evenly divisible by it. Otherwise,
- rounding errors will be introduced which may negatively impact the
- application.
-
-NOTES:
- This configuration parameter has no impact if the Clock Tick Device driver
- is not configured.
-
- There may be BSP specific limits on the resolution or maximum value of a
- clock tick quantum.
-
-.. index:: CONFIGURE_MINIMUM_TASK_STACK_SIZE
-.. index:: minimum task stack size
-
-.. _CONFIGURE_MINIMUM_TASK_STACK_SIZE:
-
-CONFIGURE_MINIMUM_TASK_STACK_SIZE
----------------------------------
-
-CONSTANT:
- ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is architecture-specific.
-
-DESCRIPTION:
- This configuration parameter defines the minimum stack size in bytes for
- every user task or thread in the system.
-
-NOTES:
- Adjusting this parameter should be done with caution. Examining the actual
- stack usage using the stack checker usage reporting facility is recommended
- (see also :ref:`CONFIGURE_STACK_CHECKER_ENABLED <CONFIGURE_STACK_CHECKER_ENABLED>`).
-
- This parameter can be used to lower the minimum from that recommended. This
- can be used in low memory systems to reduce memory consumption for
- stacks. However, this must be done with caution as it could increase the
- possibility of a blown task stack.
-
- This parameter can be used to increase the minimum from that
- recommended. This can be used in higher memory systems to reduce the risk
- of stack overflow without performing analysis on actual consumption.
-
- By default, this configuration parameter defines also the minimum stack
- size of POSIX threads. This can be changed with the
- :ref:`CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE <CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE>`
- configuration option.
-
- In releases before RTEMS 5.1 the ``CONFIGURE_MINIMUM_TASK_STACK_SIZE`` was
- used to define the default value of :ref:`CONFIGURE_INTERRUPT_STACK_SIZE
- <CONFIGURE_INTERRUPT_STACK_SIZE>`.
-
-.. index:: CONFIGURE_STACK_CHECKER_ENABLED
-
-.. _CONFIGURE_STACK_CHECKER_ENABLED:
-
-CONFIGURE_STACK_CHECKER_ENABLED
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_STACK_CHECKER_ENABLED``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default, and thus stack checking is disabled.
-
-DESCRIPTION:
- This configuration parameter is defined when the application wishes to
- enable run-time stack bounds checking.
-
-NOTES:
- In 4.9 and older, this configuration parameter was named ``STACK_CHECKER_ON``.
-
- This increases the time required to create tasks as well as adding overhead
- to each context switch.
-
-.. index:: CONFIGURE_TICKS_PER_TIMESLICE
-.. index:: ticks per timeslice
-
-.. _CONFIGURE_TICKS_PER_TIMESLICE:
-
-CONFIGURE_TICKS_PER_TIMESLICE
------------------------------
-
-CONSTANT:
- ``CONFIGURE_TICKS_PER_TIMESLICE``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 50.
-
-DESCRIPTION:
- This configuration parameter specifies the length of the timeslice quantum
- in ticks for each task.
-
-NOTES:
- This configuration parameter has no impact if the Clock Tick Device driver
- is not configured.
-
-.. index:: CONFIGURE_UNIFIED_WORK_AREAS
-.. index:: unified work areas
-.. index:: separate work areas
-.. index:: RTEMS Workspace
-.. index:: C Program Heap
-
-.. _CONFIGURE_UNIFIED_WORK_AREAS:
-
-CONFIGURE_UNIFIED_WORK_AREAS
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_UNIFIED_WORK_AREAS``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default, which specifies that the C Program Heap and
- the RTEMS Workspace will be separate.
-
-DESCRIPTION:
- When defined, the C Program Heap and the RTEMS Workspace will be one pool
- of memory.
-
- When not defined, there will be separate memory pools for the RTEMS
- Workspace and C Program Heap.
-
-NOTES:
- Having separate pools does have some advantages in the event a task blows a
- stack or writes outside its memory area. However, in low memory systems the
- overhead of the two pools plus the potential for unused memory in either
- pool is very undesirable.
-
- In high memory environments, this is desirable when you want to use the
- RTEMS "unlimited" objects option. You will be able to create objects until
- you run out of all available memory rather then just until you run out of
- RTEMS Workspace.
-
-.. _CONFIGURE_UNLIMITED_ALLOCATION_SIZE:
-
-CONFIGURE_UNLIMITED_ALLOCATION_SIZE
------------------------------------
-
-CONSTANT:
- ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- If not defined and ``CONFIGURE_UNLIMITED_OBJECTS`` is defined, the default
- value is eight (8).
-
-DESCRIPTION:
- ``CONFIGURE_UNLIMITED_ALLOCATION_SIZE`` provides an allocation size to use
- for ``rtems_resource_unlimited`` when using
- ``CONFIGURE_UNLIMITED_OBJECTS``.
-
-NOTES:
- By allowing users to declare all resources as being unlimited the user can
- avoid identifying and limiting the resources
- used. ``CONFIGURE_UNLIMITED_OBJECTS`` does not support varying the
- allocation sizes for different objects; users who want that much control
- can define the ``rtems_resource_unlimited`` macros themselves.
-
-.. index:: CONFIGURE_UNLIMITED_OBJECTS
-
-.. _CONFIGURE_UNLIMITED_OBJECTS:
-
-CONFIGURE_UNLIMITED_OBJECTS
----------------------------
-
-CONSTANT:
- ``CONFIGURE_UNLIMITED_OBJECTS``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_UNLIMITED_OBJECTS`` enables ``rtems_resource_unlimited`` mode
- for Classic API and POSIX API objects that do not already have a specific
- maximum limit defined.
-
-NOTES:
- When using unlimited objects, it is common practice to also specify
- ``CONFIGURE_UNIFIED_WORK_AREAS`` so the system operates with a single pool
- of memory for both RTEMS and application memory allocations.
-
-.. index:: CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
-
-.. _CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION:
-
-CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION
----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_VERBOSE_SYSTEM_INITIALIZATION``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default, and thus the system initialization is
- quiet.
-
-DESCRIPTION:
- This configuration option enables to print some information during system
- initialization.
-
-NOTES:
- You may use this feature to debug system initialization issues. The
- printk() function is used to print the information.
-
-.. index:: CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
-.. index:: clear C Program Heap
-.. index:: clear RTEMS Workspace
-.. index:: zero C Program Heap
-.. index:: zero RTEMS Workspace
-
-.. _CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY:
-
-CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_ZERO_WORKSPACE_AUTOMATICALLY``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default. The default is *NOT* to zero out the RTEMS
- Workspace or C Program Heap.
-
-DESCRIPTION:
- This macro indicates whether RTEMS should zero the RTEMS Workspace and C
- Program Heap as part of its initialization. If defined, the memory regions
- are zeroed. Otherwise, they are not.
-
-NOTES:
- Zeroing memory can add significantly to system boot time. It is not
- necessary for RTEMS but is often assumed by support libraries. In case
- :ref:`CONFIGURE_DIRTY_MEMORY` is also defined, then the memory is first
- dirtied and then zeroed.
-
-Classic API Configuration
-=========================
-
-This section defines the Classic API related system configuration parameters
-supported by ``<rtems/confdefs.h>``.
-
-.. index:: CONFIGURE_MAXIMUM_TASKS
-
-.. _CONFIGURE_MAXIMUM_TASKS:
-
-CONFIGURE_MAXIMUM_TASKS
------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_TASKS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is ``0``.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_TASKS`` is the maximum number of Classic API Tasks that
- can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
- The calculations for the required memory in the RTEMS Workspace for tasks
- assume that each task has a minimum stack size and has floating point
- support enabled. The configuration parameter
- ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify task stack requirements
- *ABOVE* the minimum size required. See :ref:`Reserve Task/Thread Stack
- Memory Above Minimum` for more information about
- ``CONFIGURE_EXTRA_TASK_STACKS``.
-
- The maximum number of POSIX threads is specified by
- :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
-
- A future enhancement to ``<rtems/confdefs.h>`` could be to eliminate the
- assumption that all tasks have floating point enabled. This would require
- the addition of a new configuration parameter to specify the number of
- tasks which enable floating point support.
-
-.. COMMENT: XXX - Add xref to CONFIGURE_MAXIMUM_POSIX_THREADS.
-
-.. index:: CONFIGURE_MAXIMUM_TIMERS
-
-.. _CONFIGURE_MAXIMUM_TIMERS:
-
-CONFIGURE_MAXIMUM_TIMERS
-------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_TIMERS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_TIMERS`` is the maximum number of Classic API Timers
- that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_SEMAPHORES
-
-.. _CONFIGURE_MAXIMUM_SEMAPHORES:
-
-CONFIGURE_MAXIMUM_SEMAPHORES
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_SEMAPHORES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_SEMAPHORES`` is the maximum number of Classic API
- Semaphores that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
- In SMP configurations, the size of a Semaphore Control Block depends on the
- scheduler count (see :ref:`ConfigurationSchedulerTable`). The semaphores
- using the :ref:`MrsP` need a ceiling priority per scheduler.
-
-.. index:: CONFIGURE_MAXIMUM_MESSAGE_QUEUES
-
-.. _CONFIGURE_MAXIMUM_MESSAGE_QUEUES:
-
-CONFIGURE_MAXIMUM_MESSAGE_QUEUES
---------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_MESSAGE_QUEUES`` is the maximum number of Classic API
- Message Queues that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_BARRIERS
-
-.. _CONFIGURE_MAXIMUM_BARRIERS:
-
-CONFIGURE_MAXIMUM_BARRIERS
---------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_BARRIERS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_BARRIERS`` is the maximum number of Classic API
- Barriers that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_PERIODS
-
-.. _CONFIGURE_MAXIMUM_PERIODS:
-
-CONFIGURE_MAXIMUM_PERIODS
--------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PERIODS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_PERIODS`` is the maximum number of Classic API Periods
- that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_PARTITIONS
-
-.. _CONFIGURE_MAXIMUM_PARTITIONS:
-
-CONFIGURE_MAXIMUM_PARTITIONS
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PARTITIONS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_PARTITIONS`` is the maximum number of Classic API
- Partitions that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_REGIONS
-
-.. _CONFIGURE_MAXIMUM_REGIONS:
-
-CONFIGURE_MAXIMUM_REGIONS
--------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_REGIONS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_REGIONS`` is the maximum number of Classic API Regions
- that can be concurrently active.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_MAXIMUM_PORTS
-
-.. _CONFIGURE_MAXIMUM_PORTS:
-
-CONFIGURE_MAXIMUM_PORTS
------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_PORTS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_PORTS`` is the maximum number of Classic API Ports that
- can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_USER_EXTENSIONS
-
-.. _CONFIGURE_MAXIMUM_USER_EXTENSIONS:
-
-CONFIGURE_MAXIMUM_USER_EXTENSIONS
----------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_USER_EXTENSIONS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_USER_EXTENSIONS`` is the maximum number of Classic API
- User Extensions that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-Classic API Initialization Tasks Table Configuration
-====================================================
-
-The ``<rtems/confdefs.h>`` configuration system can automatically generate an
-Initialization Tasks Table named ``Initialization_tasks`` with a single entry.
-The following parameters control the generation of that table.
-
-.. index:: CONFIGURE_RTEMS_INIT_TASKS_TABLE
-
-.. _CONFIGURE_RTEMS_INIT_TASKS_TABLE:
-
-CONFIGURE_RTEMS_INIT_TASKS_TABLE
---------------------------------
-
-CONSTANT:
- ``CONFIGURE_RTEMS_INIT_TASKS_TABLE``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_RTEMS_INIT_TASKS_TABLE`` is defined if the user wishes to use a
- Classic RTEMS API Initialization Task Table. The table built by
- ``<rtems/confdefs.h>`` specifies the parameters for a single task. This is
- sufficient for applications which initialization the system from a single
- task.
-
- By default, this field is not defined as the user MUST select their own API
- for initialization tasks.
-
-NOTES:
- The application may choose to use the initialization tasks or threads table
- from another API.
-
- A compile time error will be generated if the user does not configure any
- initialization tasks or threads.
-
-.. index:: CONFIGURE_INIT_TASK_ENTRY_POINT
-
-.. _CONFIGURE_INIT_TASK_ENTRY_POINT:
-
-CONFIGURE_INIT_TASK_ENTRY_POINT
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_ENTRY_POINT``
-
-DATA TYPE:
- Task entry function pointer (``rtems_task_entry``).
-
-RANGE:
- Valid task entry function pointer.
-
-DEFAULT VALUE:
- The default value is ``Init``.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_ENTRY_POINT`` is the entry point (a.k.a. function
- name) of the single initialization task defined by the Classic API
- Initialization Tasks Table.
-
-NOTES:
- The user must implement the function ``Init`` or the function name provided
- in this configuration parameter.
-
-.. index:: CONFIGURE_INIT_TASK_NAME
-
-.. _CONFIGURE_INIT_TASK_NAME:
-
-CONFIGURE_INIT_TASK_NAME
-------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_NAME``
-
-DATA TYPE:
- RTEMS Name (``rtems_name``).
-
-RANGE:
- Any value.
-
-DEFAULT VALUE:
- The default value is ``rtems_build_name( 'U', 'I', '1', ' ' )``.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_NAME`` is the name of the single initialization task
- defined by the Classic API Initialization Tasks Table.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_INIT_TASK_STACK_SIZE
-
-.. _CONFIGURE_INIT_TASK_STACK_SIZE:
-
-CONFIGURE_INIT_TASK_STACK_SIZE
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is RTEMS_MINIMUM_STACK_SIZE.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_STACK_SIZE`` is the stack size of the single
- initialization task defined by the Classic API Initialization Tasks Table.
-
-NOTES:
- If the stack size specified is greater than the configured minimum, it must
- be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``. See :ref:`Reserve
- Task/Thread Stack Memory Above Minimum` for more information about
- ``CONFIGURE_EXTRA_TASK_STACKS``.
-
-.. index:: CONFIGURE_INIT_TASK_PRIORITY
-
-.. _CONFIGURE_INIT_TASK_PRIORITY:
-
-CONFIGURE_INIT_TASK_PRIORITY
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_PRIORITY``
-
-DATA TYPE:
- RTEMS Task Priority (``rtems_task_priority``).
-
-RANGE:
- One (1) to the maximum user priority value of the scheduler.
-
-DEFAULT VALUE:
- The default value is 1, which is the highest priority in the Classic API.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_PRIORITY`` is the initial priority of the single
- initialization task defined by the Classic API Initialization Tasks Table.
-
-NOTES:
- None.
-
-
-.. index:: CONFIGURE_INIT_TASK_ATTRIBUTES
-
-.. _CONFIGURE_INIT_TASK_ATTRIBUTES:
-
-CONFIGURE_INIT_TASK_ATTRIBUTES
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_ATTRIBUTES``
-
-DATA TYPE:
- RTEMS Attributes (``rtems_attribute``).
-
-RANGE:
- Valid task attribute sets.
-
-DEFAULT VALUE:
- The default value is ``RTEMS_DEFAULT_ATTRIBUTES``.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_ATTRIBUTES`` is the task attributes of the single
- initialization task defined by the Classic API Initialization Tasks Table.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_INIT_TASK_INITIAL_MODES
-
-.. _CONFIGURE_INIT_TASK_INITIAL_MODES:
-
-CONFIGURE_INIT_TASK_INITIAL_MODES
----------------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_INITIAL_MODES``
-
-DATA TYPE:
- RTEMS Mode (``rtems_mode``).
-
-RANGE:
- Valid task mode sets.
-
-DEFAULT VALUE:
- The default value is ``RTEMS_NO_PREEMPT``.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_INITIAL_MODES`` is the initial execution mode of the
- single initialization task defined by the Classic API Initialization Tasks
- Table.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_INIT_TASK_ARGUMENTS
-
-.. _CONFIGURE_INIT_TASK_ARGUMENTS:
-
-CONFIGURE_INIT_TASK_ARGUMENTS
------------------------------
-
-CONSTANT:
- ``CONFIGURE_INIT_TASK_ARGUMENTS``
-
-DATA TYPE:
- RTEMS Task Argument (``rtems_task_argument``).
-
-RANGE:
- Complete range of the type.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_INIT_TASK_ARGUMENTS`` is the task argument of the single
- initialization task defined by the Classic API Initialization Tasks Table.
-
-NOTES:
- None.
-
-POSIX API Configuration
-=======================
-
-The parameters in this section are used to configure resources for the POSIX
-API supported by RTEMS. Most POSIX API objects are available by default since
-RTEMS 5.1. The queued signals and timers are only available if RTEMS was built
-with the ``--enable-posix`` build configuration option.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_KEYS
-
-.. _CONFIGURE_MAXIMUM_POSIX_KEYS:
-
-CONFIGURE_MAXIMUM_POSIX_KEYS
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_KEYS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_KEYS`` is the maximum number of POSIX API Keys
- that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
-
-.. _CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
-
-CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS
----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is
- :ref:`CONFIGURE_MAXIMUM_POSIX_KEYS <CONFIGURE_MAXIMUM_POSIX_KEYS>` *
- :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>` +
- :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS <CONFIGURE_MAXIMUM_POSIX_THREADS>`.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_KEY_VALUE_PAIRS`` is the maximum number of key
- value pairs used by POSIX API Keys that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
- A key value pair is created by :c:func:`pthread_setspecific` if the value
- is not :c:macro:`NULL`, otherwise it is deleted.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
-
-.. _CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES:
-
-CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUES`` is the maximum number of POSIX
- API Message Queues that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
-
-.. _CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS:
-
-CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_QUEUED_SIGNALS`` is the maximum number of POSIX
- API Queued Signals that can be concurrently active.
-
-NOTES:
- Unlimited objects are not available for queued signals.
-
- Queued signals are only available if RTEMS was built with the
- ``--enable-posix`` build configuration option.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
-
-.. _CONFIGURE_MAXIMUM_POSIX_SEMAPHORES:
-
-CONFIGURE_MAXIMUM_POSIX_SEMAPHORES
-----------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_SEMAPHORES`` is the maximum number of POSIX API
- Named Semaphores that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
- Named semaphores are created with ``sem_open()``. Semaphores initialized
- with ``sem_init()`` are not affected by this configuration option since the
- storage space for these semaphores is user-provided.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_TIMERS
-
-.. _CONFIGURE_MAXIMUM_POSIX_TIMERS:
-
-CONFIGURE_MAXIMUM_POSIX_TIMERS
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_TIMERS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_TIMERS`` is the maximum number of POSIX API
- Timers that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
- Timers are only available if RTEMS was built with the
- ``--enable-posix`` build configuration option.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_THREADS
-
-.. _CONFIGURE_MAXIMUM_POSIX_THREADS:
-
-CONFIGURE_MAXIMUM_POSIX_THREADS
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_POSIX_THREADS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_POSIX_THREADS`` is the maximum number of POSIX API
- Threads that can be concurrently active.
-
-NOTES:
- This object class can be configured in unlimited allocation mode.
-
- This calculations for the required memory in the RTEMS Workspace for
- threads assume that each thread has a minimum stack size and has floating
- point support enabled. The configuration parameter
- ``CONFIGURE_EXTRA_TASK_STACKS`` is used to specify thread stack
- requirements *ABOVE* the minimum size required. See :ref:`Reserve
- Task/Thread Stack Memory Above Minimum` for more information about
- ``CONFIGURE_EXTRA_TASK_STACKS``.
-
- The maximum number of Classic API Tasks is specified by
- :ref:`CONFIGURE_MAXIMUM_TASKS <CONFIGURE_MAXIMUM_TASKS>`.
-
- All POSIX threads have floating point enabled.
-
-.. index:: CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
-.. index:: minimum POSIX thread stack size
-
-.. _CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE:
-
-CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE
------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_MINIMUM_POSIX_THREAD_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is two times the value of
- :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE <CONFIGURE_MINIMUM_TASK_STACK_SIZE>`.
-
-DESCRIPTION:
- This configuration parameter defines the minimum stack size in bytes for
- every POSIX thread in the system.
-
-NOTES:
- None.
-
-POSIX Initialization Threads Table Configuration
-================================================
-
-The ``<rtems/confdefs.h>`` configuration system can automatically generate a
-POSIX Initialization Threads Table named ``POSIX_Initialization_threads`` with
-a single entry. The following parameters control the generation of that table.
-
-.. index:: CONFIGURE_POSIX_INIT_THREAD_TABLE
-
-.. _CONFIGURE_POSIX_INIT_THREAD_TABLE:
-
-CONFIGURE_POSIX_INIT_THREAD_TABLE
----------------------------------
-
-CONSTANT:
-
- ``CONFIGURE_POSIX_INIT_THREAD_TABLE``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This field is not defined by default, as the user MUST select their own API
- for initialization tasks.
-
-DESCRIPTION:
- ``CONFIGURE_POSIX_INIT_THREAD_TABLE`` is defined if the user wishes to use
- a POSIX API Initialization Threads Table. The table built by
- ``<rtems/confdefs.h>`` specifies the parameters for a single thread. This
- is sufficient for applications which initialization the system from a
- single task.
-
- By default, this field is not defined as the user MUST select their own API
- for initialization tasks.
-
-NOTES:
- The application may choose to use the initialization tasks or threads table
- from another API.
-
- A compile time error will be generated if the user does not configure any
- initialization tasks or threads.
-
-.. index:: CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
-
-.. _CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT:
-
-CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT
----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT``
-
-DATA TYPE:
- POSIX thread function pointer (``void *(*entry_point)(void *)``).
-
-RANGE:
- Undefined or a valid POSIX thread function pointer.
-
-DEFAULT VALUE:
- The default value is ``POSIX_Init``.
-
-DESCRIPTION:
- ``CONFIGURE_POSIX_INIT_THREAD_ENTRY_POINT`` is the entry point
- (a.k.a. function name) of the single initialization thread defined by the
- POSIX API Initialization Threads Table.
-
-NOTES:
- The user must implement the function ``POSIX_Init`` or the function name
- provided in this configuration parameter.
-
-.. index:: CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
-
-.. _CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE:
-
-CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 2 \* RTEMS_MINIMUM_STACK_SIZE.
-
-DESCRIPTION:
- ``CONFIGURE_POSIX_INIT_THREAD_STACK_SIZE`` is the stack size of the single
- initialization thread defined by the POSIX API Initialization Threads
- Table.
-
-NOTES:
- If the stack size specified is greater than the configured minimum, it must
- be accounted for in ``CONFIGURE_EXTRA_TASK_STACKS``. See :ref:`Reserve
- Task/Thread Stack Memory Above Minimum` for more information about
- ``CONFIGURE_EXTRA_TASK_STACKS``.
-
-Configuring Custom Task Stack Allocation
-========================================
-
-RTEMS allows the application or BSP to define its own allocation and
-deallocation methods for task stacks. This can be used to place task stacks in
-special areas of memory or to utilize a Memory Management Unit so that stack
-overflows are detected in hardware.
-
-.. index:: CONFIGURE_TASK_STACK_ALLOCATOR_INIT
-
-.. _CONFIGURE_TASK_STACK_ALLOCATOR_INIT:
-
-CONFIGURE_TASK_STACK_ALLOCATOR_INIT
------------------------------------
-
-CONSTANT:
- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
-
-DATA TYPE:
- Function pointer.
-
-RANGE:
- Undefined, NULL or valid function pointer.
-
-DEFAULT VALUE:
- The default value is NULL, which indicates that task stacks will be
- allocated from the RTEMS Workspace.
-
-DESCRIPTION:
- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT`` configures the initialization
- method for an application or BSP specific task stack allocation
- implementation.
-
-NOTES:
- A correctly configured system must configure the following to be consistent:
-
-- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
-
-- ``CONFIGURE_TASK_STACK_ALLOCATOR``
-
-- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
-
-.. index:: CONFIGURE_TASK_STACK_ALLOCATOR
-.. index:: task stack allocator
-
-.. _CONFIGURE_TASK_STACK_ALLOCATOR:
-
-CONFIGURE_TASK_STACK_ALLOCATOR
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_TASK_STACK_ALLOCATOR``
-
-DATA TYPE:
- Function pointer.
-
-RANGE:
- Undefined or valid function pointer.
-
-DEFAULT VALUE:
- The default value is ``_Workspace_Allocate``, which indicates that task
- stacks will be allocated from the RTEMS Workspace.
-
-DESCRIPTION:
- ``CONFIGURE_TASK_STACK_ALLOCATOR`` may point to a user provided routine to
- allocate task stacks.
-
-NOTES:
- A correctly configured system must configure the following to be consistent:
-
-- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
-
-- ``CONFIGURE_TASK_STACK_ALLOCATOR``
-
-- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
-
-.. index:: CONFIGURE_TASK_STACK_DEALLOCATOR
-.. index:: task stack deallocator
-
-.. _CONFIGURE_TASK_STACK_DEALLOCATOR:
-
-CONFIGURE_TASK_STACK_DEALLOCATOR
---------------------------------
-
-CONSTANT:
- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
-
-DATA TYPE:
- Function pointer.
-
-RANGE:
- Undefined or valid function pointer.
-
-DEFAULT VALUE:
- The default value is ``_Workspace_Free``, which indicates that task stacks
- will be allocated from the RTEMS Workspace.
-
-DESCRIPTION:
- ``CONFIGURE_TASK_STACK_DEALLOCATOR`` may point to a user provided routine
- to free task stacks.
-
-NOTES:
- A correctly configured system must configure the following to be consistent:
-
-- ``CONFIGURE_TASK_STACK_ALLOCATOR_INIT``
-
-- ``CONFIGURE_TASK_STACK_ALLOCATOR``
-
-- ``CONFIGURE_TASK_STACK_DEALLOCATOR``
-
-Configuring Memory for Classic API Message Buffers
-==================================================
-
-This section describes the configuration parameters related to specifying the
-amount of memory reserved for Classic API Message Buffers.
-
-.. index:: CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
-.. index:: memory for a single message queue's buffers
-
-.. _CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE:
-
-CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE
------------------------------------
-
-CONSTANT:
- ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is None.
-
-DESCRIPTION:
- This is a helper macro which is used to assist in computing the total
- amount of memory required for message buffers. Each message queue will
- have its own configuration with maximum message size and maximum number of
- pending messages.
-
- The interface for this macro is as follows:
-
- .. code-block:: c
-
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(max_messages, size_per)
-
- Where ``max_messages`` is the maximum number of pending messages and
- ``size_per`` is the size in bytes of the user message.
-
-NOTES:
-
- This macro is only used in support of ``CONFIGURE_MESSAGE_BUFFER_MEMORY``.
-
-.. index:: CONFIGURE_MESSAGE_BUFFER_MEMORY
-.. index:: configure message queue buffer memory
-
-.. _CONFIGURE_MESSAGE_BUFFER_MEMORY:
-
-CONFIGURE_MESSAGE_BUFFER_MEMORY
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_MESSAGE_BUFFER_MEMORY``
-
-DATA TYPE:
- integer summation macro
-
-RANGE:
- undefined (zero) or calculation resulting in a positive integer
-
-DEFAULT VALUE:
- This is not defined by default, and zero (0) memory is reserved.
-
-DESCRIPTION:
- This macro is set to the number of bytes the application requires to be
- reserved for pending Classic API Message Queue buffers.
-
-NOTES:
- The following illustrates how the help macro
- ``CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE`` can be used to assist in
- calculating the message buffer memory required. In this example, there are
- two message queues used in this application. The first message queue has
- maximum of 24 pending messages with the message structure defined by the
- type ``one_message_type``. The other message queue has maximum of 500
- pending messages with the message structure defined by the type
- ``other_message_type``.
-
- .. code-block:: c
-
- #define CONFIGURE_MESSAGE_BUFFER_MEMORY \
- (CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
- 24, sizeof(one_message_type) \
- ) + \
- CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE( \
- 500, sizeof(other_message_type) \
- )
-
-Filesystem Configuration
-========================
-
-By default, the In-Memory Filesystem (IMFS) is used as the base filesystem (also
-known as root filesystem). In order to save some memory for your application,
-you can disable the filesystem support with the
-:ref:`CONFIGURE_APPLICATION_DISABLE_FILESYSTEM` configuration option.
-Alternatively, you can strip down the features of the base filesystem with the
-:ref:`CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM` and
-:ref:`CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM` configuration options. These
-three configuration options are mutually exclusive. They are intended for an
-advanced application configuration.
-
-Features of the IMFS can be disabled and enabled with the following
-configuration options:
-
-* :ref:`CONFIGURE_IMFS_DISABLE_CHMOD`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_CHOWN`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_LINK`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_MKNOD_FILE`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_MOUNT`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_READDIR`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_READLINK`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_RENAME`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_RMNOD`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_SYMLINK`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_UNMOUNT`
-
-* :ref:`CONFIGURE_IMFS_DISABLE_UTIME`
-
-* :ref:`CONFIGURE_IMFS_ENABLE_MKFIFO`
-
-.. index:: CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
-
-.. _CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM:
-
-CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default. If no other root file system configuration
- parameters are specified, the IMFS will be used as the root file system.
-
-DESCRIPTION:
- This configuration parameter is defined if the application wishes to use
- the device-only filesytem as the root file system.
-
-NOTES:
- The device-only filesystem supports only device nodes and is smaller in
- executable code size than the full IMFS and miniIMFS.
-
- The devFS is comparable in functionality to the pseudo-filesystem name
- space provided before RTEMS release 4.5.0.
-
-.. index:: CONFIGURE_MAXIMUM_DEVICES
-
-.. _CONFIGURE_MAXIMUM_DEVICES:
-
-CONFIGURE_MAXIMUM_DEVICES
--------------------------
-
-CONSTANT:
- ``CONFIGURE_MAXIMUM_DEVICES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- If ``BSP_MAXIMUM_DEVICES`` is defined, then the default value is
- ``BSP_MAXIMUM_DEVICES``, otherwise the default value is 4.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_DEVICES`` is defined to the number of individual
- devices that may be registered in the device file system (devFS).
-
-NOTES:
- This option is specific to the device file system (devFS) and should not be
- confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option. This parameter
- only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
- ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
-
-.. index:: CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
-
-.. _CONFIGURE_APPLICATION_DISABLE_FILESYSTEM:
-
-CONFIGURE_APPLICATION_DISABLE_FILESYSTEM
-----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_DISABLE_FILESYSTEM``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default. If no other root file system configuration
- parameters are specified, the IMFS will be used as the root file system.
-
-DESCRIPTION:
- This configuration parameter is defined if the application dose not intend
- to use any kind of filesystem support. This include the device
- infrastructure necessary to support ``printf()``.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
-
-.. _CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM:
-
-CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM
------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_USE_MINIIMFS_AS_BASE_FILESYSTEM``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the following
- configuration options will be defined as well
-
- - ``CONFIGURE_IMFS_DISABLE_CHMOD``,
-
- - ``CONFIGURE_IMFS_DISABLE_CHOWN``,
-
- - ``CONFIGURE_IMFS_DISABLE_UTIME``,
-
- - ``CONFIGURE_IMFS_DISABLE_LINK``,
-
- - ``CONFIGURE_IMFS_DISABLE_SYMLINK``,
-
- - ``CONFIGURE_IMFS_DISABLE_READLINK``,
-
- - ``CONFIGURE_IMFS_DISABLE_RENAME``, and
-
- - ``CONFIGURE_IMFS_DISABLE_UNMOUNT``.
-
-.. index:: CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
-
-.. _CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK:
-
-CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_MEMFILE_BYTES_PER_BLOCK``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Valid values for this configuration parameter are a power of two (2)
- between 16 and 512 inclusive. In other words, valid values are 16, 32, 64,
- 128, 256,and 512.
-
-DEFAULT VALUE:
- The default IMFS block size is 128 bytes.
-
-DESCRIPTION:
- This configuration parameter specifies the block size for in-memory files
- managed by the IMFS. The configured block size has two impacts. The first
- is the average amount of unused memory in the last block of each file. For
- example, when the block size is 512, on average one-half of the last block
- of each file will remain unused and the memory is wasted. In contrast, when
- the block size is 16, the average unused memory per file is only 8
- bytes. However, it requires more allocations for the same size file and
- thus more overhead per block for the dynamic memory management.
-
- Second, the block size has an impact on the maximum size file that can be
- stored in the IMFS. With smaller block size, the maximum file size is
- correspondingly smaller. The following shows the maximum file size possible
- based on the configured block size:
-
- - when the block size is 16 bytes, the maximum file size is 1,328 bytes.
-
- - when the block size is 32 bytes, the maximum file size is 18,656 bytes.
-
- - when the block size is 64 bytes, the maximum file size is 279,488 bytes.
-
- - when the block size is 128 bytes, the maximum file size is 4,329,344 bytes.
-
- - when the block size is 256 bytes, the maximum file size is 68,173,568 bytes.
-
- - when the block size is 512 bytes, the maximum file size is 1,082,195,456
- bytes.
-
-.. index:: CONFIGURE_IMFS_DISABLE_CHOWN
-
-.. _CONFIGURE_IMFS_DISABLE_CHOWN:
-
-CONFIGURE_IMFS_DISABLE_CHOWN
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_CHOWN``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to change
- the owner is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_CHMOD
-
-.. _CONFIGURE_IMFS_DISABLE_CHMOD:
-
-CONFIGURE_IMFS_DISABLE_CHMOD
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_CHMOD``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to change
- the mode is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_UTIME
-
-.. _CONFIGURE_IMFS_DISABLE_UTIME:
-
-CONFIGURE_IMFS_DISABLE_UTIME
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_UTIME``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to change
- times is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_LINK
-
-.. _CONFIGURE_IMFS_DISABLE_LINK:
-
-CONFIGURE_IMFS_DISABLE_LINK
----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_LINK``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to create
- hard links is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_SYMLINK
-
-.. _CONFIGURE_IMFS_DISABLE_SYMLINK:
-
-CONFIGURE_IMFS_DISABLE_SYMLINK
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_SYMLINK``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to create
- symbolic links is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_READLINK
-
-.. _CONFIGURE_IMFS_DISABLE_READLINK:
-
-CONFIGURE_IMFS_DISABLE_READLINK
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_READLINK``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to read
- symbolic links is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_RENAME
-
-.. _CONFIGURE_IMFS_DISABLE_RENAME:
-
-CONFIGURE_IMFS_DISABLE_RENAME
------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_RENAME``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to rename
- nodes is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_READDIR
-
-.. _CONFIGURE_IMFS_DISABLE_READDIR:
-
-CONFIGURE_IMFS_DISABLE_READDIR
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_READDIR``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to read a
- directory is disabled in the root IMFS. It is still possible to open nodes
- in a directory.
-
-.. index:: CONFIGURE_IMFS_DISABLE_MOUNT
-
-.. _CONFIGURE_IMFS_DISABLE_MOUNT:
-
-CONFIGURE_IMFS_DISABLE_MOUNT
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MOUNT``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to mount
- other file systems is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_UNMOUNT
-
-.. _CONFIGURE_IMFS_DISABLE_UNMOUNT:
-
-CONFIGURE_IMFS_DISABLE_UNMOUNT
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_UNMOUNT``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to unmount
- file systems is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_MKNOD
-
-.. _CONFIGURE_IMFS_DISABLE_MKNOD:
-
-CONFIGURE_IMFS_DISABLE_MKNOD
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MKNOD``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to make
- directories, devices, regular files and FIFOs is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_MKNOD_FILE
-
-.. _CONFIGURE_IMFS_DISABLE_MKNOD_FILE:
-
-CONFIGURE_IMFS_DISABLE_MKNOD_FILE
----------------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_MKNOD_FILE``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to make
- regular files is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_DISABLE_RMNOD
-
-.. _CONFIGURE_IMFS_DISABLE_RMNOD:
-
-CONFIGURE_IMFS_DISABLE_RMNOD
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_DISABLE_RMNOD``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to remove
- nodes is disabled in the root IMFS.
-
-.. index:: CONFIGURE_IMFS_ENABLE_MKFIFO
-
-.. _CONFIGURE_IMFS_ENABLE_MKFIFO:
-
-CONFIGURE_IMFS_ENABLE_MKFIFO
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_IMFS_ENABLE_MKFIFO``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- In case this configuration option is defined, then the support to make FIFOs
- is enabled in the root IMFS.
-
-Block Device Cache Configuration
-================================
-
-This section defines Block Device Cache (bdbuf) related configuration
-parameters.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
-
-.. _CONFIGURE_APPLICATION_NEEDS_LIBBLOCK:
-
-CONFIGURE_APPLICATION_NEEDS_LIBBLOCK
-------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_LIBBLOCK``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- Provides a Block Device Cache configuration.
-
-NOTES:
- Each option of the Block Device Cache configuration can be explicitly set
- by the user with the configuration options below. The Block Device Cache
- is used for example by the RFS and DOSFS file systems.
-
-.. index:: CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
-
-.. _CONFIGURE_BDBUF_CACHE_MEMORY_SIZE:
-
-CONFIGURE_BDBUF_CACHE_MEMORY_SIZE
----------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_CACHE_MEMORY_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 32768 bytes.
-
-DESCRIPTION:
- Size of the cache memory in bytes.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_BDBUF_BUFFER_MIN_SIZE
-
-.. _CONFIGURE_BDBUF_BUFFER_MIN_SIZE:
-
-CONFIGURE_BDBUF_BUFFER_MIN_SIZE
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_BUFFER_MIN_SIZE``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 512 bytes.
-
-DESCRIPTION:
- Defines the minimum size of a buffer in bytes.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_BDBUF_BUFFER_MAX_SIZE
-
-.. _CONFIGURE_BDBUF_BUFFER_MAX_SIZE:
-
-CONFIGURE_BDBUF_BUFFER_MAX_SIZE
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_BUFFER_MAX_SIZE``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- It must be positive and an integral multiple of the buffer minimum size.
-
-DEFAULT VALUE:
- The default value is 4096 bytes.
-
-DESCRIPTION:
- Defines the maximum size of a buffer in bytes.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_SWAPOUT_SWAP_PERIOD
-
-.. _CONFIGURE_SWAPOUT_SWAP_PERIOD:
-
-CONFIGURE_SWAPOUT_SWAP_PERIOD
------------------------------
-
-CONSTANT:
- ``CONFIGURE_SWAPOUT_SWAP_PERIOD``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 250 milliseconds.
-
-DESCRIPTION:
- Defines the swapout task swap period in milliseconds.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_SWAPOUT_BLOCK_HOLD
-
-.. _CONFIGURE_SWAPOUT_BLOCK_HOLD:
-
-CONFIGURE_SWAPOUT_BLOCK_HOLD
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_SWAPOUT_BLOCK_HOLD``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 1000 milliseconds.
-
-DESCRIPTION:
- Defines the swapout task maximum block hold time in milliseconds.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_SWAPOUT_TASK_PRIORITY
-
-.. _CONFIGURE_SWAPOUT_TASK_PRIORITY:
-
-CONFIGURE_SWAPOUT_TASK_PRIORITY
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_SWAPOUT_TASK_PRIORITY``
-
-DATA TYPE:
- Task priority (``rtems_task_priority``).
-
-RANGE:
- Valid task priority.
-
-DEFAULT VALUE:
- The default value is 15.
-
-DESCRIPTION:
- Defines the swapout task priority.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
-
-.. _CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS:
-
-CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS
--------------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- Defines the maximum blocks per read-ahead request.
-
-NOTES:
- A value of 0 disables the read-ahead task (default). The read-ahead task
- will issue speculative read transfers if a sequential access pattern is
- detected. This can improve the performance on some systems.
-
-.. index:: CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
-
-.. _CONFIGURE_BDBUF_MAX_WRITE_BLOCKS:
-
-CONFIGURE_BDBUF_MAX_WRITE_BLOCKS
---------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_MAX_WRITE_BLOCKS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 16.
-
-DESCRIPTION:
- Defines the maximum blocks per write request.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_BDBUF_TASK_STACK_SIZE
-
-.. _CONFIGURE_BDBUF_TASK_STACK_SIZE:
-
-CONFIGURE_BDBUF_TASK_STACK_SIZE
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_TASK_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is RTEMS_MINIMUM_STACK_SIZE.
-
-DESCRIPTION:
- Defines the task stack size of the Block Device Cache tasks in bytes.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
-
-.. _CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY:
-
-CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY
-----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY``
-
-DATA TYPE:
- Task priority (``rtems_task_priority``).
-
-RANGE:
- Valid task priority.
-
-DEFAULT VALUE:
- The default value is 15.
-
-DESCRIPTION:
- Defines the read-ahead task priority.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_SWAPOUT_WORKER_TASKS
-
-.. _CONFIGURE_SWAPOUT_WORKER_TASKS:
-
-CONFIGURE_SWAPOUT_WORKER_TASKS
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_SWAPOUT_WORKER_TASKS``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- The default value is 0.
-
-DESCRIPTION:
- Defines the swapout worker task count.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
-
-.. _CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY:
-
-CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_SWAPOUT_WORKER_TASK_PRIORITY``
-
-DATA TYPE:
- Task priority (``rtems_task_priority``).
-
-RANGE:
- Valid task priority.
-
-DEFAULT VALUE:
- The default value is 15.
-
-DESCRIPTION:
- Defines the swapout worker task priority.
-
-NOTES:
- None.
-
-BSP Specific Settings
-=====================
-
-This section describes BSP specific configuration settings used by
-``<rtems/confdefs.h>``. The BSP specific configuration settings are defined in
-``<bsp.h>``.
-
-.. index:: CONFIGURE_DISABLE_BSP_SETTINGS
-
-.. _CONFIGURE_DISABLE_BSP_SETTINGS:
-
-CONFIGURE_DISABLE_BSP_SETTINGS
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_DISABLE_BSP_SETTINGS``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- All BSP specific configuration settings can be disabled by the application
- with the ``CONFIGURE_DISABLE_BSP_SETTINGS`` option.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
-
-.. _CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK:
-
-CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK
-----------------------------------
-
-CONSTANT:
- ``CONFIGURE_MALLOC_BSP_SUPPORTS_SBRK``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- This configuration parameter is defined by a BSP to indicate that it does
- not allocate all available memory to the C Program Heap used by the Malloc
- Family of routines.
-
- If defined, when ``malloc()`` is unable to allocate memory, it will call
- the BSP supplied ``sbrk()`` to obtain more memory.
-
-NOTES:
- This parameter should not be defined by the application. Only the BSP knows
- how it allocates memory to the C Program Heap.
-
-.. index:: BSP_IDLE_TASK_BODY
-
-.. _BSP_IDLE_TASK_BODY:
-
-BSP_IDLE_TASK_BODY
-------------------
-
-CONSTANT:
- ``BSP_IDLE_TASK_BODY``
-
-DATA TYPE:
- Function pointer.
-
-RANGE:
- Undefined or valid function pointer.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- If ``BSP_IDLE_TASK_BODY`` is defined by the BSP and
- ``CONFIGURE_IDLE_TASK_BODY`` is not defined by the application, then this
- BSP specific idle task body will be used.
-
-NOTES:
- As it has knowledge of the specific CPU model, system controller logic, and
- peripheral buses, a BSP specific IDLE task may be capable of turning
- components off to save power during extended periods of no task activity
-
-.. index:: BSP_IDLE_TASK_STACK_SIZE
-
-.. _BSP_IDLE_TASK_STACK_SIZE:
-
-BSP_IDLE_TASK_STACK_SIZE
-------------------------
-
-CONSTANT:
- ``BSP_IDLE_TASK_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Undefined or positive.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- If ``BSP_IDLE_TASK_STACK_SIZE`` is defined by the BSP and
- ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is not defined by the application, then
- this BSP suggested idle task stack size will be used.
-
-NOTES:
- The order of precedence for configuring the IDLE task stack size is:
-
- - RTEMS default minimum stack size.
-
- - If defined, then ``CONFIGURE_MINIMUM_TASK_STACK_SIZE``.
-
- - If defined, then the BSP specific ``BSP_IDLE_TASK_SIZE``.
-
- - If defined, then the application specified ``CONFIGURE_IDLE_TASK_SIZE``.
-
-.. COMMENT: XXX - add cross references to other related values.
-
-.. index:: BSP_INITIAL_EXTENSION
-
-.. _BSP_INITIAL_EXTENSION:
-
-BSP_INITIAL_EXTENSION
----------------------
-
-CONSTANT:
- ``BSP_INITIAL_EXTENSION``
-
-DATA TYPE:
- List of user extension initializers (``rtems_extensions_table``).
-
-RANGE:
- Undefined or a list of user extension initializers.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- If ``BSP_INITIAL_EXTENSION`` is defined by the BSP, then this BSP specific
- initial extension will be placed as the last entry in the initial extension
- table.
-
-NOTES:
- None.
-
-.. index:: BSP_INTERRUPT_STACK_SIZE
-
-.. _BSP_INTERRUPT_STACK_SIZE:
-
-BSP_INTERRUPT_STACK_SIZE
-------------------------
-
-CONSTANT:
- ``BSP_INTERRUPT_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Undefined or positive.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- If ``BSP_INTERRUPT_STACK_SIZE`` is defined by the BSP and
- ``CONFIGURE_INTERRUPT_STACK_SIZE`` is not defined by the application, then
- this BSP specific interrupt stack size will be used.
-
-NOTES:
- None.
-
-.. index:: BSP_MAXIMUM_DEVICES
-
-.. _BSP_MAXIMUM_DEVICES:
-
-BSP_MAXIMUM_DEVICES
--------------------
-
-CONSTANT:
- ``BSP_MAXIMUM_DEVICES``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Undefined or positive.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- If ``BSP_MAXIMUM_DEVICES`` is defined by the BSP and
- ``CONFIGURE_MAXIMUM_DEVICES`` is not defined by the application, then this
- BSP specific maximum device count will be used.
-
-NOTES:
- This option is specific to the device file system (devFS) and should not be
- confused with the ``CONFIGURE_MAXIMUM_DRIVERS`` option. This parameter
- only impacts the devFS and thus is only used by ``<rtems/confdefs.h>`` when
- ``CONFIGURE_USE_DEVFS_AS_BASE_FILESYSTEM`` is specified.
-
-.. index:: CONFIGURE_BSP_PREREQUISITE_DRIVERS
-
-.. _CONFIGURE_BSP_PREREQUISITE_DRIVERS:
-
-CONFIGURE_BSP_PREREQUISITE_DRIVERS
-----------------------------------
-
-CONSTANT:
- ``CONFIGURE_BSP_PREREQUISITE_DRIVERS``
-
-DATA TYPE:
- List of device driver initializers (``rtems_driver_address_table``).
-
-RANGE:
- Undefined or array of device drivers.
-
-DEFAULT VALUE:
- This option is BSP specific.
-
-DESCRIPTION:
- ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is defined if the BSP has device
- drivers it needs to include in the Device Driver Table. This should be
- defined to the set of device driver entries that will be placed in the
- table at the *FRONT* of the Device Driver Table and initialized before any
- other drivers *INCLUDING* any application prerequisite drivers.
-
-NOTES:
- ``CONFIGURE_BSP_PREREQUISITE_DRIVERS`` is typically used by BSPs to
- configure common infrastructure such as bus controllers or probe for
- devices.
-
-Idle Task Configuration
-=======================
-
-This section defines the IDLE task related configuration parameters supported
-by ``<rtems/confdefs.h>``.
-
-.. index:: CONFIGURE_IDLE_TASK_BODY
-
-.. _CONFIGURE_IDLE_TASK_BODY:
-
-CONFIGURE_IDLE_TASK_BODY
-------------------------
-
-CONSTANT:
- ``CONFIGURE_IDLE_TASK_BODY``
-
-DATA TYPE:
- Function pointer.
-
-RANGE:
- Undefined or valid function pointer.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_IDLE_TASK_BODY`` is set to the function name corresponding to
- the application specific IDLE thread body. If not specified, the BSP or
- RTEMS default IDLE thread body will be used.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_IDLE_TASK_STACK_SIZE
-
-.. _CONFIGURE_IDLE_TASK_STACK_SIZE:
-
-CONFIGURE_IDLE_TASK_STACK_SIZE
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_IDLE_TASK_STACK_SIZE``
-
-DATA TYPE:
- Unsigned integer (``size_t``).
-
-RANGE:
- Undefined or positive.
-
-DEFAULT VALUE:
- The default value is RTEMS_MINIMUM_STACK_SIZE.
-
-DESCRIPTION:
- ``CONFIGURE_IDLE_TASK_STACK_SIZE`` is set to the desired stack size for the
- IDLE task.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
-
-.. _CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION:
-
-CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION
--------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default, the user is assumed to provide one or more
- initialization tasks.
-
-DESCRIPTION:
- ``CONFIGURE_IDLE_TASK_INITIALIZES_APPLICATION`` is set to indicate that the
- user has configured *NO* user initialization tasks or threads and that the
- user provided IDLE task will perform application initialization and then
- transform itself into an IDLE task.
-
-NOTES:
- If you use this option be careful, the user IDLE task *CANNOT* block at all
- during the initialization sequence. Further, once application
- initialization is complete, it must make itself preemptible and enter an
- IDLE body loop.
-
- The IDLE task must run at the lowest priority of all tasks in the system.
-
-General Scheduler Configuration
-===============================
-
-This section defines the configuration parameters related to selecting a
-scheduling algorithm for an application. A scheduler configuration is optional
-and only necessary in very specific circumstances. A normal application
-configuration does not need any of the configuration options described in this
-section. By default, the :ref:`Deterministic Priority Scheduler
-<SchedulerPriority>` algorithm is used in uniprocessor configurations. In case
-SMP is enabled and the configured maximum processors
-(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`) is greater
-than one, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
-<SchedulerSMPEDF>` is selected as the default scheduler algorithm.
-
-For the :ref:`schedulers built into
-RTEMS <SchedulingConcepts>`, the configuration is straightforward. All that is
-required is to define the configuration macro which specifies which scheduler
-you want for in your application.
-
-The pluggable scheduler interface also enables the user to provide their own
-scheduling algorithm. If you choose to do this, you must define multiple
-configuration macros.
-
-.. index:: CONFIGURE_SCHEDULER_CBS
-
-.. _CONFIGURE_SCHEDULER_CBS:
-
-CONFIGURE_SCHEDULER_CBS
------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_CBS``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Constant Bandwidth Server (CBS) Scheduler
- <SchedulerCBS>` algorithm is made available to the application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for exactly one processor.
-
-.. index:: CONFIGURE_SCHEDULER_EDF
-
-.. _CONFIGURE_SCHEDULER_EDF:
-
-CONFIGURE_SCHEDULER_EDF
------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_EDF``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Earliest Deadline First (EDF) Scheduler
- <SchedulerEDF>` algorithm is made available to the application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for exactly one processor.
-
-.. index:: CONFIGURE_SCHEDULER_EDF_SMP
-
-.. _CONFIGURE_SCHEDULER_EDF_SMP:
-
-CONFIGURE_SCHEDULER_EDF_SMP
----------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_EDF_SMP``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Earliest Deadline First (EDF) SMP Scheduler
- <SchedulerSMPEDF>` algorithm is made available to the application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for up to 32 processors.
-
- This scheduler algorithm is the default in SMP configurations if
- :ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
- greater than one.
-
-.. index:: CONFIGURE_SCHEDULER_NAME
-
-.. _CONFIGURE_SCHEDULER_NAME:
-
-CONFIGURE_SCHEDULER_NAME
-------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_NAME``
-
-DATA TYPE:
- RTEMS Name (``rtems_name``).
-
-RANGE:
- Any value.
-
-DEFAULT VALUE:
- The default name is
-
- - ``"MEDF"`` for the :ref:`EDF SMP Scheduler <SchedulerSMPEDF>`,
- - ``"MPA "`` for the :ref:`Arbitrary Processor Affinity Priority SMP Scheduler <SchedulerSMPPriorityAffinity>`,
- - ``"MPD "`` for the :ref:`Deterministic Priority SMP Scheduler <SchedulerSMPPriority>`,
- - ``"MPS "`` for the :ref:`Simple Priority SMP Scheduler <SchedulerSMPPrioritySimple>`,
- - ``"UCBS"`` for the :ref:`Uniprocessor CBS Scheduler <SchedulerCBS>`,
- - ``"UEDF"`` for the :ref:`Uniprocessor EDF Scheduler <SchedulerEDF>`,
- - ``"UPD "`` for the :ref:`Uniprocessor Deterministic Priority Scheduler <SchedulerPriority>`, and
- - ``"UPS "`` for the :ref:`Uniprocessor Simple Priority Scheduler <SchedulerPrioritySimple>`.
-
-DESCRIPTION:
- Schedulers can be identified via ``rtems_scheduler_ident``. The name of
- the scheduler is determined by the configuration.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
-.. index:: CONFIGURE_SCHEDULER_PRIORITY
-
-.. _CONFIGURE_SCHEDULER_PRIORITY:
-
-CONFIGURE_SCHEDULER_PRIORITY
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_PRIORITY``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is defined by default. This is the default scheduler and specifying
- this configuration parameter is redundant.
-
-DESCRIPTION:
- If defined, then the :ref:`Deterministic Priority Scheduler
- <SchedulerPriority>` algorithm is made available to the application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for exactly one processor.
-
- This scheduler algorithm is the default when
- :ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>` is
- exactly one.
-
- The memory allocated for this scheduler depends on the
- :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
-
-.. index:: CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
-
-.. _CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP:
-
-CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP
------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Arbitrary Processor Affinity SMP Scheduler
- <SchedulerSMPPriorityAffinity>` algorithm is made available to the
- application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for up to 32 processors.
-
- The memory allocated for this scheduler depends on the
- :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
-
-.. index:: CONFIGURE_SCHEDULER_PRIORITY_SMP
-
-.. _CONFIGURE_SCHEDULER_PRIORITY_SMP:
-
-CONFIGURE_SCHEDULER_PRIORITY_SMP
---------------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_PRIORITY_SMP``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Deterministic Priority SMP Scheduler
- <SchedulerSMPPriority>` algorithm is made available to the application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for up to 32 processors.
-
- The memory allocated for this scheduler depends on the
- :ref:`CONFIGURE_MAXIMUM_PRIORITY` configuration option.
-
-.. index:: CONFIGURE_SCHEDULER_SIMPLE
-
-.. _CONFIGURE_SCHEDULER_SIMPLE:
-
-CONFIGURE_SCHEDULER_SIMPLE
---------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_SIMPLE``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Simple Priority Scheduler
- <SchedulerPrioritySimple>` algorithm is made available to the application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for exactly one processor.
-
-.. index:: CONFIGURE_SCHEDULER_SIMPLE_SMP
-
-.. _CONFIGURE_SCHEDULER_SIMPLE_SMP:
-
-CONFIGURE_SCHEDULER_SIMPLE_SMP
-------------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_SIMPLE_SMP``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then the :ref:`Simple Priority SMP Scheduler
- <SchedulerSMPPrioritySimple>` algorithm is made available to the
- application.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- This scheduler algorithm is only available when RTEMS is built with SMP
- support enabled.
-
- In case no explicit :ref:`clustered scheduler configuration
- <ConfigurationSchedulersClustered>` is present, then it is used as the
- scheduler for up to 32 processors.
-
-.. index:: CONFIGURE_SCHEDULER_USER
-
-.. _CONFIGURE_SCHEDULER_USER:
-
-CONFIGURE_SCHEDULER_USER
-------------------------
-
-CONSTANT:
- ``CONFIGURE_SCHEDULER_USER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- RTEMS allows the application to provide its own task/thread scheduling
- algorithm. In order to do this, one must define
- ``CONFIGURE_SCHEDULER_USER`` to indicate the application provides its own
- scheduling algorithm. If ``CONFIGURE_SCHEDULER_USER`` is defined then the
- following additional macros must be defined:
-
- - ``CONFIGURE_SCHEDULER`` must be defined to a static definition of
- the scheduler data structures of the user scheduler.
-
- - ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` must be defined to a scheduler
- table entry initializer for the user scheduler.
-
- - ``CONFIGURE_SCHEDULER_USER_PER_THREAD`` must be defined to the type of
- the per-thread information of the user scheduler.
-
-NOTES:
- This scheduler configuration option is an advanced configuration option.
- Think twice before you use it.
-
- At this time, the mechanics and requirements for writing a new scheduler
- are evolving and not fully documented. It is recommended that you look at
- the existing Deterministic Priority Scheduler in
- ``cpukit/score/src/schedulerpriority*.c`` for guidance. For guidance on
- the configuration macros, please examine ``cpukit/sapi/include/confdefs.h``
- for how these are defined for the Deterministic Priority Scheduler.
-
-.. _ConfigurationSchedulersClustered:
-
-Clustered Scheduler Configuration
-=================================
-
-A clustered scheduler configuration is optional. It is an advanced
-configuration area and only necessary in specific circumstances.
-
-Clustered scheduling helps to control the worst-case latencies in a
-multiprocessor system (SMP). The goal is to reduce the amount of shared state
-in the system and thus prevention of lock contention. Modern multiprocessor
-systems tend to have several layers of data and instruction caches. With
-clustered scheduling it is possible to honour the cache topology of a system
-and thus avoid expensive cache synchronization traffic.
-
-We have clustered scheduling in case the set of processors of a system is
-partitioned into non-empty pairwise-disjoint subsets. These subsets are called
-clusters. Clusters with a cardinality of one are partitions. Each cluster is
-owned by exactly one scheduler.
-
-In order to use clustered scheduling the application designer has to answer two
-questions.
-
-#. How is the set of processors partitioned into clusters?
-
-#. Which scheduler algorithm is used for which cluster?
-
-The schedulers are statically configured.
-
-Configuration Step 1 - Scheduler Algorithms
--------------------------------------------
-
-Firstly, the application must select which scheduling algorithms are available
-with the following defines
-
-- :ref:`CONFIGURE_SCHEDULER_EDF_SMP <CONFIGURE_SCHEDULER_EDF_SMP>`,
-
-- :ref:`CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_AFFINITY_SMP>`,
-
-- :ref:`CONFIGURE_SCHEDULER_PRIORITY_SMP <CONFIGURE_SCHEDULER_PRIORITY_SMP>`, and
-
-- :ref:`CONFIGURE_SCHEDULER_SIMPLE_SMP <CONFIGURE_SCHEDULER_SIMPLE_SMP>`.
-
-This is necessary to calculate the per-thread overhead introduced by the
-scheduler algorithms. After these definitions the configuration file must
-``#include <rtems/scheduler.h>`` to have access to scheduler-specific
-configuration macros.
-
-It is possible to make more than one scheduler algorithm available to the
-application. For example a :ref:`Simple Priority SMP Scheduler
-<SchedulerSMPPrioritySimple>` could be used in a partition for low latency
-tasks in addition to an :ref:`EDF SMP Scheduler <SchedulerSMPEDF>` for a
-general-purpose cluster. Since the per-thread overhead depends on the
-scheduler algorithm only the scheduler algorithms used by the application
-should be configured.
-
-Configuration Step 2 - Schedulers
----------------------------------
-
-Each scheduler needs some data structures. Use the following macros to create
-the scheduler data structures for a particular scheduler identified in the
-configuration by ``name``.
-
-- ``RTEMS_SCHEDULER_EDF_SMP(name, max_cpu_count)``,
-
-- ``RTEMS_SCHEDULER_PRIORITY_AFFINITY_SMP(name, prio_count)``,
-
-- ``RTEMS_SCHEDULER_PRIORITY_SMP(name, prio_count)``, and
-
-- ``RTEMS_SCHEDULER_SIMPLE_SMP(name)``.
-
-The ``name`` parameter is used as part of a designator for scheduler-specific
-data structures, so the usual C/C++ designator rules apply. This ``name`` is
-not the scheduler object name. Additional parameters are scheduler-specific.
-
-.. _ConfigurationSchedulerTable:
-
-Configuration Step 3 - Scheduler Table
---------------------------------------
-
-The schedulers are registered in the system via the scheduler table. To
-populate the scheduler table define ``CONFIGURE_SCHEDULER_TABLE_ENTRIES`` to a
-list of the following scheduler table entry initializers
-
-- ``RTEMS_SCHEDULER_TABLE_EDF_SMP(name, obj_name)``,
-
-- ``RTEMS_SCHEDULER_TABLE_PRIORITY_AFFINITY_SMP(name, obj_name)``,
-
-- ``RTEMS_SCHEDULER_TABLE_PRIORITY_SMP(name, obj_name)``, and
-
-- ``RTEMS_SCHEDULER_TABLE_SIMPLE_SMP(name, obj_name)``.
-
-The ``name`` parameter must correspond to the parameter defining the scheduler
-data structures of configuration step 2. The ``obj_name`` determines the
-scheduler object name and can be used in :ref:`rtems_scheduler_ident()
-<rtems_scheduler_ident>` to get the scheduler object identifier. The scheduler
-index is defined by the index of the scheduler table. It is a configuration
-error to add a scheduler multiple times to the scheduler table.
-
-Configuration Step 4 - Processor to Scheduler Assignment
---------------------------------------------------------
-
-The last step is to define which processor uses which scheduler. For this
-purpose a scheduler assignment table must be defined. The entry count of this
-table must be equal to the configured maximum processors
-(:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`). A
-processor assignment to a scheduler can be optional or mandatory. The boot
-processor must have a scheduler assigned. In case the system needs more
-mandatory processors than available then a fatal run-time error will occur. To
-specify the scheduler assignments define
-``CONFIGURE_SCHEDULER_ASSIGNMENTS`` to a list of
-
-- ``RTEMS_SCHEDULER_ASSIGN(scheduler_index, attr)`` and
-
-- ``RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER``
-
-macros. The ``scheduler_index`` parameter must be a valid index into the
-scheduler table defined by configuration step 3. The ``attr`` parameter
-defines the scheduler assignment attributes. By default, a scheduler
-assignment to a processor is optional. For the scheduler assignment attribute
-use one of the mutually exclusive variants
-
-- ``RTEMS_SCHEDULER_ASSIGN_DEFAULT``,
-
-- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY``, and
-
-- ``RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL``.
-
-It is possible to add/remove processors to/from schedulers at run-time, see
-:ref:`rtems_scheduler_add_processor() <rtems_scheduler_add_processor>` and
-:ref:`rtems_scheduler_remove_processor() <rtems_scheduler_remove_processor>`.
-
-Configuration Example
----------------------
-
-The following example shows a scheduler configuration for a hypothetical
-product using two chip variants. One variant has four processors which is used
-for the normal product line and another provides eight processors for the
-high-performance product line. The first processor performs hard-real time
-control of actuators and sensors. The second processor is not used by RTEMS at
-all and runs a Linux instance to provide a graphical user interface. The
-additional processors are used for a worker thread pool to perform data
-processing operations.
-
-The processors managed by RTEMS use two Deterministic Priority SMP schedulers
-capable of dealing with 256 priority levels. The scheduler with index zero has
-the name ``"IO "``. The scheduler with index one has the name ``"WORK"``. The
-scheduler assignments of the first, third and fourth processor are mandatory,
-so the system must have at least four processors, otherwise a fatal run-time
-error will occur during system startup. The processor assignments for the
-fifth up to the eighth processor are optional so that the same application can
-be used for the normal and high-performance product lines. The second
-processor has no scheduler assigned and runs Linux. A hypervisor will ensure
-that the two systems cannot interfere in an undesirable way.
-
-.. code-block:: c
-
- #define CONFIGURE_MAXIMUM_PROCESSORS 8
- #define CONFIGURE_MAXIMUM_PRIORITY 255
-
- /* Configuration Step 1 - Scheduler Algorithms */
- #define CONFIGURE_SCHEDULER_PRIORITY_SMP
- #include <rtems/scheduler.h>
-
- /* Configuration Step 2 - Schedulers */
- RTEMS_SCHEDULER_PRIORITY_SMP(io, CONFIGURE_MAXIMUM_PRIORITY + 1);
- RTEMS_SCHEDULER_PRIORITY_SMP(work, CONFIGURE_MAXIMUM_PRIORITY + 1);
-
- /* Configuration Step 3 - Scheduler Table */
- #define CONFIGURE_SCHEDULER_TABLE_ENTRIES \
- RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
- io, \
- rtems_build_name('I', 'O', ' ', ' ') \
- ), \
- RTEMS_SCHEDULER_TABLE_PRIORITY_SMP( \
- work, \
- rtems_build_name('W', 'O', 'R', 'K') \
- )
-
- /* Configuration Step 4 - Processor to Scheduler Assignment */
- #define CONFIGURE_SCHEDULER_ASSIGNMENTS \
- RTEMS_SCHEDULER_ASSIGN(0, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
- RTEMS_SCHEDULER_ASSIGN_NO_SCHEDULER, \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_MANDATORY), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL), \
- RTEMS_SCHEDULER_ASSIGN(1, RTEMS_SCHEDULER_ASSIGN_PROCESSOR_OPTIONAL)
-
-Configuration Errors
---------------------
-
-In case one of the scheduler indices in ``CONFIGURE_SCHEDULER_ASSIGNMENTS``
-is invalid a link-time error will occur with an undefined reference to
-``RTEMS_SCHEDULER_INVALID_INDEX``.
-
-Some fatal errors may occur in case of scheduler configuration inconsistencies
-or a lack of processors on the system. The fatal source is
-``RTEMS_FATAL_SOURCE_SMP``.
-
-- ``SMP_FATAL_BOOT_PROCESSOR_NOT_ASSIGNED_TO_SCHEDULER`` - the boot processor
- must have a scheduler assigned.
-
-- ``SMP_FATAL_MANDATORY_PROCESSOR_NOT_PRESENT`` - there exists a mandatory
- processor beyond the range of physically or virtually available processors.
- The processor demand must be reduced for this system.
-
-- ``SMP_FATAL_START_OF_MANDATORY_PROCESSOR_FAILED`` - the start of a mandatory
- processor failed during system initialization. The system may not have this
- processor at all or it could be a problem with a boot loader for example.
- Check the ``CONFIGURE_SCHEDULER_ASSIGNMENTS`` definition.
-
-- ``SMP_FATAL_MULTITASKING_START_ON_UNASSIGNED_PROCESSOR`` - it is not allowed
- to start multitasking on a processor with no scheduler assigned.
-
-Device Driver Table
-===================
-
-This section defines the configuration parameters related to the automatic
-generation of a Device Driver Table. As ``<rtems/confdefs.h>`` only is aware
-of a small set of standard device drivers, the generated Device Driver Table is
-suitable for simple applications with no custom device drivers.
-
-Note that network device drivers are not configured in the Device Driver Table.
-
-.. index:: CONFIGURE_MAXIMUM_DRIVERS
-
-.. _CONFIGURE_MAXIMUM_DRIVERS:
-
-CONFIGURE_MAXIMUM_DRIVERS
--------------------------
-
-CONSTANT:
-
- ``CONFIGURE_MAXIMUM_DRIVERS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Zero or positive.
-
-DEFAULT VALUE:
- This is computed by default, and is set to the number of device drivers
- configured using the ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER``
- configuration parameters.
-
-DESCRIPTION:
- ``CONFIGURE_MAXIMUM_DRIVERS`` is defined as the number of device drivers
- per node.
-
-NOTES:
- If the application will dynamically install device drivers, then this
- configuration parameter must be larger than the number of statically
- configured device drivers. Drivers configured using the
- ``CONFIGURE_APPLICATIONS_NEEDS_XXX_DRIVER`` configuration parameters are
- statically installed.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
-------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER`` is defined if the
- application wishes to include the Console Device Driver.
-
-NOTES:
- This device driver is responsible for providing the :file:`/dev/console`
- device file. This device is used to initialize the standard input, output,
- and error file descriptors.
-
- BSPs should be constructed in a manner that allows ``printk()`` to work
- properly without the need for the console driver to be configured.
-
- The
-
- * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
-
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
-
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
-
- configuration options are mutually exclusive.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER
--------------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER`` is defined if the
- application wishes to include the Simple Console Device Driver.
-
-NOTES:
- This device driver is responsible for providing the :file:`/dev/console`
- device file. This device is used to initialize the standard input, output,
- and error file descriptors.
-
- This device driver reads via ``getchark()``.
-
- This device driver writes via ``rtems_putc()``.
-
- The Termios framework is not used. There is no support to change device
- settings, e.g. baud, stop bits, parity, etc.
-
- The
-
- * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
-
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
-
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
-
- configuration options are mutually exclusive.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER
-------------------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER`` is defined if
- the application wishes to include the Simple Task Console Device Driver.
-
-NOTES:
- This device driver is responsible for providing the :file:`/dev/console`
- device file. This device is used to initialize the standard input, output,
- and error file descriptors.
-
- This device driver reads via ``getchark()``.
-
- This device driver writes into a write buffer. The count of characters
- written into the write buffer is returned. It might be less than the
- requested count, in case the write buffer is full. The write is
- non-blocking and may be called from interrupt context. A dedicated task
- reads from the write buffer and outputs the characters via
- ``rtems_putc()``. This task runs with the least important priority. The
- write buffer size is 2047 characters and it is not configurable.
-
- Use ``fsync(STDOUT_FILENO)`` or ``fdatasync(STDOUT_FILENO)`` to drain the
- write buffer.
-
- The Termios framework is not used. There is no support to change device
- settings, e.g. baud, stop bits, parity, etc.
-
- The
-
- * ``CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER``,
-
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER``, and
-
- * ``CONFIGURE_APPLICATION_NEEDS_SIMPLE_TASK_CONSOLE_DRIVER``
-
- configuration options are mutually exclusive.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
-----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER`` is defined if the application
- wishes to include the Clock Device Driver.
-
-NOTES:
- This device driver is responsible for providing a regular interrupt which
- invokes a clock tick directive.
-
- If neither the Clock Driver not Benchmark Timer is enabled and the
- configuration parameter
- ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
- compile time error will occur.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER
-----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER`` is defined if the application
- wishes to include the Timer Driver. This device driver is used to
- benchmark execution times by the RTEMS Timing Test Suites.
-
-NOTES:
- If neither the Clock Driver not Benchmark Timer is enabled and the
- configuration parameter
- ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is not defined, then a
- compile time error will occur.
-
-.. index:: CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
-
-.. _CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER:
-
-CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER
-------------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER`` is defined when the
- application does *NOT* want the Clock Device Driver and is *NOT* using the
- Timer Driver. The inclusion or exclusion of the Clock Driver must be
- explicit in user applications.
-
-NOTES:
- This configuration parameter is intended to prevent the common user error
- of using the Hello World example as the baseline for an application and
- leaving out a clock tick source.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER
---------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER`` is defined if the application
- wishes to include the Real-Time Clock Driver.
-
-NOTES:
- Most BSPs do not include support for a real-time clock. This is because
- many boards do not include the required hardware.
-
- If this is defined and the BSP does not have this device driver, then the
- user will get a link time error for an undefined symbol.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER
--------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_WATCHDOG_DRIVER`` is defined if the
- application wishes to include the Watchdog Driver.
-
-NOTES:
- Most BSPs do not include support for a watchdog device driver. This is
- because many boards do not include the required hardware.
-
- If this is defined and the BSP does not have this device driver, then the
- user will get a link time error for an undefined symbol.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER
------------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_FRAME_BUFFER_DRIVER`` is defined if the
- application wishes to include the BSP's Frame Buffer Device Driver.
-
-NOTES:
- Most BSPs do not include support for a Frame Buffer Device Driver. This is
- because many boards do not include the required hardware.
-
- If this is defined and the BSP does not have this device driver, then the
- user will get a link time error for an undefined symbol.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
-
-.. _CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER
----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER`` is defined if the application
- wishes to include the Stub Device Driver.
-
-NOTES:
- This device driver simply provides entry points that return successful and
- is primarily a test fixture. It is supported by all BSPs.
-
-.. index:: CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
-
-.. _CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS:
-
-CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS
-------------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS``
-
-DATA TYPE:
- device driver entry structures
-
-RANGE:
- Undefined or set of device driver entry structures
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_PREREQUISITE_DRIVERS`` is defined if the
- application has device drivers it needs to include in the Device Driver
- Table. This should be defined to the set of device driver entries that
- will be placed in the table at the *FRONT* of the Device Driver Table and
- initialized before any other drivers *EXCEPT* any BSP prerequisite drivers.
-
-NOTES:
- In some cases, it is used by System On Chip BSPs to support peripheral
- buses beyond those normally found on the System On Chip. For example, this
- is used by one RTEMS system which has implemented a SPARC/ERC32 based board
- with VMEBus. The VMEBus Controller initialization is performed by a device
- driver configured via this configuration parameter.
-
-.. COMMENT: XXX Add example
-
-.. index:: CONFIGURE_APPLICATION_EXTRA_DRIVERS
-
-.. _CONFIGURE_APPLICATION_EXTRA_DRIVERS:
-
-CONFIGURE_APPLICATION_EXTRA_DRIVERS
------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_EXTRA_DRIVERS``
-
-DATA TYPE:
- device driver entry structures
-
-RANGE:
- Undefined or set of device driver entry structures
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_APPLICATION_EXTRA_DRIVERS`` is defined if the application has
- device drivers it needs to include in the Device Driver Table. This should
- be defined to the set of device driver entries that will be placed in the
- table at the *END* of the Device Driver Table.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
-.. index:: /dev/null
-
-.. _CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER
----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- This configuration variable is specified to enable ``/dev/null`` device driver.
-
-NOTES:
- This device driver is supported by all BSPs.
-
-.. index:: CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
-.. index:: /dev/zero
-
-.. _CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER:
-
-CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER
----------------------------------------
-
-CONSTANT:
- ``CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- This configuration variable is specified to enable ``/dev/zero`` device driver.
-
-NOTES:
- This device driver is supported by all BSPs.
-
-Multiprocessing Configuration
-=============================
-
-This section defines the multiprocessing related system configuration
-parameters supported by ``<rtems/confdefs.h>``. They are only used if RTEMS
-was built with the ``--enable-multiprocessing`` build configuration option.
-The multiprocessing (MPCI) support must not be confused with the SMP support.
-
-Additionally, this class of Configuration Constants are only applicable if
-``CONFIGURE_MP_APPLICATION`` is defined.
-
-.. index:: CONFIGURE_MP_APPLICATION
-
-.. _CONFIGURE_MP_APPLICATION:
-
-CONFIGURE_MP_APPLICATION
-------------------------
-
-CONSTANT:
- ``CONFIGURE_MP_APPLICATION``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- This configuration parameter must be defined to indicate that the
- application intends to be part of a multiprocessing
- configuration. Additional configuration parameters are assumed to be
- provided.
-
-NOTES:
- This has no impact unless RTEMS was built with the
- ``--enable-multiprocessing`` build configuration option.
-
-.. index:: CONFIGURE_MP_NODE_NUMBER
-
-.. _CONFIGURE_MP_NODE_NUMBER:
-
-CONFIGURE_MP_NODE_NUMBER
-------------------------
-
-CONSTANT:
- ``CONFIGURE_MP_NODE_NUMBER``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is ``NODE_NUMBER``, which is assumed to be set by the
- compilation environment.
-
-DESCRIPTION:
- ``CONFIGURE_MP_NODE_NUMBER`` is the node number of this node in a
- multiprocessor system.
-
-NOTES:
- In the RTEMS Multiprocessing Test Suite, the node number is derived from
- the Makefile variable ``NODE_NUMBER``. The same code is compiled with the
- ``NODE_NUMBER`` set to different values. The test programs behave
- differently based upon their node number.
-
-.. index:: CONFIGURE_MP_MAXIMUM_NODES
-
-.. _CONFIGURE_MP_MAXIMUM_NODES:
-
-CONFIGURE_MP_MAXIMUM_NODES
---------------------------
-
-CONSTANT:
- ``CONFIGURE_MP_MAXIMUM_NODES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 2.
-
-DESCRIPTION:
- ``CONFIGURE_MP_MAXIMUM_NODES`` is the maximum number of nodes in a
- multiprocessor system.
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
-
-.. _CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS:
-
-CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS
------------------------------------
-
-CONSTANT:
- ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Positive.
-
-DEFAULT VALUE:
- The default value is 32.
-
-DESCRIPTION:
- ``CONFIGURE_MP_MAXIMUM_GLOBAL_OBJECTS`` is the maximum number of
- concurrently active global objects in a multiprocessor system.
-
-NOTES:
- This value corresponds to the total number of objects which can be created
- with the ``RTEMS_GLOBAL`` attribute.
-
-.. index:: CONFIGURE_MP_MAXIMUM_PROXIES
-
-.. _CONFIGURE_MP_MAXIMUM_PROXIES:
-
-CONFIGURE_MP_MAXIMUM_PROXIES
-----------------------------
-
-CONSTANT:
- ``CONFIGURE_MP_MAXIMUM_PROXIES``
-
-DATA TYPE:
- Unsigned integer (``uint32_t``).
-
-RANGE:
- Undefined or positive.
-
-DEFAULT VALUE:
- The default value is 32.
-
-DESCRIPTION:
- ``CONFIGURE_MP_MAXIMUM_PROXIES`` is the maximum number of concurrently
- active thread/task proxies on this node in a multiprocessor system.
-
-NOTES:
- Since a proxy is used to represent a remote task/thread which is blocking
- on this node. This configuration parameter reflects the maximum number of
- remote tasks/threads which can be blocked on objects on this node.
-
-.. COMMENT: XXX - add xref to proxy discussion in MP chapter
-
-.. index:: CONFIGURE_MP_MPCI_TABLE_POINTER
-
-.. _CONFIGURE_MP_MPCI_TABLE_POINTER:
-
-CONFIGURE_MP_MPCI_TABLE_POINTER
--------------------------------
-
-CONSTANT:
- ``CONFIGURE_MP_MPCI_TABLE_POINTER``
-
-DATA TYPE:
- pointer to ``rtems_mpci_table``
-
-RANGE:
- undefined or valid pointer
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- ``CONFIGURE_MP_MPCI_TABLE_POINTER`` is the pointer to the MPCI
- Configuration Table. The default value of this field is``&MPCI_table``.
-
-NOTES:
- RTEMS provides a Shared Memory MPCI Device Driver which can be used on any
- Multiprocessor System assuming the BSP provides the proper set of
- supporting methods.
-
-PCI Library
-===========
-
-This section defines the system configuration parameters supported by
-``rtems/confdefs.h`` related to configuring the PCI Library for RTEMS.
-
-The PCI Library startup behaviour can be configured in four different ways
-depending on how ``CONFIGURE_PCI_CONFIG_LIB`` is defined:
-
-.. index:: PCI_LIB_AUTO
-
-``PCI_LIB_AUTO``
- Used to enable the PCI auto configuration software. PCI will be automatically
- probed, PCI buses enumerated, all devices and bridges will be initialized
- using Plug & Play software routines. The PCI device tree will be populated
- based on the PCI devices found in the system, PCI devices will be configured
- by allocating address region resources automatically in PCI space according
- to the BSP or host bridge driver set up.
-
-.. index:: PCI_LIB_READ
-
-``PCI_LIB_READ``
- Used to enable the PCI read configuration software. The current PCI
- configuration is read to create the RAM representation (the PCI device tree)
- of the PCI devices present. PCI devices are assumed to already have been
- initialized and PCI buses enumerated, it is therefore required that a BIOS or
- a boot loader has set up configuration space prior to booting into RTEMS.
-
-.. index:: PCI_LIB_STATIC
-
-``PCI_LIB_STATIC``
- Used to enable the PCI static configuration software. The user provides a PCI
- tree with information how all PCI devices are to be configured at compile
- time by linking in a custom ``struct pci_bus pci_hb`` tree. The static PCI
- library will not probe PCI for devices, instead it will assume that all
- devices defined by the user are present, it will enumerate the PCI buses and
- configure all PCI devices in static configuration accordingly. Since probe
- and allocation software is not needed the startup is faster, has smaller
- footprint and does not require dynamic memory allocation.
-
-.. index:: PCI_LIB_PERIPHERAL
-
-``PCI_LIB_PERIPHERAL``
- Used to enable the PCI peripheral configuration. It is similar to
- ``PCI_LIB_STATIC``, but it will never write the configuration to the PCI
- devices since PCI peripherals are not allowed to access PCI configuration
- space.
-
-Note that selecting ``PCI_LIB_STATIC`` or ``PCI_LIB_PERIPHERAL`` but not
-defining ``pci_hb`` will reuslt in link errors. Note also that in these modes
-Plug & Play is not performed.
-
-Event Recording
-===============
-
-.. index:: CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
-
-.. _CONFIGURE_RECORD_PER_PROCESSOR_ITEMS:
-
-CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
-------------------------------------
-
-CONSTANT:
- ``CONFIGURE_RECORD_PER_PROCESSOR_ITEMS``
-
-DATA TYPE:
- Unsigned integer (``unsigned int``).
-
-RANGE:
- A power of two greater than or equal to 16.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined, then a record item buffer of the specified item count is
- statically allocated for each configured processor
- (:ref:`CONFIGURE_MAXIMUM_PROCESSORS <CONFIGURE_MAXIMUM_PROCESSORS>`).
-
-NOTES:
- None.
-
-.. index:: CONFIGURE_RECORD_EXTENSIONS_ENABLED
-
-.. _CONFIGURE_RECORD_EXTENSIONS_ENABLED:
-
-CONFIGURE_RECORD_EXTENSIONS_ENABLED
------------------------------------
-
-CONSTANT:
- ``CONFIGURE_RECORD_EXTENSIONS_ENABLED``
-
-DATA TYPE:
- Boolean feature macro.
-
-RANGE:
- Defined or undefined.
-
-DEFAULT VALUE:
- This is not defined by default.
-
-DESCRIPTION:
- If defined and :ref:`CONFIGURE_RECORD_PER_PROCESSOR_ITEMS
- <CONFIGURE_RECORD_PER_PROCESSOR_ITEMS>` is also defined properly, then the
- record extensions are enabled.
-
-NOTES:
- The record extensions capture thread create, start, restart, delete,
- switch, begin, exitted and terminate events.
-
-.. _ConfigAda:
-
-Ada Configuration
-=================
-
-The GNU Ada runtime library (libgnarl) uses threads, mutexes, condition
-variables, and signals from the pthreads API. It uses also thread-local storage
-for the Ada Task Control Block (ATCB). From these resources only the threads
-need to be accounted for in the configuration. You should include the Ada tasks
-in your setting of the :ref:`CONFIGURE_MAXIMUM_POSIX_THREADS` configuration
-option.
-
-Obsolete Configuration Options
-==============================
-
-.. index:: CONFIGURE_BDBUF_BUFFER_COUNT
-
-CONFIGURE_BDBUF_BUFFER_COUNT
-----------------------------
-
-This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
-RTEMS 4.10.0.
-
-.. index:: CONFIGURE_BDBUF_BUFFER_SIZE
-
-CONFIGURE_BDBUF_BUFFER_SIZE
----------------------------
-
-This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
-RTEMS 4.10.0.
-
-.. index:: CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
-
-CONFIGURE_DISABLE_CLASSIC_API_NOTEPADS
---------------------------------------
-
-This configuration option was introduced in RTEMS 4.9.0 and is obsolete since
-RTEMS 5.1.
-
-.. index:: CONFIGURE_ENABLE_GO
-
-CONFIGURE_ENABLE_GO
--------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_GNAT_RTEMS
-
-CONFIGURE_GNAT_RTEMS
---------------------
-
-This configuration option was present in all RTEMS versions since at 1997 and is
-obsolete since RTEMS 5.1. See also :ref:`ConfigAda`.
-
-.. index:: CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
-
-CONFIGURE_HAS_OWN_CONFIGURATION_TABLE
--------------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_HAS_OWN_BDBUF_TABLE
-
-CONFIGURE_HAS_OWN_BDBUF_TABLE
------------------------------
-
-This configuration option was introduced in RTEMS 4.7.0 and is obsolete since
-RTEMS 4.10.0.
-
-.. index:: CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
-
-CONFIGURE_HAS_OWN_DEVICE_DRIVER_TABLE
--------------------------------------
-
-This configuration option was present in all RTEMS versions since at least 1995
-and is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_HAS_OWN_INIT_TASK_TABLE
-
-.. _CONFIGURE_HAS_OWN_INIT_TASK_TABLE:
-
-CONFIGURE_HAS_OWN_INIT_TASK_TABLE
----------------------------------
-
-This configuration option was present in all RTEMS versions since at least 1995
-and is obsolete since RTEMS 5.1. If you used this configuration option or you
-think that there should be a way to configure more than one Classic API
-initialization task, then please ask on the :r:list:`users`.
-
-.. index:: CONFIGURE_HAS_OWN_MOUNT_TABLE
-
-CONFIGURE_HAS_OWN_MOUNT_TABLE
------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
-
-CONFIGURE_HAS_OWN_MULTIPROCESSING_TABLE
----------------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
-
-CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS
---------------------------------
-
-This configuration option was present in all RTEMS versions since at 1998 and is
-obsolete since RTEMS 5.1. See also :ref:`CONFIGURE_MAXIMUM_FILE_DESCRIPTORS`.
-
-.. index:: CONFIGURE_MAXIMUM_ADA_TASKS
-
-CONFIGURE_MAXIMUM_ADA_TASKS
----------------------------
-
-This configuration option was present in all RTEMS versions since at 1997 and is
-obsolete since RTEMS 5.1. See also :ref:`ConfigAda`.
-
-.. index:: CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
-
-CONFIGURE_MAXIMUM_FAKE_ADA_TASKS
---------------------------------
-
-This configuration option was present in all RTEMS versions since at 1997 and is
-obsolete since RTEMS 5.1. See also :ref:`ConfigAda`.
-
-.. index:: CONFIGURE_MAXIMUM_GO_CHANNELS
-
-CONFIGURE_MAXIMUM_GO_CHANNELS
------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_GOROUTINES
-
-CONFIGURE_MAXIMUM_GOROUTINES
-----------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
-
-CONFIGURE_MAXIMUM_MRSP_SEMAPHORES
----------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_NUMBER_OF_TERMIOS_PORTS
-
-CONFIGURE_NUMBER_OF_TERMIOS_PORTS
----------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_BARRIERS
-
-CONFIGURE_MAXIMUM_POSIX_BARRIERS
---------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
-
-CONFIGURE_MAXIMUM_POSIX_CONDITION_VARIABLES
--------------------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
-
-CONFIGURE_MAXIMUM_POSIX_MESSAGE_QUEUE_DESCRIPTORS
--------------------------------
-
-This configuration option was introduced in RTEMS 4.10.0 and is obsolete since
-RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_MUTEXES
-
-CONFIGURE_MAXIMUM_POSIX_MUTEXES
--------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_RWLOCKS
-
-CONFIGURE_MAXIMUM_POSIX_RWLOCKS
--------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
-
-CONFIGURE_MAXIMUM_POSIX_SPINLOCKS
----------------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
-
-.. index:: CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
-
-.. _CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE:
-
-CONFIGURE_POSIX_HAS_OWN_INIT_THREAD_TABLE
------------------------------------------
-
-This configuration option was present in all RTEMS versions since at least 1995
-and is obsolete since RTEMS 5.1. If you used this configuration option or you
-think that there should be a way to configure more than one POSIX initialization
-thread, then please ask on the :r:list:`users`.
-
-.. index:: CONFIGURE_SMP_APPLICATION
-
-CONFIGURE_SMP_APPLICATION
--------------------------
-
-This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
-RTEMS 5.1.
-
-.. index:: CONFIGURE_SMP_MAXIMUM_PROCESSORS
-
-CONFIGURE_SMP_MAXIMUM_PROCESSORS
---------------------------------
-
-This configuration option was introduced in RTEMS 4.11.0 and is obsolete since
-RTEMS 5.1. See also :ref:`CONFIGURE_MAXIMUM_PROCESSORS`.
-
-.. index:: CONFIGURE_TERMIOS_DISABLED
-
-CONFIGURE_TERMIOS_DISABLED
---------------------------
-
-This configuration option is obsolete since RTEMS 5.1.
diff --git a/c-user/glossary.rst b/c-user/glossary.rst
index fe6749c..dfbda11 100644
--- a/c-user/glossary.rst
+++ b/c-user/glossary.rst
@@ -1,780 +1,911 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2017, 2019 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 1998 On-Line Applications Research Corporation (OAR)
+
Glossary
********
.. glossary::
- :sorted:
+ :sorted:
+
+ ABI
+ An acronym for Application Binary Interface.
+
+ active
+ A term used to describe an object which has been created by an
+ application.
+
+ aperiodic task
+ A task which must execute only at irregular intervals and has only a soft
+ deadline.
+
+ API
+ An acronym for Application Programming Interface.
+
+ application
+ In this document, software which makes use of RTEMS.
+
+ ASR
+ An acronym for :term:`Asynchronous Signal Routine`.
+
+ assembler language
+ The assembler language is a programming language which can be translated very
+ easily into machine code and data. For this project assembler languages are
+ restricted to languages accepted by the :term:`GNU` assembler
+ program for the target architectures.
+
+ asynchronous
+ Not related in order or timing to other occurrences in the system.
+
+ Asynchronous Signal Routine
+ Similar to a hardware interrupt except that it is associated with a task
+ and is run in the context of a task. The directives provided by the
+ signal manager are used to service signals.
+
+ atomic operations
+ Atomic operations are defined in terms of :term:`C11`.
+
+ awakened
+ A term used to describe a task that has been unblocked and may be
+ scheduled to the CPU.
+
+ big endian
+ A data representation scheme in which the bytes composing a numeric value
+ are arranged such that the most significant byte is at the lowest
+ address.
+
+ bit-mapped
+ A data encoding scheme in which each bit in a variable is used to
+ represent something different. This makes for compact data
+ representation.
+
+ block
+ A physically contiguous area of memory.
+
+ blocked task
+ The task state entered by a task which has been previously started and
+ cannot continue execution until the reason for waiting has been
+ satisfied. Blocked tasks are not an element of the set of ready tasks of
+ a scheduler instance.
+
+ Board Support Package
+ A collection of device initialization and control routines specific to a
+ particular type of board or collection of boards.
+
+ broadcast
+ To simultaneously send a message to a logical set of destinations.
+
+ BSP
+ An acronym for :term:`Board Support Package`.
+
+ buffer
+ A fixed length block of memory allocated from a partition.
+
+ C language
+ The C language for this project is defined in terms of
+ :term:`C11`.
+
+ C++11
+ The standard ISO/IEC 14882:2011.
+
+ C11
+ The standard ISO/IEC 9899:2011.
+
+ calling convention
+ The processor and compiler dependent rules which define the mechanism
+ used to invoke subroutines in a high-level language. These rules define
+ the passing of arguments, the call and return mechanism, and the register
+ set which must be preserved.
+
+ CCB
+ An acronym for Change Control Board.
+
+ Central Processing Unit
+ This term is equivalent to the terms processor and microprocessor.
+
+ chain
+ A data structure which allows for efficient dynamic addition and removal
+ of elements. It differs from an array in that it is not limited to a
+ predefined size.
+
+ cluster
+ We have clustered scheduling in case the set of processors of a system is
+ partitioned into non-empty pairwise disjoint subsets. These subsets are
+ called clusters. Clusters with a cardinality of one are partitions.
+ Each cluster is owned by exactly one scheduler instance.
+
+ coalesce
+ The process of merging adjacent holes into a single larger hole.
+ Sometimes this process is referred to as garbage collection.
+
+ Configuration Table
+ A table which contains information used to tailor RTEMS for a particular
+ application.
+
+ context
+ All of the processor registers and operating system data structures
+ associated with a task.
+
+ context switch
+ Alternate term for task switch. Taking control of the processor from one
+ task and transferring it to another task.
+
+ control block
+ A data structure used by the executive to define and control an object.
+
+ core
+ When used in this manual, this term refers to the internal executive
+ utility functions. In the interest of application portability, the core
+ of the executive should not be used directly by applications.
+
+ CPU
+ An acronym for :term:`Central Processing Unit`.
+
+ critical section
+ A section of code which must be executed indivisibly.
+
+ CRT
+ An acronym for Cathode Ray Tube. Normally used in reference to the
+ man-machine interface.
+
+ deadline
+ A fixed time limit by which a task must have completed a set of actions.
+ Beyond this point, the results are of reduced value and may even be
+ considered useless or harmful.
+
+ device
+ A peripheral used by the application that requires special operation
+ software. See also device driver.
+
+ device driver
+ Control software for special peripheral devices used by the application.
+
+ Device Driver Table
+ A table which contains the entry points for each of the configured device
+ drivers.
+
+ directives
+ RTEMS' provided routines that provide support mechanisms for real-time
+ applications.
+
+ dispatch
+ The act of loading a task's context onto the CPU and transferring control
+ of the CPU to that task.
+
+ Doorstop
+ `Doorstop <https://github.com/doorstop-dev/doorstop>`_ is a
+ requirements management tool.
+
+ dormant
+ The state entered by a task after it is created and before it has been
+ started.
+
+ dual-ported
+ A term used to describe memory which can be accessed at two different
+ addresses.
+
+ EARS
+ An acronym for Easy Approach to Requirements Syntax.
+
+ ELF
+ An acronym for
+ `Executable and Linkable Format <https://en.wikipedia.org/wiki/Executable_and_Linkable_Format>`_.
+
+ embedded
+ An application that is delivered as a hidden part of a larger system.
+ For example, the software in a fuel-injection control system is an
+ embedded application found in many late-model automobiles.
+
+ entry point
+ The address at which a function or task begins to execute. In C, the
+ entry point of a function is the function's name.
+
+ envelope
+ A buffer provided by the MPCI layer to RTEMS which is used to pass
+ messages between nodes in a multiprocessor system. It typically contains
+ routing information needed by the MPCI. The contents of an envelope are
+ referred to as a packet.
+
+ error code
+ This term has the same meaning as :term:`status code`.
+
+ events
+ A method for task communication and synchronization. The directives
+ provided by the event manager are used to service events.
+
+ exception
+ A synonym for interrupt.
+
+ executing task
+ The task state entered by a task after it has been given control of the
+ processor. In SMP configurations, a task may be registered as executing
+ on more than one processor for short time frames during task migration.
+ Blocked tasks can be executing until they issue a thread dispatch.
+
+ executive
+ In this document, this term is used to referred to RTEMS. Commonly, an
+ executive is a small real-time operating system used in embedded systems.
+
+ exported
+ An object known by all nodes in a multiprocessor system. An object
+ created with the GLOBAL attribute will be exported.
+
+ external address
+ The address used to access dual-ported memory by all the nodes in a
+ system which do not own the memory.
+
+ FIFO
+ An acronym for :term:`First In First Out`.
+
+ First In First Out
+ A discipline for manipulating entries in a data structure.
+
+ floating point coprocessor
+ A component used in computer systems to enhance performance in
+ mathematically intensive situations. It is typically viewed as a logical
+ extension of the primary processor.
+
+ freed
+ A resource that has been released by the application to RTEMS.
+
+ GCC
+ An acronym for `GNU Compiler Collection <https://gcc.gnu.org/>`_.
+
+ global
+ An object that has been created with the GLOBAL attribute and exported to
+ all nodes in a multiprocessor system.
+
+ GNAT
+ *GNAT* is the :term:`GNU` compiler for Ada, integrated into the
+ :term:`GCC`.
+
+ GNU
+ An acronym for `GNU's Not Unix <https://www.gnu.org/>`_.
+
+ handler
+ The equivalent of a manager, except that it is internal to RTEMS and
+ forms part of the core. A handler is a collection of routines which
+ provide a related set of functions. For example, there is a handler used
+ by RTEMS to manage all objects.
+
+ hard real-time system
+ A real-time system in which a missed deadline causes the worked performed
+ to have no value or to result in a catastrophic effect on the integrity
+ of the system.
+
+ heap
+ A data structure used to dynamically allocate and deallocate variable
+ sized blocks of memory.
+
+ heir task
+ A task is an heir if it is registered as an heir in a processor of the
+ system. A task can be the heir on at most one processor in the system.
+ In case the executing and heir tasks differ on a processor and a thread
+ dispatch is marked as necessary, then the next thread dispatch will make
+ the heir task the executing task.
+
+ heterogeneous
+ A multiprocessor computer system composed of dissimilar processors.
+
+ homogeneous
+ A multiprocessor computer system composed of a single type of processor.
+
+ I/O
+ An acronym for Input/Output.
+
+ ID
+ An RTEMS assigned identification tag used to access an active object.
+
+ IDLE task
+ A special low priority task which assumes control of the CPU when no
+ other task is able to execute.
+
+ interface
+ A specification of the methodology used to connect multiple independent
+ subsystems.
+
+ internal address
+ The address used to access dual-ported memory by the node which owns the
+ memory.
+
+ interrupt
+ A hardware facility that causes the CPU to suspend execution, save its
+ status, and transfer control to a specific location.
+
+ interrupt level
+ A mask used to by the CPU to determine which pending interrupts should be
+ serviced. If a pending interrupt is below the current interrupt level,
+ then the CPU does not recognize that interrupt.
+
+ interrupt service
+ An *interrupt service* consists of an
+ :term:`Interrupt Service Routine` which is called with a user
+ provided argument upon reception of an interrupt service request. The
+ routine is invoked in interrupt context. Interrupt service requests may have
+ a priority and an affinity to a set of processors. An *interrupt service* is
+ a :term:`software component`.
+
+ Interrupt Service Routine
+ An ISR is invoked by the CPU to process a pending interrupt.
+
+ ISR
+ An acronym for :term:`Interrupt Service Routine`.
+
+ ISVV
+ An acronym for Independent Software Verification and Validation.
+
+ kernel
+ In this document, this term is used as a synonym for executive.
- active
- A term used to describe an object which has been created by an
- application.
+ list
+ A data structure which allows for dynamic addition and removal of
+ entries. It is not statically limited to a particular size.
- aperiodic task
- A task which must execute only at irregular intervals and has only a soft
- deadline.
+ little endian
+ A data representation scheme in which the bytes composing a numeric value
+ are arranged such that the least significant byte is at the lowest
+ address.
- API
- An acronym for Application Programming Interface.
+ local
+ An object which was created with the LOCAL attribute and is accessible
+ only on the node it was created and resides upon. In a single processor
+ configuration, all objects are local.
- application
- In this document, software which makes use of RTEMS.
+ local operation
+ The manipulation of an object which resides on the same node as the
+ calling task.
- ASR
- see Asynchronous Signal Routine.
+ logical address
+ An address used by an application. In a system without memory
+ management, logical addresses will equal physical addresses.
- asynchronous
- Not related in order or timing to other occurrences in the system.
+ loosely-coupled
+ A multiprocessor configuration where shared memory is not used for
+ communication.
+
+ major number
+ The index of a device driver in the Device Driver Table.
- Asynchronous Signal Routine
- Similar to a hardware interrupt except that it is associated with a task
- and is run in the context of a task. The directives provided by the
- signal manager are used to service signals.
+ manager
+ A group of related RTEMS' directives which provide access and control
+ over resources.
- atomic operations
- Atomic operations are defined in terms of :term:`C11`.
+ MCS
+ An acronym for Mellor-Crummey Scott.
- awakened
- A term used to describe a task that has been unblocked and may be
- scheduled to the CPU.
+ memory pool
+ Used interchangeably with heap.
- big endian
- A data representation scheme in which the bytes composing a numeric value
- are arranged such that the most significant byte is at the lowest
- address.
+ message
+ A sixteen byte entity used to communicate between tasks. Messages are
+ sent to message queues and stored in message buffers.
- bit-mapped
- A data encoding scheme in which each bit in a variable is used to
- represent something different. This makes for compact data
- representation.
+ message buffer
+ A block of memory used to store messages.
- block
- A physically contiguous area of memory.
+ message queue
+ An RTEMS object used to synchronize and communicate between tasks by
+ transporting messages between sending and receiving tasks.
- blocked task
- The task state entered by a task which has been previously started and
- cannot continue execution until the reason for waiting has been
- satisfied. Blocked tasks are not an element of the set of ready tasks of
- a scheduler instance.
+ Message Queue Control Block
+ A data structure associated with each message queue used by RTEMS to
+ manage that message queue.
- broadcast
- To simultaneously send a message to a logical set of destinations.
+ minor number
+ A numeric value passed to a device driver, the exact usage of which is
+ driver dependent.
- Board Support Package
- A collection of device initialization and control routines specific to a
- particular type of board or collection of boards.
+ mode
+ An entry in a task's control block that is used to determine if the task
+ allows preemption, timeslicing, processing of signals, and the interrupt
+ disable level used by the task.
- buffer
- A fixed length block of memory allocated from a partition.
+ MPCI
+ An acronym for :term:`Multiprocessor Communications Interface Layer`.
- BSP
- An acronym for :term:`Board Support Package`.
+ multiprocessing
+ The simultaneous execution of two or more processes by a multiple
+ processor computer system.
- C11
- The standard ISO/IEC 9899:2011.
+ multiprocessor
+ A computer with multiple CPUs available for executing applications.
- C++11
- The standard ISO/IEC 14882:2011.
+ Multiprocessor Communications Interface Layer
+ A set of user-provided routines which enable the nodes in a
+ multiprocessor system to communicate with one another.
- calling convention
- The processor and compiler dependent rules which define the mechanism
- used to invoke subroutines in a high-level language. These rules define
- the passing of arguments, the call and return mechanism, and the register
- set which must be preserved.
+ Multiprocessor Configuration Table
+ The data structure defining the characteristics of the multiprocessor
+ target system with which RTEMS will communicate.
- Central Processing Unit
- This term is equivalent to the terms processor and microprocessor.
+ multitasking
+ The alternation of execution amongst a group of processes on a single
+ CPU. A scheduling algorithm is used to determine which process executes
+ at which time.
- chain
- A data structure which allows for efficient dynamic addition and removal
- of elements. It differs from an array in that it is not limited to a
- predefined size.
+ mutual exclusion
+ A term used to describe the act of preventing other tasks from accessing
+ a resource simultaneously.
- cluster
- We have clustered scheduling in case the set of processors of a system is
- partitioned into non-empty pairwise disjoint subsets. These subsets are
- called clusters. Clusters with a cardinality of one are partitions.
- Each cluster is owned by exactly one scheduler instance.
+ nested
+ A term used to describe an ASR that occurs during another ASR or an ISR
+ that occurs during another ISR.
- coalesce
- The process of merging adjacent holes into a single larger hole.
- Sometimes this process is referred to as garbage collection.
+ node
+ A term used to reference a processor running RTEMS in a multiprocessor
+ system.
- Configuration Table
- A table which contains information used to tailor RTEMS for a particular
- application.
+ non-existent
+ The state occupied by an uncreated or deleted task.
- context
- All of the processor registers and operating system data structures
- associated with a task.
+ NUMA
+ An acronym for Non-Uniform Memory Access.
- context switch
- Alternate term for task switch. Taking control of the processor from one
- task and transferring it to another task.
+ numeric coprocessor
+ A component used in computer systems to enhance performance in
+ mathematically intensive situations. It is typically viewed as a logical
+ extension of the primary processor.
- control block
- A data structure used by the executive to define and control an object.
+ object
+ In this document, this term is used to refer collectively to tasks,
+ timers, message queues, partitions, regions, semaphores, ports, and rate
+ monotonic periods. All RTEMS objects have IDs and user-assigned names.
- core
- When used in this manual, this term refers to the internal executive
- utility functions. In the interest of application portability, the core
- of the executive should not be used directly by applications.
+ object-oriented
+ A term used to describe systems with common mechanisms for utilizing a
+ variety of entities. Object-oriented systems shield the application from
+ implementation details.
- CPU
- An acronym for :term:`Central Processing Unit`.
+ operating system
+ The software which controls all the computer's resources and provides the
+ base upon which application programs can be written.
- critical section
- A section of code which must be executed indivisibly.
+ overhead
+ The portion of the CPUs processing power consumed by the operating
+ system.
- CRT
- An acronym for Cathode Ray Tube. Normally used in reference to the
- man-machine interface.
-
- deadline
- A fixed time limit by which a task must have completed a set of actions.
- Beyond this point, the results are of reduced value and may even be
- considered useless or harmful.
-
- device
- A peripheral used by the application that requires special operation
- software. See also device driver.
-
- device driver
- Control software for special peripheral devices used by the application.
-
- directives
- RTEMS' provided routines that provide support mechanisms for real-time
- applications.
-
- dispatch
- The act of loading a task's context onto the CPU and transferring control
- of the CPU to that task.
-
- dormant
- The state entered by a task after it is created and before it has been
- started.
-
- Device Driver Table
- A table which contains the entry points for each of the configured device
- drivers.
-
- dual-ported
- A term used to describe memory which can be accessed at two different
- addresses.
-
- embedded
- An application that is delivered as a hidden part of a larger system.
- For example, the software in a fuel-injection control system is an
- embedded application found in many late-model automobiles.
+ packet
+ A buffer which contains the messages passed between nodes in a
+ multiprocessor system. A packet is the contents of an envelope.
- envelope
- A buffer provided by the MPCI layer to RTEMS which is used to pass
- messages between nodes in a multiprocessor system. It typically contains
- routing information needed by the MPCI. The contents of an envelope are
- referred to as a packet.
-
- entry point
- The address at which a function or task begins to execute. In C, the
- entry point of a function is the function's name.
-
- events
- A method for task communication and synchronization. The directives
- provided by the event manager are used to service events.
+ partition
+ This term has two definitions:
- exception
- A synonym for interrupt.
+ 1. A partition is an RTEMS object which is used to allocate and
+ deallocate fixed size blocks of memory from an dynamically specified
+ area of memory.
- executing task
- The task state entered by a task after it has been given control of the
- processor. In SMP configurations, a task may be registered as executing
- on more than one processor for short time frames during task migration.
- Blocked tasks can be executing until they issue a thread dispatch.
+ 2. A :term:`cluster` with a cardinality of one is a partition.
- executive
- In this document, this term is used to referred to RTEMS. Commonly, an
- executive is a small real-time operating system used in embedded systems.
+ Partition Control Block
+ A data structure associated with each partition used by RTEMS to manage
+ that partition.
- exported
- An object known by all nodes in a multiprocessor system. An object
- created with the GLOBAL attribute will be exported.
+ pending
+ A term used to describe a task blocked waiting for an event, message,
+ semaphore, or signal.
- external address
- The address used to access dual-ported memory by all the nodes in a
- system which do not own the memory.
+ periodic task
+ A task which must execute at regular intervals and comply with a hard
+ deadline.
- FIFO
- An acronym for First In First Out.
-
- First In First Out
- A discipline for manipulating entries in a data structure.
+ physical address
+ The actual hardware address of a resource.
- floating point coprocessor
- A component used in computer systems to enhance performance in
- mathematically intensive situations. It is typically viewed as a logical
- extension of the primary processor.
+ poll
+ A mechanism used to determine if an event has occurred by periodically
+ checking for a particular status. Typical events include arrival of
+ data, completion of an action, and errors.
- freed
- A resource that has been released by the application to RTEMS.
-
- global
- An object that has been created with the GLOBAL attribute and exported to
- all nodes in a multiprocessor system.
+ pool
+ A collection from which resources are allocated.
- handler
- The equivalent of a manager, except that it is internal to RTEMS and
- forms part of the core. A handler is a collection of routines which
- provide a related set of functions. For example, there is a handler used
- by RTEMS to manage all objects.
+ portability
+ A term used to describe the ease with which software can be rehosted on
+ another computer.
- hard real-time system
- A real-time system in which a missed deadline causes the worked performed
- to have no value or to result in a catastrophic effect on the integrity
- of the system.
+ posting
+ The act of sending an event, message, semaphore, or signal to a task.
- heap
- A data structure used to dynamically allocate and deallocate variable
- sized blocks of memory.
+ preempt
+ The act of forcing a task to relinquish the processor and dispatching to
+ another task.
- heir task
- A task is an heir if it is registered as an heir in a processor of the
- system. A task can be the heir on at most one processor in the system.
- In case the executing and heir tasks differ on a processor and a thread
- dispatch is marked as necessary, then the next thread dispatch will make
- the heir task the executing task.
+ priority
+ A mechanism used to represent the relative importance of an element in a
+ set of items. RTEMS uses priority to determine which task should
+ execute.
- heterogeneous
- A multiprocessor computer system composed of dissimilar processors.
+ priority boosting
+ A simple approach to extend the priority inheritance protocol for
+ clustered scheduling is priority boosting. In case a mutex is owned by a
+ task of another cluster, then the priority of the owner task is raised to
+ an artificially high priority, the pseudo-interrupt priority.
- homogeneous
- A multiprocessor computer system composed of a single type of processor.
+ priority inheritance
+ An algorithm that calls for the lower priority task holding a resource to
+ have its priority increased to that of the highest priority task blocked
+ waiting for that resource. This avoids the problem of priority
+ inversion.
- ID
- An RTEMS assigned identification tag used to access an active object.
+ priority inversion
+ A form of indefinite postponement which occurs when a high priority tasks
+ requests access to shared resource currently allocated to low priority
+ task. The high priority task must block until the low priority task
+ releases the resource.
- IDLE task
- A special low priority task which assumes control of the CPU when no
- other task is able to execute.
+ processor utilization
+ The percentage of processor time used by a task or a set of tasks.
- interface
- A specification of the methodology used to connect multiple independent
- subsystems.
+ proxy
+ An RTEMS control structure used to represent, on a remote node, a task
+ which must block as part of a remote operation.
- internal address
- The address used to access dual-ported memory by the node which owns the
- memory.
+ Proxy Control Block
+ A data structure associated with each proxy used by RTEMS to manage that
+ proxy.
- interrupt
- A hardware facility that causes the CPU to suspend execution, save its
- status, and transfer control to a specific location.
+ PTCB
+ An acronym for :term:`Partition Control Block`.
- interrupt level
- A mask used to by the CPU to determine which pending interrupts should be
- serviced. If a pending interrupt is below the current interrupt level,
- then the CPU does not recognize that interrupt.
+ PXCB
+ An acronym for :term:`Proxy Control Block`.
- Interrupt Service Routine
- An ISR is invoked by the CPU to process a pending interrupt.
+ QCB
+ An acronym for :term:`Message Queue Control Block`.
- I/O
- An acronym for Input/Output.
+ quantum
+ The application defined unit of time in which the processor is allocated.
+
+ queue
+ Alternate term for message queue.
- ISR
- An acronym for :term:`Interrupt Service Routine`.
+ ready task
+ A task occupies this state when it is available to be given control of a
+ processor. A ready task has no processor assigned. The scheduler
+ decided that other tasks are currently more important. A task that is
+ ready to execute and has a processor assigned is called scheduled.
- kernel
- In this document, this term is used as a synonym for executive.
+ real-time
+ A term used to describe systems which are characterized by requiring
+ deterministic response times to external stimuli. The external stimuli
+ require that the response occur at a precise time or the response is
+ incorrect.
+
+ reentrant
+ A term used to describe routines which do not modify themselves or global
+ variables.
+
+ region
+ An RTEMS object which is used to allocate and deallocate variable size
+ blocks of memory from a dynamically specified area of memory.
+
+ Region Control Block
+ A data structure associated with each region used by RTEMS to manage that
+ region.
+
+ registers
+ Registers are locations physically located within a component, typically
+ used for device control or general purpose storage.
- list
- A data structure which allows for dynamic addition and removal of
- entries. It is not statically limited to a particular size.
+ remote
+ Any object that does not reside on the local node.
+
+ remote operation
+ The manipulation of an object which does not reside on the same node as
+ the calling task.
+
+ ReqIF
+ An acronym for
+ `Requirements Interchange Format <https://www.omg.org/spec/ReqIF/About-ReqIF/>`_.
+
+ resource
+ A hardware or software entity to which access must be controlled.
+
+ resume
+ Removing a task from the suspend state. If the task's state is ready
+ following a call to the ``rtems_task_resume`` directive, then the task is
+ available for scheduling.
+
+ return code
+ This term has the same meaning as :term:`status code`.
+
+ return value
+ The value returned by a function. A return value may be a
+ :term:`status code`.
+
+ RNCB
+ An acronym for :term:`Region Control Block`.
+
+ round-robin
+ A task scheduling discipline in which tasks of equal priority are
+ executed in the order in which they are made ready.
- little endian
- A data representation scheme in which the bytes composing a numeric value
- are arranged such that the least significant byte is at the lowest
- address.
+ RS-232
+ A standard for serial communications.
- local
- An object which was created with the LOCAL attribute and is accessible
- only on the node it was created and resides upon. In a single processor
- configuration, all objects are local.
+ RTEMS
+ An acronym for Real-Time Executive for Multiprocessor Systems.
- local operation
- The manipulation of an object which resides on the same node as the
- calling task.
+ running
+ The state of a rate monotonic timer while it is being used to delineate a
+ period. The timer exits this state by either expiring or being canceled.
- logical address
- An address used by an application. In a system without memory
- management, logical addresses will equal physical addresses.
+ schedulable
+ A set of tasks which can be guaranteed to meet their deadlines based upon
+ a specific scheduling algorithm.
- loosely-coupled
- A multiprocessor configuration where shared memory is not used for
- communication.
+ schedule
+ The process of choosing which task should next enter the executing state.
- major number
- The index of a device driver in the Device Driver Table.
+ scheduled task
+ A task is scheduled if it is allowed to execute and has a processor
+ assigned. Such a task executes currently on a processor or is about to
+ start execution. A task about to start execution it is an heir task on
+ exactly one processor in the system.
- manager
- A group of related RTEMS' directives which provide access and control
- over resources.
+ scheduler
+ A scheduler or scheduling algorithm allocates processors to a subset of
+ its set of ready tasks. So it manages access to the processor resource.
+ Various algorithms exist to choose the tasks allowed to use a processor
+ out of the set of ready tasks. One method is to assign each task a
+ priority number and assign the tasks with the lowest priority number to
+ one processor of the set of processors owned by a scheduler instance.
- MCS
- An acronym for Mellor-Crummey Scott.
+ scheduler instance
+ A scheduler instance is a scheduling algorithm with a corresponding
+ context to store its internal state. Each processor in the system is
+ owned by at most one scheduler instance. The processor to scheduler
+ instance assignment is determined at application configuration time. See
+ :ref:`Configuring a System`.
- memory pool
- Used interchangeably with heap.
+ segments
+ Variable sized memory blocks allocated from a region.
- message
- A sixteen byte entity used to communicate between tasks. Messages are
- sent to message queues and stored in message buffers.
+ semaphore
+ An RTEMS object which is used to synchronize tasks and provide mutually
+ exclusive access to resources.
- message buffer
- A block of memory used to store messages.
+ Semaphore Control Block
+ A data structure associated with each semaphore used by RTEMS to manage
+ that semaphore.
- message queue
- An RTEMS object used to synchronize and communicate between tasks by
- transporting messages between sending and receiving tasks.
+ shared memory
+ Memory which is accessible by multiple nodes in a multiprocessor system.
- Message Queue Control Block
- A data structure associated with each message queue used by RTEMS to
- manage that message queue.
+ signal
+ An RTEMS provided mechanism to communicate asynchronously with a task.
+ Upon reception of a signal, the ASR of the receiving task will be
+ invoked.
- minor number
- A numeric value passed to a device driver, the exact usage of which is
- driver dependent.
+ signal set
+ A thirty-two bit entity which is used to represent a task's collection of
+ pending signals and the signals sent to a task.
- mode
- An entry in a task's control block that is used to determine if the task
- allows preemption, timeslicing, processing of signals, and the interrupt
- disable level used by the task.
+ SMCB
+ An acronym for :term:`Semaphore Control Block`.
- MPCI
- An acronym for :term:`Multiprocessor Communications Interface Layer`.
+ SMP
+ An acronym for Symmetric Multiprocessing.
- multiprocessing
- The simultaneous execution of two or more processes by a multiple
- processor computer system.
+ SMP barriers
+ The SMP barriers ensure that a defined set of independent threads of
+ execution on a set of processors reaches a common synchronization point
+ in time. They are implemented using atomic operations. Currently a
+ sense barrier is used in RTEMS.
- multiprocessor
- A computer with multiple CPUs available for executing applications.
+ SMP locks
+ The SMP locks ensure mutual exclusion on the lowest level and are a
+ replacement for the sections of disabled interrupts. Interrupts are
+ usually disabled while holding an SMP lock. They are implemented using
+ atomic operations. Currently a ticket lock is used in RTEMS.
- Multiprocessor Communications Interface Layer
- A set of user-provided routines which enable the nodes in a
- multiprocessor system to communicate with one another.
+ soft real-time system
+ A real-time system in which a missed deadline does not compromise the
+ integrity of the system.
- Multiprocessor Configuration Table
- The data structure defining the characteristics of the multiprocessor
- target system with which RTEMS will communicate.
+ software component
+ This term is defined by ECSS-E-ST-40C 3.2.28 as a "part of a software
+ system". For this project a *software component* shall be any of the
+ following items and nothing else:
- multitasking
- The alternation of execution amongst a group of processes on a single
- CPU. A scheduling algorithm is used to determine which process executes
- at which time.
+ * :term:`software unit`
- mutual exclusion
- A term used to describe the act of preventing other tasks from accessing
- a resource simultaneously.
+ * explicitly defined :term:`ELF` symbol in a
+ :term:`source code` file
- nested
- A term used to describe an ASR that occurs during another ASR or an ISR
- that occurs during another ISR.
+ * :term:`assembler language` data in a source code file
- node
- A term used to reference a processor running RTEMS in a multiprocessor
- system.
+ * :term:`C language` object with static storage duration
- non-existent
- The state occupied by an uncreated or deleted task.
-
- NUMA
- An acronym for Non-Uniform Memory Access.
+ * C language object with thread-local storage duration
- numeric coprocessor
- A component used in computer systems to enhance performance in
- mathematically intensive situations. It is typically viewed as a logical
- extension of the primary processor.
+ * :term:`thread`
- object
- In this document, this term is used to refer collectively to tasks,
- timers, message queues, partitions, regions, semaphores, ports, and rate
- monotonic periods. All RTEMS objects have IDs and user-assigned names.
+ * :term:`interrupt service`
- object-oriented
- A term used to describe systems with common mechanisms for utilizing a
- variety of entities. Object-oriented systems shield the application from
- implementation details.
+ * collection of *software components* (this is a software architecture
+ element)
- operating system
- The software which controls all the computer's resources and provides the
- base upon which application programs can be written.
+ Please note that explicitly defined ELF symbols and assembler language
+ data are considered a software component only if they are defined in a
+ :term:`source code` file. For example, this rules out symbols
+ and data generated as side-effects by the toolchain (compiler, assembler,
+ linker) such as jump tables, linker trampolines, exception frame information,
+ etc.
- overhead
- The portion of the CPUs processing power consumed by the operating
- system.
+ software item
+ This term has the same meaning as :term:`software product`.
- packet
- A buffer which contains the messages passed between nodes in a
- multiprocessor system. A packet is the contents of an envelope.
+ software product
+ The *software product* is the :term:`RTEMS` real-time operating system.
- partition
- An RTEMS object which is used to allocate and deallocate fixed size
- blocks of memory from an dynamically specified area of memory.
+ software unit
+ This term is defined by ECSS-E-ST-40C 3.2.24 as a "separately compilable
+ piece of source code". For this project a *software unit* shall be any of
+ the following items and nothing else:
- partition
- Clusters with a cardinality of one are partitions.
+ * :term:`assembler language` function in a
+ :term:`source code` file
- Partition Control Block
- A data structure associated with each partition used by RTEMS to manage
- that partition.
+ * :term:`C language` function (external and internal linkage)
- pending
- A term used to describe a task blocked waiting for an event, message,
- semaphore, or signal.
+ A *software unit* is a :term:`software component`.
- periodic task
- A task which must execute at regular intervals and comply with a hard
- deadline.
+ source code
+ This project uses the *source code* definition of the
+ `Linux Information Project <http://www.linfo.org/source_code.html>`_:
+ "Source code (also referred to as source or code) is the version of
+ software as it is originally written (i.e., typed into a computer) by a
+ human in plain text (i.e., human readable alphanumeric characters)."
- physical address
- The actual hardware address of a resource.
+ sporadic task
+ A task which executes at irregular intervals and must comply with a hard
+ deadline. A minimum period of time between successive iterations of the
+ task can be guaranteed.
- poll
- A mechanism used to determine if an event has occurred by periodically
- checking for a particular status. Typical events include arrival of
- data, completion of an action, and errors.
+ stack
+ A data structure that is managed using a Last In First Out (LIFO)
+ discipline. Each task has a stack associated with it which is used to
+ store return information and local variables.
- pool
- A collection from which resources are allocated.
+ status code
+ A status code indicates the completion status of an operation. For
+ example most RTEMS directives return a status code through the
+ :term:`return value` to indicate a successful operation or error
+ conditions.
- portability
- A term used to describe the ease with which software can be rehosted on
- another computer.
+ suspend
+ A term used to describe a task that is not competing for the CPU because it
+ has had a ``rtems_task_suspend`` directive.
- posting
- The act of sending an event, message, semaphore, or signal to a task.
+ synchronous
+ Related in order or timing to other occurrences in the system.
- preempt
- The act of forcing a task to relinquish the processor and dispatching to
- another task.
+ system call
+ In this document, this is used as an alternate term for directive.
- priority
- A mechanism used to represent the relative importance of an element in a
- set of items. RTEMS uses priority to determine which task should
- execute.
+ target
+ The system on which the application will ultimately execute.
- priority boosting
- A simple approach to extend the priority inheritance protocol for
- clustered scheduling is priority boosting. In case a mutex is owned by a
- task of another cluster, then the priority of the owner task is raised to
- an artificially high priority, the pseudo-interrupt priority.
+ TAS
+ An acronym for Test-And-Set.
- priority inheritance
- An algorithm that calls for the lower priority task holding a resource to
- have its priority increased to that of the highest priority task blocked
- waiting for that resource. This avoids the problem of priority
- inversion.
+ task
+ This project uses the
+ `thread definition of Wikipedia <https://en.wikipedia.org/wiki/Thread_(computing)>`_:
+ "a thread of execution is the smallest sequence of programmed
+ instructions that can be managed independently by a scheduler, which is
+ typically a part of the operating system."
- priority inversion
- A form of indefinite postponement which occurs when a high priority tasks
- requests access to shared resource currently allocated to low priority
- task. The high priority task must block until the low priority task
- releases the resource.
+ It consists normally of a set of registers and a stack. The scheduler
+ assigns processors to a subset of the ready tasks. The terms task and
+ :term:`thread` are synonym in RTEMS. The term task is used
+ throughout the Classic API, however, internally in the operating system
+ implementation and the POSIX API the term thread is used.
- processor utilization
- The percentage of processor time used by a task or a set of tasks.
+ A *task* is a :term:`software component`.
- proxy
- An RTEMS control structure used to represent, on a remote node, a task
- which must block as part of a remote operation.
-
- Proxy Control Block
- A data structure associated with each proxy used by RTEMS to manage that
- proxy.
-
- PTCB
- An acronym for :term:`Partition Control Block`.
-
- PXCB
- An acronym for :term:`Proxy Control Block`.
-
- quantum
- The application defined unit of time in which the processor is allocated.
-
- queue
- Alternate term for message queue.
-
- QCB
- An acronym for :term:`Message Queue Control Block`.
-
- ready task
- A task occupies this state when it is available to be given control of a
- processor. A ready task has no processor assigned. The scheduler
- decided that other tasks are currently more important. A task that is
- ready to execute and has a processor assigned is called scheduled.
+ Task Control Block
+ A data structure associated with each task used by RTEMS to manage that
+ task.
- real-time
- A term used to describe systems which are characterized by requiring
- deterministic response times to external stimuli. The external stimuli
- require that the response occur at a precise time or the response is
- incorrect.
-
- reentrant
- A term used to describe routines which do not modify themselves or global
- variables.
-
- region
- An RTEMS object which is used to allocate and deallocate variable size
- blocks of memory from a dynamically specified area of memory.
-
- Region Control Block
- A data structure associated with each region used by RTEMS to manage that
- region.
-
- registers
- Registers are locations physically located within a component, typically
- used for device control or general purpose storage.
-
- remote
- Any object that does not reside on the local node.
-
- remote operation
- The manipulation of an object which does not reside on the same node as
- the calling task.
-
- return code
- Also known as error code or return value.
-
- resource
- A hardware or software entity to which access must be controlled.
-
- resume
- Removing a task from the suspend state. If the task's state is ready
- following a call to the ``rtems_task_resume`` directive, then the task is
- available for scheduling.
-
- return code
- A value returned by RTEMS directives to indicate the completion status of
- the directive.
-
- RNCB
- An acronym for :term:`Region Control Block`.
-
- round-robin
- A task scheduling discipline in which tasks of equal priority are
- executed in the order in which they are made ready.
-
- RS-232
- A standard for serial communications.
-
- running
- The state of a rate monotonic timer while it is being used to delineate a
- period. The timer exits this state by either expiring or being canceled.
-
- schedulable
- A set of tasks which can be guaranteed to meet their deadlines based upon
- a specific scheduling algorithm.
+ task migration
+ Task migration happens in case a task stops execution on one processor
+ and resumes execution on another processor.
- schedule
- The process of choosing which task should next enter the executing state.
-
- scheduled task
- A task is scheduled if it is allowed to execute and has a processor
- assigned. Such a task executes currently on a processor or is about to
- start execution. A task about to start execution it is an heir task on
- exactly one processor in the system.
-
- scheduler
- A scheduler or scheduling algorithm allocates processors to a subset of
- its set of ready tasks. So it manages access to the processor resource.
- Various algorithms exist to choose the tasks allowed to use a processor
- out of the set of ready tasks. One method is to assign each task a
- priority number and assign the tasks with the lowest priority number to
- one processor of the set of processors owned by a scheduler instance.
+ task processor affinity
+ The set of processors on which a task is allowed to execute.
- scheduler instance
- A scheduler instance is a scheduling algorithm with a corresponding
- context to store its internal state. Each processor in the system is
- owned by at most one scheduler instance. The processor to scheduler
- instance assignment is determined at application configuration time. See
- :ref:`Configuring a System`.
-
- segments
- Variable sized memory blocks allocated from a region.
-
- semaphore
- An RTEMS object which is used to synchronize tasks and provide mutually
- exclusive access to resources.
-
- Semaphore Control Block
- A data structure associated with each semaphore used by RTEMS to manage
- that semaphore.
-
- shared memory
- Memory which is accessible by multiple nodes in a multiprocessor system.
-
- signal
- An RTEMS provided mechanism to communicate asynchronously with a task.
- Upon reception of a signal, the ASR of the receiving task will be
- invoked.
-
- signal set
- A thirty-two bit entity which is used to represent a task's collection of
- pending signals and the signals sent to a task.
-
- SMCB
- An acronym for :term:`Semaphore Control Block`.
-
- SMP
- An acronym for Symmetric Multiprocessing.
-
- SMP locks
- The SMP locks ensure mutual exclusion on the lowest level and are a
- replacement for the sections of disabled interrupts. Interrupts are
- usually disabled while holding an SMP lock. They are implemented using
- atomic operations. Currently a ticket lock is used in RTEMS.
-
- SMP barriers
- The SMP barriers ensure that a defined set of independent threads of
- execution on a set of processors reaches a common synchronization point
- in time. They are implemented using atomic operations. Currently a
- sense barrier is used in RTEMS.
-
- soft real-time system
- A real-time system in which a missed deadline does not compromise the
- integrity of the system.
-
- sporadic task
- A task which executes at irregular intervals and must comply with a hard
- deadline. A minimum period of time between successive iterations of the
- task can be guaranteed.
-
- stack
- A data structure that is managed using a Last In First Out (LIFO)
- discipline. Each task has a stack associated with it which is used to
- store return information and local variables.
-
- status code
- Also known as error code or return value.
-
- suspend
- A term used to describe a task that is not competing for the CPU because it
- has had a ``rtems_task_suspend`` directive.
-
- synchronous
- Related in order or timing to other occurrences in the system.
-
- system call
- In this document, this is used as an alternate term for directive.
-
- target
- The system on which the application will ultimately execute.
-
- TAS
- An acronym for Test-And-Set.
-
- task
- A logically complete thread of execution. It consists normally of a set
- of registers and a stack. The scheduler assigns processors to a subset
- of the ready tasks. The terms task and thread are synonym in RTEMS. The
- term task is used throughout the Classic API, however, internally in the
- operating system implementation and the POSIX API the term thread is
- used.
-
- Task Control Block
- A data structure associated with each task used by RTEMS to manage that
- task.
-
- task migration
- Task migration happens in case a task stops execution on one processor
- and resumes execution on another processor.
-
- task processor affinity
- The set of processors on which a task is allowed to execute.
+ task switch
+ Alternate terminology for context switch. Taking control of the
+ processor from one task and given to another.
- task switch
- Alternate terminology for context switch. Taking control of the
- processor from one task and given to another.
+ TCB
+ An acronym for :term:`Task Control Block`.
- TCB
- An acronym for :term:`Task Control Block`.
+ thread
+ This term has the same meaning as :term:`task`.
- thread
- This term has the same meaning as :term:`task`.
+ thread dispatch
+ The thread dispatch transfers control of the processor from the currently
+ executing thread to the heir thread of the processor.
- thread dispatch
- The thread dispatch transfers control of the processor from the currently
- executing thread to the heir thread of the processor.
+ tick
+ The basic unit of time used by RTEMS. It is a user-configurable number
+ of microseconds. The current tick expires when a clock tick directive is
+ invoked.
- tick
- The basic unit of time used by RTEMS. It is a user-configurable number
- of microseconds. The current tick expires when a clock tick directive is
- invoked.
+ tightly-coupled
+ A multiprocessor configuration system which communicates via shared
+ memory.
- tightly-coupled
- A multiprocessor configuration system which communicates via shared
- memory.
+ timeout
+ An argument provided to a number of directives which determines the
+ maximum length of time an application task is willing to wait to acquire
+ the resource if it is not immediately available.
- timeout
- An argument provided to a number of directives which determines the
- maximum length of time an application task is willing to wait to acquire
- the resource if it is not immediately available.
+ timer
+ An RTEMS object used to invoke subprograms at a later time.
- timer
- An RTEMS object used to invoke subprograms at a later time.
+ Timer Control Block
+ A data structure associated with each timer used by RTEMS to manage that
+ timer.
- Timer Control Block
- A data structure associated with each timer used by RTEMS to manage that
- timer.
+ timeslice
+ The application defined unit of time in which the processor is allocated.
- timeslicing
- A task scheduling discipline in which tasks of equal priority are
- executed for a specific period of time before being preempted by another
- task.
+ timeslicing
+ A task scheduling discipline in which tasks of equal priority are
+ executed for a specific period of time before being preempted by another
+ task.
- timeslice
- The application defined unit of time in which the processor is allocated.
+ TLS
+ An acronym for Thread-Local Storage :cite:`Drepper:2013:TLS`. TLS is
+ available in :term:`C11` and :term:`C++11`. The support for TLS depends
+ on the CPU port :cite:`RTEMS:CPU`.
- TLS
- An acronym for Thread-Local Storage :cite:`Drepper:2013:TLS`. TLS is
- available in :term:`C11` and :term:`C++11`. The support for TLS depends
- on the CPU port :cite:`RTEMS:CPU`.
+ TMCB
+ An acronym for :term:`Timer Control Block`.
- TMCB
- An acronym for :term:`Timer Control Block`.
+ transient overload
+ A temporary rise in system activity which may cause deadlines to be
+ missed. Rate Monotonic Scheduling can be used to determine if all
+ deadlines will be met under transient overload.
- transient overload
- A temporary rise in system activity which may cause deadlines to be
- missed. Rate Monotonic Scheduling can be used to determine if all
- deadlines will be met under transient overload.
+ TTAS
+ An acronym for Test and Test-And-Set.
- TTAS
- An acronym for Test and Test-And-Set.
+ User Extension Table
+ A table which contains the entry points for each user extensions.
- user extensions
- Software routines provided by the application to enhance the
- functionality of RTEMS.
+ user extensions
+ Software routines provided by the application to enhance the
+ functionality of RTEMS.
- User Extension Table
- A table which contains the entry points for each user extensions.
+ User Initialization Tasks Table
+ A table which contains the information needed to create and start each of
+ the user initialization tasks.
- User Initialization Tasks Table
- A table which contains the information needed to create and start each of
- the user initialization tasks.
+ user-provided
+ These terms are used to designate any software routines which must be
+ written by the application designer.
- user-provided
- These terms are used to designate any software routines which must be
- written by the application designer.
+ user-supplied
+ This term has the same meaning as :term:`user-provided`.
- user-supplied
- This term has the same meaning as :term:`user-provided`.
+ vector
+ Memory pointers used by the processor to fetch the address of routines
+ which will handle various exceptions and interrupts.
- vector
- Memory pointers used by the processor to fetch the address of routines
- which will handle various exceptions and interrupts.
+ wait queue
+ The list of tasks blocked pending the release of a particular resource.
+ Message queues, regions, and semaphores have a wait queue associated with
+ them.
- wait queue
- The list of tasks blocked pending the release of a particular resource.
- Message queues, regions, and semaphores have a wait queue associated with
- them.
+ YAML
+ An acronym for `YAML Ain't Markup Language <https://yaml.org/>`_.
- yield
- When a task voluntarily releases control of the processor.
+ yield
+ When a task voluntarily releases control of the processor.
diff --git a/c-user/index.rst b/c-user/index.rst
index 30cd165..e958481 100644
--- a/c-user/index.rst
+++ b/c-user/index.rst
@@ -47,7 +47,7 @@ RTEMS Classic API Guide (|version|).
fatal_error
board_support_packages
user_extensions
- configuring_a_system
+ config/index
self_contained_objects
multiprocessing
symmetric_multiprocessing_services
diff --git a/c-user/multiprocessing.rst b/c-user/multiprocessing.rst
index e6f8271..f207106 100644
--- a/c-user/multiprocessing.rst
+++ b/c-user/multiprocessing.rst
@@ -179,6 +179,8 @@ errors.
.. index:: proxy, definition
+.. _MPCIProxies:
+
Proxies
-------
diff --git a/c-user/rate_monotonic_manager.rst b/c-user/rate_monotonic_manager.rst
index 1cc55fe..6152005 100644
--- a/c-user/rate_monotonic_manager.rst
+++ b/c-user/rate_monotonic_manager.rst
@@ -871,11 +871,14 @@ DIRECTIVE STATUS CODES:
:class: rtems-table
* - ``RTEMS_SUCCESSFUL``
- - period initiated successfully
+ - period status retrieved successfully
* - ``RTEMS_INVALID_ID``
- invalid rate monotonic period id
* - ``RTEMS_INVALID_ADDRESS``
- invalid address of status
+ * - ``RTEMS_NOT_DEFINED``
+ - no status is available due to the cpu usage of the task having been
+ reset since the period initiated
*DESCRIPTION:
This directive returns status information associated with the rate
@@ -938,7 +941,7 @@ DIRECTIVE STATUS CODES:
:class: rtems-table
* - ``RTEMS_SUCCESSFUL``
- - period initiated successfully
+ - period statistics retrieved successfully
* - ``RTEMS_INVALID_ID``
- invalid rate monotonic period id
* - ``RTEMS_INVALID_ADDRESS``
diff --git a/c-user/scheduling_concepts.rst b/c-user/scheduling_concepts.rst
index 22d39e1..dac39a8 100644
--- a/c-user/scheduling_concepts.rst
+++ b/c-user/scheduling_concepts.rst
@@ -37,6 +37,12 @@ The directives provided by the scheduler manager are:
- rtems_scheduler_get_maximum_priority_ - Get maximum task priority of a scheduler
+- rtems_scheduler_map_priority_to_posix_ - Map task priority to POSIX thread
+ prority
+
+- rtems_scheduler_map_priority_from_posix_ - Map POSIX thread priority to task
+ prority
+
- rtems_scheduler_get_processor_ - Get current processor index
- rtems_scheduler_get_processor_maximum_ - Get processor maximum
@@ -701,6 +707,80 @@ NOTES:
\clearpage
+.. _rtems_scheduler_map_priority_to_posix:
+
+SCHEDULER_MAP_PRIORITY_TO_POSIX - Map task priority to POSIX thread prority
+---------------------------------------------------------------------------
+
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_scheduler_map_priority_to_posix(
+ rtems_id scheduler_id,
+ rtems_task_priority priority,
+ int *posix_priority
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - Successful operation.
+ * - ``RTEMS_INVALID_ADDRESS``
+ - The ``posix_priority`` parameter is ``NULL``.
+ * - ``RTEMS_INVALID_ID``
+ - Invalid scheduler instance identifier.
+ * - ``RTEMS_INVALID_PRIORITY``
+ - Invalid task priority.
+
+DESCRIPTION:
+ Maps a task priority to the corresponding POSIX thread priority.
+
+NOTES:
+ None.
+
+.. raw:: latex
+
+ \clearpage
+
+.. _rtems_scheduler_map_priority_from_posix:
+
+SCHEDULER_MAP_PRIORITY_FROM_POSIX - Map POSIX thread prority to task priority
+-----------------------------------------------------------------------------
+
+CALLING SEQUENCE:
+ .. code-block:: c
+
+ rtems_status_code rtems_scheduler_map_priority_from_posix(
+ rtems_id scheduler_id,
+ int posix_priority,
+ rtems_task_priority *priority
+ );
+
+DIRECTIVE STATUS CODES:
+ .. list-table::
+ :class: rtems-table
+
+ * - ``RTEMS_SUCCESSFUL``
+ - Successful operation.
+ * - ``RTEMS_INVALID_ADDRESS``
+ - The ``priority`` parameter is ``NULL``.
+ * - ``RTEMS_INVALID_ID``
+ - Invalid scheduler instance identifier.
+ * - ``RTEMS_INVALID_PRIORITY``
+ - Invalid POSIX thread priority.
+
+DESCRIPTION:
+ Maps a POSIX thread priority to the corresponding task priority.
+
+NOTES:
+ None.
+
+.. raw:: latex
+
+ \clearpage
+
.. _rtems_scheduler_get_processor:
SCHEDULER_GET_PROCESSOR - Get current processor index
diff --git a/c-user/self_contained_objects.rst b/c-user/self_contained_objects.rst
index 1c1e664..0be1423 100644
--- a/c-user/self_contained_objects.rst
+++ b/c-user/self_contained_objects.rst
@@ -159,8 +159,7 @@ They must be destroyed via
* :c:func:`rtems_mutex_destroy`.
-is undefined. Objects of the type :c:type:`rtems_recursive_mutex` must be
-initialized via
+Objects of the type :c:type:`rtems_recursive_mutex` must be initialized via
* :c:func:`RTEMS_RECURSIVE_MUTEX_INITIALIZER`, or
diff --git a/c-user/symmetric_multiprocessing_services.rst b/c-user/symmetric_multiprocessing_services.rst
index 337de98..acfee56 100644
--- a/c-user/symmetric_multiprocessing_services.rst
+++ b/c-user/symmetric_multiprocessing_services.rst
@@ -683,6 +683,8 @@ The withdraw operation takes away scheduler nodes once the thread is no longer
allowed to use them, e.g. it released a mutex. The availability of scheduler
nodes for a thread is controlled by the thread queues.
+.. _SMPThreadDispatchDetails:
+
Thread Dispatch Details
-----------------------
diff --git a/c-user/task_manager.rst b/c-user/task_manager.rst
index fdbf41b..aca3699 100644
--- a/c-user/task_manager.rst
+++ b/c-user/task_manager.rst
@@ -1,5 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
.. Copyright (C) 1988, 2008 On-Line Applications Research Corporation (OAR)
.. index:: tasks
@@ -82,6 +83,8 @@ From RTEMS' perspective, a task is the smallest thread of execution which can
compete on its own for system resources. A task is manifested by the existence
of a task control block (TCB).
+.. _TaskControlBlock:
+
Task Control Block
------------------
@@ -103,6 +106,34 @@ regains control of the processor, its context is restored from the TCB. When a
task is restarted, the initial state of the task is restored from the starting
context area in the task's TCB.
+.. index:: task memory
+
+Task Memory
+-----------
+
+The system uses two separate memory areas to manage a task. One memory area is
+the :ref:`TaskControlBlock`. The other memory area is allocated from the stack
+space or provided by the user and contains
+
+* the task stack,
+
+* the thread-local storage (:term:`TLS`), and
+
+* an optional architecture-specific floating-point context.
+
+The size of the thread-local storage is determined at link time. A
+user-provided task stack must take the size of the thread-local storage into
+account.
+
+On architectures with a dedicated floating-point context, the application
+configuration assumes that every task is a floating-point task, but whether or
+not a task is actually floating-point is determined at runtime during task
+creation (see :ref:`TaskFloatingPointConsiderations`). In highly memory
+constrained systems this potential overestimate of the task stack space can be
+mitigated through the :ref:`CONFIGURE_MINIMUM_TASK_STACK_SIZE` configuration
+option and aligned task stack sizes for the tasks. A user-provided task stack
+must take the potential floating-point context into account.
+
.. index:: task name
Task Name
@@ -271,25 +302,31 @@ an index into an array of parameter blocks.
.. index:: floating point
+.. _TaskFloatingPointConsiderations:
+
Floating Point Considerations
-----------------------------
+Please consult the *RTEMS CPU Architecture Supplement* if this section is
+relevant on your architecture. On some architectures the floating-point context
+is contained in the normal task context and this section does not apply.
+
Creating a task with the ``RTEMS_FLOATING_POINT`` attribute flag results in
-additional memory being allocated for the TCB to store the state of the numeric
-coprocessor during task switches. This additional memory is *NOT* allocated for
-``RTEMS_NO_FLOATING_POINT`` tasks. Saving and restoring the context of a
+additional memory being allocated for the task to store the state of the numeric
+coprocessor during task switches. This additional memory is **not** allocated
+for ``RTEMS_NO_FLOATING_POINT`` tasks. Saving and restoring the context of a
``RTEMS_FLOATING_POINT`` task takes longer than that of a
``RTEMS_NO_FLOATING_POINT`` task because of the relatively large amount of time
-required for the numeric coprocessor to save or restore its computational
-state.
+required for the numeric coprocessor to save or restore its computational state.
Since RTEMS was designed specifically for embedded military applications which
are floating point intensive, the executive is optimized to avoid unnecessarily
-saving and restoring the state of the numeric coprocessor. The state of the
-numeric coprocessor is only saved when a ``RTEMS_FLOATING_POINT`` task is
-dispatched and that task was not the last task to utilize the coprocessor. In
-a system with only one ``RTEMS_FLOATING_POINT`` task, the state of the numeric
-coprocessor will never be saved or restored.
+saving and restoring the state of the numeric coprocessor. In uniprocessor
+configurations, the state of the numeric coprocessor is only saved when a
+``RTEMS_FLOATING_POINT`` task is dispatched and that task was not the last task
+to utilize the coprocessor. In a uniprocessor system with only one
+``RTEMS_FLOATING_POINT`` task, the state of the numeric coprocessor will never
+be saved or restored.
Although the overhead imposed by ``RTEMS_FLOATING_POINT`` tasks is minimal,
some applications may wish to completely avoid the overhead associated with
@@ -299,10 +336,13 @@ point operations, a ``RTEMS_NO_FLOATING_POINT`` task can utilize the numeric
coprocessor without incurring the overhead of a ``RTEMS_FLOATING_POINT``
context switch. This approach also avoids the allocation of a floating point
context area. However, if this approach is taken by the application designer,
-NO tasks should be created as ``RTEMS_FLOATING_POINT`` tasks. Otherwise, the
+**no** tasks should be created as ``RTEMS_FLOATING_POINT`` tasks. Otherwise, the
floating point context will not be correctly maintained because RTEMS assumes
that the state of the numeric coprocessor will not be altered by
-``RTEMS_NO_FLOATING_POINT`` tasks.
+``RTEMS_NO_FLOATING_POINT`` tasks. Some architectures with a dedicated
+floating-point context raise a processor exception if a task with
+``RTEMS_NO_FLOATING_POINT`` issues a floating-point instruction, so this
+approach may not work at all.
If the supported processor type does not have hardware floating capabilities or
a standard numeric coprocessor, RTEMS will not provide built-in support for
diff --git a/c-user/user_extensions.rst b/c-user/user_extensions.rst
index 0840f65..c3bd1c6 100644
--- a/c-user/user_extensions.rst
+++ b/c-user/user_extensions.rst
@@ -261,9 +261,7 @@ destructors and thread-local object destructors run in this context.
Thread Switch Extension
-----------------------
-The thread switch extension is invoked before the context switch from the
-currently executing thread to the heir thread. The thread switch extension is
-defined as follows.
+The thread switch extension is defined as follows.
.. code-block:: c
@@ -272,18 +270,34 @@ defined as follows.
rtems_tcb *heir
);
-The :c:data:`executing` is a pointer to the TCB of the currently executing
-thread. The :c:data:`heir` is a pointer to the TCB of the heir thread.
+The invocation conditions of the thread switch extension depend on whether RTEMS
+was configured for uniprocessor or SMP systems. A user must pay attention to
+the differences to correctly implement a thread switch extension.
+
+In uniprocessor configurations, the thread switch extension is invoked before
+the context switch from the currently executing thread to the heir thread. The
+:c:data:`executing` is a pointer to the TCB of the currently executing thread.
+The :c:data:`heir` is a pointer to the TCB of the heir thread. The context
+switch initiated through the multitasking start is not covered by the thread
+switch extension.
+
+In SMP configurations, the thread switch extension is invoked after the context
+switch to the new executing thread (previous heir thread). The
+:c:data:`executing` is a pointer to the TCB of the previously executing thread.
+Despite the name, this is not the currently executing thread. The
+:c:data:`heir` is a pointer to the TCB of the newly executing thread. This is
+the currently executing thread. The context switches initiated through the
+multitasking start are covered by the thread switch extension. The reason for
+the differences to uniprocessor configurations is that the context switch may
+update the heir thread of the processor, see :ref:`SMPThreadDispatchDetails`.
+The thread switch extensions are invoked with disabled interrupts and with
+ownership of a per-processor SMP lock. Thread switch extensions may run in
+parallel on multiple processors. It is recommended to use thread-local or
+per-processor data structures for thread switch extensions. A global SMP lock
+should be avoided for performance reasons.
The thread switch extension is invoked in forward order with thread dispatching
-disabled. In SMP configurations, interrupts are disabled and the per-processor
-SMP lock is owned. Thread switch extensions may run in parallel on multiple
-processors. It is recommended to use thread-local or per-processor data
-structures in SMP configurations for thread switch extensions. A global SMP
-lock should be avoided for performance reasons.
-
-The context switches initiated through the multitasking start are not covered
-by the thread switch extension.
+disabled.
.. index:: rtems_task_begin_extension
diff --git a/common/_static/my-styles.css b/common/_static/my-styles.css
index 7040e75..bc67c33 100644
--- a/common/_static/my-styles.css
+++ b/common/_static/my-styles.css
@@ -29,6 +29,11 @@
color: #a87892;
}
+.highlight {
+ background: rgba(250, 252, 237);
+ color: rgba(0, 0, 0);
+}
+
/*
* Literals.
*/
diff --git a/common/conf.py b/common/conf.py
index fe44640..257bc4e 100644
--- a/common/conf.py
+++ b/common/conf.py
@@ -1,7 +1,10 @@
+import version as rtems_version
+
extensions = [
"sphinx.ext.autodoc",
"sphinx.ext.coverage",
"sphinx.ext.doctest",
+ "sphinx.ext.extlinks",
"sphinx.ext.graphviz",
"sphinx.ext.intersphinx",
"sphinx.ext.mathjax",
@@ -9,6 +12,8 @@ extensions = [
"rtemsdomain",
]
+extlinks = {'release_path': ('https://ftp.rtems.org/pub/rtems/releases', None) }
+
# Add any paths that contain templates here, relative to this directory.
#templates_path = ['build/_templates']
@@ -23,17 +28,21 @@ master_doc = 'index'
# General information about the project.
project = u'RTEMS Documentation Project'
-copyright = u'1988, 2019 RTEMS Project and contributors'
+copyright = u'1988, 2020 RTEMS Project and contributors'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
-#version = '@VERSION@'
+version = rtems_version.version()
# The full version, including alpha/beta/rc tags.
-#release = '@RELEASE@'
+release = rtems_version.string()
+
+major = rtems_version.major()
+minor = rtems_version.minor()
+revision = rtems_version.revision()
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
@@ -184,6 +193,7 @@ latex_elements = {
\newcommand{\rtemscopyright}{%s}
\usepackage{rtemsstyle}
''' % (copyright),
+ 'maketitle': r'\rtemsmaketitle',
'parsedliteralwraps': True,
}
diff --git a/common/rtemsstyle.sty b/common/rtemsstyle.sty
index 15f80b5..90e7de5 100644
--- a/common/rtemsstyle.sty
+++ b/common/rtemsstyle.sty
@@ -20,7 +20,7 @@ numbersep=5pt,
gobble=0,
}
-\renewcommand{\maketitle}{%
+\newcommand{\rtemsmaketitle}{%
\let\spx@tempa\relax
\ifHy@pageanchor\def\spx@tempa{\Hy@pageanchortrue}\fi
\hypersetup{pageanchor=false}% avoid duplicate destination warnings
diff --git a/common/version.py b/common/version.py
index 9beb3e7..281c880 100644
--- a/common/version.py
+++ b/common/version.py
@@ -1,6 +1,6 @@
#
# RTEMS Documentation Project (http://www.rtems.org/)
-# Copyright 2019 Chris Johns (chrisj@rtems.org)
+# Copyright 2019, 2020 Chris Johns (chrisj@rtems.org)
# Copyright (C) 2019 embedded brains GmbH
# All rights reserved.
#
@@ -66,6 +66,9 @@ from __future__ import print_function
import os.path
_version = 'invalid'
+_major = 0
+_minor = 0
+_revision = 0
_date = 'unknown date'
_released = False
@@ -155,6 +158,17 @@ def get(ctx, rtems_major_version):
_version = version
_date = date
_release = released
+ if version != 'invalid':
+ vs = _version.split('.')
+ _major = vs[0]
+ if len(vs) == 3:
+ _minor = vs[1]
+ _revision = vs[2]
+ elif len(vs) == 2:
+ _minor = 0
+ _revision = vs[1]
+ else:
+ ctx.fatal('Invalid version format: %s' % (_version))
return version, date, released
def string():
@@ -163,6 +177,15 @@ def string():
def version():
return _version
+def major():
+ return _major
+
+def minor():
+ return _minor
+
+def revision():
+ return revision
+
def date():
return _date
diff --git a/common/waf.py b/common/waf.py
index 066048d..7027eb6 100644
--- a/common/waf.py
+++ b/common/waf.py
@@ -19,7 +19,10 @@ import conf
sphinx_min_version = (1, 3)
def version_cmdline(ctx):
- return '-Drelease="%s" -Dversion="%s"' % (ctx.env.RELEASE, ctx.env.VERSION)
+ return '-Drelease="%s" -Dversion="%s" -Drtems_major="%s" ' \
+ '-Drtems_minor="%s" -D rtems_revision="%s"' \
+ % (ctx.env.RELEASE, ctx.env.VERSION, ctx.env.RTEMS_MAJOR,
+ ctx.env.RTEMS_MINOR, ctx.env.RTEMS_REVISION)
def sphinx_cmdline(ctx, build_type, conf_dir, doctrees,
source_dir, output_dir, configs = []):
@@ -84,6 +87,9 @@ class linkcheck(BuildContext):
def check_sphinx_version(ctx, minver):
try:
import sphinx
+ except:
+ ctx.fatal('no sphinx support found; please install')
+ try:
# sphinx.version_info was introduced in sphinx ver 1.2
version = sphinx.version_info
# version looks like (1, 7, 0, 'final', 0))
diff --git a/eng/doc-guide.rst b/eng/doc-guide.rst
new file mode 100644
index 0000000..cdcd04f
--- /dev/null
+++ b/eng/doc-guide.rst
@@ -0,0 +1,79 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+
+.. _DocGuide:
+
+Documentation Guidelines
+************************
+
+Application Configuration Options
+=================================
+
+Add at least an index entry and a label for the configuration option. Use a
+pattern of ``CONFIGURE_[A-Z0-9_]+`` for the option name. Use the following
+template for application configuration feature options:
+
+.. code-block:: rst
+
+ .. index:: CONFIGURE_FEATURE
+
+ .. _CONFIGURE_FEATURE:
+
+ CONFIGURE_FEATURE
+ -----------------
+
+ CONSTANT:
+ ``CONFIGURE_FEATURE``
+
+ OPTION TYPE:
+ This configuration option is a boolean feature define.
+
+ DEFAULT CONFIGURATION:
+ If this configuration option is undefined, then the described feature is not
+ enabled.
+
+ DESCRIPTION:
+ In case this configuration option is defined, then feature happens.
+
+ NOTES:
+ Keep the description short. Add all special cases, usage notes, error
+ conditions, configuration dependencies, references, etc. here to the notes.
+
+Use the following template for application configuration integer and
+initializer options:
+
+.. code-block:: rst
+
+ .. index:: CONFIGURE_VALUE
+
+ .. _CONFIGURE_VALUE:
+
+ CONFIGURE_VALUE
+ -----------------
+
+ CONSTANT:
+ ``CONFIGURE_VALUE``
+
+ OPTION TYPE:
+ This configuration option is an integer (or initializer) define.
+
+ DEFAULT VALUE:
+ The default value is X.
+
+ VALUE CONSTRAINTS:
+ The value of this configuration option shall satisfy all of the following
+ constraints:
+
+ * It shall be greater than or equal to A.
+
+ * It shall be less than or equal to B.
+
+ * It shall meet C.
+
+ DESCRIPTION:
+ The value of this configuration option defines the Y of Z in W.
+
+ NOTES:
+ Keep the description short. Add all special cases, usage notes, error
+ conditions, configuration dependencies, references, etc. here to the notes.
diff --git a/eng/glossary.rst b/eng/glossary.rst
new file mode 100644
index 0000000..d0fc1eb
--- /dev/null
+++ b/eng/glossary.rst
@@ -0,0 +1,150 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2017, 2019 embedded brains GmbH (http://www.embedded-brains.de)
+.. Copyright (C) 1988, 1998 On-Line Applications Research Corporation (OAR)
+
+Glossary
+********
+
+.. glossary::
+ :sorted:
+
+ ABI
+ An acronym for Application Binary Interface.
+
+ API
+ An acronym for Application Programming Interface.
+
+ assembler language
+ The assembler language is a programming language which can be translated very
+ easily into machine code and data. For this project assembler languages are
+ restricted to languages accepted by the :term:`GNU` assembler
+ program for the target architectures.
+
+ C language
+ The C language for this project is defined in terms of
+ :term:`C11`.
+
+ C11
+ The standard ISO/IEC 9899:2011.
+
+ CCB
+ An acronym for Change Control Board.
+
+ Doorstop
+ `Doorstop <https://github.com/doorstop-dev/doorstop>`_ is a
+ requirements management tool.
+
+ EARS
+ An acronym for Easy Approach to Requirements Syntax.
+
+ ELF
+ An acronym for
+ `Executable and Linkable Format <https://en.wikipedia.org/wiki/Executable_and_Linkable_Format>`_.
+
+ GCC
+ An acronym for `GNU Compiler Collection <https://gcc.gnu.org/>`_.
+
+ GNAT
+ *GNAT* is the :term:`GNU` compiler for Ada, integrated into the
+ :term:`GCC`.
+
+ GNU
+ An acronym for `GNU's Not Unix <https://www.gnu.org/>`_.
+
+ interrupt service
+ An *interrupt service* consists of an
+ :term:`Interrupt Service Routine` which is called with a user
+ provided argument upon reception of an interrupt service request. The
+ routine is invoked in interrupt context. Interrupt service requests may have
+ a priority and an affinity to a set of processors. An *interrupt service* is
+ a :term:`software component`.
+
+ Interrupt Service Routine
+ An ISR is invoked by the CPU to process a pending interrupt.
+
+ ISVV
+ An acronym for Independent Software Verification and Validation.
+
+ ReqIF
+ An acronym for
+ `Requirements Interchange Format <https://www.omg.org/spec/ReqIF/About-ReqIF/>`_.
+
+ RTEMS
+ An acronym for Real-Time Executive for Multiprocessor Systems.
+
+ software component
+ This term is defined by ECSS-E-ST-40C 3.2.28 as a "part of a software
+ system". For this project a *software component* shall be any of the
+ following items and nothing else:
+
+ * :term:`software unit`
+
+ * explicitly defined :term:`ELF` symbol in a
+ :term:`source code` file
+
+ * :term:`assembler language` data in a source code file
+
+ * :term:`C language` object with static storage duration
+
+ * C language object with thread-local storage duration
+
+ * :term:`thread`
+
+ * :term:`interrupt service`
+
+ * collection of *software components* (this is a software architecture
+ element)
+
+ Please note that explicitly defined ELF symbols and assembler language
+ data are considered a software component only if they are defined in a
+ :term:`source code` file. For example, this rules out symbols
+ and data generated as side-effects by the toolchain (compiler, assembler,
+ linker) such as jump tables, linker trampolines, exception frame information,
+ etc.
+
+ software item
+ This term has the same meaning as :term:`software product`.
+
+ software product
+ The *software product* is the :term:`RTEMS` real-time operating system.
+
+ software unit
+ This term is defined by ECSS-E-ST-40C 3.2.24 as a "separately compilable
+ piece of source code". For this project a *software unit* shall be any of
+ the following items and nothing else:
+
+ * :term:`assembler language` function in a
+ :term:`source code` file
+
+ * :term:`C language` function (external and internal linkage)
+
+ A *software unit* is a :term:`software component`.
+
+ source code
+ This project uses the *source code* definition of the
+ `Linux Information Project <http://www.linfo.org/source_code.html>`_:
+ "Source code (also referred to as source or code) is the version of
+ software as it is originally written (i.e., typed into a computer) by a
+ human in plain text (i.e., human readable alphanumeric characters)."
+
+ task
+ This project uses the
+ `thread definition of Wikipedia <https://en.wikipedia.org/wiki/Thread_(computing)>`_:
+ "a thread of execution is the smallest sequence of programmed
+ instructions that can be managed independently by a scheduler, which is
+ typically a part of the operating system."
+
+ It consists normally of a set of registers and a stack. The scheduler
+ assigns processors to a subset of the ready tasks. The terms task and
+ :term:`thread` are synonym in RTEMS. The term task is used
+ throughout the Classic API, however, internally in the operating system
+ implementation and the POSIX API the term thread is used.
+
+ A *task* is a :term:`software component`.
+
+ thread
+ This term has the same meaning as :term:`task`.
+
+ YAML
+ An acronym for `YAML Ain't Markup Language <https://yaml.org/>`_.
diff --git a/eng/index.rst b/eng/index.rst
index ed314a9..a317727 100644
--- a/eng/index.rst
+++ b/eng/index.rst
@@ -37,4 +37,5 @@ RTEMS Software Engineering (|version|)
appendix-a
function_and_variable
concept
+ glossary
zreferences
diff --git a/eng/management.rst b/eng/management.rst
index 064559c..6a8e057 100644
--- a/eng/management.rst
+++ b/eng/management.rst
@@ -16,5 +16,7 @@ Software Development Management
vc-users
vc-authors
coding
+ doc-guide
+ python-devel
change-management
issue-tracking
diff --git a/eng/python-devel.rst b/eng/python-devel.rst
new file mode 100644
index 0000000..b1e0fa6
--- /dev/null
+++ b/eng/python-devel.rst
@@ -0,0 +1,163 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+
+.. _PythonDevelGuide:
+
+Python Development Guidelines
+*****************************
+
+Python is the preferred programming language for the RTEMS Tools. The RTEMS
+Tools run on the host computer of an RTEMS user or maintainer. These
+guidelines cover the Python language version, the source code formatting, use
+of static analysis tools, type annotations, testing, code coverage, and
+documentation. There are exceptions for existing code and third-party code.
+It is recommended to read the
+`PEP 8 - Style Guide for Python Code <https://www.python.org/dev/peps/pep-0008/>`_
+and the
+`Google Python Style Guide <http://google.github.io/styleguide/pyguide.html>`_.
+
+Python Language Versions
+========================
+
+Although the official end-of-life of Python 2.7 was on January 1, 2020, the
+RTEMS Project still cares about Python 2.7 compatibility for some tools. Every
+tool provided by the RTEMS Project which an RTEMS user may use to develop
+applications with RTEMS should be Python 2.7 compatible. Examples are the
+build system, the RTEMS Source Builder, and the RTEMS Tester. The rationale is
+that there are still some maintained Linux distributions in the wild which ship
+only Python 2.7 by default. An example is CentOS 7 which gets maintenance
+updates until June 2024. Everything an RTEMS maintainer uses should be written
+in Python 3.6.
+
+Python Code Formatting
+======================
+
+Good looking code is important. Unfortunately, what looks good is a bit
+subjective and varies from developer to developer. Arguing about the code
+format is not productive. Code reviews should focus on more important topics,
+for example functionality, testability, and performance. Fortunately, for
+Python there are some good automatic code formatters available. All new code
+specifically developed for the RTEMS Tools should be piped through the
+`yapf <https://github.com/google/yapf>`_ Python code formatter before it is
+committed or sent for review. Use the default settings of the tool
+(`PEP 8 <https://www.python.org/dev/peps/pep-0008/>`_ coding style).
+
+You can disable the automatic formatting by the tool in a region starting with
+the ``#yapf: disable`` comment until the next ``# yapf: enable`` comment, for
+example
+
+.. code-block:: python
+
+ # yapf: disable
+ FOO = {
+ # ... some very large, complex data literal.
+ }
+
+ BAR = [
+ # ... another large data literal.
+ ]
+ # yapf: enable
+
+For a single literal, you can disable the formatting like this:
+
+.. code-block:: python
+
+ BAZ = {
+ (1, 2, 3, 4),
+ (5, 6, 7, 8),
+ (9, 10, 11, 12),
+ } # yapf: disable
+
+Static Analysis Tools
+=====================
+
+Use the ``flake8`` and ``pylint`` static analysis tools for Python. Do not
+commit your code or send it for review if the tools find some rule
+violations. Run the tools with the default configuration. If you have
+problems to silence the tools, then please ask for help on the :r:list:`devel`.
+Consult the tool documentation to silence false positives.
+
+Type Annotations
+================
+
+For Python 3.6 or later code use type annotations. All public functions of
+your modules should have `PEP 484 <https://www.python.org/dev/peps/pep-0484/>`_
+type annotations. Check for type issues with the
+`mypy <http://mypy-lang.org/>`_ static type checker.
+
+Testing
+=======
+
+Write tests for your code with the
+`pytest <https://docs.pytest.org/en/latest/contents.html>`_ framework. Use the
+`monkeypatch <https://docs.pytest.org/en/latest/monkeypatch.html>`_ mocking
+module. Do not use the standard Python ``unittest`` and ``unittest.mock``
+modules. Use ``coverage run -m pytest`` to run the tests with code coverage
+support. If you modify existing code or contribute new code to a subproject
+which uses tests and the code coverage metric, then do not make the code
+coverage worse.
+
+Test Organization
+-----------------
+
+Do not use test classes to group tests. Use separate files instead. Avoid
+deep test directory hierarchies. For example, place tests for
+:file:`mymodule.py` in :file:`tests/test_mymodule.py`. For class-specific
+tests use:
+
+* ``mymodule.py:class First`` :math:`\rightarrow`
+ :file:`tests/test_mymodule_first.py`
+
+* ``mymodule.py:class Second`` :math:`\rightarrow`
+ :file:`tests/test_mymodule_second.py`
+
+* ``mymodule.py:class Third`` :math:`\rightarrow`
+ :file:`tests/test_mymodule_third.py`
+
+You can also group tests in other ways, for example:
+
+* :file:`mymodule.py` :math:`\rightarrow` :file:`tests/test_mymodule_input.py`
+
+* :file:`mymodule.py` :math:`\rightarrow` :file:`tests/test_mymodule_output.py`
+
+Documentation
+=============
+
+Document your code using the
+`PEP 257 - Docstring Conventions <https://www.python.org/dev/peps/pep-0257/>`_.
+Contrary to PEP 257, use the descriptive-style
+(``"""Fetches rows from a Bigtable."""``) instead of imperative-style
+(``"""Fetch rows from a Bigtable."""``) as recommended by
+`Comments and Docstrings - Functions and Methods <http://google.github.io/styleguide/pyguide.html#383-functions-and-methods>`_.
+Use the
+`Sphinx <https://sphinx-rtd-tutorial.readthedocs.io/en/latest/docstrings.html>`_
+format. The
+`sphinx-autodoc-typehints <https://pypi.org/project/sphinx-autodoc-typehints/>`_
+helps to reuse the type annotations for the documentation. Test code does not
+need docstrings in general.
+
+Existing Code
+=============
+
+Existing code in the RTEMS Tools may not follow the preceding guidelines. The
+RTEMS Project welcomes contributions which bring existing code in line with the
+guidelines. Firstly, run the ``yapf`` code formatter through the existing code
+of interest. Add ``# yapf: disable`` comments to avoid reformatting in some
+areas if it makes sense. If the existing code has no unit tests, then add unit
+tests before you modify existing code by hand. With the new unit tests aim at
+a good code coverage especially in the areas you intend to modify. While you
+review the code add docstrings. Run the static analysers and fix the rule
+violations. Please keep in mind that also trivial modifications can break
+working code. Make sure you have some unit tests. Add type annotations unless
+the code should be Python 2.7 compatible. Concentrate on the public
+interfaces.
+
+Third-Party Code
+================
+
+Try to not modify imported third-party code. In case there are issues with
+third-party code, then at least write a bug report or otherwise contact the
+upstream project. Reimport the third-party code after the issue is fixed in
+the upstream project. Only temporarily modify imported third-party code until
+a solution integrated in the upstream is available.
diff --git a/eng/release-mgmt.rst b/eng/release-mgmt.rst
index 6706d62..ff97d19 100644
--- a/eng/release-mgmt.rst
+++ b/eng/release-mgmt.rst
@@ -7,11 +7,9 @@
Software Release Management
***************************
-TBD write content
-
-
.. COMMENT: Subsections
.. toctree::
+ release-process
change-reports
vdd-generation
diff --git a/eng/release-process.rst b/eng/release-process.rst
new file mode 100644
index 0000000..d8b4381
--- /dev/null
+++ b/eng/release-process.rst
@@ -0,0 +1,270 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 Contemporary Software
+.. Copyright (C) 2020 Chris Johns
+
+.. _Release_Process:
+
+Release Process
+***************
+
+The release process creates an RTEMS release. The process has a number of
+stages that happen before a release can be made, during the creation of the
+release procedure and after the release has been made.
+
+Releases
+========
+
+RTEMS is released as a collection of ready to use source code and built
+documentation. Releases are publicly available on the RTEMS servers under
+https://ftp.rtems.org/pub/rtems/releases.
+
+Releases are group under the major version number as a collection of
+directories consisting of the version number. This is termed a release
+series. A release may also contain release snapshots.
+
+All releases must have a three digit version number and this can be optionally
+followed by a dash character (``-``) and an identifier, e.g. ``5.1.0-acme-1``.
+
+The RTEMS Project reserves releases with only the three digit version number,
+e.g. ``5.1.0``. This identifies an RTEMS Project release.
+
+Release Layout
+--------------
+
+* All released source archives are XZ compressed tar files.
+
+* Top level contains:
+
+:file:`README.txt`:
+ A set of brief release instructions.
+
+:file:`contrib`:
+ Contributed sources. For example the release scripts used to create the
+ release.
+
+:file:`docs`:
+ Compressed documentation build in HTML, Single page HTML and PDF
+ formats. Provide compressed files for each document and a single archive
+ of all the documentation. Provide an SHA512 check sum file.
+
+:file:`rtems-<VERSION>-release-notes.pdf`:
+ RTEMS Release notes document the changes in a release. This is a capture
+ of the Trac report for the release's milestone in PDF format.
+
+:file:`sha512sum.txt`:
+ SHA512 checksum of all files in this directory.
+
+:file:`sources`:
+ All source code referenced by the release.
+
+Release Version Numbering
+-------------------------
+
+The release numbering scheme changed with RTEMS 5.
+
+The master branch has the version N.0.0 with N being the next major release
+number. The release branch in a repository will be just the major number.
+
+The first release of this series will have the version number N.1.0. The first
+bugfix release (minor release) of this series will have the version number
+N.2.0.
+
+The release branch will have the version number N.M.1 with M being the last
+minor release of this series. Tools will use N as the version number and must
+be compatible with all releases and the release branch of the N series.
+
+Examples:
+
+ - ``5.0.0`` is the version number of the development master for the 5 series
+
+ - ``5.1.0`` is the first release of the 5 series
+
+ - ``5.1.1`` is the version number of the 5 series release branch right after
+ the 5.1.0 release until 5.2.0 is released
+
+ - ``5.2.0`` is the first bugfix release of the 5 series
+
+ - ``5.2.1`` is the version number of the 5 series release branch right after
+ the 5.2.0 release until 5.3.0 is released
+
+ - ``6.0.0`` is the version number of the development master for the 6 series
+
+Release Scripts
+----------------
+
+* The release scripts are held in the top level repository
+ https://git.rtems.org/rtems-release.git.
+
+* The scripts are written for FreeBSD and can run on FreeBSD 10 through
+ FreeBSD 12. No other host operating system is supported for the release
+ scripts. Updates are welcome if the changes do not affect the operation on
+ FreeBSD.
+
+* A Python ``virutalenv`` environment is required for a working Sphinx
+ documentation building environment. Follow the procedure in the
+ ``rtems-docs.git`` top level ``README`` file.
+
+* Building a standard release requires you provide the release major number
+ and the release's remaining version string including any additional
+ identifiers:
+
+ .. code-block:: none
+
+ ./rtems-release 5 1.0
+
+ To create a release snapshot:
+
+ .. code-block:: none
+
+ ./rtems-release 5 0.0-m2003
+
+* A 3rd option of a release URL can be provided to create a test or deployable
+ release. The URL is a base path the RSB uses to download the release source
+ files from:
+
+ .. code-block:: none
+
+ ./rtems-release \
+ -u https://ftp.rtems.org/pub/rtems/people/chrisj/releases \
+ 5 0.0-m2003-2
+
+* Building the release notes requires the Web Toolkit HTML to PDF converter be
+ installed. The FreeBSD package is ``wkhtmltopdf``.
+
+Release Snapshots
+-----------------
+
+* Release snapshots are only created for the current development version of
+ RTEMS. For example RTEMS 5 snapshot path is :file:`5/5.0.0/5.0.0-m2003`.
+
+* Release snapshots are based on the development sources and may be unstable or
+ not suitable for use in production.
+
+* A release snapshot is created each month and is named as
+ ``<major>/<version>/<version>-<YYMM>`` where ``YY`` is the last two digits of
+ the current year and ``MM`` is the month as a two digit number.
+
+* In the lead up to a release more than one snapshot can be created by
+ appending ``-<count>`` to the snapshot version string where ``<count>`` is
+ incremented starting from ``1``. The first snapshot without a count is
+ considered number ``0``.
+
+* Release snapshots maybe removed from the RTEMS servers at the discretion of
+ the RTEMS project
+
+Release Repositories
+====================
+
+The following are the repositories that a release effects. Any repository
+action is to be performed in the following repositories:
+
+#. rtems.git
+
+#. rtems-docs.git
+
+#. rtems-examples.git
+
+#. rtems-libbsd.git
+
+#. rtems-source-builder.git
+
+#. rtems-tools
+
+#. rtems_waf
+
+Pre-Release Procedure
+=====================
+
+* All tickets must be resolved, closed or moved to a later milestone.
+
+* The following BSP must build using the RSB:
+
+ - ``arm/beagleboneblack``
+
+* Branch labels are the major number as branch releases increment the minor
+ number. A branch is only created when the first major release is made.
+
+ The commands to set a remote branch for a release in a repository are:
+
+ .. code-block:: none
+
+ git checkout -b <VERSION> origin/master
+ git push origin <VERSION>
+
+ Example:
+
+ .. code-block:: none
+
+ git clone ssh://chrisj@dispatch.rtems.org/data/git/rtems.git rtems.git
+ cd rtems.git
+ git checkout -b 5 origin/master
+ git push origin 5
+
+Release Procedure
+=================
+
+The release procedure can be performed on any FreeBSD machine and uploaded to
+the RTEMS FTP server. You will need ssh access to the RTEMS server
+``dispatch.rtems.org`` and suitable permissions to write into the FTP release
+path on the RTEMS server.
+
+#. To create the RTEMS release run the release script:
+
+ .. code-block:: none
+
+ ./rtems-release <VERSION> <REVISION>
+
+ Example:
+
+ .. code-block:: none
+
+ cd
+ mkdir -p development/rtems/releases
+ cd development/rtems/releases
+ git clone git://git.rtems.org/rtems-release.git rtems-release.git
+ cd rtems-release.git
+ ./rtems-release 5 1.0
+
+#. Copy the release to the RTEMS FTP server:
+
+ .. code-block:: none
+
+ ssh <user>@dispatch.rtems.org mkdir -p /data/ftp/pub/rtems/releases/<VERSION>
+ scp -r <VERSION>.<REVISION> <user>@dispatch.rtems.org:/data/ftp/pub/rtems/releases/<VERSION>/.
+
+ Example:
+
+ .. code-block:: none
+
+ ssh chrisj@dispatch.rtems.org mkdir -p /data/ftp/pub/rtems/releases/5
+ scp -r 5.1.0 chrisj@dispatch.rtems.org:/data/ftp/pub/rtems/releases/5/.
+
+#. Verify the release has been uploaded by checking the link:
+
+ https://ftp.rtems.org/pub/rtems/releases/<VERSION>/<VERSION>.<REVISION>
+
+#. Tag the release repositories with the following command:
+
+ .. code-block:: none
+
+ git checkout -b origin/<VERSION>
+ git tag <TAG>
+ git push origin <TAG>
+
+ Example:
+
+ .. code-block:: none
+
+ git clone ssh://chrisj@dispatch.rtems.org/data/git/rtems.git rtems.git
+ cd rtems.git
+ git checkout -b origin/5
+ git tag 5.1.0
+ git push origin 5.1.0
+
+Post-Release Procedure
+======================
+
+The following procedures are performed after a release has been created.
+
+#. TBD
diff --git a/eng/req-eng.rst b/eng/req-eng.rst
index 61b82be..a5e615d 100644
--- a/eng/req-eng.rst
+++ b/eng/req-eng.rst
@@ -934,9 +934,9 @@ program may be provided to place Doxygen markup in assembler files. The
software architecture is documented via Doxygen groups. Each Doxygen group
name should have a project-specific name and the name should be unique within
the project, e.g. RTEMSTopLevel\ MidLevel\ LowLevel. The link from a Doxygen
-group to its parent group is realized through the `@ingroup` special command.
-The link from a Doxygen group or software component to the corresponding
-requirement is realized through a `@satisfy{req}`
+group to its parent group is realized through the ``@ingroup`` special command.
+The link from a Doxygen group or :term:`software component` to the
+corresponding requirement is realized through a ``@satisfy{req}``
`custom command <http://www.doxygen.nl/manual/custcmd.html>`_
which needs the identifier of the requirement as its one and only parameter.
Only links to parents are explicitly given in the Doxygen markup. The links
diff --git a/posix-compliance/RTEMS-Standards-Compliance-v7.csv b/posix-compliance/RTEMS-Standards-Compliance-v8.csv
index f14ac7c..2104bf7 100755
--- a/posix-compliance/RTEMS-Standards-Compliance-v7.csv
+++ b/posix-compliance/RTEMS-Standards-Compliance-v8.csv
@@ -85,38 +85,38 @@ ctanl(),complex.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YE
CMPLX(),complex.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
CMPLXF(),complex.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
CMPLXL(),complex.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-_tolower(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,HAND-YES,,,,,XSI_C_LANG_SUPPORT
-_toupper(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,HAND-YES,,,,,XSI_C_LANG_SUPPORT
-isalnum(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isalnum_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-isalpha(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isalpha_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-isascii(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-isblank(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-isblank_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-iscntrl(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-iscntrl_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-isdigit(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isdigit_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-isgraph(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isgraph_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-islower(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-islower_l(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-isprint(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isprint_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+_tolower(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,XSI_C_LANG_SUPPORT
+_toupper(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,XSI_C_LANG_SUPPORT
+isalnum(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+isalnum_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+isalpha(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+isalpha_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+isascii(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+isblank(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,RT-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
+isblank_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+iscntrl(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+iscntrl_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+isdigit(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+isdigit_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+isgraph(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+isgraph_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+islower(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+islower_l(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+isprint(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,RT-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
+isprint_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
ispunct(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-ispunct_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+ispunct_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
isspace(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isspace_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+isspace_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
isupper(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isupper_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+isupper_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
isxdigit(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-isxdigit_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-toascii(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+isxdigit_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+toascii(),ctype.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
tolower(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-tolower_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+tolower_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
toupper(),ctype.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-toupper_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+toupper_l(),ctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
posix_devctl(),devctl.h,,,,,,,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,RT-YES,RT-YES,CTS-YES,CTS-YES,CTS-YES,,"IEEEStd1003.26,devicecontrol"
alphasort(),dirent.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
closedir(),dirent.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_SYSTEM
@@ -129,10 +129,10 @@ rewinddir(),dirent.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL
scandir(),dirent.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
seekdir(),dirent.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
telldir(),dirent.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
-dlclose(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DYNAMIC_LINKING
-dlerror(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DYNAMIC_LINKING
-dlopen(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DYNAMIC_LINKING
-dlsym(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DYNAMIC_LINKING
+dlclose(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DYNAMIC_LINKING
+dlerror(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DYNAMIC_LINKING
+dlopen(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DYNAMIC_LINKING
+dlsym(),dlfcn.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DYNAMIC_LINKING
errno,errno.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_SINGLE_PROCESS
creat(),fcntl.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_SYSTEM
fcntl(),fcntl.h,INCL,INCL,,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_FD_MGMT
@@ -153,37 +153,37 @@ fesetround(),fenv.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,
fetestexcept(),fenv.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-NO,CTS-NO,,,CTS-NO,,POSIX_C_LANG_SUPPORT
feupdateenv(),fenv.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-NO,CTS-NO,,,CTS-NO,,POSIX_C_LANG_SUPPORT
fmtmsg(),fmtmsg.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_DEVICE_IO
-fnmatch(),fnmatch.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_C_LIB_EXT
+fnmatch(),fnmatch.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_C_LIB_EXT
ftw(),ftw.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_FILE_SYSTEM
nftw(),ftw.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_FILE_SYSTEM
-glob(),glob.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM_GLOB
-globfree(),glob.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM_GLOB
-endgrent(),grp.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_USER_GROUPS
-getgrent(),grp.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_USER_GROUPS
-getgrgid(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE
-getgrgid_r(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
-getgrnam(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE
-getgrnam_r(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
-setgrent(),grp.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_USER_GROUPS
-iconv(),iconv.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_I18N
-iconv_close(),iconv.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_I18N
-iconv_open(),iconv.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_I18N
+glob(),glob.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM_GLOB
+globfree(),glob.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM_GLOB
+endgrent(),grp.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_USER_GROUPS
+getgrent(),grp.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_USER_GROUPS
+getgrgid(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE
+getgrgid_r(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
+getgrnam(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE
+getgrnam_r(),grp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
+setgrent(),grp.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_USER_GROUPS
+iconv(),iconv.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_I18N
+iconv_close(),iconv.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_I18N
+iconv_open(),iconv.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_I18N
imaxabs(),inttypes.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
imaxdiv(),inttypes.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
strtoimax(),inttypes.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
strtoumax(),inttypes.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
wcstoimax(),inttypes.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcstoumax(),inttypes.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-nl_langinfo(),langinfo.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_I18N
-nl_langinfo_l(),langinfo.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-basename(),libgen.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_FILE_SYSTEM
-dirname(),libgen.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_FILE_SYSTEM
-duplocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-freelocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+nl_langinfo(),langinfo.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_I18N
+nl_langinfo_l(),langinfo.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+basename(),libgen.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
+dirname(),libgen.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
+duplocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+freelocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
localeconv(),locale.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-newlocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+newlocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
setlocale(),locale.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-uselocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+uselocale(),locale.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
acos(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_MATH
acosf(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_MATH
acosh(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_MATH
@@ -269,11 +269,11 @@ ilogbl(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-NO,C
isfinite(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
isgreater(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
isgreaterequal(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
-isinf(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,RT-YES,,,,,POSIX_C_LANG_MATH
+isinf(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,RT-YES,RT-YES,,,,,POSIX_C_LANG_MATH
isless(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
islessequal(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
islessgreater(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
-isnan(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,RT-YES,,,,,POSIX_C_LANG_MATH
+isnan(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,RT-YES,RT-YES,,,,,POSIX_C_LANG_MATH
isnormal(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
isunordered(),math.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,,RT-NO,,,,,POSIX_C_LANG_MATH
j0(),math.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MATH
@@ -387,15 +387,15 @@ mq_setattr(),mqueue.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INC
mq_timedreceive(),mqueue.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_MESSAGE_PASSING
mq_timedsend(),mqueue.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_MESSAGE_PASSING
mq_unlink(),mqueue.h,INCL,INCL,,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,_POSIX_MESSAGE_PASSING
-dbm_clearerr(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_close(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_delete(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_error(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_fetch(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_firstkey(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_nextkey(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_open(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
-dbm_store(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-Yes,RT-Yes,RT-Yes,RT-Yes,RT-Yes,,XSI_DBM
+dbm_clearerr(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_close(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_delete(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_error(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_fetch(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_firstkey(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_nextkey(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_open(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
+dbm_store(),ndbm.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,RT-YES,RT-YES,RT-YES,,XSI_DBM
if_freenameindex(),net/if.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,NET,CTS-YES,,,CTS-NO,,POSIX_NETWORKING
if_indextoname(),net/if.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,NET,CTS-YES,,,CTS-NO,,POSIX_NETWORKING
if_nameindex(),net/if.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,NET,CTS-YES,,,CTS-NO,,POSIX_NETWORKING
@@ -448,15 +448,15 @@ pthread_attr_setschedparam(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL
pthread_attr_setschedpolicy(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_THREAD_PRIORITY_SCHEDULING
pthread_attr_setscope(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_THREAD_PRIORITY_SCHEDULING
pthread_attr_setstack(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,XSI_THREADS_EXT
-pthread_attr_setstackaddr(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,,,INCL,,,,,RT-YES,,,,,_POSIX_THREAD_ATTR_STACKADDR
+pthread_attr_setstackaddr(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,,,INCL,,,,RT-YES,RT-YES,,,,,_POSIX_THREAD_ATTR_STACKADDR
pthread_attr_setstacksize(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_THREAD_ATTR_STACKSIZE
pthread_barrier_destroy(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,,,POSIX_BARRIERS
pthread_barrier_init(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_BARRIERS
pthread_barrier_wait(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_BARRIERS
pthread_barrierattr_destroy(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,,,POSIX_BARRIERS
-pthread_barrierattr_getpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_BARRIERS
+pthread_barrierattr_getpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_BARRIERS
pthread_barrierattr_init(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,,,POSIX_BARRIERS
-pthread_barrierattr_setpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_BARRIERS
+pthread_barrierattr_setpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_BARRIERS
pthread_cancel(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
pthread_cleanup_pop(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
pthread_cleanup_push(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
@@ -515,9 +515,9 @@ pthread_rwlock_trywrlock(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES
pthread_rwlock_unlock(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_RW_LOCKS
pthread_rwlock_wrlock(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_RW_LOCKS
pthread_rwlockattr_destroy(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_RW_LOCKS
-pthread_rwlockattr_getpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_RW_LOCKS
+pthread_rwlockattr_getpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_RW_LOCKS
pthread_rwlockattr_init(),pthread.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_RW_LOCKS
-pthread_rwlockattr_setpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_RW_LOCKS
+pthread_rwlockattr_setpshared(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_RW_LOCKS
pthread_self(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
pthread_setcancelstate(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
pthread_setcanceltype(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
@@ -525,23 +525,23 @@ pthread_setconcurrency(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,IN
pthread_setschedparam(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_THREAD_PRIORITY_SCHEDULING
pthread_setschedprio(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_THREAD_PRIORITY_SCHEDULING
pthread_setspecific(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
-pthread_spin_destroy(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SPIN_LOCKS
-pthread_spin_init(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SPIN_LOCKS
-pthread_spin_lock(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,_POSIX_SPIN_LOCKS
-pthread_spin_trylock(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,_POSIX_SPIN_LOCKS
-pthread_spin_unlock(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,_POSIX_SPIN_LOCKS
+pthread_spin_destroy(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SPIN_LOCKS
+pthread_spin_init(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SPIN_LOCKS
+pthread_spin_lock(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,_POSIX_SPIN_LOCKS
+pthread_spin_trylock(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,_POSIX_SPIN_LOCKS
+pthread_spin_unlock(),pthread.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,_POSIX_SPIN_LOCKS
pthread_testcancel(),pthread.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_THREADS_BASE
-endpwent(),pwd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_SYSTEM_DATABASE
-getpwent(),pwd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_SYSTEM_DATABASE
-getpwnam(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE
-getpwnam_r(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
-getpwuid(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE
-getpwuid_r(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
-setpwent(),pwd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_SYSTEM_DATABASE
-regcomp(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_REGEXP
-regerror(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_REGEXP
-regexec(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_REGEXP
-regfree(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_REGEXP
+endpwent(),pwd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_SYSTEM_DATABASE
+getpwent(),pwd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_SYSTEM_DATABASE
+getpwnam(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE
+getpwnam_r(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
+getpwuid(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE
+getpwuid_r(),pwd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYSTEM_DATABASE_R
+setpwent(),pwd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_SYSTEM_DATABASE
+regcomp(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_REGEXP
+regerror(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_REGEXP
+regexec(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_REGEXP
+regfree(),regex.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_REGEXP
sched_get_priority_max(),sched.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_PRIORITY_SCHEDULING and _POSIX_THREAD_PRIORITY_SCHEDULING
sched_get_priority_min(),sched.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_PRIORITY_SCHEDULING and _POSIX_THREAD_PRIORITY_SCHEDULING
sched_getparam(),sched.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,_POSIX_PRIORITY_SCHEDULING
@@ -550,17 +550,17 @@ sched_rr_get_interval(),sched.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,IN
sched_setparam(),sched.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,_POSIX_PRIORITY_SCHEDULING
sched_setscheduler(),sched.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,_POSIX_PRIORITY_SCHEDULING
sched_yield(),sched.h,INCL,INCL,,,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,_POSIX_PRIORITY_SCHEDULING
-hcreate(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-hdestroy(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-hsearch(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+hcreate(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+hdestroy(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+hsearch(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
insque(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
lfind(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
lsearch(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
remque(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
-tdelete(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-tfind(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-tsearch(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-twalk(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+tdelete(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+tfind(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+tsearch(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+twalk(),search.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
sem_close(),semaphore.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_SEMAPHORES
sem_destroy(),semaphore.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SEMAPHORES
sem_getvalue(),semaphore.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_SEMAPHORES
@@ -581,7 +581,7 @@ bsd_signal(),signal.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
kill(),signal.h,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SIGNALS
killpg(),signal.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_SIGNALS
psiginfo(),signal.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
-psignal(),signal.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+psignal(),signal.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
pthread_kill(),signal.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
pthread_sigmask(),signal.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_THREADS_BASE
raise(),signal.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SIGNALS
@@ -627,10 +627,10 @@ posix_spawnattr_setschedpolicy(),spawn.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL
posix_spawnattr_setsigdefault(),spawn.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-NO,CTS-NO,,CTS-NO,CTS-NO,,_POSIX_SPAWN
posix_spawnattr_setsigmask(),spawn.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-NO,CTS-NO,,CTS-NO,CTS-NO,,_POSIX_SPAWN
posix_spawnp(),spawn.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-NO,CTS-NO,,,CTS-NO,,_POSIX_SPAWN
-va_arg(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,INCL,,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
-va_copy(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
-va_end(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,INCL,,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
-va_start(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,INCL,,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
+va_arg(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,INCL,HAND-YES,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
+va_copy(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,HAND-YES,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
+va_end(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,INCL,HAND-YES,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
+va_start(),stdarg.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,INCL,HAND-YES,HAND-YES,,,,,POSIX_C_LANG_SUPPORT
ATOMIC_VAR_INIT(),stdatomic.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
atomic_init(),stdatomic.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
kill_dependency(),stdatomic.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
@@ -655,8 +655,8 @@ atomic_flag_clear(),stdatomic.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
atomic_flag_clear_explicit(),stdatomic.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
offsetof(),stddef.h,INCL,INCL,?,?,?,?,INCL,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
clearerr(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
-ctermid(),stdio.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-dprintf(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+ctermid(),stdio.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+dprintf(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
fclose(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
fdopen(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
feof(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
@@ -667,7 +667,7 @@ fgetpos(),stdio.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YE
fgets(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
fileno(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
flockfile(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_FILE_LOCKING
-fmemopen(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+fmemopen(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
fopen(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
fprintf(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
fputc(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
@@ -689,8 +689,8 @@ getchar(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,
getchar_unlocked(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_FILE_LOCKING
getdelim(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
getline(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
-gets(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,,INCL,,,,,RT-YES,,,,,POSIX_DEVICE_IO
-open_memstream(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+gets(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,,INCL,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_IO
+open_memstream(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
pclose(),stdio.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_SHELL_FUNC
perror(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
popen(),stdio.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_SHELL_FUNC
@@ -713,11 +713,11 @@ sscanf(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL
stderr,stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
stdin,stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
stdout,stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
-tempnam(),stdio.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_FILE_SYSTEM
+tempnam(),stdio.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
tmpfile(),stdio.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_FILE_SYSTEM
-tmpnam(),stdio.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,,,,,,INCL,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM
+tmpnam(),stdio.h,INCL,INCL,,INCL,INCL,INCL,INCL,INCL,,,,,,,,,INCL,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM
ungetc(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
-vdprintf(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+vdprintf(),stdio.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
vfprintf(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
vfscanf(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
vprintf(),stdio.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_DEVICE_IO
@@ -745,7 +745,7 @@ vsprintf_s(),stdio.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
vsscanf_s(),stdio.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
gets_s(),stdio.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
_Exit(),stdlib.h,INCL,INCL,,,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
-a64l(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+a64l(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
abort(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SIGNALS
abs(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
atexit(),stdlib.h,INCL,INCL,,,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
@@ -756,50 +756,50 @@ atoll(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS
bsearch(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
calloc(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
div(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-drand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+drand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
ecvt(),stdlib.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
-erand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+erand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
exit(),stdlib.h,INCL,INCL,,,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
fcvt(),stdlib.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
free(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
gcvt(),stdlib.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
getenv(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SINGLE_PROCESS
-getsubopt(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_C_LIB_EXT
+getsubopt(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_C_LIB_EXT
grantpt(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_DEVICE_SPECIFIC
initstate(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
-jrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-l64a(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+jrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+l64a(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
labs(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-lcong48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+lcong48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
ldiv(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
llabs(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
lldiv(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-lrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+lrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
maketemp(),stdlib.h,,INCL,,,,,,,,,,,,,,,,,,,,,,,,,
malloc(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
mblen(),stdlib.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
mbstowcs(),stdlib.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
mbtowc(),stdlib.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-mkdtemp(),stdlib.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-mkstemp(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM
-mrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-nrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-posix_memalign(),stdlib.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,_POSIX_ADVISORY_INFO
+mkdtemp(),stdlib.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+mkstemp(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM
+mrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+nrand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+posix_memalign(),stdlib.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,_POSIX_ADVISORY_INFO
ptsname(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_DEVICE_SPECIFIC
-putenv(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_SINGLE_PROCESS
+putenv(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_SINGLE_PROCESS
qsort(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
rand(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
rand_r(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT_R
-random(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+random(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
realloc(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-realpath(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_FILE_SYSTEM
-seed48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+realpath(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
+seed48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
setenv(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_SINGLE_PROCESS
setkey(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_CRYPT
setstate(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
srand(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-srand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-srandom(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+srand48(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+srandom(),stdlib.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
strtod(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strtof(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
strtol(),stdlib.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
@@ -824,40 +824,40 @@ qsort_s(),stdlib.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
wctomb_s(),stdlib.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
mbstowcs_s(),stdlib.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
wcstombs_s(),stdlib.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-memccpy(),string.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+memccpy(),string.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
memchr(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
memcmp(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
memcpy(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
memmove(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
memset(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-stpcpy(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-stpncpy(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+stpcpy(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+stpncpy(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
strcat(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strchr(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strcmp(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strcoll(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-strcoll_l(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+strcoll_l(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
strcpy(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strcspn(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-strdup(),string.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_C_LIB_EXT
+strdup(),string.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_C_LIB_EXT
strerror(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-strerror_l(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+strerror_l(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
strerror_r(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT_R
strlen(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strncat(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strncmp(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strncpy(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-strndup(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-strnlen(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+strndup(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+strnlen(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
strpbrk(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strrchr(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-strsignal(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+strsignal(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
strspn(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strstr(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
strtok(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
strtok_r(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT_R
strxfrm(),string.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_SUPPORT
-strxfrm_l(),string.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+strxfrm_l(),string.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
memcpy_s(),string.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
memmove_s(),string.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
strcpy_s(),string.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
@@ -871,18 +871,18 @@ strerrorlen_s(),string.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
strnlen_s(),string.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
bcmp(),strings.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
bcopy(),strings.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
-ffs(),strings.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+ffs(),strings.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
index(),strings.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
rindex(),strings.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
-strcasecmp(),strings.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_C_LIB_EXT
-strcasecmp_l(),strings.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-strncasecmp(),strings.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_C_LIB_EXT
-strncasecmp_l(),strings.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+strcasecmp(),strings.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_C_LIB_EXT
+strcasecmp_l(),strings.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+strncasecmp(),strings.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_C_LIB_EXT
+strncasecmp_l(),strings.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
fattach(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
fdetach(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
getmsg(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
getpmsg(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
-ioctl(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,_XOPEN_STREAMS
+ioctl(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,_XOPEN_STREAMS
isastream(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
putmsg(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
putpmsg(),stropts.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_STREAMS
@@ -895,7 +895,7 @@ msync(),sys/mman.h,INCL,INCL,,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-Y
munlock(),sys/mman.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,_POSIX_MEMLOCK_RANGE
munlockall(),sys/mman.h,INCL,INCL,,,,,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,_POSIX_MEMLOCK
munmap(),sys/mman.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_MAPPED_FILES
-posix_madvise(),sys/mman.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,_POSIX_ADVISORY_INFO
+posix_madvise(),sys/mman.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,_POSIX_ADVISORY_INFO
posix_mem_offset(),sys/mman.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_POSIX_TYPED_MEMORY_OBJECTS
posix_typed_mem_get_info(),sys/mman.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_POSIX_TYPED_MEMORY_OBJECTS
posix_typed_mem_open(),sys/mman.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_POSIX_TYPED_MEMORY_OBJECTS
@@ -907,7 +907,7 @@ msgrcv(),sys/msg.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_IPC
msgsnd(),sys/msg.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_IPC
getpriority(),sys/resource.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MULTI_PROCESS
getrlimit(),sys/resource.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MULTI_PROCESS
-getrusage(),sys/resource.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_MULTI_PROCESS
+getrusage(),sys/resource.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_MULTI_PROCESS
setpriority(),sys/resource.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MULTI_PROCESS
setrlimit(),sys/resource.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MULTI_PROCESS
FD_CLR(),sys/select.h,INCL,INCL,,,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
@@ -952,20 +952,20 @@ mkdir(),sys/stat.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,I
mkdirat(),sys/stat.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
mkfifo(),sys/stat.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_FIFO
mkfifoat(),sys/stat.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
-mknod(),sys/stat.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_FILE_SYSTEM
+mknod(),sys/stat.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
mknodat(),sys/stat.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
stat(),sys/stat.h,INCL,INCL,,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_SYSTEM
umask(),sys/stat.h,INCL,INCL,,,,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_ATTRIBUTES
utimensat(),sys/stat.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
fstatvfs(),sys/statvfs.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_FILE_SYSTEM
-statvfs(),sys/statvfs.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM
-getitimer(),sys/time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,ENOSYS,XSI_TIMERS
-gettimeofday(),sys/time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_SINGLE_PROCESS
-setitimer(),sys/time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,ENOSYS,XSI_TIMERS
+statvfs(),sys/statvfs.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM
+getitimer(),sys/time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,ENOSYS,XSI_TIMERS
+gettimeofday(),sys/time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_SINGLE_PROCESS
+setitimer(),sys/time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,ENOSYS,XSI_TIMERS
times(),sys/time.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
utimes(),sys/time.h,INCL,INCL,,,INCL,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_MULTI_PROCESS
-readv(),sys/uio.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_DEVICE_IO
-writev(),sys/uio.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_DEVICE_IO
+readv(),sys/uio.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_DEVICE_IO
+writev(),sys/uio.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_DEVICE_IO
uname(),sys/utsname.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SINGLE_PROCESS
wait(),sys/wait.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_MULTI_PROCESS
waitid(),sys/wait.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,ENOSYS,POSIX_MULTI_PROCESS
@@ -974,17 +974,17 @@ closelog(),syslog.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_SYSTEM_LOGGIN
openlog(),syslog.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_SYSTEM_LOGGING
setlogmask(),syslog.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_SYSTEM_LOGGING
syslog(),syslog.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_SYSTEM_LOGGING
-cfgetispeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-cfgetospeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-cfsetispeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-cfsetospeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-tcdrain(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-tcflow(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-tcflush(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-tcgetattr(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+cfgetispeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+cfgetospeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+cfsetispeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+cfsetospeed(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+tcdrain(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+tcflow(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+tcflush(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+tcgetattr(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
tcgetsid(),termios.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_JOB_CONTROL
-tcsendbreak(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-tcsetattr(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+tcsendbreak(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+tcsetattr(),termios.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
call_once(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
cnd_broadcast(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
cnd_destroy(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
@@ -1010,7 +1010,7 @@ tss_create(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
tss_delete(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
tss_get(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
tss_set(),threads.h,,,,,,,,INCL,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,
-asctime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,INCL,,,,,RT-YES,,,,,POSIX_C_LANG_SUPPORT
+asctime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,INCL,,,,RT-YES,RT-YES,,,,,POSIX_C_LANG_SUPPORT
asctime_r(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT_R
clock(),time.h,INCL,INCL,,,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
clock_getcpuclockid(),time.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,ENOSYS,_POSIX_CPUTIME
@@ -1018,7 +1018,7 @@ clock_getres(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,I
clock_gettime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
clock_nanosleep(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,INCL,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_CLOCK_SELECTION
clock_settime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
-ctime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,INCL,,,,,RT-YES,,,,,POSIX_C_LANG_SUPPORT
+ctime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,,,,INCL,,,,RT-YES,RT-YES,,,,,POSIX_C_LANG_SUPPORT
ctime_r(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT_R
daylight,time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_C_LANG_SUPPORT
difftime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
@@ -1031,15 +1031,15 @@ localtime_r(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,
mktime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
nanosleep(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
strftime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,,,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
-strftime_l(),time.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-strptime(),time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
+strftime_l(),time.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+strptime(),time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
time(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
timer_create(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
timer_delete(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_TIMERS
timer_getoverrun(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
timer_gettime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
timer_settime(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_TIMERS
-timezone,time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,HAND-YES,,,,,XSI_C_LANG_SUPPORT
+timezone,time.h,INCL,INCL,,,,,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,XSI_C_LANG_SUPPORT
tzname,time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
tzset(),time.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_C_LANG_SUPPORT
asctime_s(),time.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
@@ -1116,15 +1116,15 @@ crypt(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_CRYPT
dup(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_FD_MGMT
dup2(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_FD_MGMT
encrypt(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,_XOPEN_CRYPT
-environ,unistd.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,,RT-YES,,,,,POSIX_SINGLE_PROCESS
+environ,unistd.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,RT-YES,RT-YES,,,,,POSIX_SINGLE_PROCESS
execl(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,POSIX_MULTI_PROCESS
execle(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,POSIX_MULTI_PROCESS
-execlp(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,,,,,,,,,,,,RT-YES,,,,ENOSYS,POSIX_MULTI_PROCESS
+execlp(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,ENOSYS,POSIX_MULTI_PROCESS
execv(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,POSIX_MULTI_PROCESS
execve(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,ENOSYS,POSIX_MULTI_PROCESS
-execvp(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,,,,,,,,,,,,RT-YES,,,,ENOSYS,POSIX_MULTI_PROCESS
+execvp(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,ENOSYS,POSIX_MULTI_PROCESS
faccessat(),unistd.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
-fchdir(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM
+fchdir(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM
fchown(),unistd.h,INCL,INCL,,,,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_FILE_ATTRIBUTES
fchownat(),unistd.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
fdatasync(),unistd.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,_POSIX_SYNCHRONIZED_IO
@@ -1141,8 +1141,8 @@ getgroups(),unistd.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS
gethostid(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_SINGLE_PROCESS
gethostname(),unistd.h,INCL,INCL,,,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,,,,,NET,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_NETWORKING
getlogin(),unistd.h,INCL,INCL,,,,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_USER_GROUPS
-getlogin_r(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_USER_GROUPS_R
-getopt(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_C_LIB_EXT
+getlogin_r(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_USER_GROUPS_R
+getopt(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_C_LIB_EXT
getpgid(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_MULTI_PROCESS
getpgrp(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
getpid(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,SUSP,POSIX_MULTI_PROCESS
@@ -1150,53 +1150,53 @@ getppid(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,C
getsid(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_MULTI_PROCESS
getuid(),unistd.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_USER_GROUPS
getwd(),unistd.h,,INCL,,,,,,,,,,,,,,,,,,,,,,,,,
-isatty(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-lchown(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYMBOLIC_LINKS
+isatty(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+lchown(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYMBOLIC_LINKS
link(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_SYSTEM
linkat(),unistd.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
lockf(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_FILE_SYSTEM
lseek(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FD_MGMT
nice(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MULTI_PROCESS
-optarg,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,HAND-YES,,,,,POSIX_C_LIB_EXT
-opterr,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,HAND-YES,,,,,POSIX_C_LIB_EXT
-optind,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,HAND-YES,,,,,POSIX_C_LIB_EXT
-optopt,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,HAND-YES,,,,,POSIX_C_LIB_EXT
+optarg,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,POSIX_C_LIB_EXT
+opterr,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,POSIX_C_LIB_EXT
+optind,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,POSIX_C_LIB_EXT
+optopt,unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,HAND-YES,HAND-YES,,,,,POSIX_C_LIB_EXT
pathconf(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,,,INCL,,,,INCL,INCL,,,INCL,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_FILE_SYSTEM
pause(),unistd.h,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_SIGNALS
pipe(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_PIPE
-pread(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_IO
-pwrite(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_IO
+pread(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_IO
+pwrite(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_IO
read(),unistd.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
-readlink(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYMBOLIC_LINKS
+readlink(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYMBOLIC_LINKS
readlinkat(),unistd.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
rmdir(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_SYSTEM
setegid(),unistd.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_USER_GROUPS
seteuid(),unistd.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_USER_GROUPS
setgid(),unistd.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_USER_GROUPS
-setpgid(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_JOB_CONTROL
+setpgid(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_JOB_CONTROL
setpgrp(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_MULTI_PROCESS
setregid(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_USER_GROUPS
setreuid(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_USER_GROUPS
setsid(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_MULTI_PROCESS
setuid(),unistd.h,INCL,INCL,,,,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_USER_GROUPS
sleep(),unistd.h,INCL,INCL,,,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_MULTI_PROCESS
-swab(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_C_LANG_SUPPORT
-symlink(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_SYMBOLIC_LINKS
+swab(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_C_LANG_SUPPORT
+symlink(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_SYMBOLIC_LINKS
symlinkat(),unistd.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
-sync(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_FILE_SYSTEM
+sync(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_FILE_SYSTEM
sysconf(),unistd.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,,INCL,INCL,,,INCL,INCL,,,,,CTS-YES,CTS-YES,,CTS-YES,CTS-YES,,POSIX_SINGLE_PROCESS
-tcgetpgrp(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_JOB_CONTROL
-tcsetpgrp(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_JOB_CONTROL
-truncate(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM
-ttyname(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
-ttyname_r(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-YES,,,,,POSIX_DEVICE_SPECIFIC_R
+tcgetpgrp(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_JOB_CONTROL
+tcsetpgrp(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_JOB_CONTROL
+truncate(),unistd.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM
+ttyname(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC
+ttyname_r(),unistd.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,POSIX_DEVICE_SPECIFIC_R
ualarm(),unistd.h,,INCL,,,,?,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
unlink(),unistd.h,INCL,INCL,,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_FILE_SYSTEM
unlinkat(),unistd.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
usleep(),unistd.h,,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
vfork(),unistd.h,,INCL,,,,,,,,,,,,,,,,,,,,,,,,,
write(),unistd.h,INCL,INCL,INCL,INCL,INCL,INCL,,,,INCL,INCL,INCL,,INCL,INCL,INCL,INCL,,INCL,INCL,CTS-YES,CTS-YES,CTS-YES,CTS-YES,CTS-YES,,POSIX_DEVICE_IO
-utime(),utime.h,INCL,INCL,,INCL,INCL,INCL,,,,,,,,,,,INCL,,,,,RT-YES,,,,,POSIX_FILE_SYSTEM
+utime(),utime.h,INCL,INCL,,INCL,INCL,INCL,,,,,,,,,,,INCL,,,,RT-YES,RT-YES,,,,,POSIX_FILE_SYSTEM
endutxent(),utmpx.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_USER_GROUPS
getutxent(),utmpx.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_USER_GROUPS
getutxid(),utmpx.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,XSI_USER_GROUPS
@@ -1218,10 +1218,10 @@ getwchar(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-Y
mbrlen(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
mbrtowc(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
mbsinit(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-mbsnrtowcs(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+mbsnrtowcs(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
mbsrtowcs(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
mbsrtowcs_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-open_wmemstream(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+open_wmemstream(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
putwc(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_WIDE_CHAR_DEVICE_IO
putwchar(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_WIDE_CHAR_DEVICE_IO
snwprintf_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
@@ -1243,34 +1243,34 @@ vwprintf(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,
vwprintf_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
vwscanf(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_WIDE_CHAR_DEVICE_IO
vwscanf_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-wcpcpy(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-wcpncpy(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcpcpy(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+wcpncpy(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcrtomb(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcrtomb_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-wcscasecmp(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
-wcscasecmp_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcscasecmp(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
+wcscasecmp_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcscat(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcscat_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
wcschr(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcscmp(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcscoll(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wcscoll_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcscoll_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcscpy(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcscpy_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
wcscspn(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wcsdup(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcsdup(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcsftime(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcslen(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wcsncasecmp(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcsncasecmp(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcsncasemcp_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-NO,,,,,
wcsncat(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcsncat_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
wcsncmp(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcsncpy(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcsncpy_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-wcsnlen(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcsnlen(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcsnlen_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
-wcsnrtombs(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcsnrtombs(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wcspbrk(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcsrchr(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcsrtombs(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
@@ -1287,11 +1287,11 @@ wcstoll(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,
wcstoul(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcstoull(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wcswcs(),wchar.h,,INCL,,,,,,,,,,,,,,,,,,,,,,,,,
-wcswidth(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_WIDE_CHAR
+wcswidth(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_WIDE_CHAR
wcsxfrm(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wcsxfrm_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wcsxfrm_l(),wchar.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wctob(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wcwidth(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,XSI_WIDE_CHAR
+wcwidth(),wchar.h,INCL,INCL,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,XSI_WIDE_CHAR
wmemchr(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wmemcmp(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
wmemcpy(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
@@ -1304,41 +1304,41 @@ wprintf_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
wscanf(),wchar.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_WIDE_CHAR_DEVICE_IO
wscanf_s(),wchar.h,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
iswalnum(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswalnum_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswalnum_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswalpha(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswalpha_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswalpha_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswblank(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswblank_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswblank_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswcntrl(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswcntrl_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswcntrl_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswctype(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswctype_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswctype_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswdigit(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswdigit_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswdigit_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswgraph(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswgraph_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswgraph_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswlower(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswlower_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswlower_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswprint(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswprint_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswprint_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswpunct(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswpunct_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswpunct_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswspace(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswspace_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswspace_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswupper(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswupper_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswupper_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
iswxdigit(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-iswxdigit_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+iswxdigit_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
towctrans(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-towctrans_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+towctrans_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
towlower(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-towlower_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+towlower_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
towupper(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-towupper_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+towupper_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wctrans(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wctrans_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wctrans_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wctype(),wctype.h,INCL,INCL,,,,INCL,INCL,INCL,,,,INCL,,,,INCL,,,,,CTS-YES,CTS-YES,,,CTS-YES,,POSIX_C_LANG_WIDE_CHAR
-wctype_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,,RT-YES,,,,,
+wctype_l(),wctype.h,INCL,,,,,,,,,,,,,,,,,,,,RT-YES,RT-YES,,,,,
wordexp(),wordexp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_SHELL_FUNC
wordfree(),wordexp.h,INCL,INCL,,,,INCL,,,,,,,,,,,,,,,,RT-NO,,,,,POSIX_SHELL_FUNC
,,,,,,,,,INCL,,,,,,,,,,,,,,,,,,,
diff --git a/posix-compliance/wscript b/posix-compliance/wscript
index 01fcf4b..8f86f1d 100644
--- a/posix-compliance/wscript
+++ b/posix-compliance/wscript
@@ -24,7 +24,7 @@ def gen_posix_rst(task):
def build(ctx):
ctx(rule = gen_posix_rst,
- source = ['posix_rst.py', 'RTEMS-Standards-Compliance-v7.csv'],
+ source = ['posix_rst.py', 'RTEMS-Standards-Compliance-v8.csv'],
target = 'generated-posix-compliance.rst')
sources = { 'extra' : ['generated-posix-compliance.rst'] }
doc_build(ctx, sources = sources)
diff --git a/user/bsps/arm/beagle.rst b/user/bsps/arm/beagle.rst
index fe2dc6f..489e756 100644
--- a/user/bsps/arm/beagle.rst
+++ b/user/bsps/arm/beagle.rst
@@ -2,6 +2,12 @@
.. Copyright (C) 2019 Vijay Kumar Banerjee
+.. _BSP_arm_beagle:
+.. _BSP_arm_beagleboardorig:
+.. _BSP_arm_beagleboardxm:
+.. _BSP_arm_beagleboneblack:
+.. _BSP_arm_beaglebonewhite:
+
beagle
======
diff --git a/user/bsps/arm/gdbarmsim.rst b/user/bsps/arm/gdbarmsim.rst
deleted file mode 100644
index 26ea90c..0000000
--- a/user/bsps/arm/gdbarmsim.rst
+++ /dev/null
@@ -1,8 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. Copyright (C) 2019 TBD
-
-gdbarmsim
-=========
-
-TODO.
diff --git a/user/bsps/arm/raspberrypi.rst b/user/bsps/arm/raspberrypi.rst
index 72889a5..c26f4b5 100644
--- a/user/bsps/arm/raspberrypi.rst
+++ b/user/bsps/arm/raspberrypi.rst
@@ -46,7 +46,7 @@ Make sure you have these lines below, in your ``config.txt``.
.. code-block:: none
- enable-uart=1
+ enable_uart=1
kernel_address=0x200000
kernel=kernel.img
diff --git a/user/bsps/bsps-arm.rst b/user/bsps/bsps-arm.rst
index 5401f67..feff637 100644
--- a/user/bsps/bsps-arm.rst
+++ b/user/bsps/bsps-arm.rst
@@ -12,7 +12,6 @@ arm (ARM)
.. include:: arm/csb336.rst
.. include:: arm/csb337.rst
.. include:: arm/edb7312.rst
-.. include:: arm/gdbarmsim.rst
.. include:: arm/gumstix.rst
.. include:: arm/imx.rst
.. include:: arm/lm3s69xx.rst
diff --git a/user/bsps/bsps-m68k.rst b/user/bsps/bsps-m68k.rst
index 60882fb..bdb516b 100644
--- a/user/bsps/bsps-m68k.rst
+++ b/user/bsps/bsps-m68k.rst
@@ -53,7 +53,19 @@ TODO.
mcf5329
=======
-TODO.
+Overview
+--------
+
+This BSP is heavily based on the MCF5235 BSP. The MCF5329EVB is a Motorola
+evaluation board (Zoom) with a LogicPD MCF5329-10 SODIMM-144 card. The
+development kit features the MCF5329 based Fire Engine, as well as a plug-in
+system-on-module containing 32 MB of DDR-SDRAM. The board also includes 2 MB of
+boot flash, 16 MB of NAND flash, a core frequency of 240MHz, an onboard 800x600
+LCD controller, FEC, USB, uarts, CAN bus, QSPI, I2C, and 10/100 Ethernet.
+
+You can find the link to MCF5329 Reference Manual below:
+
+* `MCF5329 Reference Manual <https://www.nxp.com/docs/en/reference-manual/MCF5329RM.pdf>`_
mrm332
======
@@ -73,7 +85,181 @@ TODO.
mvme162
=======
-TODO.
+Overview
+--------
+
+The MVME162 family provides OEMs and solution developers an ideal platform for
+embedded monitoring and control apllications it allows an OEM to minimize
+engineering expenses while integrating value-added hardware and software
+applications onto an off-the-shelf product. In order to provide the wide range
+of solutions, the MVME162 allows a variety of MPU, memory, and interface
+options such as floating-point, Ethernet, SCSI, and VME. The result is a
+variation of the MVME162 which most closely fits the application requirement.
+
+There are a large number of model variations on this board. This was the first
+user submitted BSP and continues to be a fairly popular simply because at one
+point it was the highest selling VMEBus board of all time.
+
+Board Setup
+-----------
+
+We will setup the RTEMS Lab Board initally to proceed further for the setup
+of TFTP transfer.
+
+The env settings are:
+
+.. code-block:: none
+
+ MPU Clock Speed =25Mhz
+ 162-Bug>env
+ Bug or System environment [B/S] = B?
+ Field Service Menu Enable [Y/N] = N?
+ Remote Start Method Switch [G/M/B/N] = B?
+ Probe System for Supported I/O Controllers [Y/N] = Y?
+ Negate VMEbus SYSFAIL* Always [Y/N] = N?
+ Local SCSI Bus Reset on Debugger Startup [Y/N] = N?
+ Local SCSI Bus Negotiations Type [A/S/N] = A?
+ Industry Pack Reset on Debugger Startup [Y/N] = Y?
+ Ignore CFGA Block on a Hard Disk Boot [Y/N] = Y?
+ Auto Boot Enable [Y/N] = N?
+ Auto Boot at power-up only [Y/N] = Y?
+ Auto Boot Controller LUN = 00?
+ Auto Boot Device LUN = 00?
+ Auto Boot Abort Delay = 15?
+ Auto Boot Default String [NULL for a empty string] = ?
+ ROM Boot Enable [Y/N] = N?
+ ROM Boot at power-up only [Y/N] = Y?
+ ROM Boot Enable search of VMEbus [Y/N] = N?
+ ROM Boot Abort Delay = 0?
+ ROM Boot Direct Starting Address = FF800000?
+ ROM Boot Direct Ending Address = FFDFFFFC?
+ Network Auto Boot Enable [Y/N] = N?
+ Network Auto Boot at power-up only [Y/N] = Y?
+ Network Auto Boot Controller LUN = 00?
+ Network Auto Boot Device LUN = 00?
+ Network Auto Boot Abort Delay = 5?
+ Network Auto Boot Configuration Parameters Pointer (NVRAM) = FFE0FF00?
+ Memory Search Starting Address = 00000000?
+ Memory Search Ending Address = 01000000?
+ Memory Search Increment Size = 00010000?
+ Memory Search Delay Enable [Y/N] = N?
+ Memory Search Delay Address = FFFFD20F?
+ Memory Size Enable [Y/N] = Y?
+ Memory Size Starting Address = 00000000?
+ Memory Size Ending Address = 01000000?
+ Base Address of Dynamic Memory = 00000000?
+ Size of Parity Memory = 00000000?
+ Size of ECC Memory Board #0 = 01000000?
+ Size of ECC Memory Board #1 = 00000000?
+ Base Address of Static Memory = FFE00000?
+ Size of Static Memory = 00020000?
+ Slave Enable #1 [Y/N] = Y?
+ Slave Starting Address #1 = 00000000?
+ Slave Ending Address #1 = 00FFFFFF?
+ Slave Address Translation Address #1 = 00000000?
+ Slave Address Translation Select #1 = 00000000?
+ Slave Control #1 = 03FF?
+ Slave Enable #2 [Y/N] = N?
+ Slave Starting Address #2 = 00000000?
+ Slave Ending Address #2 = 00000000?
+ Slave Address Translation Address #2 = 00000000?
+ Slave Address Translation Select #2 = 00000000?
+ Slave Control #2 = 0000?
+ Master Enable #1 [Y/N] = Y?
+ Master Starting Address #1 = 01000000?
+ Master Ending Address #1 = EFFFFFFF?
+ Master Control #1 = 0D?
+ Master Enable #2 [Y/N] = N?
+ Master Starting Address #2 = 00000000?
+ Master Ending Address #2 = 00000000?
+ Master Control #2 = 00?
+ Master Enable #3 [Y/N] = N?
+ Master Starting Address #3 = 00000000?
+ Master Ending Address #3 = 00000000?
+ Master Control #3 = 00?
+ Master Enable #4 [Y/N] = N?
+ Master Starting Address #4 = 00000000?
+ Master Ending Address #4 = 00000000?
+ Master Address Translation Address #4 = 00000000?
+ Master Address Translation Select #4 = 00000000?
+ Master Control #4 = 00?
+ Short I/O (VMEbus A16) Enable [Y/N] = Y?
+ Short I/O (VMEbus A16) Control = 01?
+ F-Page (VMEbus A24) Enable [Y/N] = Y?
+ F-Page (VMEbus A24) Control = 02?
+ ROM Access Time Code = 03?
+ FLASH Access Time Code = 02?
+ MCC Vector Base = 05?
+ VMEC2 Vector Base #1 = 06?
+ VMEC2 Vector Base #2 = 07?
+ VMEC2 GCSR Group Base Address = D2?
+ VMEC2 GCSR Board Base Address = 00?
+ VMEbus Global Time Out Code = 01?
+ Local Bus Time Out Code = 02?
+ VMEbus Access Time Out Code = 02?
+ IP A Base Address = 00000000?
+ IP B Base Address = 00000000?
+ IP C Base Address = 00000000?
+ IP D Base Address = 00000000?
+ IP D/C/B/A Memory Size = 00000000?
+ IP D/C/B/A General Control = 00000000?
+ IP D/C/B/A Interrupt 0 Control = 00000000?
+ IP D/C/B/A Interrupt 1 Control = 00000000?
+
+To setup the Server/Client IP Addresses for the TFTP Transfer, we will use the
+NIOT command. NIOT (Network I/O Teach) is a 162-Bug's debugger command commonly
+used to setup the Server/Client IP Addresses for the TFTP Transfer.
+
+The NIOT command goes something like this:
+
+.. code-block:: none
+
+ 162-Bug>niot
+ Controller LUN =00?
+ Device LUN =00?
+ Node Control Memory Address =FFE10000?
+ Client IP Address =192.168.1.245?
+ Server IP Address =192.168.1.92?
+ Subnet IP Address Mask =255.255.255.0?
+ Broadcast IP Address =192.168.1.255?
+ Gateway IP Address =0.0.0.0?
+ Boot File Name ("NULL" for None) =/mvme162.img?
+ Argument File Name ("NULL" for None) =?
+ Boot File Load Address =00020000?
+ Boot File Execution Address =00020000?
+ Boot File Execution Delay =00000000?
+ Boot File Length =00000000?
+ Boot File Byte Offset =00000000?
+ BOOTP/RARP Request Retry =00?
+ TFTP/ARP Request Retry =00?
+ Trace Character Buffer Address =00000000?
+ BOOTP/RARP Request Control: Always/When-Needed (A/W)=A?
+ BOOTP/RARP Reply Update Control: Yes/No (Y/N) =Y?
+
+Downloading and Executing
+--------------------------
+Download from the TFTP server using the 162-Bug's "NBO"
+(Network Boot Operating System) command:
+
+.. code-block:: none
+
+ 162-Bug>nbo
+ Network Booting from: VME162, Controller 0, Device 0
+ Loading: /mvme162.img
+
+ Client IP Address = 192.168.1.245
+ Server IP Address = 192.168.1.92
+ Gateway IP Address = 0.0.0.0
+ Subnet IP Address Mask = 255.255.255.0
+ Boot File Name = /mvme162.img
+ Argument File Name =
+
+ Network Boot File load in progress... To abort hit <BREAK>
+
+ Bytes Received =&356528, Bytes Loaded =&356528
+ Bytes/Second =&89132, Elapsed Time =4 Second(s)
+
+The program will automatically run when download is complete.
mvme167
=======
diff --git a/user/bsps/bsps-sparc.rst b/user/bsps/bsps-sparc.rst
index 7d98c50..d0316a9 100644
--- a/user/bsps/bsps-sparc.rst
+++ b/user/bsps/bsps-sparc.rst
@@ -1,20 +1,29 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
.. Copyright (C) 2018 embedded brains GmbH
+.. Copyright (C) 2020 Chris Johns
sparc (SPARC / LEON)
********************
+
+
+.. _BSP_sparc_erc32:
+
erc32
=====
TODO.
+.. _BSP_sparc_leon2:
+
leon2
=====
TODO.
+.. _BSP_sparc_leon3:
+
leon3
=====
diff --git a/user/exe/initialization.rst b/user/exe/initialization.rst
index cfe39d6..6c9d657 100644
--- a/user/exe/initialization.rst
+++ b/user/exe/initialization.rst
@@ -82,7 +82,7 @@ system is based on the `FreeBSD SYSINT Framework
initialization is performed before multitasking is started.
The RTEMS Tool ``rtems-exeinfo`` can provide some detail about the registered
-handlers. The following shows the initialization handlers for the *hello world*
+handlers. The following shows the initialization handlers for the Hello World
sample application in the RTEMS kernel's testsuite::
.. code-block:: none
diff --git a/user/hosts/posix.rst b/user/hosts/posix.rst
index b46497c..d89d1a2 100644
--- a/user/hosts/posix.rst
+++ b/user/hosts/posix.rst
@@ -74,13 +74,29 @@ provide a manual override:
CentOS
~~~~~~
-The following packages are required on a minimal CentOS 6.3 64bit installation:
+The following packages are required on a minimal CentOS 6.3 or Cent)S 7
+64-bit installation:
.. code-block:: none
- # yum install autoconf automake binutils gcc gcc-c++ gdb make patch \
+ # yum install autoconf automake binutils gcc gcc-c++ gdb make patch pax \
bison flex xz unzip ncurses-devel texinfo zlib-devel python-devel git
+On CentOS 8, the ``pax`` command is now provided by the ``spax`` package,
+you need to enable the PowerTools repository. and use Python3. On a
+fresh install, the following commands should install everything you
+need for RTEMS development:
+
+.. code-block:: none
+
+ # dnf install yum-utils
+ # dnf config-manager --set-enabled PowerTools
+ # dnf update
+ # dnf groupinstall "Development Tools"
+ # dnf install python3 python3-pip python3-setuptools python3-devel
+ # dnf install texinfo spax
+ # alternatives --set python /usr/bin/python3
+
The minimal CentOS distribution is a specific DVD that installs a minimal
system. If you use a full system some of these packages may have been
installed.
diff --git a/user/index.rst b/user/index.rst
index 0e644c9..0e6e886 100644
--- a/user/index.rst
+++ b/user/index.rst
@@ -10,15 +10,18 @@ RTEMS User Manual (|version|).
.. topic:: Copyrights and License
+ | |copy| 2020 Niteesh Babu
+ | |copy| 2020 Utkarsh Rai
| |copy| 2019 Vijay Kumar Banerjee
| |copy| 2018 Amaan Cheval
| |copy| 2018 Marçal Comajoan Cara
+ | |copy| 2018 Shashvat Jain
| |copy| 2018 Vidushi Vashishth
| |copy| 2017 Tanu Hari Dixit
| |copy| 2016, 2019 embedded brains GmbH
| |copy| 2016, 2019 Sebastian Huber
- | |copy| 2012, 2019 Chris Johns
- | |copy| 2012 Gedare Bloom
+ | |copy| 2012, 2020 Chris Johns
+ | |copy| 2012, 2020 Gedare Bloom
| |copy| 1988, 2018 On-Line Applications Research Corporation (OAR)
.. include:: ../common/license.rst
@@ -42,6 +45,8 @@ RTEMS User Manual (|version|).
testing/index
tracing/index
+ migration/index
+
tools/index
rsb/index
diff --git a/user/installation/developer.rst b/user/installation/developer.rst
index 541e04b..ff7eefe 100644
--- a/user/installation/developer.rst
+++ b/user/installation/developer.rst
@@ -559,7 +559,6 @@ Then we generate the pre-install header file automake make files:
Generating ./c/src/lib/libbsp/arm/csb336/preinstall.am
Generating ./c/src/lib/libbsp/arm/csb337/preinstall.am
Generating ./c/src/lib/libbsp/arm/edb7312/preinstall.am
- Generating ./c/src/lib/libbsp/arm/gdbarmsim/preinstall.am
.......
Generating ./cpukit/score/cpu/mips/preinstall.am
Generating ./cpukit/score/cpu/moxie/preinstall.am
diff --git a/user/migration/index.rst b/user/migration/index.rst
new file mode 100644
index 0000000..76012b5
--- /dev/null
+++ b/user/migration/index.rst
@@ -0,0 +1,17 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 Chris Johns
+
+.. index:: Migration
+
+.. _Migration:
+
+Changing Versions
+*****************
+
+Follow the sections provide support help when migratiing applications
+from one version of RTEMS to a new version.
+
+.. toctree::
+
+ v4_11-to-v5
diff --git a/user/migration/v4_11-to-v5.rst b/user/migration/v4_11-to-v5.rst
new file mode 100644
index 0000000..4329771
--- /dev/null
+++ b/user/migration/v4_11-to-v5.rst
@@ -0,0 +1,96 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 Chris Johns
+
+.. _Migration_4_11_to_5:
+
+RTEMS 4.11 to RTEMS 5
+=====================
+
+This section provides helpful information when migrating from RTEMS 4.11 to
+RTEMS 5.
+
+Configuration
+-------------
+
+A number of configurations macros have moved as a result of internal changes in
+RTEMS. Some of these will produce a warning indicating the new configuration
+setings you need to define. If you need to run an application on RTEMS 4.11 and
+RTEMS 5 the following code exmaple shows how to conditionally define the
+settings. The example is:
+
+.. code-block:: c
+
+ #include <rtems.h>
+
+ #if __RTEMS_MAJOR__ < 5
+ #define CONFIGURE_MAXIMUM_FIFOS 10
+ #define CONFIGURE_MAXIMUM_PIPES 10
+ #else
+ #define CONFIGURE_IMFS_ENABLE_MKFIFO
+ #endif
+
+ #define MAX_FILE_DESCRIPTORS 200
+ #if __RTEMS_MAJOR__ < 5
+ #define CONFIGURE_LIBIO_MAXIMUM_FILE_DESCRIPTORS MAX_FILE_DESCRIPTORS
+ #else
+ #define CONFIGURE_MAXIMUM_FILE_DESCRIPTORS MAX_FILE_DESCRIPTORS
+ #endif
+
+Networking
+----------
+
+The following code samples provides a simple way to initialise and start
+networking with the BSD Library's (``libbsd``) networking stack. The simplest
+method to configure the networking stack is to provide a :file:`/etc/rc,conf`
+file on your target. If your target has no non-volatile media for a file system
+create the :file:`rc.conf` file each time your application starts.
+
+The :file:`rc.conf` support in ``libbsd`` provides a number of needed support
+settings. We recommend you search for FreeBSD and ``rc.conf`` to view the
+available online documentation that FreeBSD provides.
+
+In this example the network interface is ``cgem0``, replace with your
+interface name.
+
+.. code-block:: c
+
+ static const char* rc_conf =
+ "# /etc/rc.conf\n" \
+ "hostname=\"rtems5-libbsd\"\n" \
+ "ifconfig_cgem0=\"inet 10.1.2.3 netmask 255.255.255.0 rxcsum txcsum\"\n" \
+ "ifconfig_cgem0_alias0=\"ether 00:80:81:82:83:84\"\n" \
+ "defaultrouter=\"10.1.2.1\"\n" \
+ "telnetd_enable=\"YES\"\n";
+
+ void start_network(void)
+ {
+ FILE *rc;
+ int r;
+
+ /*
+ * Initialise libbsd.
+ */
+ rtems_bsd_initialize();
+
+ /*
+ * Create the /etc/rc,conf, assume /etc exists.
+ */
+ rc = fopen("/etc/rc.conf", "w");
+ if (rc_conf == NULL) {
+ printf("error: cannot create /etc/rc.conf\n");
+ exit(1);
+ }
+
+ fprintf(rc, rc_conf);
+ fclose(rc);
+
+ /*
+ * Arguments are timeout and trace
+ */
+ r = rtems_bsd_run_etc_rc_conf(30, false);
+ if (r < 0) {
+ printf("error: loading /etc/rc.conf failed: %s\n",strerror(errno));
+ exit(1);
+ }
+ }
diff --git a/user/rsb/commands.rst b/user/rsb/commands.rst
index b85692d..b4787aa 100644
--- a/user/rsb/commands.rst
+++ b/user/rsb/commands.rst
@@ -199,22 +199,22 @@ The ``arguments`` are a list of build sets to build.
Path to the configuration directory. This overrides the built in defaults.
``--builddir path``:
- Path to the build directory. This overrides the default of +build+.
+ Path to the build directory. This overrides the default of `build`.
``--sourcedir path``:
- Path to the source directory. This overrides the default of +source+.
+ Path to the source directory. This overrides the default of `source`.
``--patchdir path``:
- Path to the patches directory. This overrides the default of +patches+.
+ Path to the patches directory. This overrides the default of `patches`.
``--tmppath path``:
- Path to the temporary directory. This overrides the default of +tmp+.
+ Path to the temporary directory. This overrides the default of `tmp`.
``--macros files``:
Macro files to load. The configuration directory path is searched.
``--log file``:
- Log all the output from the build process. The output is directed to +stdout+
+ Log all the output from the build process. The output is directed to `stdout`
if no log file is provided.
``--url url``:
diff --git a/user/rsb/configuration.rst b/user/rsb/configuration.rst
index fc387a1..4b21dee 100644
--- a/user/rsb/configuration.rst
+++ b/user/rsb/configuration.rst
@@ -1,5 +1,6 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2020 Gedare Bloom <gedare@rtems.org>
.. Copyright (C) 2012, 2016 Chris Johns <chrisj@rtems.org>
.. _Configuration:
@@ -113,8 +114,8 @@ supported compression formats are:
``zip``:
ZIP
-``xy``:
- XY
+``xz``:
+ XZ
The output of the decompression tool is fed to the standard ``tar`` utility if
not a ZIP file and unpacked into the build directory. ZIP files are unpacked by
@@ -181,7 +182,7 @@ errors that can arise.
The protocol option lets you set a specific protocol. The ``git://`` prefix
used by the RSB to select a git repository can be removed using *none* or
-replaced with one of the standard git protcols.
+replaced with one of the standard git protocols.
CVS
~~~
@@ -315,7 +316,7 @@ Maps are declared anywhere in the map using the map directive:
1. The map is set to ``my-special-map``.
-Any macro defintions following a map declaration are placed in that map and the
+Any macro definitions following a map declaration are placed in that map and the
default map is ``global`` when loading a file. Maps are selected in
configuration files by using the ``%select`` directive:
@@ -328,9 +329,10 @@ if present return that value else the ``global`` map is used. Any new macros or
changes update only the ``global`` map. This may change in future releases so
please make sure you use the ``override`` attribute.
-The macro files specificed on the command line are looked for in the
-``_configdir`` paths. See <<X1,``_configdir``>> variable for details. Included
-files need to add the ``%{_configdir}`` macro to the start of the file.
+The macro files specified on the command line are looked for in the
+``_configdir`` paths. See the definition of ``_configdir`` in
+:ref:`Configuration` for details. Included files need to add the
+``%{_configdir}`` macro to the start of the file.
Macro map files can include other macro map files using the ``%include``
directive. The macro map to build *binutils*, *gcc*, *newlib*, *gdb* and
@@ -364,11 +366,26 @@ points to are loaded. The second is a file called ``.rsb_macros`` in your home
directory. You need to have the environment variable ``HOME`` defined for this
work.
+Configuration Reports
+^^^^^^^^^^^^^^^^^^^^^
+
+A configuration report detailing a build configuration is generated by the
+``sb-set-builder`` command. The report can also be generated separately from
+the build process by invoking the ``sb-report`` command on the build set used
+for the build, for example:
+
+.. code-block:: shell
+
+ cd rtems
+ ../source-builder/sb-reports 5/rtems-sparc
+ less 5-rtems-sparc.txt
+
Report Mailing
-^^^^^^^^^^^^^^
+~~~~~~~~~~~~~~
-The build reports can be mailed to a specific email address to logging and
-monitoring. Mailing requires a number of parameters to function. These are:
+Configuration reports from a build can be mailed to a specific email address
+for logging and monitoring. Mailing requires a number of parameters to
+function. These are:
- To mail address
@@ -636,8 +653,8 @@ source packages based on the outer configuration options:
The remainder of the script is broken in to the various phases of a build. They
are:
-. Preperation
-. Bulding
+. Preparation
+. Building
. Installing, and
. Cleaning
@@ -799,8 +816,8 @@ To build this you can use something similar to:
The build is for a FreeBSD host and the prefix is for user installed
packages. In this example I cannot let the source builder perform the install
-because I never run the RSB with root priviledges so a build set or bset tar
-file is created. This can then be installed using root priviledges.
+because I never run the RSB with root privileges so a build set or bset tar
+file is created. This can then be installed using root privileges.
The command also supplies the ``--trace`` option. The output in the log file
will contain all the macros.
@@ -971,10 +988,10 @@ expansions supported are:
%prep
~~~~~
-The +%prep+ macro starts a block that continues until the next block macro. The
+The `%prep` macro starts a block that continues until the next block macro. The
*prep* or preparation block defines the setup of the package's source and is a
mix of RTEMS Source Builder macros and shell scripting. The sequence is
-typically +%source+ macros for source, +%patch+ macros to patch the source
+typically `%source` macros for source, `%patch` macros to patch the source
mixed with some shell commands to correct any source issues:
.. code-block:: spec
@@ -998,7 +1015,7 @@ example:
This URL is the primary location of the GNU GDB source code and the RTEMS
Source Builder can download the file from this location and by inspecting the
-file extension use ``bzip2`` decompression with +tar+. When the ``%prep``
+file extension use ``bzip2`` decompression with `tar`. When the ``%prep``
section is processed a check of the local ``source`` directory is made to see
if the file has already been downloaded. If not found in the source cache
directory the package is downloaded from the URL. You can append other base
@@ -1039,9 +1056,9 @@ and set up with:
Patching also occurs during the preparation stage. Patches are handled in a
similar way to the source packages except you only ``add`` patches. Patches are
-applied using the +setup+ command. The +setup+ command takes the default patch
+applied using the `setup` command. The `setup` command takes the default patch
option. You can provide options with each patch by adding them as arguments
-before the patch URL. Patches with no options uses the +setup+ default.
+before the patch URL. Patches with no options uses the `setup` default.
.. code-block:: spec
diff --git a/user/rsb/cross-canadian-cross.rst b/user/rsb/cross-canadian-cross.rst
index 8eceed3..7ccd6c3 100644
--- a/user/rsb/cross-canadian-cross.rst
+++ b/user/rsb/cross-canadian-cross.rst
@@ -37,7 +37,7 @@ To build the Curl package for RTEMS you enter the RSB command:
2. The ``--host`` command is the RTEMS architecture and version.
- 3. The BSP is built and installed in the prefix. The arhcitecture must match
+ 3. The BSP is built and installed in the prefix. The architecture must match
the ``--host`` architecture.
.. note: Installing Into Different Directories
diff --git a/user/rsb/index.rst b/user/rsb/index.rst
index c307ebe..9bbc2e1 100644
--- a/user/rsb/index.rst
+++ b/user/rsb/index.rst
@@ -44,7 +44,7 @@ how to build that package from source and taught this tool.
.. sidebar:: Setting up your Host
- See :ref:`QuickStartHost` for details on setting up hosts.
+ See :ref:`QuickStartPreparation` for details on setting up hosts.
The RTEMS Source Builder is known to work on:
diff --git a/user/rsb/project-sets.rst b/user/rsb/project-sets.rst
index 6eb8729..54a3f8e 100644
--- a/user/rsb/project-sets.rst
+++ b/user/rsb/project-sets.rst
@@ -154,7 +154,7 @@ Patches are added to a component's name and in the ``%prep:`` section the
patches can be set up, meaning they are applied to source. The patches are
applied in the order they are added. If there is a dependency make sure you
order the patches correctly when you add them. You can add any number of
-patches and the RSB will handle them efficently.
+patches and the RSB will handle them efficiently.
Patches can have options. These are added before the patch URL. If no options
are provided the patch's setup default options are used.
diff --git a/user/rsb/third-party-packages.rst b/user/rsb/third-party-packages.rst
index 0d9fa81..8610650 100644
--- a/user/rsb/third-party-packages.rst
+++ b/user/rsb/third-party-packages.rst
@@ -133,7 +133,7 @@ A custom RTEMS patch to an executate's source code can turn it into a function
that can be called by the RTEMS shell. Users can call the function in their
executables simulating the running of the package's command. If the package
does not export the code in a suitable manner please contact the project's
-commuinity and see if you can work with them to provide a way for the code to
+community and see if you can work with them to provide a way for the code to
be exported. This may be difficult because exporting internal headers and
functions opens the project up to API compatibility issues they did not have
before. In the simplest case attempting to get the code into a static library
diff --git a/user/start/app.rst b/user/start/app.rst
index fdf6bb7..ac3c064 100644
--- a/user/start/app.rst
+++ b/user/start/app.rst
@@ -1,11 +1,250 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
-.. Copyright (C) 2019 embedded brains GmbH
-.. Copyright (C) 2019 Sebastian Huber
+.. Copyright (C) 2020 Chris Johns
.. _QuickStartAPP:
Build Your Application
======================
-TODO
+You tested a BSP in the previous section. We built the ``erc32`` BSP
+and it is installed under :file:`$HOME/quick-start/rtems/5`.
+
+We will now create a simple Hello World application with a Git
+repository and using the `Waf <https://waf.io>`_ build system.
+
+The application is be created in :file:`$HOME/quick-start/app/hello`.
+
+In the output in this section the base directory :file:`$HOME/quick-start` was
+replaced by ``$BASE``.
+
+The steps in this section assume you are in the directory
+:file:`$HOME/quick-start/app/hello` after the first step changes to
+it.
+
+Setup the application work space. Create a new Git repository, download
+the Waf build system, and the `RTEMS Waf
+<https://git.rtems.org/rtems_waf.git/tree/README>`_.
+
+Create the application directory and change into it:
+
+.. code-block:: none
+
+ mkdir -p $HOME/quick-start/app/hello
+ cd $HOME/quick-start/app/hello
+
+Download the Waf build system and set it to executable:
+
+.. code-block:: none
+
+ curl https://waf.io/waf-2.0.19 > waf
+ chmod +w waf
+
+Initialise a new Git repository:
+
+.. code-block:: none
+
+ git init
+
+Add RTEMS Waf support as a Git sub-module and initialise it:
+
+.. code-block:: none
+
+ git submodule add git://git.rtems.org/rtems_waf.git rtems_waf
+
+Create the application source files. Three files are created with an
+editor of your choice.
+
+First create a C file that configures RTEMS. Using an editor create a
+file called :file:`init.c` and copy the following configuration
+settings:
+
+.. code-block:: c
+
+ /*
+ * Simple RTEMS configuration
+ */
+
+ #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+ #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+
+ #define CONFIGURE_UNLIMITED_OBJECTS
+ #define CONFIGURE_UNIFIED_WORK_AREAS
+
+ #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+ #define CONFIGURE_INIT
+
+ #include <rtems/confdefs.h>
+
+Create the Hello World application source file. Using an editor
+create :file:`hello.c` and copy the follow code:
+
+.. code-block:: c
+
+ /*
+ * Hello world example
+ */
+ #include <rtems.h>
+ #include <stdlib.h>
+ #include <stdio.h>
+
+ rtems_task Init(
+ rtems_task_argument ignored
+ )
+ {
+ printf( "\nHello World\n" );
+ exit( 0 );
+ }
+
+Finally create the Waf script. Using an editor create :file:`wscript`
+and copy the Waf script:
+
+.. code-block:: python
+
+ #
+ # Hello world Waf script
+ #
+ from __future__ import print_function
+
+ rtems_version = "5"
+
+ try:
+ import rtems_waf.rtems as rtems
+ except:
+ print('error: no rtems_waf git submodule')
+ import sys
+ sys.exit(1)
+
+ def init(ctx):
+ rtems.init(ctx, version = rtems_version, long_commands = True)
+
+ def bsp_configure(conf, arch_bsp):
+ # Add BSP specific configuration checks
+ pass
+
+ def options(opt):
+ rtems.options(opt)
+
+ def configure(conf):
+ rtems.configure(conf, bsp_configure = bsp_configure)
+
+ def build(bld):
+ rtems.build(bld)
+
+ bld(features = 'c cprogram',
+ target = 'hello.exe',
+ cflags = '-g -O2',
+ source = ['hello.c',
+ 'init.c'])
+
+Configure the application using Waf's ``configure`` command:
+
+.. code-block:: none
+
+ ./waf configure --rtems=$HOME/quick-start/rtems/5 --rtems-bsp=sparc/erc32
+
+The output will be something close to:
+
+.. code-block:: none
+
+ Setting top to : $BASE/app/hello
+ Setting out to : $BASE/app/hello/build
+ RTEMS Version : 5
+ Architectures : sparc-rtems5
+ Board Support Package (BSP) : sparc-rtems5-erc32
+ Show commands : no
+ Long commands : no
+ Checking for program 'sparc-rtems5-gcc' : $BASE/rtems/5/bin/sparc-rtems5-gcc
+ Checking for program 'sparc-rtems5-g++' : $BASE/rtems/5/bin/sparc-rtems5-g++
+ Checking for program 'sparc-rtems5-gcc' : $BASE/rtems/5/bin/sparc-rtems5-gcc
+ Checking for program 'sparc-rtems5-ld' : $BASE/rtems/5/bin/sparc-rtems5-ld
+ Checking for program 'sparc-rtems5-ar' : $BASE/rtems/5/bin/sparc-rtems5-ar
+ Checking for program 'sparc-rtems5-nm' : $BASE/rtems/5/bin/sparc-rtems5-nm
+ Checking for program 'sparc-rtems5-objdump' : $BASE/rtems/5/bin/sparc-rtems5-objdump
+ Checking for program 'sparc-rtems5-objcopy' : $BASE/rtems/5/bin/sparc-rtems5-objcopy
+ Checking for program 'sparc-rtems5-readelf' : $BASE/rtems/5/bin/sparc-rtems5-readelf
+ Checking for program 'sparc-rtems5-strip' : $BASE/rtems/5/bin/sparc-rtems5-strip
+ Checking for program 'sparc-rtems5-ranlib' : $BASE/rtems/5/bin/sparc-rtems5-ranlib
+ Checking for program 'rtems-ld' : $BASE/rtems/5/bin/rtems-ld
+ Checking for program 'rtems-tld' : $BASE/rtems/5/bin/rtems-tld
+ Checking for program 'rtems-syms' : $BASE/rtems/5/bin/rtems-syms
+ Checking for program 'rtems-bin2c' : $BASE/rtems/5/bin/rtems-bin2c
+ Checking for program 'tar' : /usr/bin/tar
+ Checking for program 'gcc, cc' : $BASE/rtems/5/bin/sparc-rtems5-gcc
+ Checking for program 'ar' : $BASE/rtems/5/bin/sparc-rtems5-ar
+ Checking for program 'g++, c++' : $BASE/rtems/5/bin/sparc-rtems5-g++
+ Checking for program 'ar' : $BASE/rtems/5/bin/sparc-rtems5-ar
+ Checking for program 'gas, gcc' : $BASE/rtems/5/bin/sparc-rtems5-gcc
+ Checking for program 'ar' : $BASE/rtems/5/bin/sparc-rtems5-ar
+ Checking for c flags '-MMD' : yes
+ Checking for cxx flags '-MMD' : yes
+ Compiler version (sparc-rtems5-gcc) : 7.5.0 20191114 (RTEMS 5, RSB 5.1.0, Newlib fbaa096)
+ Checking for a valid RTEMS BSP installation : yes
+ Checking for RTEMS_DEBUG : no
+ Checking for RTEMS_MULTIPROCESSING : no
+ Checking for RTEMS_NEWLIB : yes
+ Checking for RTEMS_POSIX_API : yes
+ Checking for RTEMS_SMP : no
+ Checking for RTEMS_NETWORKING : no
+ 'configure' finished successfully (0.686s)
+
+Build the application:
+
+.. code-block:: none
+
+ ./waf
+
+The output will be something close to:
+
+.. code-block:: none
+
+ Waf: Entering directory `$BASE/app/hello/build/sparc-rtems5-erc32'
+ [1/3] Compiling init.c
+ [2/3] Compiling hello.c
+ [3/3] Linking build/sparc-rtems5-erc32/hello.exe
+ Waf: Leaving directory `$BASE/app/hello/build/sparc-rtems5-erc32'
+ 'build-sparc-rtems5-erc32' finished successfully (0.183s)
+
+Run the executable:
+
+.. code-block:: none
+
+ $HOME/quick-start/rtems/5/bin/rtems-run --rtems-bsps=erc32-sis build/sparc-rtems5-erc32/hello.exe
+
+The output will be something close to:
+
+.. code-block:: none
+
+ RTEMS Testing - Run, 5.1.0
+ Command Line: $BASE/rtems/5/bin/rtems-run --rtems-bsps=erc32-sis build/sparc-rtems5-erc32/hello.exe
+ Host: FreeBSD hihi 12.1-RELEASE-p2 FreeBSD 12.1-RELEASE-p2 GENERIC amd64
+ Python: 3.7.6 (default, Jan 30 2020, 01:18:54) [Clang 6.0.1 (tags/RELEASE_601/final 335540)]
+ Host: FreeBSD-12.1-RELEASE-p2-amd64-64bit-ELF (FreeBSD hihi 12.1-RELEASE-p2 FreeBSD 12.1-RELEASE-p2 GENERIC amd64 amd64)
+
+ SIS - SPARC/RISCV instruction simulator 2.21, copyright Jiri Gaisler 2019
+ Bug-reports to jiri@gaisler.se
+
+ ERC32 emulation enabled
+
+ Loaded build/sparc-rtems5-erc32/hello.exe, entry 0x02000000
+
+ Hello World
+
+ *** FATAL ***
+ fatal source: 5 (RTEMS_FATAL_SOURCE_EXIT)
+ fatal code: 0 (0x00000000)
+ RTEMS version: 5.1.0
+ RTEMS tools: 7.5.0 20191114 (RTEMS 5, RSB 5.1.0, Newlib fbaa096)
+ executing thread ID: 0x08a010001
+ executing thread name: UI1
+ cpu 0 in error mode (tt = 0x101)
+ 107883 0200b6c0: 91d02000 ta 0x0
+ Run time : 0:00:01.011474
+
+Commit the application to the repository:
+
+.. code-block:: none
+
+ git add init.c hello.c wscript
+ git commit -m "My first RTEMS application."
diff --git a/user/start/bootstrap.rst b/user/start/bootstrap.rst
index 9fcf79b..1594f89 100644
--- a/user/start/bootstrap.rst
+++ b/user/start/bootstrap.rst
@@ -8,48 +8,54 @@
Bootstrap the RTEMS Sources
===========================
-You installed the tool suite in your installation prefix and cloned two RTEMS
-repositories in the previous sections. We installed the tool suite in
-:file:`$HOME/quick-start/rtems/5` and cloned the repositories in
-:file:`$HOME/quick-start/src`.
+You installed the tool suite in your installation prefix and made ready the
+source for two RTEMS source packages in the previous sections. We installed
+the tool suite in :file:`$HOME/quick-start/rtems/5` and unpacked the RSB source
+in :file:`$HOME/quick-start/src`.
-If you use source archives of a released RTEMS version, then you can skip this
-section.
+You only need to *bootstrap* the RTEMS sources if you have used
+:ref:`QuickStartSources_Git` to get the sources. If you use source archives of
+a released RTEMS version you can skip this section and move to
+:ref:`QuickStartBSPBuild`.
Before you can build a :ref:`Board Support Package (BSP) <BSPs>` for your
-target hardware, you have to bootstrap the build system in the RTEMS sources.
-This is only necessary, if you use a Git repository clone of the RTEMS sources.
-You have to do this after a fresh repository clone and sometimes after build
-system file updates (e.g. after a ``git pull``). If you are not a build
-system expert, then do the bootstrap after each update of build system files.
-This is a bit annoying, but improving the build system is a complex and time
-consuming undertaking. Feel free to help the RTEMS Project to improve it. For
-the bootstrap it is important that the right version of Autotools
-(:file:`autoconf` and :file:`automake`) are in your ``$PATH``. The right
-version of Autotools is shipped with the RTEMS tool suite you already
-installed.
+target hardware from Git cloned RTEMS sources, you have to bootstrap the build
+system in the RTEMS sources. This is only necessary if you use a Git
+repository clone of the RTEMS sources. You have to do this after a fresh
+repository clone and sometimes after build system file updates (e.g. after a
+``git pull``). If you are not a build system expert, then do the bootstrap
+after each update of build system files. This is a bit annoying, but improving
+the build system is a complex and time consuming undertaking. Feel free to
+help the RTEMS Project to improve it. For the bootstrap it is important that
+the right version of Autotools (:file:`autoconf` and :file:`automake`) are in
+your ``$PATH``. The right version of Autotools is shipped with the RTEMS tool
+suite you already installed. Set the path to the tool suite installed under
+your selected *prefix*:
.. code-block:: none
- cd $HOME/quick-start/src/rtems
export PATH=$HOME/quick-start/rtems/5/bin:"$PATH"
- ./bootstrap -c
- $HOME/quick-start/src/rsb/source-builder/sb-bootstrap
-These commands should output something like this (omitted lines are denoted by
-...):
+Change into the RTEMS source tree to *bootstrap* the build system:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rtems
+ ./rtems-bootstrap
+
+This command should output something like this (omitted lines are denoted by
+``...``):
.. code-block:: none
- removing automake generated Makefile.in files
- removing configure files
- removing aclocal.m4 files
- $ $HOME/quick-start/src/rsb/source-builder/sb-bootstrap
- RTEMS Source Builder - RTEMS Bootstrap, 5 (f07504d27192)
- 1/120: autoreconf: configure.ac
- 2/120: autoreconf: c/configure.ac
- 3/120: autoreconf: c/src/configure.ac
- 4/120: autoreconf: c/src/lib/libbsp/arm/configure.ac
+ RTEMS Bootstrap, 1.0
+ 1/122: autoreconf: configure.ac
+ 2/122: autoreconf: testsuites/configure.ac
+ 3/122: autoreconf: testsuites/fstests/configure.ac
+ 4/122: autoreconf: testsuites/smptests/configure.ac
+ 5/122: autoreconf: testsuites/psxtests/configure.ac
+ 6/122: autoreconf: testsuites/mptests/configure.ac
...
- 120/120: autoreconf: testsuites/tmtests/configure.ac
- Bootstrap time: 0:00:48.744222
+ 121/122: autoreconf: c/src/lib/libbsp/lm32/milkymist/configure.ac
+ 122/122: autoreconf: c/src/make/configure.ac
+ Bootstrap time: 0:00:46.404643
diff --git a/user/start/bsp-build.rst b/user/start/bsp-build.rst
index 3b9eb15..59da2fd 100644
--- a/user/start/bsp-build.rst
+++ b/user/start/bsp-build.rst
@@ -8,35 +8,134 @@
Build a Board Support Package (BSP)
===================================
-You installed the tool suite in your installation prefix, cloned two RTEMS
-repositories and bootstrapped the RTEMS sources in the previous sections. We
-installed the tool suite in :file:`$HOME/quick-start/rtems/5` and cloned the
-repositories in :file:`$HOME/quick-start/src`. We also bootstrapped the RTEMS
-sources.
+You installed the tool suite in your installation prefix, made ready the source
+for two RTEMS source packages and if you are using a Git clone bootstrapped the
+RTEMS sources in the previous sections. We installed the tool suite in
+:file:`$HOME/quick-start/rtems/5` and unpacked the source in
+:file:`$HOME/quick-start/src`.
You are now able to build :ref:`Board Support Packages (BSPs) <BSPs>` for all
-architectures where you have an RTEMS tool suite installed. To build
-applications on top of RTEMS, you have to configure, build and install a BSP
-for your target hardware. To select a proper BSP for your target hardware
-consult the :ref:`BSPs <BSPs>` chapter. We select the `erc32` BSP.
+architectures you have an installed RTEMS tool suite. To build applications on
+top of RTEMS, you have to build and install a BSP for your target hardware. To
+select a proper BSP for your target hardware consult the :ref:`BSPs <BSPs>`
+chapter. We select the `erc32` BSP. The ``erc32`` BSP uses approximately 2.3G
+bytes of disk space when the testsuite is built and 44M bytes of space when
+installed.
-We configure, build and install the BSP in four steps. The first step is to
-create a build directory. It must be separate from the RTEMS source directory.
-We use :file:`$HOME/quick-start/build/b-erc32`.
+We will first show how to build the BSP using the RSB and then we will show how
+to build the same BSP `manually <QuickStartBSPBuild_Manual>`_. You only need to
+use one of the listed methods to build the BSP.
+
+In the output in this section the base directory :file:`$HOME/quick-start` was
+replaced by ``$BASE``.
+
+.. _QuickStartBSPBuild_RSB:
+
+RSB BSP Build
+-------------
+
+The RSB build of RTEMS does not use the RTEMS source we made ready. It uses the
+RSB source you downloaded in a previous section. If you are using a release RSB
+source archive the BSP built is the released kernel image. If you are using a
+Git clone of the RSB the BSP will be version referenced in the RSB clone.
+
+To build the BSP with all the tests run this command:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rsb/rtems
+ ../source-builder/sb-set-builder --prefix=$HOME/quick-start/rtems/5 \
+ --target=sparc-rtems5 --with-rtems-bsp=erc32 --with-rtems-tests=yes 5/rtems-kernel
+
+This command should output something like this:
+
+.. code-block:: none
+
+ RTEMS Source Builder - Set Builder, 5.1.0
+ Build Set: 5/rtems-kernel
+ config: tools/rtems-kernel-5.cfg
+ package: sparc-rtems5-kernel-erc32-1
+ building: sparc-rtems5-kernel-erc32-1
+ sizes: sparc-rtems5-kernel-erc32-1: 2.279GB (installed: 44.612MB)
+ cleaning: sparc-rtems5-kernel-erc32-1
+ reporting: tools/rtems-kernel-5.cfg -> sparc-rtems5-kernel-erc32-1.txt
+ reporting: tools/rtems-kernel-5.cfg -> sparc-rtems5-kernel-erc32-1.xml
+ installing: sparc-rtems5-kernel-erc32-1 -> $BASE/
+ cleaning: sparc-rtems5-kernel-erc32-1
+ Build Set: Time 0:03:09.896961
+
+The RSB BSP build can be customised with following RSB command line options:
+
+``--with-rtems-tests``:
+ Build the test suite. If ``yes`` is provided all tests in the testsuite are
+ build. If ``no`` is provided no tests are built and if ``samples`` is
+ provided only the sample executables are built, e.g.
+ ``--with-rtems-tests=yes``.
+
+``--with-rtems-smp``:
+ Build with SMP support. The BSP has to have SMP support or this option will
+ fail with an error.
+
+``--with-rtems-legacy-network``:
+ Build the legacy network software. We recommend you use the current network
+ support in the RTEMS BSP Library (libbsd) unless you need to maintain a
+ legacy product. Do not use the legacy networking software for new
+ developments.
+
+``--with-rtems-bspopts``:
+ Build the BSP with BSP specific options. This is an advanced option. Please
+ refer to the BSP specific details in the :ref:`Board Support Packages
+ (BSPs)` of this manual or the BSP source code in the RTEMS source
+ directory. To supply a list of options quote then list with ``"``, e.g.
+ ``--with-rtems-bspopts="BSP_POWER_DOWN_AT_FATAL_HALT=1"``
+
+If you have built a BSP with the RSB, you can move on to
+:ref:`QuickStartBSPTest`.
+
+.. _QuickStartBSPBuild_Manual:
+
+Manual BSP Build
+----------------
+
+We manually build the BSP in four steps. The first step is to create a build
+directory. It must be separate from the RTEMS source directory. We use
+:file:`$HOME/quick-start/build/b-erc32`.
.. code-block:: none
mkdir -p $HOME/quick-start/build/b-erc32
-The second step is to configure the BSP. There are various configuration
-options available. Some configuration options are BSP-specific. Prepend the
-RTEMS tool suite binary directory to your ``$PATH`` throughout the remaining
-steps.
+The second step is to set your path. Prepend the RTEMS tool suite binary
+directory to your ``$PATH`` throughout the remaining steps. Run the command:
.. code-block:: none
- cd $HOME/quick-start/build/b-erc32
export PATH=$HOME/quick-start/rtems/5/bin:"$PATH"
+
+Check your installed tools can be found by running:
+
+.. code-block:: none
+
+ command -v sparc-rtems5-gcc && echo "found" || echo "not found"
+
+The output should be:
+
+.. code-block:: none
+
+ found
+
+If ``not found`` is printed the tools are not correctly installed or the path
+has not been correctly set. Check the contents of the path
+:file:`$HOME/quick-start/rtems/5/bin` manually and if :file:`sparc-rtems5-gcc`
+is present the path is wrong. If the file cannot be found return to
+:ref:`QuickStartTools` and install the tools again.
+
+The third step is to configure the BSP. There are various configuration
+options available. Some configuration options are BSP-specific.
+
+.. code-block:: none
+
+ cd $HOME/quick-start/build/b-erc32
$HOME/quick-start/src/rtems/configure \
--prefix=$HOME/quick-start/rtems/5 \
--enable-maintainer-mode \
@@ -45,7 +144,7 @@ steps.
--enable-tests
This command should output something like this (omitted lines are denoted by
-...):
+``...``):
.. code-block:: none
@@ -64,7 +163,7 @@ This command should output something like this (omitted lines are denoted by
config.status: creating Makefile
-Building the BSP is the third step.
+Building the BSP is the forth step.
.. code-block:: none
@@ -72,8 +171,7 @@ Building the BSP is the third step.
make
This command should output something like this (omitted lines are denoted by
-...). In this output the base directory :file:`$HOME/quick-start` was replaced
-by ``$BASE``.
+...).
.. code-block:: none
@@ -97,7 +195,7 @@ by ``$BASE``.
configure: creating make/erc32.cache
gmake[3]: Entering directory '$BASE/build/b-erc32/sparc-rtems5/c/erc32'
...
- sparc-rtems5-gcc -mcpu=cypress -O2 -g -ffunction-sections -fdata-sections -Wall -Wmissing-prototypes -Wimplicit-function-declaration -Wstrict-prototypes -Wnested-externs -B./../../lib/libbsp/sparc/erc32 -B$BASE/src/rtems/bsps/sparc/erc32/start -specs bsp_specs -qrtems -L./../../cpukit -L$BASE/src/rtems/bsps/sparc/shared/start -Wl,--wrap=printf -Wl,--wrap=puts -Wl,--wrap=putchar -Wl,--gc-sections -o spwkspace.exe spwkspace/spwkspace-init.o ./../../lib/libbsp/sparc/erc32/librtemsbsp.a ./../../cpukit/librtemscpu.a
+ sparc-rtems5-gcc -mcpu=cypress -O2 -g -ffunction-sections -fdata-sections -Wall -Wmissing-prototypes -Wimplicit-function-declaration -Wstrict-prototypes -Wnested-externs -B./../../lib/libbsp/sparc/erc32 -B$BASE/src/rtems/bsps/sparc/erc32/start -specs bsp_specs -qrtems -L./../../cpukit -L$BASE/src/rtems/bsps/sparc/shared/start -Wl,--wrap=printf -Wl,--wrap=puts -Wl,--wrap=putchar -Wl,--gc-sections -o spwkspace.exe spwkspace/spwkspace-init.o ./../../lib/libbsp/sparc/erc32/librtemsbsp.a ./../../cpukit/librtemscpu.a
gmake[5]: Leaving directory '$BASE/build/b-erc32/sparc-rtems5/c/erc32/testsuites/sptests'
gmake[4]: Leaving directory '$BASE/build/b-erc32/sparc-rtems5/c/erc32/testsuites'
gmake[3]: Leaving directory '$BASE/build/b-erc32/sparc-rtems5/c/erc32'
diff --git a/user/start/bsp-test.rst b/user/start/bsp-test.rst
index aefeeb9..f609c59 100644
--- a/user/start/bsp-test.rst
+++ b/user/start/bsp-test.rst
@@ -29,7 +29,7 @@ by ``$BASE``.
.. code-block:: none
- RTEMS Testing - Tester, 5.0.not_released
+ RTEMS Testing - Tester, 5.1.0
Command Line: $BASE/rtems/5/bin/rtems-test --rtems-bsp=erc32-sis --rtems-tools=$BASE/rtems/5 .
Python: 2.7.15 (default, Jan 10 2019, 01:14:47) [GCC 4.2.1 Compatible FreeBSD Clang 6.0.1 (tags/RELEASE_601/final 335540)]
Host: FreeBSD-12.0-RELEASE-p2-amd64-64bit-ELF (FreeBSD Build_FreeBSD12 12.0-RELEASE-p2 FreeBSD 12.0-RELEASE-p2 GENERIC amd64 amd64)
diff --git a/user/start/gsoc.rst b/user/start/gsoc.rst
new file mode 100644
index 0000000..7f27d7b
--- /dev/null
+++ b/user/start/gsoc.rst
@@ -0,0 +1,132 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 Niteesh Babu <niteesh.gs@gmail.com>
+
+.. _QuickStartGSoC:
+
+GSoC Getting Started
+====================
+
+The goal of this page is to help new users, especially students get RTEMS
+compiled and running so they can start with the real work.
+
+Please join the :r:list:`users` and :r:list:`devel` and ask
+questions. Help correct any deficiencies in the code or documentation you spot,
+including those on the wiki. The ultimate goal of GSoC is to help you become
+part of the open source community.
+
+This section will help you to quickly setup a development environment without
+delving into the details. For more information you can go through the other
+subsections under :ref:`Quick Start <QuickStart>` chapter or ask on the
+:r:list:`devel`.
+
+You will be best served by using a GNU/Linux environment, which could be in a
+virtual machine, for example that uses `Virtualbox <https://www.virtualbox.org/>`_
+and should run on most modern desktop systems. You should also be able to work
+with a MacOS or Windows system, but might encounter more difficulty than a *nix
+environment.
+
+Setting up a development environment consists of the following steps.
+
+1) Installing dependencies for your host operating system.
+2) Choosing an installation prefix.
+3) Downloading the source code.
+4) Installing the tool suite.
+5) Building the Board Support Package (BSP).
+6) Testing the Board Support Package (BSP).
+
+Installing Dependencies
+-----------------------
+
+You need tools for your host’s operating system to build the RTEMS tool suite
+from source. Please have a look at the :ref:`host-computer` chapter for the
+instructions to install the tools for your OS.
+
+Choosing an installation prefix
+-------------------------------
+
+The term ``prefix`` refers to the path on your computer where the software is to
+be installed.
+You can refer to the :ref:`Prefix <QuickStartPrefixes>` section for details on
+choosing an installation prefix.
+
+Downloading the Sources
+-----------------------
+
+We will be using Git to clone the sources for RTEMS and RSB. This is the
+preferred way if you are planning to make contributions to the RTEMS project.
+
+Please refer to the :ref:`QuickStartSources_Git` section for instructions on
+obtaining sources using Git.
+
+Installing the Tool Suite
+-------------------------
+
+The Tools suite is the collection of tools required to build the BSP. This
+includes the compiler, debugger, assembler and other tools. These tools are
+architecture-specific. We will be installing the SPARC tool suite since we are
+building a SPARC based BSP.
+
+Please refer to the :ref:`QuickStartTools` section for instructions on
+building and installing the tool suite.
+
+Building the Board Support Package
+----------------------------------
+
+There are two ways of building a BSP. We could either ask RSB to build the BSP
+or manually build it. In this section will we be building it manually.
+Please refer the :ref:`QuickStartBSPBuild_Manual` section for the
+instructions.
+
+Testing the Board Support Package
+---------------------------------
+
+Testing is an essential part of RTEMS development process. The main reason for
+choosing the SPARC erc32 BSP is that, it has very good simulator support. This
+will allow you to test your changes without the need for SPARC hardware.
+
+Please refer to :ref:`QuickStartBSPTest` for instructions on testing the BSP.
+
+Prove You Can Work On RTEMS
+---------------------------
+
+This section is only for students interested in Google Summer of Code.
+
+You have to finish the following task to prove that you can work on RTEMS.
+
+Modify the hello world example to include a new different print statement.
+Something like "Hello from The Dark Side!". Then send us enough to prove to us
+that you did this. We want to know you can work with RTEMS.
+
+Create a patch of your changes and send it to :r:list:`devel` along with the
+screenshot of the output.
+
+If you followed this guide, this hello world modification will likely need to be
+made in ``$HOME/quick-start/src/rtems/testsuites/samples/hello/init.c``.
+To test your changes, you have to build the BSP again. This could be done by
+running `make` in the BSP build directory.
+
+.. code-block:: none
+
+ cd $HOME/quick-start/build/b-erc32
+ make
+
+If you are happy with your changes you can commit the changes and send the patch
+to :r:list:`devel`.
+
+Creating and Sending Patches
+----------------------------
+
+Before sending patches, make sure that the changes you have made conforms to
+RTEMS coding standards.
+You can refer to :ref:`Contributing` section for instruction on creating and
+sending patches.
+
+Here are a few pointers to keep in mind while creating the patches.
+
+* Make sure not to commit changes in the master branch. This is to avoid merge
+ conflicts when you are pulling the latest changes from the remote branch.
+* Avoid trailing whitespace errors.
+* The author name of the patch is your full name.
+* The author email of the patch is your valid email address.
+* Ensure that your patches build before sending them for review.
diff --git a/user/start/host.rst b/user/start/host.rst
deleted file mode 100644
index f891f5d..0000000
--- a/user/start/host.rst
+++ /dev/null
@@ -1,21 +0,0 @@
-.. SPDX-License-Identifier: CC-BY-SA-4.0
-
-.. Copyright (C) 2019 embedded brains GmbH
-.. Copyright (C) 2019 Sebastian Huber
-
-.. _QuickStartHost:
-
-Prepare Your Host Computer
-==========================
-
-The *host computer* is a computer you use to develop applications. It runs all
-your tools, editors, documentation viewers, etc. To get started with RTEMS
-development you need tools from your host's operating system to build the RTEMS
-tool suite from source. This is not a one-click installation process, but
-there are :ref:`good reasons <WhyBuildFromSource>` to build everything from
-source. You need a native C, C++ and Python development environment. Please
-make sure that you can build native C/C++ applications on your host computer.
-You must be able to build native Python C modules. Usually, you have to
-install a Python development package for this. Please have a look at the
-:ref:`Host Computer <host-computer>` chapter for the gory details. In
-particular :ref:`Microsoft Windows <microsoft-windows>` user should do this.
diff --git a/user/start/index.rst b/user/start/index.rst
index d6333f3..8d47126 100644
--- a/user/start/index.rst
+++ b/user/start/index.rst
@@ -14,7 +14,7 @@ applications on top of RTEMS.
.. toctree::
- host
+ preparation
prefixes
sources
tools
@@ -22,3 +22,5 @@ applications on top of RTEMS.
bsp-build
bsp-test
app
+ rsb-packages
+ gsoc
diff --git a/user/start/prefixes.rst b/user/start/prefixes.rst
index 9727503..67255d0 100644
--- a/user/start/prefixes.rst
+++ b/user/start/prefixes.rst
@@ -21,32 +21,39 @@ path. Packages for your host computer typically use a default prefix of
:file:`/usr/local` on FreeBSD and Linux.
You have to select a prefix for your installation. You will build and install
-the RTEMS tool suite, an RTEMS kernel for a BSP and you may build and install
-third party libraries. You can build them all as a stack with a single prefix
-or you can
+the RTEMS tool suite, an RTEMS kernel for a BSP, and you may build and install
+third party libraries. You can build all the parts as a stack with a single
+prefix or you can separate various parts by providing different prefixes to
+each part as it is built. Using separate prefixes is for experienced RTEMS
+users.
-The RTEMS tool suite consists of a cross tool chain (Binutils, GCC, GDB,
-Newlib, etc.) for your target architecture and :ref:`other tools <HostTools>`
-provided by the RTEMS Project. The RTEMS
+Do not select a prefix that is under the top of any of the source trees. The
+prefix collects the install output of the various build steps you take in this
+guide and need to be kept separate from the sources used.
+The RTEMS tool suite consists of a cross tool chain (Binutils, GCC, GDB,
+Newlib, etc.) for your target architecture and :ref:`RTEMS tools <HostTools>`
+provided by the RTEMS Project. The RTEMS Tools are a toolkit that help create
+the RTEMS ecosystem and help support the building of embedded real-time
+applications and systems.
You build and install the tool suite with the :ref:`RTEMS Source Builder (RSB)
<RSB>`. By default, the RSB will start the prefix path with a host operating
-system specific path plus :file:`rtems` plus the RTEMS version, e.g.
-:file:`/opt/rtems/5` on Linux and :file:`/usr/local/rtems/5` on FreeBSD and
-macOS.
+system specific path plus :file:`rtems`, and the RTEMS version, e.g.
+:file:`/opt/rtems/5` on Linux, and :file:`/usr/local/rtems/5` on FreeBSD and
+macOS. Placing the RTEMS version number in the path lets you manage and
+migrate RTEMS versions as they are released.
It is strongly recommended to run the RSB as a *normal user* and not with
*root* privileges (also known as *super user* or *Administrator*). You have to
make sure that your normal user has sufficient privileges to create files and
directories under the prefix. For example, you can create a directory
-:file:`/opt/rtems` and give it to a developer group with read, write and
+:file:`/opt/rtems` and give it to a developer group with read, write, and
execute permissions. Alternatively, you can choose a prefix in your home
directory, e.g. :file:`$HOME/rtems/5` or with a project-specific component
-:file:`$HOME/project-x/rtems/5`. For more ideas, see the
-:ref:`project sandboxing <ProjectSandboxing>` section. In this quick start
-chapter, we will choose :file:`$HOME/quick-start/rtems/5` for the RTEMS tool
-suite prefix.
+:file:`$HOME/project-x/rtems/5`. For more ideas, see the :ref:`project
+sandboxing <ProjectSandboxing>` section. In this quick start chapter, we will
+choose :file:`$HOME/quick-start/rtems/5` for the RTEMS tool suite prefix.
.. warning::
diff --git a/user/start/preparation.rst b/user/start/preparation.rst
new file mode 100644
index 0000000..eb0d56b
--- /dev/null
+++ b/user/start/preparation.rst
@@ -0,0 +1,113 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2018 Shashvat Jain
+.. Copyright (C) 2019 embedded brains GmbH
+.. Copyright (C) 2019 Sebastian Huber
+.. Copyright (C) 2020 Chris Johns
+.. Copyright (C) 2020 Gedare Bloom
+
+.. _QuickStartPreparation:
+
+Preparation
+===========
+
+You need to perform some basic preparation to get started with RTEMS
+development. You need tools from your host's operating system to build the
+RTEMS tool suite from source. The RTEMS tools you build are used to build the
+Board Support Package (BSP) libraries for your target hardware from source. The
+BSP libraries contain the RTEMS operating system. This is not a one-click
+installation process, but there are :ref:`good reasons <WhyBuildFromSource>` to
+build everything from source.
+
+During this Quick Start guide you will:
+
+* Select a suitable place to install RTEMS.
+
+* Select if you download all the source code before you start building RTEMS or
+ the source is downloaded on demand as it is needed. If you do not have a
+ reliable internet connection we recommend you download all the source before
+ starting a build.
+
+* Build a tool suite.
+
+* Build and test a BSP.
+
+* Optionally build additional packages.
+
+Alternatively you can build a BSP as a package using the RSB. This is
+covered in :ref:`QuickStartBSPPackages`
+
+Host Computer
+-------------
+
+The *host computer* is a computer you use to develop applications. It runs all
+your tools, editors, documentation viewers, etc. You need a native C, C++, and
+Python development environment. Please make sure you can build native C/C++
+applications on your host computer. You must be able to build native Python C
+modules as some RTEMS tools contain these modules. Usually, you have to
+install a Python development package for this. Please have a look at the
+:ref:`Host Computer <host-computer>` chapter for the gory details. In
+particular :ref:`Microsoft Windows <microsoft-windows>` users should do this.
+
+Selecting a BSP
+---------------
+
+If you are new to RTEMS and you are looking to try RTEMS then the best suited
+Board Support Package (BSP) is the :ref:`SPARC ERC32 <BSP_sparc_erc32>`
+(``erc32``). The SPARC ERC32 BSP has a robust simulator that runs the example
+and test executables on your host computer. This Quick Start guide will build
+the ``erc32`` BSP and run RTEMS tests executables in the simulator. The ERC32
+BSP is a SPARC architecture BSP so the tool suite name is ``sparc-rtems5``.
+
+If you are looking for a hardware target to run RTEMS on we recommend the
+:ref:`BeagleBone Black <BSP_arm_beagleboneblack>` (``beagleboneblack``)
+BSP. The BeagleBone Black support includes the RTEMS BSD Library (``libbsd``)
+and networking. The BeagleBone Black BSP is an ARM architecture BSP so the tool
+suite name is ``arm-rtems5``.
+
+Selecting a Version of RTEMS
+----------------------------
+
+In the examples of this manual we will often refer to a specific version of
+RTEMS, which will usually be the version that accompanied the publication of
+this documentation manual. That may not be the appropriate version for you to
+use, for example, it may be too old (or too new) depending on what you are
+trying to do. If you're not sure what version to use, we generally recommend
+using the most recent release or the development head (master), and you may
+want to consult with the same version of the documentation. We hope that newer
+is better.
+
+An RTEMS *release* involves the creation of a single downloadable file,
+normally a compressed tarball, that packages the source of all the repositories
+in a state consistent with the time the release is created.
+A release branch is a git branch pushed to the repositories named with the
+numeric identifier of the branch.
+A release branch release is a git tag on a release branch with
+the tags pushed to the repositories.
+
+Numbering for RTEMS versions beginning with RTEMS 5 uses a format as follows.
+The master branch has the version **N.0.0** with N being the next major release
+number. The first release of this series has the version number **N.1.0.** and
+there is exactly one commit with this version number in the corresponding
+repository. The first bugfix release (minor release) of this series will have
+the version number **N.2.0**. The release branch will have the version
+number **N.M.1** with **M** being the last minor release of this series.
+
+For example:
++ 5.0.0 is the version number of the development master for the 5 series.
++ 5.1.0 is the first release of the 5 series.
++ 5.1.1 is the version number of the 5 series release branch right after
+ the 5.1.0 release until 5.2.0 is released.
++ 5.2.0 is the first bugfix release of the 5 series
++ 5.2.1 is the version number of the 5 series release branch right after
+ the 5.2.0 release until 5.3.0 is released.
++ 6.0.0 is the version number of the development master for the 6 series.
+
+RTEMS development tools use **N** as the version number and are expected to
+work with all releases and the release branch of the N series.
+So to build tools for compiling RTEMS version number 5.1.0 for SPARC use
+``sparc-rtems5``. Despite the number not increasing, the tools may change
+within a release branch, for example the tools packaged with 5.1.1 still use
+the ``sparc-rtems5`` moniker, but are likely not the same as the tools used
+in version 5.1.0. This tool mismatch can be a source of confusion. Be sure to
+use the toolchain that matches your release.
diff --git a/user/start/rsb-packages.rst b/user/start/rsb-packages.rst
new file mode 100644
index 0000000..f677928
--- /dev/null
+++ b/user/start/rsb-packages.rst
@@ -0,0 +1,184 @@
+.. SPDX-License-Identifier: CC-BY-SA-4.0
+
+.. Copyright (C) 2020 Contemporary Software
+.. Copyright (C) 2020 Chris Johns
+
+.. _QuickStartBSPPackages:
+
+Build an RSB Package
+====================
+
+This section describes how to build an RTEMS package using the RSB. Before we
+start to build a package with the RSB you need to complete these steps:
+
+- :ref:`QuickStartPrefixes`
+
+- :ref:`QuickStartSources`.
+
+Return to here once you have completed these steps.
+
+You have chosen an installation prefix, the BSP to build, the tool's
+architecure and prepared the source for the RSB in the previous sections. We
+have chosen :file:`$HOME/quick-start/rtems/5` as the installation prefix, the
+``erc32`` BSP and the SPARC architecture name of ``sparc-rtems5``, and unpacked
+the RSB source in :file:`$HOME/quick-start/src`.
+
+You are now able to build :ref:`BSP Packages` or 3rd party libraries of code if you
+have built a BSP.
+
+RTEMS Packages
+--------------
+
+RTEMS Packages are source packages the RSB build to run on RTEMS. An installed
+package is a set of header files and libraries. Your application include the
+packages header files to make calls to the package's code and include the
+libraries in it's linker options.
+
+RTEMS packages can be part of the RTEMS Project or they can be external
+packages from 3rd parties. RTEMS Project packages include the BSPs and BSD
+Library package called ``libbsd``. External 3rd party packages include
+networking such has ``curl`` or ``libcurl`` to graphics libraries.
+
+Packages can depend on other packages and need to be build in the corret
+order. For example the FreeBSD Library package depends on the BSP package and a
+3rd party library such as ``curl`` depends on the FreeBSD Library package. We
+call this layering a vertical software stack.
+
+RTEMS applications are cross-compiled and this adds complexity when building
+libraries of code. RTEMS Packages build with the RSB manage this complexity for
+you.
+
+Package are libraries so they will not be linked into your application until
+you make calls to the the code and add the library to your application's linker
+command line.
+
+.. QuickStartRSBPackage_BSPStack:
+
+BSP Stack Build
+---------------
+
+A BSP stack build is a single command that uses the RSB to build a BSP software
+stack of:
+
+* Tool suite
+
+* BSP
+
+* Packages
+
+The packages built depend on the BSP and the default will build all packages for a
+BSP.
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rsb/rtems
+ ../source-builder/sb-set-builder --prefix=$HOME/quick-start/rtems/5 \
+ --with-rtems-tests=yes 5/bsps/erc32
+
+This command should output something like this:
+
+.. code-block:: none
+
+ RTEMS Source Builder - Set Builder, 5.1.0
+ Build Set: 5/bsps/erc32
+ Build Set: 5/rtems-sparc.bset
+ Build Set: 5/rtems-autotools.bset
+ Build Set: 5/rtems-autotools-internal.bset
+ config: tools/rtems-autoconf-2.69-1.cfg
+ package: autoconf-2.69-x86_64-freebsd12.1-1
+ building: autoconf-2.69-x86_64-freebsd12.1-1
+ sizes: autoconf-2.69-x86_64-freebsd12.1-1: 7.505MB (installed: 0.000B)
+ ...
+ building: protobuf-2.6.1-sparc-rtems5-1
+ sizes: protobuf-2.6.1-sparc-rtems5-1: 228.079MB (installed: 84.408MB)
+ cleaning: protobuf-2.6.1-sparc-rtems5-1
+ reporting: net/protobuf-2.6.1-1.cfg -> protobuf-2.6.1-sparc-rtems5-1.txt
+ reporting: net/protobuf-2.6.1-1.cfg -> protobuf-2.6.1-sparc-rtems5-1.xml
+ staging: protobuf-2.6.1-sparc-rtems5-1 -> $HOME/quick-start/src/rsb/rtems/build/tmp/sb-500-staging
+ cleaning: protobuf-2.6.1-sparc-rtems5-1
+ Build Set: Time 0:00:23.564992
+ Build Set: Time 0:02:27.380299
+ installing: 5/bsps/erc32 -> $HOME/quick-start/rtems/
+ clean staging: 5/bsps/erc32
+ Staging Size: 1.372GB
+ Build Set: Time 0:24:17.83979
+
+The RSB BSP build can be customised with following RSB command line options:
+
+``--with-rtems-tests``:
+ Build the test suite. If ``yes`` is provided all tests in the testsuite are
+ build. If ``no`` is provided no tests are built and if ``samples`` is
+ provided only the sample executables are built, e.g.
+ ``--with-rtems-tests=yes``.
+
+``--with-rtems-smp``:
+ Build with SMP support. The BSP has to have SMP support or this option will
+ fail with an error.
+
+``--with-rtems-bspopts``:
+ Build the BSP with BSP specific options. This is an advanced option. Please
+ refer to the BSP specific details in the :ref:`Board Support Packages
+ (BSPs)` of this manual or the BSP source code in the RTEMS source
+ directory. To supply a list of options quote then list with ``"``, e.g.
+ ``--with-rtems-bspopts="BSP_POWER_DOWN_AT_FATAL_HALT=1"``
+
+Only a limited number of BSPs have RSB support to build as a software stack. To
+see which BSPs are supported run this command:
+
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rsb/rtems
+ ../source-builder/sb-set-builder --list-bsets | grep bsps
+
+Package Build
+-------------
+
+Packages are built using RSB build sets. A build set is a set of builds need to
+build a packages. The build steps can be dependencies a package has or it could
+be a stack of software to provide specific functionality, i.e. a build set can
+be a list of build sets. To view the avaliable build sets run this command:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rsb/rtems
+ ../source-builder/sb-set-builder --list-bsets
+
+RTEMS package naming is based on the naming FreeBSD uses in its ports
+collection.
+
+This Quick Start Guide will build the BSD Library or :file:`5/rtems-libbsd`.
+
+An RTEMS package is hosted on RTEMS so the tool suite name needs to be supplied
+using the ``--host`` option, e.g. ``--host=sparc-rtem5``. The BSP needs to be
+provided using the ``--with-rtems-bsp`` option,
+e.g. ``--with-rtems-bsp=erc32``. The commands to build ``libbsd`` for the
+``erc32`` BSP are:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rsb/rtems
+ ../source-builder/sb-set-builder --prefix=$HOME/quick-start/rtems/5 \
+ --host=sparc-rtems5 --with-rtems-bsp=erc32 5/rtems-libbsd
+
+This command should output something like this:
+
+.. code-block:: none
+
+ RTEMS Source Builder - Set Builder, 5.1.0
+ Build Set: 5/rtems-libbsd
+ config: tools/rtems-libbsd-5.cfg
+ package: rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1
+ building: rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1
+ sizes: rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1: 1.199GB (installed: 116.541MB)
+ cleaning: rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1
+ reporting: tools/rtems-libbsd-5.cfg -> rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1.txt
+ reporting: tools/rtems-libbsd-5.cfg -> rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1.xml
+ installing: rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1 -> $HOME/quick-start/rtems/5
+ cleaning: rtems-libbsd-v3cc039cdac77272a8e16b33ae5a53ccd89edf989-sparc-rtems5-1
+ Build Set: Time 0:00:51.898231
+
+.. note::
+
+ Not all packages will build or run with all BSPs. Please ask on the
+ :r:list:`users` if you have any issues.
diff --git a/user/start/sources.rst b/user/start/sources.rst
index 692e2bc..70b1456 100644
--- a/user/start/sources.rst
+++ b/user/start/sources.rst
@@ -2,6 +2,7 @@
.. Copyright (C) 2019 embedded brains GmbH
.. Copyright (C) 2019 Sebastian Huber
+.. Copyright (C) 2020 Chris Johns
.. _QuickStartSources:
@@ -10,43 +11,123 @@ Obtain the Sources
You have considered and chosen a suitable installation prefix in the previous
section. We have chosen :file:`$HOME/quick-start/rtems/5` as the installation
-prefix.
+prefix. We will show how to use a released version of RTEMS and then as an
+alternative we will show you using the :ref:`RSB Git repository
+<QuickStartSources_Git>`. Consider using a Git clone if you wish to make
+contributions to the RTEMS Project.
-You need at least two source archives or Git repositories to work with RTEMS.
-You can download the source archives for a released RTEMS version or you can
-clone Git repositories to get all versions of RTEMS including the development
-head.
+You need the RTEMS Source Builder (RSB) to work with RTEMS and we prefer you
+use a released version. A released version of the RSB downloads all source code
+from the RTEMS servers. Each release archives all the referenced source
+providing long term stability as changes in upstream projects do not effect a
+release's build.
-We will clone the Git repositories into :file:`$HOME/quick-start/src`.
+You will need approximately 1.5G bytes of disk space to build the tools, RTEMS
+kernel, network stack and 3rd party packages for the ERC32 BSP.
+
+.. _QuickStartSources_Released:
+
+Releases
+--------
+
+You can download the source archives for a released RTEMS version from RTEMS'
+servers. Releases can be view at https://ftp.rtems.org/pub/rtems/releases with
+the releases listed as a series under a release's major number. For RTEMS 5.1.0
+the release series is `5 <https://ftp.rtems.org/pub/rtems/releases/5>`_ and the
+release path is https://ftp.rtems.org/pub/rtems/releases/5/5.1.0.
+
+To work with the archives of a released RTEMS version, simply replace the
+version number ``5`` used throughout this chapter with the version number you
+selected, e.g. ``sparc-rtems4.11``, ``sparc-rtems6``, and so on.
+
+Download and unpack using the ``curl`` and ``tar`` command with these commands:
.. code-block:: none
mkdir -p $HOME/quick-start/src
cd $HOME/quick-start/src
- git clone git://git.rtems.org/rtems-source-builder.git rsb
- git clone git://git.rtems.org/rtems.git
+ curl https://ftp.rtems.org/pub/rtems/releases/5/5.1.0/rtems-source-builder-5.1.0.tar.xz | tar xJf -
+
+If ``curl`` does not work consider using ``wget`` or a browser.
+
+The RSB is unpacked under the path ``rtems-source-builder-5.1.0``. Rename this
+to ``rsb`` to get shorter paths during the tool suite build. To do this run
+these commands:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src
+ mv rtems-source-builder-5.1.0 rsb
+
+.. _QuickStartSources_Released_RTEMS:
+
+If you wish to build the RTEMS kernel from source obtain the RTEMS kernel
+sources:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src
+ curl https://ftp.rtems.org/pub/rtems/releases/5/5.1.0/rtems-5.1.0.tar.xz | tar xJf -
+
+.. _QuickStartSources_Git:
+
+Git
+---
-The :file:`rsb` repository clone contains the
-:ref:`RTEMS Source Builder (RSB) <RSB>`. We clone it into
-:file:`rsb` to get shorter paths during the tool suite build. The
-:file:`rtems` repository clone contains the RTEMS sources. These two
-repositories are enough to get started. There are
-`more repositories <https://git.rtems.org>`_ available.
+Alternatively, clone the Git repositories into :file:`$HOME/quick-start/src`.
-Alternatively, you can download the source archives of a released RTEMS
-version.
+A Git repository clone gives you some flexibility with the added complexity of
+needing to use a Git branch to build a released version. With Git you can
+switch between branches to try out different RTEMS versions and you have access
+to the RTEMS source history. The RTEMS Project welcomes contributions. The Git
+repositories enable you to easily create patches and track local changes.
+
+You can clone the Git repository to get all versions of RTEMS including the
+development head. Release branches in Git are kept stable however they may
+differ from a release's source archive.
.. code-block:: none
mkdir -p $HOME/quick-start/src
cd $HOME/quick-start/src
- curl https://ftp.rtems.org/pub/rtems/releases/4.11/4.11.3/rtems-4.11.3.tar.xz | tar xJf -
- curl https://ftp.rtems.org/pub/rtems/releases/4.11/4.11.3/rtems-source-builder-4.11.3.tar.xz | tar xJf -
-
-This quick start chapter focuses on working with the Git repository clones
-since this gives you some flexibility. You can switch between branches to try
-out different RTEMS versions. You have access to the RTEMS source history.
-The RTEMS Project welcomes contributions. The Git repositories enable you to
-easily create patches and track local changes. If you prefer to work with
-archives of a released RTEMS version, then simply replace the version number 5
-used throughout this chapter with the version number you selected, e.g. 4.11.
+ git clone git://git.rtems.org/rtems-source-builder.git rsb
+ git clone git://git.rtems.org/rtems.git
+
+The :file:`rsb` repository clone contains the :ref:`RTEMS Source Builder (RSB)
+<RSB>`. We clone it into :file:`rsb` to get shorter paths during the tool
+suite build. The :file:`rtems` repository clone contains the RTEMS sources.
+These two repositories are enough to get started. There are `more repositories
+<https://git.rtems.org>`_ available.
+
+Offline Download
+----------------
+
+If you have limited Internet access you can download the source before you
+start building. If you are permanently connected to the Internet you do not
+need to do this and the sources will be automatically download on demand when
+needed.
+
+Once the sources have been downloaded you could disconnect your host computer
+from the Internet. It is no longer required to work with RTEMS. To download
+the sources to build the ERC 32 BSP before building run the following commands:
+
+.. code-block:: none
+
+ cd $HOME/quick-start/src/rsb/rtems
+ ../source-builder/sb-set-builder --source-only-download 5/rtems-sparc
+
+This command should output something like this (omitted lines are denoted by
+``...``):
+
+.. code-block:: none
+
+ RTEMS Source Builder - Set Builder, 5.1.0
+ Build Set: 5/rtems-sparc
+ ...
+ download: https://ftp.rtems.org/pub/rtems/releases/5/5.1.0/5.1.0/sources/gcc-7.5.0.tar.xz -> sources/gcc-7.5.0.tar.xz
+ ...
+ Build Sizes: usage: 0.000B total: 143.814MB (sources: 143.793MB, patches: 21.348KB, installed 0.000B)
+ Build Set: Time 0:05:52.617958
+
+If you encounter errors, check your internet connection, firewall settings,
+virus scanners and the availability of the download servers.
diff --git a/user/start/tools.rst b/user/start/tools.rst
index 07dc1e0..baa2387 100644
--- a/user/start/tools.rst
+++ b/user/start/tools.rst
@@ -2,49 +2,25 @@
.. Copyright (C) 2019 embedded brains GmbH
.. Copyright (C) 2019 Sebastian Huber
+.. Copyright (C) 2020 Chris Johns
+.. Copyright (C) 2020 Utkarsh Rai
.. _QuickStartTools:
Install the Tool Suite
======================
-You have chosen an installation prefix and cloned two RTEMS repositories in the
-previous sections. We have chosen :file:`$HOME/quick-start/rtems/5` as the
-installation prefix and cloned the repositories in
-:file:`$HOME/quick-start/src`.
-
-You must select the
-:ref:`target architecture <TargetArchitectures>` for which you need a tool
-suite. In this quick start chapter we choose `sparc-rtems5`. The
-`sparc-rtems5` is the tool suite name for the SPARC architecture and RTEMS
-version 5. The tool suite for RTEMS and the RTEMS sources are tightly coupled.
-For example, do not use a RTEMS version 5 tool suite with RTEMS version 4.11
-sources and vice versa. We use the RSB in two steps. The first step is to
-download additional sources and patches. Afterwards, you could disconnect your
-host computer from the internet. It is no longer required to work with RTEMS.
+You have chosen an installation prefix, the BSP to build, the tool's
+architecure and prepared the source for the RSB in the previous sections. We
+have chosen :file:`$HOME/quick-start/rtems/5` as the installation prefix, the
+``erc32`` BSP and the SPARC architecture name of ``sparc-rtems5``, and unpacked
+the RSB source in :file:`$HOME/quick-start/src`.
-.. code-block:: none
-
- cd $HOME/quick-start/src/rsb/rtems
- ../source-builder/sb-set-builder --source-only-download 5/rtems-sparc
-
-This command should output something like this (omitted lines are denoted by
-...):
-
-.. code-block:: none
-
- RTEMS Source Builder - Set Builder, 5 (98588a55961a)
- warning: exe: absolute exe found in path: (__unzip) /usr/local/bin/unzip
- Build Set: 5/rtems-sparc
- ...
- download: https://ftp.gnu.org/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.xz -> sources/gcc-7.4.0.tar.xz
- ...
- Build Sizes: usage: 0.000B total: 141.738MB (sources: 141.559MB, patches: 183.888KB, installed 0.000B)
- Build Set: Time 0:01:17.613061
+The tool suite for RTEMS and the RTEMS sources are tightly coupled. For
+example, do not use a RTEMS version 5 tool suite with RTEMS version 4.11
+sources and vice versa.
-If you encounter errors in the first step, check your internet connection,
-firewall settings, virus scanners and the availability of the download servers.
-The seconds step is to build and install the tool suite.
+Build and install the tool suite:
.. code-block:: none
@@ -52,75 +28,84 @@ The seconds step is to build and install the tool suite.
../source-builder/sb-set-builder --prefix=$HOME/quick-start/rtems/5 5/rtems-sparc
This command should output something like this (omitted lines are denoted by
-...):
+...). The build host appears as part of the name of the package being
+built. The name you see may vary depending on the host you are using:
.. code-block:: none
- RTEMS Source Builder - Set Builder, 5 (98588a55961a)
- warning: exe: absolute exe found in path: (__unzip) /usr/local/bin/unzip
+ RTEMS Source Builder - Set Builder, 5.1.0
Build Set: 5/rtems-sparc
...
- config: tools/rtems-gcc-7.4.0-newlib-3e24fbf6f.cfg
- package: sparc-rtems5-gcc-7.4.0-newlib-3e24fbf6f-x86_64-freebsd12.0-1
- building: sparc-rtems5-gcc-7.4.0-newlib-3e24fbf6f-x86_64-freebsd12.0-1
- sizes: sparc-rtems5-gcc-7.4.0-newlib-3e24fbf6f-x86_64-freebsd12.0-1: 4.651GB (installed: 879.191MB)
- cleaning: sparc-rtems5-gcc-7.4.0-newlib-3e24fbf6f-x86_64-freebsd12.0-1
+ config: tools/rtems-binutils-2.34.cfg
+ package: sparc-rtems5-binutils-2.34-x86_64-freebsd12.1-1
+ building: sparc-rtems5-binutils-2.34-x86_64-freebsd12.1-1
+ sizes: sparc-rtems5-binutils-2.34-x86_64-freebsd12.1-1: 305.866MB (installed: 29.966MB)
+ cleaning: sparc-rtems5-binutils-2.34-x86_64-freebsd12.1-1
+ reporting: tools/rtems-binutils-2.34.cfg -> sparc-rtems5-binutils-2.34-x86_64-freebsd12.1-1.txt
+ reporting: tools/rtems-binutils-2.34.cfg -> sparc-rtems5-binutils-2.34-x86_64-freebsd12.1-1.xml
+ config: tools/rtems-gcc-7.5.0-newlib-fbaa096.cfg
+ package: sparc-rtems5-gcc-7.5.0-newlib-fbaa096-x86_64-freebsd12.1-1
+ building: sparc-rtems5-gcc-7.5.0-newlib-fbaa096-x86_64-freebsd12.1-1
....
- Build Sizes: usage: 5.618GB total: 1.105GB (sources: 141.559MB, patches: 185.823KB, installed 989.908MB)
- Build Set: Time 0:22:02.262039
+ Build Sizes: usage: 5.684GB total: 1.112GB (sources: 143.803MB, patches: 21.348KB, installed 995.188MB)
+ Build Set: Time 0:21:35.626294
-In case the seconds step was successful, you can check if for example the cross
-C compiler works with the following command:
+Once the build has successfully completed you can check if the cross C compiler
+works with the following command:
.. code-block:: none
- $HOME/quick-start/rtems/5/bin/sparc-rtems5-gcc --version --verbose
+ $HOME/quick-start/rtems/5/bin/sparc-rtems5-gcc --version
-This command should output something like below. In this output the actual
-prefix path was replaced by ``$PREFIX``. The ``compiled by`` line depends on
-the native C++ compiler of your host computer. In the output you see the Git
-hash of the RSB. This helps you to identify the exact sources which were used
-to build the cross compiler of your RTEMS tool suite.
+This command should output something like below. The version informtion helps
+you to identify the exact sources used to build the cross compiler of your
+RTEMS tool suite. In the output you see the version of RTEMS or the hash from
+the RSB repository if you are building using a Git repository clone. The Newlib
+hash is the version of Newlib in the RTEMS's github
+`sourceware-mirror-newlib-cygwin
+<https://github.com/RTEMS/sourceware-mirror-newlib-cygwin>`_ repository. The
+``sources`` and ``patches`` directories created by the RSB contain all the
+source code used.
.. code-block:: none
- Using built-in specs.
- COLLECT_GCC=$PREFIX/bin/sparc-rtems5-gcc
- COLLECT_LTO_WRAPPER=$PREFIX/bin/../libexec/gcc/sparc-rtems5/7.4.0/lto-wrapper
- sparc-rtems5-gcc (GCC) 7.4.0 20181206 (RTEMS 5, RSB 98588a55961a92f5d27bfd756dfc9e31b2b1bf98, Newlib 3e24fbf6f)
+ sparc-rtems5-gcc (GCC) 7.5.0 20191114 (RTEMS 5, RSB 5.1.0, Newlib fbaa096)
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- Target: sparc-rtems5
- Configured with: ../gcc-7.4.0/configure --prefix=$PREFIX --bindir=$PREFIX/bin --exec_prefix=$PREFIX --includedir=$PREFIX/include --libdir=$PREFIX/lib --libexecdir=$PREFIX/libexec --mandir=$PREFIX/share/man --infodir=$PREFIX/share/info --datadir=$PREFIX/share --build=x86_64-freebsd12.0 --host=x86_64-freebsd12.0 --target=sparc-rtems5 --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --verbose --with-newlib --disable-nls --without-included-gettext --disable-win32-registry --enable-version-specific-runtime-libs --disable-lto --enable-newlib-io-c99-formats --enable-newlib-iconv --enable-newlib-iconv-encodings=big5,cp775,cp850,cp852,cp855,cp866,euc_jp,euc_kr,euc_tw,iso_8859_1,iso_8859_10,iso_8859_11,iso_8859_13,iso_8859_14,iso_8859_15,iso_8859_2,iso_8859_3,iso_8859_4,iso_8859_5,iso_8859_6,iso_8859_7,iso_8859_8,iso_8859_9,iso_ir_111,koi8_r,koi8_ru,koi8_u,koi8_uni,ucs_2,ucs_2_internal,ucs_2be,ucs_2le,ucs_4,ucs_4_internal,ucs_4be,ucs_4le,us_ascii,utf_16,utf_16be,utf_16le,utf_8,win_1250,win_1251,win_1252,win_1253,win_1254,win_1255,win_1256,win_1257,win_1258 --enable-threads --disable-plugin --enable-libgomp --enable-languages=c,c++
- Thread model: rtems
- gcc version 7.4.0 20181206 (RTEMS 5, RSB 98588a55961a92f5d27bfd756dfc9e31b2b1bf98, Newlib 3e24fbf6f) (GCC)
- COLLECT_GCC_OPTIONS='--version' '-v' '-mcpu=v7'
- $PREFIX/bin/../libexec/gcc/sparc-rtems5/7.4.0/cc1 -quiet -v -iprefix $PREFIX/bin/../lib/gcc/sparc-rtems5/7.4.0/ help-dummy -quiet -dumpbase help-dummy -mcpu=v7 -auxbase help-dummy -version --version -o /tmp//ccuAN1wc.s
- GNU C11 (GCC) version 7.4.0 20181206 (RTEMS 5, RSB 98588a55961a92f5d27bfd756dfc9e31b2b1bf98, Newlib 3e24fbf6f) (sparc-rtems5)
- compiled by GNU C version 4.2.1 Compatible FreeBSD Clang 6.0.1 (tags/RELEASE_601/final 335540), GMP version 6.1.0, MPFR version 3.1.4, MPC version 1.0.3, isl version isl-0.16.1-GMP
-
- GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
- COLLECT_GCC_OPTIONS='--version' '-v' '-mcpu=v7'
- $PREFIX/bin/../lib/gcc/sparc-rtems5/7.4.0/../../../../sparc-rtems5/bin/as -v -s --version -o /tmp//ccFVgRAa.o /tmp//ccuAN1wc.s
- GNU assembler version 2.32 (sparc-rtems5) using BFD version (GNU Binutils) 2.32
- GNU assembler (GNU Binutils) 2.32
- Copyright (C) 2019 Free Software Foundation, Inc.
- This program is free software; you may redistribute it under the terms of
- the GNU General Public License version 3 or later.
- This program has absolutely no warranty.
- This assembler was configured for a target of `sparc-rtems5'.
- COMPILER_PATH=$PREFIX/bin/../libexec/gcc/sparc-rtems5/7.4.0/:$PREFIX/bin/../lib