• Ard Biesheuvel's avatar
    ARM: 8220/1: allow modules outside of bl range · 7d485f64
    Ard Biesheuvel authored
    Loading modules far away from the kernel in memory is problematic
    because the 'bl' instruction only has limited reach, and modules are not
    built with PLTs. Instead of using the -mlong-calls option (which affects
    all compiler emitted bl instructions, but not the ones in assembler),
    this patch allocates some additional space at module load time, and
    populates it with PLT like veneers when encountering relocations that
    are out of range.
    
    This should work with all relocations against symbols exported by the
    kernel, including those resulting from GCC generated implicit function
    calls for ftrace etc.
    
    The module memory size increases by about 5% on average, regardless of
    whether any PLT entries were actually needed. However, due to the page
    based rounding that occurs when allocating module memory, the average
    memory footprint increase is negligible.
    Reviewed-by: default avatarNicolas Pitre <nico@linaro.org>
    Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    7d485f64
module-plts.c 4.82 KB