• Paul Burton's avatar
    MIPS: Ensure bss section ends on a long-aligned address · 3f00f4d8
    Paul Burton authored
    When clearing the .bss section in kernel_entry we do so using LONG_S
    instructions, and branch whilst the current write address doesn't equal
    the end of the .bss section minus the size of a long integer. The .bss
    section always begins at a long-aligned address and we always increment
    the write pointer by the size of a long integer - we therefore rely upon
    the .bss section ending at a long-aligned address. If this is not the
    case then the long-aligned write address can never be equal to the
    non-long-aligned end address & we will continue to increment past the
    end of the .bss section, attempting to zero the rest of memory.
    
    Despite this requirement that .bss end at a long-aligned address we pass
    0 as the end alignment requirement to the BSS_SECTION macro and thus
    don't guarantee any particular alignment, allowing us to hit the error
    condition described above.
    
    Fix this by instead passing 8 bytes as the end alignment argument to
    the BSS_SECTION macro, ensuring that the end of the .bss section is
    always at least long-aligned.
    Signed-off-by: default avatarPaul Burton <paul.burton@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14526/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    3f00f4d8
vmlinux.lds.S 4.7 KB