• Ard Biesheuvel's avatar
    ARM: 8677/1: boot/compressed: fix decompressor header layout for v7-M · 06a4b6d0
    Ard Biesheuvel authored
    As reported by Patrice, the header layout of the decompressor is
    incorrect when building for v7-M. In this case, the __nop macro
    resolves to 'mov r0, r0', which is emitted as a narrow encoding,
    resulting in the header data fields to end up at lower offsets than
    required.
    
    Given the variety of targets we need to support with the same code,
    the startup sequence is a bit of a jumble, and uses instructions
    and macros whose encoding widths cannot be specified (badr), or only
    exist in a narrow encoding (bx)
    
    So force the use of a wide encoding in __nop, and replace the start
    sequence with a simple jump to the label marking the start of code,
    preceded by a Thumb2 mode switch if required (using explicit wide
    encodings where appropriate). The label itself can be moved to the
    start of code [where it belongs] due to the larger range of branch
    instructions as compared to adr instructions.
    Reported-by: default avatarPatrice CHOTARD <patrice.chotard@st.com>
    Acked-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@armlinux.org.uk>
    06a4b6d0
head.S 35.4 KB