• T
    ppc: Fix the bad exception NIP value and the range check in LSWX · 537d3e8e
    Thomas Huth 提交于
    The range checks in the LSWX instruction are completely insufficient:
    They do not take the wrap-around case into account, and the check
    "reg < rx" should be "reg <= rx" instead. Fix it by using the new
    lsw_reg_in_range() helper function that is already used for LSWI, too.
    
    Then there is a second problem: In case the INVAL exception is generated,
    the NIP value is wrong, it currently points to the instruction before
    the LSWX instruction. This is because gen_lswx() already decreases the
    NIP value by 4 (to be prepared for page fault exceptions), and
    powerpc_excp() later decreases it again by 4 while handling the program
    exception. So to get this right, we've got to undo the "- 4" from
    gen_lswx() here before calling helper_raise_exception_err().
    Signed-off-by: NThomas Huth <thuth@redhat.com>
    Signed-off-by: NDavid Gibson <david@gibson.dropbear.id.au>
    537d3e8e
mem_helper.c 9.9 KB