Issue with Partition Alignment for ARM in 4.10

Sebastian Huber sebastian.huber at
Tue Apr 12 06:52:11 UTC 2011

On 04/12/2011 04:39 AM, Kirspel, Kevin wrote:
> The CPU_PARTITION_ALIGNMENT for ARM has been changed from 4 to 8 bytes
> in the latest 4.10 release.

Yes, this is in accordance to AAPCS section
"Stack constraints at a public interface".

The constraint for the CPU_ALIGNMENT and CPU_HEAP_ALIGNMENT is section 4.1
"Fundamental Data Types" table 1, e.g. a double *d = malloc(sizeof(double))
must be possible.

> When creating a partition , the buffer size
> must be a multiple of this value.  The GCC compiler does not generate
> structures sizes that are multiples of 8.

This is all right.

> The following call fails with RTEMS_INVALID_SIZE due to the multiple of
> 8 requirement.  In the example, sizeof(state_event_t) is 12 bytes:
> rtems_partition_create(name, starting_addr, sizeof( state_event_t ) *
> 4096, sizeof( state_event_t ), RTEMS_LOCAL, &id );
> The CPU_STACK_ALIGNMENT for ARM should be set to 8 but I am not sure
> about the others: CPU_ALIGNMENT, CPU_HEAP_ALIGNMENT, and
> CPU_PARTITION_ALIGNMENT.  The call above should be allowed.

In of section 4.3.1 "Aggregates" we have:

 o The alignment of an aggregate shall be the alignment of its most-aligned

 o The size of an aggregate shall be the smallest multiple of its alignment
   that is sufficient to hold all of its members when they are laid out
   according to these rules.

Thus it should be sufficient to set CPU_PARTITION_ALIGNMENT to 4 (we need 4 due
to implementation constraints).

Sebastian Huber, embedded brains GmbH

Address : Obere Lagerstr. 30, D-82178 Puchheim, Germany
Phone   : +49 89 18 90 80 79-6
Fax     : +49 89 18 90 80 79-9
E-Mail  : sebastian.huber at
PGP     : Public key available on request.

Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.

More information about the users mailing list