• Helge Deller's avatar
    modules: Ensure natural alignment for .altinstructions and __bug_table sections · 87c482bd
    Helge Deller authored
    In the kernel image vmlinux.lds.S linker scripts the .altinstructions
    and __bug_table sections are 4- or 8-byte aligned because they hold 32-
    and/or 64-bit values.
    
    Most architectures use altinstructions and BUG() or WARN() in modules as
    well, but in the module linker script (module.lds.S) those sections are
    currently missing. As consequence the linker will store their content
    byte-aligned by default, which then can lead to unnecessary unaligned
    memory accesses by the CPU when those tables are processed at runtime.
    
    Usually unaligned memory accesses are unnoticed, because either the
    hardware (as on x86 CPUs) or in-kernel exception handlers (e.g. on
    parisc or sparc) emulate and fix them up at runtime. Nevertheless, such
    unaligned accesses introduce a performance penalty and can even crash
    the kernel if there is a bug in the unalignment exception handlers
    (which happened once to me on the parisc architecture and which is why I
    noticed that issue at all).
    
    This patch fixes a non-critical issue and might be backported at any time.
    It's trivial and shouldn't introduce any regression because it simply
    tells the linker to use a different (8-byte alignment) for those
    sections by default.
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    Link: https://lore.kernel.org/all/Yr8%2Fgr8e8I7tVX4d@p100/Signed-off-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
    87c482bd
module.lds.S 1.65 KB