summaryrefslogtreecommitdiffstats
path: root/user/hardware/architectures.rst
diff options
context:
space:
mode:
Diffstat (limited to 'user/hardware/architectures.rst')
-rw-r--r--user/hardware/architectures.rst108
1 files changed, 70 insertions, 38 deletions
diff --git a/user/hardware/architectures.rst b/user/hardware/architectures.rst
index 02bcbe0..5328db8 100644
--- a/user/hardware/architectures.rst
+++ b/user/hardware/architectures.rst
@@ -1,30 +1,83 @@
.. SPDX-License-Identifier: CC-BY-SA-4.0
+.. Copyright (C) 2019 embedded brains GmbH
+.. Copyright (C) 2019 Sebastian Huber
.. Copyright (C) 2016 Chris Johns <chrisj@rtems.org>
Architectures
=============
.. index:: Architectures
-An RTEMS architecture is a class or family of a processor that RTEMS
-supports. The RTEMS architecture model follows the architecture model of
+An RTEMS architecture is a class or family of a processor architecture that
+RTEMS supports. The RTEMS architecture model follows the architecture model of
GCC. An architecture in GCC results in a specific RTEMS GCC compiler. This
compiler may support a range of processors in the family that may have
-differences in instructions sets or floating point support. RTEMS configures
-GCC to create separate runtime libraries for each supported instruction set and
-floating point unit in the architecture. This is termed **multlib**. Multlibs
-are manage automatically by GCC by selecting a specific instruction set or
-specific device in a family.
-
-RTEMS executables are statically linked for a specific target therefore a
-precise and exact match can be made for the hardware that extracts the best
-possible performance. The compiler supports the variants to the instruction set
-and RTEMS extends the specialization to specific processors in an
-architecture. This specialization gives RTEMS a finer resolution of features
-and capabilites a specific device may offer allowing the kernel, drivers and
-application to make the most of those resources. The trade off is portability
-however this is not important because the executable are statically linked for
-a single target.
+differences in instructions sets, floating point support or other aspects.
+RTEMS configures GCC to create separate runtime libraries for each supported
+instruction set, floating point unit, vector unit, word size (e.g. 32-bit and
+64-bit), endianess, code model, :ref:term:`ABI`, processor errata workarounds,
+and so on in the architecture. This is termed *multilib*. Multilibs are chosen
+automatically by GCC via selecting a specific set of machine options.
+
+You can query the multilibs of a specific RTEMS GCC compiler via the
+``-print-multi-lib`` option:
+
+.. code-block:: shell
+
+ $ sparc-rtems5-gcc -print-multi-lib
+ .;
+ soft;@msoft-float
+ v8;@mcpu=v8
+ leon3;@mcpu=leon3
+ leon3v7;@mcpu=leon3v7
+ leon;@mcpu=leon
+ leon3/gr712rc;@mcpu=leon3@mfix-gr712rc
+ leon3v7/gr712rc;@mcpu=leon3v7@mfix-gr712rc
+ leon/ut699;@mcpu=leon@mfix-ut699
+ leon/at697f;@mcpu=leon@mfix-at697f
+ soft/v8;@msoft-float@mcpu=v8
+ soft/leon3;@msoft-float@mcpu=leon3
+ soft/leon3v7;@msoft-float@mcpu=leon3v7
+ soft/leon;@msoft-float@mcpu=leon
+ soft/leon3/gr712rc;@msoft-float@mcpu=leon3@mfix-gr712rc
+ soft/leon3v7/gr712rc;@msoft-float@mcpu=leon3v7@mfix-gr712rc
+ soft/leon/ut699;@msoft-float@mcpu=leon@mfix-ut699
+ soft/leon/at697f;@msoft-float@mcpu=leon@mfix-at697f
+
+Each printed line represents a multilib. The ``.`` corresponds to the default
+multilib. It is used if a set of machine options does not match to a
+specialized multilib. The string before the ``;`` describes the directory in
+the GCC installation used for the particular multilib. After the ``;`` the set
+of machine options for this multilib follows separated by ``@`` characters.
+
+You can figure out the multilib selected by GCC for a set of machine options
+with the ``-print-multi-directory`` option:
+
+.. code-block:: shell
+
+ $ sparc-rtems5-gcc -print-multi-directory -mcpu=leon3
+ leon3
+
+It is crucial that the RTEMS BSP, support libraries and the application code
+are compiled consistently with a compatible set of machine options. Otherwise,
+in the best case errors during linking will occur or you may end up silently
+with undefined behaviour which results in sporadic run-time crashes. A wrong
+set of machine options may result in a running application, however, with
+degraded performance, e.g. hardware floating point unit is not used by the
+mathematical library.
+
+For a list of architectures supported by RTEMS please have a look at the
+sections of the :ref:`Board Support Packages <BSPs>` chapter.
+
+:ref:`RTEMS executables <Executables>` are statically linked for a specific
+target therefore a precise and exact match can be made for the hardware that
+extracts the best possible performance. The compiler supports the variants to
+the instruction set and RTEMS extends the specialization to specific processors
+in an architecture. This specialization gives RTEMS a finer resolution of
+features and capabilities a specific device may offer allowing the kernel,
+drivers and application to make the most of those resources. The trade off is
+portability however this is not important because the executable are statically
+linked for a single target.
.. note::
@@ -32,24 +85,3 @@ a single target.
interface. Loading code via this interface results in an executable image
that is equivalent to statically linked executable of the same code. Dynamic
loading is a system level tool for system architects.
-
-RTEMS supports 18 architectures:
-
-- arm
-- bfin
-- epiphany
-- i386
-- lm32
-- m68k
-- mips
-- moxie
-- nios2
-- no_cpu
-- or1k
-- riscv
-- powerpc
-- sh
-- sparc
-- sparc64
-- v850
-- x86_64