• Peter Maydell's avatar
    target-i386: Move user-mode exception actions out of user-exec.c · 0c33682d
    Peter Maydell authored
    The exception_action() function in user-exec.c is just a call to
    cpu_loop_exit() for every target CPU except i386.  Since this
    function is only called if the target's handle_mmu_fault() hook has
    indicated an MMU fault, and that hook is only called from the
    handle_cpu_signal() code path, we can simply move the x86-specific
    setup into that hook, which allows us to remove the TARGET_I386
    ifdef from user-exec.c.
    
    Of the actions that were done by the call to raise_interrupt_err():
     * cpu_svm_check_intercept_param() is a no-op in user mode
     * check_exception() is a no-op since double faults are impossible
       for user-mode
     * assignments to cs->exception_index and env->error_code are no-ops
     * assigning to env->exception_next_eip is unnecessary because it
       is not used unless env->exception_is_int is true
     * cpu_loop_exit_restore() is equivalent to cpu_loop_exit() since
       pc is 0
    which leaves just setting env_>exception_is_int as the action that
    needs to be added to x86_cpu_handle_mmu_fault().
    Signed-off-by: 's avatarPeter Maydell <peter.maydell@linaro.org>
    Reviewed-by: 's avatarSergey Fedorov <sergey.fedorov@linaro.org>
    Acked-by: 's avatarEduardo Habkost <ehabkost@redhat.com>
    Acked-by: 's avatarRiku Voipio <riku.voipio@linaro.org>
    Message-id: 1463494687-25947-7-git-send-email-peter.maydell@linaro.org
    0c33682d
user-exec.c 21 KB