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: [email protected] 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 [email protected] http://lists.rtems.org/mailman/listinfo/devel
