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 |