Function report |
Source Code:arch\x86\kernel\vm86_32.c |
Create Date:2022-07-28 08:41:49 |
Last Modify:2022-05-22 10:11:03 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:handle_vm86_fault
Proto:void handle_vm86_fault(struct kernel_vm86_regs *regs, long error_code)
Type:void
Parameter:
Type | Parameter | Name |
---|---|---|
struct kernel_vm86_regs * | regs | |
long | error_code |
602 | orig_flags = * (unsigned short * ) & flags |
609 | data32 = 0 |
610 | pref_done = 0 |
611 | Do |
613 | Case = == 0x66 |
613 | data32 = 1 |
613 | Break |
614 | Case = == 0x67 |
614 | Break |
615 | Case = == 0x2e |
615 | Break |
616 | Case = == 0x3e |
616 | Break |
617 | Case = == 0x26 |
617 | Break |
618 | Case = == 0x36 |
618 | Break |
619 | Case = == 0x65 |
619 | Break |
620 | Case = == 0x64 |
620 | Break |
621 | Case = == 0xf2 |
621 | Break |
622 | Case = == 0xf3 |
622 | Break |
623 | Default |
623 | pref_done = 1 |
630 | Case opcode == 0x9c |
631 | If data32 Then |
632 | pushl(ssp, sp, get_vflags(regs), simulate_sigsegv) |
634 | Else |
635 | pushw(ssp, sp, get_vflags(regs), simulate_sigsegv) |
639 | Go to vm86_fault_return |
642 | Case opcode == 0x9d |
645 | If data32 Then |
648 | Else |
653 | CHECK_IF_IN_TRAP |
656 | Else set_vflags_short(newflags, regs) |
659 | Go to check_vip |
663 | Case opcode == 0xcd |
664 | intno = popb(csp, ip, simulate_sigsegv) |
666 | If for debugger Then |
667 | If 1 << (intno & 7) & for debugger [intno >> 3] Then |
668 | save_v86_state(regs, 3/int x instruction (ARG = x) + (intno << 8)) |
669 | Return |
673 | Return |
677 | Case opcode == 0xcf |
682 | If data32 Then |
683 | newip = popl(ssp, sp, simulate_sigsegv) |
684 | newcs = popl(ssp, sp, simulate_sigsegv) |
685 | newflags = popl(ssp, sp, simulate_sigsegv) |
687 | Else |
688 | newip = popw(ssp, sp, simulate_sigsegv) |
689 | newcs = popw(ssp, sp, simulate_sigsegv) |
690 | newflags = popw(ssp, sp, simulate_sigsegv) |
695 | CHECK_IF_IN_TRAP |
696 | If data32 Then |
698 | Else |
699 | set_vflags_short(newflags, regs) |
701 | Go to check_vip |
705 | Case opcode == 0xfa |
717 | Case opcode == 0xfb |
722 | Default |
726 | Return |
728 | check_vip : |
729 | If (VEFLAGS & (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) == (X86_EFLAGS_VIP | X86_EFLAGS_VIF) Then |
732 | Return |
735 | vm86_fault_return : |
736 | If force_return_for_pic && VEFLAGS & (X86_EFLAGS_IF | X86_EFLAGS_VIF) Then |
738 | Return |
740 | If orig_flags & X86_EFLAGS_TF Then handle_vm86_trap(regs, 0, X86_TRAP_DB) |
742 | Return |
744 | simulate_sigsegv : |
Name | Describe |
---|---|
do_general_protection |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |