[PATCH 4/4] score: Ensure stack alignment requirement
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Mar 3 19:38:25 UTC 2021
On 03/03/2021 19:31, Gedare Bloom wrote:
>> Is there no guarantee that stack_size == config->stack_size?
>>
> Suppose an application requests a stack size with
> config->stack_area = m*CPU_STACK_ALIGNMENT
> config->stack_size = (n*CPU_STACK_ALIGNMENT - 1)
>
> Then, you will get
> stack_begin = config->stack_area;
> because it is already aligned
> stack_end = (n-1)*CPU_STACK_ALIGNMENT;
> for the align_down
> and the stack size you get in the end is
> (n-1)*CPU_STACK_ALIGNMENT;
> instead of
> n*CPU_STACK_ALIGNMENT-1;
>
> so you lose CPU_STACK_ALIGNMENT-1 bytes from the stack, and the user
> doesn't get back the requested number of bytes, but they also don't
> get any kind of error or status. They just lose some bytes.
>
> I think this is wrong.
If you provide a stack, then it is up to you to provide properly aligned
areas or you loose a couple of bytes. We check that a minimum size is
met.We provide also an interface to properly align things
(RTEMS_TASK_STORAGE_ALIGNMENT). I would also not fill up the stack to
the last byte, so there will be a bit of waste anyway.
We could add alignment checks to _RTEMS_tasks_Prepare_user_stack(), but I am not sure if there is a real need for this. For some applications it might be better to just waste some bytes and not align everything to avoid padding through the linker.
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber at embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
More information about the devel
mailing list