ARM-EABI

From RTEMSWiki

Jump to: navigation, search

Contents

Overview

In order to support the ARM Cortex-M architecture (ARMv7-M) on RTEMS we need an appropriate GCC configuration. See also PR 1765. This GCC configuration is based on EABI version 5 as defined by ARM. One benefit of EABI version 5 is that this brings RTEMS more in line with the primary GCC platform arm-linux-gnueabi. For standards related to this please have a look at the following documents.

Availability

The name of the ARM EABI version 5 tool chain target is: arm-rtemseabi4.11. It is available through the standard RTEMS tool distribution.

Changes

  • The EABI makes the VFP floating point format mandatory and enables us to use hardware floating point support in the future. RTEMS has currently no support for hardware floating point units (the context switch part is missing).
  • The Thumb interwork support is mandatory with this ABI.
  • The exception handling implementation changes from SJLJ to a table-based system, which is not based on DWARF unwinding tables as they are too bulky for use on small embedded systems.
  • Short enums. The standard ARM EABI configuration in GCC uses short enums by default. See also ARM Architecture Procedure Call Standard (AAPCS) section 7.1.3 "Enumerated Types". This may lead to portability problems since many architectures use int as the base type for enums. The XDR library is one problem candidate.

Multilibs

  1. Default: armv4, ARM
  2. thumb: armv4t, Thumb
  3. armv6-m: armv6-m, subset of Thumb 2
  4. armv7: armv7, Thumb 2
  5. armv7-m: armv7-m, Thumb 2, hardware integer division (SDIV/UDIV)

Multilib 1. and 2. support the standard ARM7TDMI and ARM926EJ-S targets.

Multilib 3. supports the Cortex-M0 and Cortex-M1 cores.

Multilib 5. supports the Cortex-M3 and Cortex-M4 cores, which have a special hardware integer division instruction (this is not present in the A and R profiles).

Multilib 4. supports Cortex-A and Cortex-R variants.

Board Support Package Update HOWTO

  1. Throw away your linker command file and use c/src/lib/libbsp/arm/shared/startup/linkcmds.base instead. The linker command file must support the .preinit_array, .init_array, and .fini_array sections.

Board Support Package Status

A BSP Builds if it builds all sample applications with CXX and networking enabled. If the application link step fails due to memory constraints this does not count as an overall failure. A BSP Runs if it passes all tests. It is sufficient to run the tests on one sample of a set of BSP variants. The tests may be performed on a simulator.

Name Builds (Legacy) Runs (Legacy) Builds (EABI) Runs (EABI)
arm1136jfs 2011-06-29  ? 2011-06-29  ?
arm1136js 2011-06-29  ? 2011-06-29  ?
arm7tdmi 2011-06-29  ? 2011-06-29  ?
arm920 2011-06-29  ? 2011-06-29  ?
armcortexa9 2011-06-29  ? 2011-06-29  ?
csb336 2011-06-29  ? 2011-06-29  ?
csb337 2011-06-29  ? 2011-06-29  ?
csb637 2011-06-29  ? 2011-06-29  ?
edb7312 2011-06-29 2011-06-29 2011-06-29 2011-06-29
gba 2011-06-29  ? 2011-06-29  ?
gp32 2011-06-29  ? 2011-06-29  ?
gumstix 2011-06-29  ? 2011-06-29  ?
kit637_v6 2011-06-29  ? 2011-06-29  ?
lpc2362 2011-06-29  ? 2011-06-29  ?
lpc23xx_tli800 2011-06-29  ? 2011-06-29  ?
lpc24xx_ea 2011-06-29  ? 2011-06-29  ?
lpc24xx_ncs_ram 2011-06-29  ? 2011-06-29  ?
lpc24xx_ncs_rom_ext 2011-06-29  ? 2011-06-29  ?
lpc24xx_ncs_rom_int 2011-06-29  ? 2011-06-29  ?
lpc32xx_mzx 2011-06-29  ? 2011-06-29  ?
lpc32xx_mzx_stage_1 2011-06-29  ? 2011-06-29  ?
lpc32xx_mzx_stage_2 2011-06-29  ? 2011-06-29  ?
lpc32xx_phycore 2011-06-29  ? 2011-06-29  ?
nds 2011-06-29  ? 2011-06-29  ?
rtl22xx 2011-06-29  ? 2011-06-29  ?
rtl22xx_t 2011-06-29  ? 2011-06-29  ?
smdk2410 2011-06-29  ? 2011-06-29  ?

Legacy ARM GCC Configuration

The legacy ARM GCC configuration (also called ARM ELF, arm-none-elf) is based on a GNU EABI. This configuration is not actively maintained in GCC. There is no support for recent ARM architectures. The name ELF is a bit misleading since the file format is ELF in both cases.

Personal tools