#1765 closed enhancement (fixed)

RTEMS Toolset Patch for ARM EABI version 5 — at Version 6

Reported by: Sebastian Huber Owned by: Ralf Corsepius
Priority: normal Milestone: 4.11
Component: tool/gcc Version: 4.11
Severity: normal Keywords:
Cc: joel.sherrill@…, ralf.corsepius@… Blocked By:

Description (last modified by Gedare Bloom)

There were several requests for ARM Cortex-M support on RTEMS recently. The
first step towards this is a suitable ARM tool chain. I want to use this event
to clean up the multilibs and switch to the EABI version 5. The benefit of
EABI version 5 is that this brings us more in line with the primary GCC
platform arm-linux-gnueabi. For standards related to this please have a look
at the following documents.

Base Platform ABI for the ARM Architecture (BPABI):


ARM Architecture Procedure Call Standard (AAPCS):


ELF for the ARM Architecture:


The EABI makes the VFP floating point architecture 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 unwind tables (DWARF 2).

I propose to change the ARM multilibs as follows:

  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

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

The ABI change will break the BSPs. We have to adjust the linker command files
to support the following sections:

.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) }

exidx_start = .;

.ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }

exidx_end = .;

.preinit_array :

PROVIDE_HIDDEN (preinit_array_start = .);
KEEP (*(.preinit_array))
preinit_array_end = .);


.init_array :

PROVIDE_HIDDEN (init_array_start = .);
KEEP (*(SORT(.init_array.*)))
KEEP (*(.init_array))
init_array_end = .);


.fini_array :

PROVIDE_HIDDEN (fini_array_start = .);
KEEP (*(.fini_array))
KEEP (*(SORT(.fini_array.*)))
fini_array_end = .);


We have to figure out how this affects the .init and .fini sections and there
usage. There is also a disadvantage with the new .init_arry and .fini_array
sections. These sections are in principle writeable to allow a loader of a
shared library to fix up the pointers. Since we do not support shared
libraries we do not need this actually.

The linker command files of all ARM BSPs were modified to support these sections.

Change History (9)

Changed on Mar 14, 2011 at 10:54:58 AM by Sebastian Huber

Attachment: arm.patch added

Patch against GCC 4.5.2.

Changed on Mar 23, 2011 at 10:09:45 AM by Sebastian Huber

Attachment: arm_v1.patch added

Patch against GCC 4.6.0-RC-20110321.

comment:1 Changed on Mar 23, 2011 at 10:09:45 AM by Sebastian Huber

attachments.isobsolete: 01

Changed on May 20, 2011 at 12:24:16 PM by Sebastian Huber

Patch against GCC 4.6 20110513.

comment:2 Changed on May 20, 2011 at 12:24:16 PM by Sebastian Huber

attachments.isobsolete: 01

comment:3 Changed on May 21, 2011 at 1:59:37 PM by Joel Sherrill

Cc: joel.sherrill@… ralf.corsepius@… added

comment:4 Changed on May 21, 2011 at 1:59:58 PM by Joel Sherrill

Summary: Switch to ARM EABI version 5RTEMS Toolset Patch for ARM EABI version 5

comment:5 Changed on Aug 24, 2011 at 7:44:45 AM by Sebastian Huber

Resolution: fixed
Status: newclosed

RPMs are available for some time. Thank you, Ralf.

comment:6 Changed on Nov 22, 2014 at 12:18:15 PM by Gedare Bloom

Description: modified (diff)
Milestone: 4.11
Type: defectenhancement
Version: unspecified
Note: See TracTickets for help on using tickets.