• Nicolas Pitre's avatar
    ARM: XIP kernel: store .data compressed in ROM · ca8b5d97
    Nicolas Pitre authored
    The .data segment stored in ROM is only copied to RAM once at boot time
    and never referenced afterwards. This is arguably a suboptimal usage of
    ROM resources.
    
    This patch allows for compressing the .data segment before storing it
    into ROM and decompressing it to RAM rather than simply copying it,
    saving on precious ROM space.
    
    Because global data is not available yet (obviously) we must allocate
    decompressor workspace memory on the stack. The .bss area is used as a
    stack area for that purpose before it is cleared. The required stack
    frame is 9568 bytes for __inflate_kernel_data() alone, so make sure
    the .bss is large enough to cope with that plus extra room for called
    functions or fail the build.
    
    Those numbers were picked arbitrarily based on the above 9568 byte
    stack frame:
    
    10240 (2.5 * PAGE_SIZE): used to override -Wframe-larger-than whose
    default value is 1024.
    12288 (3 * PAGE_SIZE): minimum .bss size to contain the stack.
    Signed-off-by: default avatarNicolas Pitre <nico@linaro.org>
    Reviewed-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Tested-by: default avatarChris Brandt <Chris.Brandt@renesas.com>
    ca8b5d97
head-inflate-data.c 2.01 KB