• Stafford Horne's avatar
    openrisc: entry: Fix delay slot exception detection · ae15a41a
    Stafford Horne authored
    Originally in patch e6d20c55 ("openrisc: entry: Fix delay slot
    detection") I fixed delay slot detection, but only for QEMU.  We missed
    that hardware delay slot detection using delay slot exception flag (DSX)
    was still broken.  This was because QEMU set the DSX flag in both
    pre-exception supervision register (ESR) and supervision register (SR)
    register, but on real hardware the DSX flag is only set on the SR
    register during exceptions.
    
    Fix this by carrying the DSX flag into the SR register during exception.
    We also update the DSX flag read locations to read the value from the SR
    register not the pt_regs SR register which represents ESR.  The ESR
    should never have the DSX flag set.
    
    In the process I updated/removed a few comments to match the current
    state.  Including removing a comment saying that the DSX detection logic
    was inefficient and needed to be rewritten.
    
    I have tested this on QEMU with a patch ensuring it matches the hardware
    specification.
    
    Link: https://lists.gnu.org/archive/html/qemu-devel/2018-07/msg00000.html
    Fixes: e6d20c55 ("openrisc: entry: Fix delay slot detection")
    Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
    ae15a41a
entry.S 33 KB