Re: L4Re: stack allocation of moderately large arrays

Adam Lackorzynski <[email protected]> Mon, 13 Nov 2023 22:39:35 +0100
Newsgroups gmane.comp.micro-kernel.l4.devel
Message-ID <[email protected]>
Hi Paul,

stack size is set to 16 pages per default (64bit archs).
One can change the stack size by placing the following statement in a
program:

#include <l4/re/elf_aux.h>

L4RE_ELF_AUX_ELEM_T(l4re_elf_aux_mword_t, _stack_size,
                    L4RE_ELF_AUX_T_STACK_SIZE, 0x80000);


Adam

On Mon Nov 13, 2023 at 18:04:06 +0100, Paul Boddie wrote:
> Hello,
> 
> Having seen a problem recur in programs running in L4Re just now involving 
> arrays of a relatively large size allocated statically in functions - about 
> 100000 bytes or so - I was wondering if there are any implicit limitations 
> with this form of allocation in L4Re. Is it possible that programs have a 
> limited stack size and that the stack does not expand?
> 
> Here is an example of the kind of code that causes an unhandled exception:
> 
> uint32_t Spi_gpio::send_units(uint32_t bytes, const uint8_t data[],
>                               uint8_t unit_size, uint8_t char_size)
> { 
>   uint32_t chars = bytes / unit_size;
>   int dc[chars];
> 
> And the exception looks like this:
> 
> Unhandled exception: PC=0x1019ca8 PFA=0xfffd075a LdrFlgs=0x0
> 
> The actual cause of the exception is an access to an element in the dc array.
> 
> When I eventually get back to my own experiments with initiating programs in 
> L4Re - not involved with the problem reported here - I intend to look more 
> closely at program stack allocation and expansion strategies, so I suppose 
> this is an appropriate prelude to such work.
> 
> Thanks for any guidance that might be offered, as always!
> 
> Paul