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.hu...@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/

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to