• Russell King's avatar
    ARM: Fix undefined instruction exception handling · 15ac49b6
    Russell King authored
    While trying to get a v3.5 kernel booted on the cubox, I noticed that
    VFP does not work correctly with VFP bounce handling.  This is because
    of the confusion over 16-bit vs 32-bit instructions, and where PC is
    supposed to point to.
    
    The rule is that FP handlers are entered with regs->ARM_pc pointing at
    the _next_ instruction to be executed.  However, if the exception is
    not handled, regs->ARM_pc points at the faulting instruction.
    
    This is easy for ARM mode, because we know that the next instruction and
    previous instructions are separated by four bytes.  This is not true of
    Thumb2 though.
    
    Since all FP instructions are 32-bit in Thumb2, it makes things easy.
    We just need to select the appropriate adjustment.  Do this by moving
    the adjustment out of do_undefinstr() into the assembly code, as only
    the assembly code knows whether it's dealing with a 32-bit or 16-bit
    instruction.
    
    Cc: <stable@vger.kernel.org>
    Acked-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
    15ac49b6
entry.S 1.74 KB