[PATCH 4/4] score: Ensure stack alignment requirement

Sebastian Huber sebastian.huber at embedded-brains.de
Thu Mar 4 08:01:22 UTC 2021


On 03/03/2021 23:08, Gedare Bloom wrote:

> I think it is just invalid to shrink the stack size smaller than it is
> requested.
>
> If I call pthread_attr_setstacksize(), then "The stacksize attribute
> shall define the minimum stack size (in bytes) allocated for the
> created threads stack." I should not get back a stack size smaller
> than I requested when I create the pthread. It's just wrong.
>
> https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_attr_getstacksize.html

Allocated is one thing, usable is another thing. Stacks are 
architecture-dependent. For example on powerpc, you have to set up an 
initial stack frame at the top of the stack:

void _CPU_Context_Initialize(
   Context_Control  *the_context,
   void             *stack_base,
   size_t            size,
   uint32_t          new_level,
   void             *entry_point,
   bool              is_fp,
   void             *tls_area
)
{
   ppc_context *the_ppc_context;
   uint32_t   msr_value = 0;
   uintptr_t  sp;
   uintptr_t  stack_alignment;

   sp = (uintptr_t) stack_base + size - PPC_MINIMUM_STACK_FRAME_SIZE;

   stack_alignment = CPU_STACK_ALIGNMENT;
   sp &= ~(stack_alignment - 1);

   sp = (uintptr_t) memset((void *) sp, 0, PPC_MINIMUM_STACK_FRAME_SIZE);

Here we align the top of stack and set the initial frame.

I am not sure which actual problem we have to solve currently. Is this 
related to your CANARY example? In order to support things like this, we 
probably need an API to get the usable/actual/whatever stack area for a 
thread.

If you want to enforce that a user-provided size is the minimum 
allocated size, then I think we have to align it up to the next stack 
boundary. This makes sense from my point of view, however, this is not 
the purpose of the current patch, it addresses issues related to the 
heap allocator vs. the required stack alignment.

-- 
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