📄 vmx_ivt.s
字号:
VMX_DBG_FAULT(29) VMX_REFLECT(29)END(vmx_debug_vector) .org vmx_ia64_ivt+0x5a00/////////////////////////////////////////////////////////////////////////////////////////// 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57)ENTRY(vmx_unaligned_access) VMX_DBG_FAULT(30) VMX_REFLECT(30)END(vmx_unaligned_access) .org vmx_ia64_ivt+0x5b00/////////////////////////////////////////////////////////////////////////////////////////// 0x5b00 Entry 31 (size 16 bundles) Unsupported Data Reference (57)ENTRY(vmx_unsupported_data_reference) VMX_DBG_FAULT(31) VMX_REFLECT(31)END(vmx_unsupported_data_reference) .org vmx_ia64_ivt+0x5c00/////////////////////////////////////////////////////////////////////////////////////////// 0x5c00 Entry 32 (size 16 bundles) Floating-Point Fault (64)ENTRY(vmx_floating_point_fault) VMX_DBG_FAULT(32) VMX_REFLECT(32)END(vmx_floating_point_fault) .org vmx_ia64_ivt+0x5d00/////////////////////////////////////////////////////////////////////////////////////////// 0x5d00 Entry 33 (size 16 bundles) Floating Point Trap (66)ENTRY(vmx_floating_point_trap) VMX_DBG_FAULT(33) VMX_REFLECT(33)END(vmx_floating_point_trap) .org vmx_ia64_ivt+0x5e00/////////////////////////////////////////////////////////////////////////////////////////// 0x5e00 Entry 34 (size 16 bundles) Lower Privilege Transfer Trap (66)ENTRY(vmx_lower_privilege_trap) VMX_DBG_FAULT(34) VMX_REFLECT(34)END(vmx_lower_privilege_trap) .org vmx_ia64_ivt+0x5f00/////////////////////////////////////////////////////////////////////////////////////////// 0x5f00 Entry 35 (size 16 bundles) Taken Branch Trap (68)ENTRY(vmx_taken_branch_trap) VMX_DBG_FAULT(35) VMX_REFLECT(35)END(vmx_taken_branch_trap) .org vmx_ia64_ivt+0x6000/////////////////////////////////////////////////////////////////////////////////////////// 0x6000 Entry 36 (size 16 bundles) Single Step Trap (69)ENTRY(vmx_single_step_trap) VMX_DBG_FAULT(36) VMX_REFLECT(36)END(vmx_single_step_trap) .global vmx_virtualization_fault_back .org vmx_ia64_ivt+0x6100/////////////////////////////////////////////////////////////////////////////////////////// 0x6100 Entry 37 (size 16 bundles) Virtualization FaultENTRY(vmx_virtualization_fault)// VMX_DBG_FAULT(37) mov r31=pr movl r30 = virtualization_fault_table mov r23=b0 ;; shladd r30=r24,4,r30 ;; mov b0=r30 br.sptk.many b0 ;;vmx_virtualization_fault_back: mov r19=37 adds r16 = IA64_VCPU_CAUSE_OFFSET,r21 adds r17 = IA64_VCPU_OPCODE_OFFSET,r21 ;; st8 [r16] = r24 st8 [r17] = r25 br.sptk vmx_dispatch_virtualization_faultEND(vmx_virtualization_fault) .org vmx_ia64_ivt+0x6200/////////////////////////////////////////////////////////////////////////////////////////// 0x6200 Entry 38 (size 16 bundles) Reserved VMX_DBG_FAULT(38) VMX_FAULT(38) .org vmx_ia64_ivt+0x6300/////////////////////////////////////////////////////////////////////////////////////////// 0x6300 Entry 39 (size 16 bundles) Reserved VMX_DBG_FAULT(39) VMX_FAULT(39) .org vmx_ia64_ivt+0x6400/////////////////////////////////////////////////////////////////////////////////////////// 0x6400 Entry 40 (size 16 bundles) Reserved VMX_DBG_FAULT(40) VMX_FAULT(40) .org vmx_ia64_ivt+0x6500/////////////////////////////////////////////////////////////////////////////////////////// 0x6500 Entry 41 (size 16 bundles) Reserved VMX_DBG_FAULT(41) VMX_FAULT(41) .org vmx_ia64_ivt+0x6600/////////////////////////////////////////////////////////////////////////////////////////// 0x6600 Entry 42 (size 16 bundles) Reserved VMX_DBG_FAULT(42) VMX_FAULT(42) .org vmx_ia64_ivt+0x6700/////////////////////////////////////////////////////////////////////////////////////////// 0x6700 Entry 43 (size 16 bundles) Reserved VMX_DBG_FAULT(43) VMX_FAULT(43) .org vmx_ia64_ivt+0x6800/////////////////////////////////////////////////////////////////////////////////////////// 0x6800 Entry 44 (size 16 bundles) Reserved VMX_DBG_FAULT(44) VMX_FAULT(44) .org vmx_ia64_ivt+0x6900/////////////////////////////////////////////////////////////////////////////////////////// 0x6900 Entry 45 (size 16 bundles) IA-32 Exeception (17,18,29,41,42,43,44,58,60,61,62,72,73,75,76,77)ENTRY(vmx_ia32_exception) VMX_DBG_FAULT(45) VMX_FAULT(45)END(vmx_ia32_exception) .org vmx_ia64_ivt+0x6a00/////////////////////////////////////////////////////////////////////////////////////////// 0x6a00 Entry 46 (size 16 bundles) IA-32 Intercept (30,31,59,70,71)ENTRY(vmx_ia32_intercept) VMX_DBG_FAULT(46) VMX_FAULT(46)END(vmx_ia32_intercept) .org vmx_ia64_ivt+0x6b00/////////////////////////////////////////////////////////////////////////////////////////// 0x6b00 Entry 47 (size 16 bundles) IA-32 Interrupt (74)ENTRY(vmx_ia32_interrupt) VMX_DBG_FAULT(47) VMX_FAULT(47)END(vmx_ia32_interrupt) .org vmx_ia64_ivt+0x6c00/////////////////////////////////////////////////////////////////////////////////////////// 0x6c00 Entry 48 (size 16 bundles) Reserved VMX_DBG_FAULT(48) VMX_FAULT(48) .org vmx_ia64_ivt+0x6d00/////////////////////////////////////////////////////////////////////////////////////////// 0x6d00 Entry 49 (size 16 bundles) Reserved VMX_DBG_FAULT(49) VMX_FAULT(49) .org vmx_ia64_ivt+0x6e00/////////////////////////////////////////////////////////////////////////////////////////// 0x6e00 Entry 50 (size 16 bundles) Reserved VMX_DBG_FAULT(50) VMX_FAULT(50) .org vmx_ia64_ivt+0x6f00/////////////////////////////////////////////////////////////////////////////////////////// 0x6f00 Entry 51 (size 16 bundles) Reserved VMX_DBG_FAULT(51) VMX_FAULT(51) .org vmx_ia64_ivt+0x7000/////////////////////////////////////////////////////////////////////////////////////////// 0x7000 Entry 52 (size 16 bundles) Reserved VMX_DBG_FAULT(52) VMX_FAULT(52) .org vmx_ia64_ivt+0x7100/////////////////////////////////////////////////////////////////////////////////////////// 0x7100 Entry 53 (size 16 bundles) Reserved VMX_DBG_FAULT(53) VMX_FAULT(53) .org vmx_ia64_ivt+0x7200/////////////////////////////////////////////////////////////////////////////////////////// 0x7200 Entry 54 (size 16 bundles) Reserved VMX_DBG_FAULT(54) VMX_FAULT(54) .org vmx_ia64_ivt+0x7300/////////////////////////////////////////////////////////////////////////////////////////// 0x7300 Entry 55 (size 16 bundles) Reserved VMX_DBG_FAULT(55) VMX_FAULT(55) .org vmx_ia64_ivt+0x7400/////////////////////////////////////////////////////////////////////////////////////////// 0x7400 Entry 56 (size 16 bundles) Reserved VMX_DBG_FAULT(56) VMX_FAULT(56) .org vmx_ia64_ivt+0x7500/////////////////////////////////////////////////////////////////////////////////////////// 0x7500 Entry 57 (size 16 bundles) Reserved VMX_DBG_FAULT(57) VMX_FAULT(57) .org vmx_ia64_ivt+0x7600/////////////////////////////////////////////////////////////////////////////////////////// 0x7600 Entry 58 (size 16 bundles) Reserved VMX_DBG_FAULT(58) VMX_FAULT(58) .org vmx_ia64_ivt+0x7700/////////////////////////////////////////////////////////////////////////////////////////// 0x7700 Entry 59 (size 16 bundles) Reserved VMX_DBG_FAULT(59) VMX_FAULT(59) .org vmx_ia64_ivt+0x7800/////////////////////////////////////////////////////////////////////////////////////////// 0x7800 Entry 60 (size 16 bundles) Reserved VMX_DBG_FAULT(60) VMX_FAULT(60) .org vmx_ia64_ivt+0x7900/////////////////////////////////////////////////////////////////////////////////////////// 0x7900 Entry 61 (size 16 bundles) Reserved VMX_DBG_FAULT(61) VMX_FAULT(61) .org vmx_ia64_ivt+0x7a00/////////////////////////////////////////////////////////////////////////////////////////// 0x7a00 Entry 62 (size 16 bundles) Reserved VMX_DBG_FAULT(62) VMX_FAULT(62) .org vmx_ia64_ivt+0x7b00/////////////////////////////////////////////////////////////////////////////////////////// 0x7b00 Entry 63 (size 16 bundles) Reserved VMX_DBG_FAULT(63) VMX_FAULT(63) .org vmx_ia64_ivt+0x7c00/////////////////////////////////////////////////////////////////////////////////////////// 0x7c00 Entry 64 (size 16 bundles) Reserved VMX_DBG_FAULT(64) VMX_FAULT(64) .org vmx_ia64_ivt+0x7d00/////////////////////////////////////////////////////////////////////////////////////////// 0x7d00 Entry 65 (size 16 bundles) Reserved VMX_DBG_FAULT(65) VMX_FAULT(65) .org vmx_ia64_ivt+0x7e00/////////////////////////////////////////////////////////////////////////////////////////// 0x7e00 Entry 66 (size 16 bundles) Reserved VMX_DBG_FAULT(66) VMX_FAULT(66) .org vmx_ia64_ivt+0x7f00/////////////////////////////////////////////////////////////////////////////////////////// 0x7f00 Entry 67 (size 16 bundles) Reserved VMX_DBG_FAULT(67) VMX_FAULT(67) .org vmx_ia64_ivt+0x8000// There is no particular reason for this code to be here, other than that// there happens to be space here that would go unused otherwise. If this// fault ever gets "unreserved", simply moved the following code to a more// suitable spot...ENTRY(vmx_dispatch_reflection) /* * Input: * psr.ic: off * r19: intr type (offset into ivt, see ia64_int.h) * r31: contains saved predicates (pr) */ VMX_SAVE_MIN_WITH_COVER_R19 alloc r14=ar.pfs,0,0,5,0 mov out0=cr.ifa mov out1=cr.isr mov out2=cr.iim mov out3=r15 adds r3=8,r2 // set up second base pointer ;; ssm psr.ic ;; srlz.i // guarantee that interruption collection is on ;; (p15) ssm psr.i // restore psr.i movl r14=ia64_leave_hypervisor ;; VMX_SAVE_REST mov rp=r14 ;; P6_BR_CALL_PANIC(.Lvmx_dispatch_reflection_string) adds out4=16,r12 br.call.sptk.many b6=vmx_reflect_interruptionEND(vmx_dispatch_reflection)ENTRY(vmx_dispatch_virtualization_fault) VMX_SAVE_MIN_WITH_COVER ;; alloc r14=ar.pfs,0,0,2,0 // now it's safe (must be first in insn group!) mov out0=r13 //vcpu adds r3=8,r2 // set up second base pointer ;; ssm psr.ic ;; srlz.i // guarantee that interruption collection is on ;; (p15) ssm psr.i // restore psr.i movl r14=ia64_leave_hypervisor_prepare ;; VMX_SAVE_REST VMX_SAVE_EXTRA mov rp=r14 ;; P6_BR_CALL_PANIC(.Lvmx_dispatch_virtualization_fault_string) adds out1=16,sp //regs br.call.sptk.many b6=vmx_emulateEND(vmx_dispatch_virtualization_fault)GLOBAL_ENTRY(vmx_dispatch_vexirq) VMX_SAVE_MIN_WITH_COVER alloc r14=ar.pfs,0,0,1,0 mov out0=r13 ssm psr.ic ;; srlz.i // guarantee that interruption collection is on ;; (p15) ssm psr.i // restore psr.i adds r3=8,r2 // set up second base pointer ;; VMX_SAVE_REST movl r14=ia64_leave_hypervisor ;; mov rp=r14 P6_BR_CALL_PANIC(.Lvmx_dispatch_vexirq_string) br.call.sptk.many b6=vmx_vexirqEND(vmx_dispatch_vexirq)ENTRY(vmx_dispatch_tlb_miss) VMX_SAVE_MIN_WITH_COVER_R19 alloc r14=ar.pfs,0,0,3,0 mov out0=cr.ifa mov out1=r15 adds r3=8,r2 // set up second base pointer ;; ssm psr.ic ;; srlz.i // guarantee that interruption collection is on ;; (p15) ssm psr.i // restore psr.i movl r14=ia64_leave_hypervisor ;; VMX_SAVE_REST mov rp=r14 ;; P6_BR_CALL_PANIC(.Lvmx_dispatch_tlb_miss_string) adds out2=16,r12 br.call.sptk.many b6=vmx_hpw_missEND(vmx_dispatch_tlb_miss)ENTRY(vmx_dispatch_break_fault) VMX_SAVE_MIN_WITH_COVER_NO_PANIC ;; alloc r14=ar.pfs,0,0,4,0 // now it's safe (must be first in insn group!) mov out0=cr.ifa mov out2=cr.isr // FIXME: pity to make this slow access twice mov out3=cr.iim // FIXME: pity to make this slow access twice adds r3=8,r2 // set up second base pointer ;; ssm psr.ic ;; srlz.i // guarantee that interruption collection is on ;; (p15)ssm psr.i // restore psr.i(pUStk)movl r14=ia64_leave_hypervisor ;;(pKStk)movl r14=ia64_leave_nested VMX_SAVE_REST mov rp=r14 ;; adds out1=16,sp br.call.sptk.many b6=vmx_ia64_handle_break ;;END(vmx_dispatch_break_fault)ENTRY(vmx_dispatch_interrupt) VMX_SAVE_MIN_WITH_COVER_NO_PANIC // uses r31; defines r2 and r3 ;; alloc r14=ar.pfs,0,0,2,0 // must be first in an insn group ssm psr.ic mov out0=cr.ivr // pass cr.ivr as first arg adds r3=8,r2 // set up second base pointer for SAVE_REST ;;(pUStk) movl r14=ia64_leave_hypervisor srlz.i ;;(pKStk) movl r14=ia64_leave_nested VMX_SAVE_REST add out1=16,sp // pass pointer to pt_regs as second arg mov rp=r14 br.call.sptk.many b6=ia64_handle_irqEND(vmx_dispatch_interrupt)ENTRY(vmx_dispatch_shadow_fault) VMX_SAVE_MIN_WITH_COVER_R19 alloc r14=ar.pfs,0,0,4,0 mov out0=cr.ifa mov out1=cr.isr mov out2=r15 adds r3=8,r2 // set up second base pointer ;; ssm psr.ic ;; srlz.i // guarantee that interruption collection is on ;; (p15) ssm psr.i // restore psr.i movl r14=ia64_leave_hypervisor ;; VMX_SAVE_REST mov rp=r14 ;; P6_BR_CALL_PANIC(.Lvmx_dispatch_shadow_fault_string) adds out3=16,r12 br.call.sptk.many b6=vmx_ia64_shadow_faultEND(vmx_dispatch_shadow_fault).Lvmx_dispatch_reflection_string: .asciz "vmx_dispatch_reflection\n".Lvmx_dispatch_virtualization_fault_string: .asciz "vmx_dispatch_virtualization_fault\n".Lvmx_dispatch_vexirq_string: .asciz "vmx_dispatch_vexirq\n".Lvmx_dispatch_tlb_miss_string: .asciz "vmx_dispatch_tlb_miss\n".Lvmx_dispatch_shadow_fault_string: .asciz "vmx_dispatch_shadow_fault\n"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -