vmlinux.gcc: file format elf64-x86-64 Disassembly of section .text: ffffffff8118dfe0 : handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6230 kvm_after_interrupt(&vmx->vcpu); } } static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu) { ffffffff8118dfe0: 41 55 push %r13 ffffffff8118dfe2: 41 54 push %r12 ffffffff8118dfe4: 55 push %rbp ffffffff8118dfe5: 48 89 fd mov %rdi,%rbp ffffffff8118dfe8: 53 push %rbx arch_static_branch(): /usr/local/google/src/linux-trunk/./arch/x86/include/asm/jump_label.h:25 #include #include static __always_inline bool arch_static_branch(struct static_key *key, bool branch) { asm_volatile_goto("1:" ffffffff8118dfe9: e8 42 79 57 00 callq ffffffff81705930 <__sanitizer_cov_trace_pc> ffffffff8118dfee: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) ffffffff8118dff3: e8 38 79 57 00 callq ffffffff81705930 <__sanitizer_cov_trace_pc> __vmcs_readl(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/ops.h:70 static __always_inline unsigned long __vmcs_readl(unsigned long field) { unsigned long value; asm volatile("1: vmread %2, %1\n\t" ffffffff8118dff8: bb 04 44 00 00 mov $0x4404,%ebx ffffffff8118dffd: 0f 78 db vmread %rbx,%rbx ffffffff8118e000: 3e 77 0d ja,pt ffffffff8118e010 ffffffff8118e003: 48 89 df mov %rbx,%rdi ffffffff8118e006: 48 31 f6 xor %rsi,%rsi ffffffff8118e009: e8 62 93 00 00 callq ffffffff81197370 ffffffff8118e00e: 31 db xor %ebx,%ebx is_external_intr(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmcs.h:129 == (INTR_TYPE_NMI_INTR | INTR_INFO_VALID_MASK); } static inline bool is_external_intr(u32 intr_info) { return (intr_info & (INTR_INFO_VALID_MASK | INTR_INFO_INTR_TYPE_MASK)) ffffffff8118e010: 41 89 dc mov %ebx,%r12d handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6240 #endif gate_desc *desc; u32 intr_info; intr_info = vmcs_read32(VM_EXIT_INTR_INFO); if (WARN_ONCE(!is_external_intr(intr_info), ffffffff8118e013: bf 00 00 00 80 mov $0x80000000,%edi vmcs_read32(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/ops.h:102 static __always_inline u32 vmcs_read32(unsigned long field) { vmcs_check32(field); if (static_branch_unlikely(&enable_evmcs)) return evmcs_read32(field); return __vmcs_readl(field); ffffffff8118e018: 41 89 dd mov %ebx,%r13d is_external_intr(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmcs.h:129 ffffffff8118e01b: 41 81 e4 00 07 00 80 and $0x80000700,%r12d handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6240 ffffffff8118e022: 44 89 e6 mov %r12d,%esi ffffffff8118e025: e8 76 7a 57 00 callq ffffffff81705aa0 <__sanitizer_cov_trace_const_cmp4> ffffffff8118e02a: 41 81 fc 00 00 00 80 cmp $0x80000000,%r12d ffffffff8118e031: 0f 85 7a 01 00 00 jne ffffffff8118e1b1 /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6244 "KVM: unexpected VM-Exit interrupt info: 0x%x", intr_info)) return; vector = intr_info & INTR_INFO_VECTOR_MASK; ffffffff8118e037: e8 f4 78 57 00 callq ffffffff81705930 <__sanitizer_cov_trace_pc> /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6245 desc = (gate_desc *)host_idt_base + vector; ffffffff8118e03c: 0f b6 db movzbl %bl,%ebx gate_offset(): /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 typedef struct gate_struct gate_desc; static inline unsigned long gate_offset(const gate_desc *g) { #ifdef CONFIG_X86_64 return g->offset_low | ((unsigned long)g->offset_middle << 16) | ffffffff8118e03f: 48 b9 00 00 00 00 00 movabs $0xdffffc0000000000,%rcx ffffffff8118e046: fc ff df handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6245 ffffffff8118e049: 48 c1 e3 04 shl $0x4,%rbx ffffffff8118e04d: 48 03 1d 2c 68 2f 0a add 0xa2f682c(%rip),%rbx # ffffffff8b484880 gate_offset(): /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 ffffffff8118e054: 48 89 d8 mov %rbx,%rax ffffffff8118e057: 48 c1 e8 03 shr $0x3,%rax ffffffff8118e05b: 0f b6 14 08 movzbl (%rax,%rcx,1),%edx ffffffff8118e05f: 48 8d 43 01 lea 0x1(%rbx),%rax ffffffff8118e063: 48 89 c6 mov %rax,%rsi ffffffff8118e066: 48 c1 ee 03 shr $0x3,%rsi ffffffff8118e06a: 0f b6 0c 0e movzbl (%rsi,%rcx,1),%ecx ffffffff8118e06e: 48 89 de mov %rbx,%rsi ffffffff8118e071: 83 e6 07 and $0x7,%esi ffffffff8118e074: 40 38 f2 cmp %sil,%dl ffffffff8118e077: 40 0f 9e c6 setle %sil ffffffff8118e07b: 84 d2 test %dl,%dl ffffffff8118e07d: 0f 95 c2 setne %dl ffffffff8118e080: 40 84 d6 test %dl,%sil ffffffff8118e083: 0f 85 7e 01 00 00 jne ffffffff8118e207 ffffffff8118e089: 83 e0 07 and $0x7,%eax ffffffff8118e08c: 38 c1 cmp %al,%cl ffffffff8118e08e: 0f 9e c2 setle %dl ffffffff8118e091: 84 c9 test %cl,%cl ffffffff8118e093: 0f 95 c0 setne %al ffffffff8118e096: 84 c2 test %al,%dl ffffffff8118e098: 0f 85 69 01 00 00 jne ffffffff8118e207 ffffffff8118e09e: 48 8d 7b 06 lea 0x6(%rbx),%rdi ffffffff8118e0a2: 44 0f b7 2b movzwl (%rbx),%r13d ffffffff8118e0a6: 48 b9 00 00 00 00 00 movabs $0xdffffc0000000000,%rcx ffffffff8118e0ad: fc ff df ffffffff8118e0b0: 48 89 f8 mov %rdi,%rax ffffffff8118e0b3: 48 c1 e8 03 shr $0x3,%rax ffffffff8118e0b7: 0f b6 14 08 movzbl (%rax,%rcx,1),%edx ffffffff8118e0bb: 48 8d 43 07 lea 0x7(%rbx),%rax ffffffff8118e0bf: 48 89 c6 mov %rax,%rsi ffffffff8118e0c2: 48 c1 ee 03 shr $0x3,%rsi ffffffff8118e0c6: 0f b6 0c 0e movzbl (%rsi,%rcx,1),%ecx ffffffff8118e0ca: 48 89 fe mov %rdi,%rsi ffffffff8118e0cd: 83 e6 07 and $0x7,%esi ffffffff8118e0d0: 40 38 f2 cmp %sil,%dl ffffffff8118e0d3: 40 0f 9e c6 setle %sil ffffffff8118e0d7: 84 d2 test %dl,%dl ffffffff8118e0d9: 0f 95 c2 setne %dl ffffffff8118e0dc: 40 84 d6 test %dl,%sil ffffffff8118e0df: 0f 85 13 01 00 00 jne ffffffff8118e1f8 ffffffff8118e0e5: 83 e0 07 and $0x7,%eax ffffffff8118e0e8: 38 c1 cmp %al,%cl ffffffff8118e0ea: 0f 9e c2 setle %dl ffffffff8118e0ed: 84 c9 test %cl,%cl ffffffff8118e0ef: 0f 95 c0 setne %al ffffffff8118e0f2: 84 c2 test %al,%dl ffffffff8118e0f4: 0f 85 fe 00 00 00 jne ffffffff8118e1f8 /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:94 ((unsigned long) g->offset_high << 32); ffffffff8118e0fa: 48 8d 7b 08 lea 0x8(%rbx),%rdi /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 return g->offset_low | ((unsigned long)g->offset_middle << 16) | ffffffff8118e0fe: 44 0f b7 63 06 movzwl 0x6(%rbx),%r12d /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:94 ((unsigned long) g->offset_high << 32); ffffffff8118e103: 48 b9 00 00 00 00 00 movabs $0xdffffc0000000000,%rcx ffffffff8118e10a: fc ff df ffffffff8118e10d: 48 89 f8 mov %rdi,%rax ffffffff8118e110: 48 c1 e8 03 shr $0x3,%rax ffffffff8118e114: 0f b6 14 08 movzbl (%rax,%rcx,1),%edx ffffffff8118e118: 48 8d 43 0b lea 0xb(%rbx),%rax ffffffff8118e11c: 48 89 c6 mov %rax,%rsi /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 return g->offset_low | ((unsigned long)g->offset_middle << 16) | ffffffff8118e11f: 49 c1 e4 10 shl $0x10,%r12 /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:94 ((unsigned long) g->offset_high << 32); ffffffff8118e123: 48 c1 ee 03 shr $0x3,%rsi ffffffff8118e127: 0f b6 0c 0e movzbl (%rsi,%rcx,1),%ecx ffffffff8118e12b: 48 89 fe mov %rdi,%rsi ffffffff8118e12e: 83 e6 07 and $0x7,%esi ffffffff8118e131: 40 38 f2 cmp %sil,%dl ffffffff8118e134: 40 0f 9e c6 setle %sil ffffffff8118e138: 84 d2 test %dl,%dl ffffffff8118e13a: 0f 95 c2 setne %dl ffffffff8118e13d: 40 84 d6 test %dl,%sil ffffffff8118e140: 0f 85 a3 00 00 00 jne ffffffff8118e1e9 ffffffff8118e146: 83 e0 07 and $0x7,%eax ffffffff8118e149: 38 c1 cmp %al,%cl ffffffff8118e14b: 0f 9e c2 setle %dl ffffffff8118e14e: 84 c9 test %cl,%cl ffffffff8118e150: 0f 95 c0 setne %al ffffffff8118e153: 84 c2 test %al,%dl ffffffff8118e155: 0f 85 8e 00 00 00 jne ffffffff8118e1e9 ffffffff8118e15b: 8b 5b 08 mov 0x8(%rbx),%ebx kvm_before_interrupt(): /usr/local/google/src/linux-trunk/arch/x86/kvm/x86.h:352 DECLARE_PER_CPU(struct kvm_vcpu *, current_vcpu); static inline void kvm_before_interrupt(struct kvm_vcpu *vcpu) { __this_cpu_write(current_vcpu, vcpu); ffffffff8118e15e: 48 c7 c7 80 fd e3 87 mov $0xffffffff87e3fd80,%rdi ffffffff8118e165: e8 26 21 6a 02 callq ffffffff83830290 <__this_cpu_preempt_check> ffffffff8118e16a: 65 48 89 2d 5e ff e8 mov %rbp,%gs:0x7ee8ff5e(%rip) # 1e0d0 ffffffff8118e171: 7e gate_offset(): /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:94 ffffffff8118e172: 48 c1 e3 20 shl $0x20,%rbx /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 return g->offset_low | ((unsigned long)g->offset_middle << 16) | ffffffff8118e176: 4c 09 e3 or %r12,%rbx ffffffff8118e179: 4c 09 eb or %r13,%rbx handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6250 entry = gate_offset(desc); kvm_before_interrupt(vcpu); asm volatile( ffffffff8118e17c: 48 89 e0 mov %rsp,%rax ffffffff8118e17f: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp ffffffff8118e183: 6a 18 pushq $0x18 ffffffff8118e185: 50 push %rax ffffffff8118e186: 9c pushfq ffffffff8118e187: 6a 10 pushq $0x10 ffffffff8118e189: ff d3 callq *%rbx kvm_after_interrupt(): /usr/local/google/src/linux-trunk/arch/x86/kvm/x86.h:357 } static inline void kvm_after_interrupt(struct kvm_vcpu *vcpu) { __this_cpu_write(current_vcpu, NULL); ffffffff8118e18b: 48 c7 c7 80 fd e3 87 mov $0xffffffff87e3fd80,%rdi ffffffff8118e192: e8 f9 20 6a 02 callq ffffffff83830290 <__this_cpu_preempt_check> ffffffff8118e197: 65 48 c7 05 2d ff e8 movq $0x0,%gs:0x7ee8ff2d(%rip) # 1e0d0 ffffffff8118e19e: 7e 00 00 00 00 handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6272 [ss]"i"(__KERNEL_DS), [cs]"i"(__KERNEL_CS) ); kvm_after_interrupt(vcpu); } ffffffff8118e1a3: 5b pop %rbx ffffffff8118e1a4: 5d pop %rbp ffffffff8118e1a5: 41 5c pop %r12 ffffffff8118e1a7: 41 5d pop %r13 ffffffff8118e1a9: e9 82 77 57 00 jmpq ffffffff81705930 <__sanitizer_cov_trace_pc> vmcs_read32(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/ops.h:101 return evmcs_read32(field); ffffffff8118e1ae: 45 31 ed xor %r13d,%r13d handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6240 (discriminator 1) if (WARN_ONCE(!is_external_intr(intr_info), ffffffff8118e1b1: e8 7a 77 57 00 callq ffffffff81705930 <__sanitizer_cov_trace_pc> ffffffff8118e1b6: 0f b6 1d cf 2f fa 08 movzbl 0x8fa2fcf(%rip),%ebx # ffffffff8a13118c <__warned.77930> ffffffff8118e1bd: 31 ff xor %edi,%edi ffffffff8118e1bf: 89 de mov %ebx,%esi ffffffff8118e1c1: e8 9a 78 57 00 callq ffffffff81705a60 <__sanitizer_cov_trace_const_cmp1> ffffffff8118e1c6: 84 db test %bl,%bl ffffffff8118e1c8: 75 d9 jne ffffffff8118e1a3 /usr/local/google/src/linux-trunk/arch/x86/kvm/vmx/vmx.c:6240 (discriminator 3) ffffffff8118e1ca: e8 61 77 57 00 callq ffffffff81705930 <__sanitizer_cov_trace_pc> ffffffff8118e1cf: 44 89 ee mov %r13d,%esi ffffffff8118e1d2: 48 c7 c7 e0 fc e3 87 mov $0xffffffff87e3fce0,%rdi ffffffff8118e1d9: c6 05 ac 2f fa 08 01 movb $0x1,0x8fa2fac(%rip) # ffffffff8a13118c <__warned.77930> ffffffff8118e1e0: e8 10 1a 2a 00 callq ffffffff8142fbf5 <__warn_printk> ffffffff8118e1e5: 0f 0b ud2 ffffffff8118e1e7: eb ba jmp ffffffff8118e1a3 gate_offset(): /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:94 ((unsigned long) g->offset_high << 32); ffffffff8118e1e9: be 04 00 00 00 mov $0x4,%esi ffffffff8118e1ee: e8 4d 80 91 00 callq ffffffff81aa6240 <__asan_report_load_n_noabort> ffffffff8118e1f3: e9 63 ff ff ff jmpq ffffffff8118e15b /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 return g->offset_low | ((unsigned long)g->offset_middle << 16) | ffffffff8118e1f8: be 02 00 00 00 mov $0x2,%esi ffffffff8118e1fd: e8 3e 80 91 00 callq ffffffff81aa6240 <__asan_report_load_n_noabort> ffffffff8118e202: e9 f3 fe ff ff jmpq ffffffff8118e0fa ffffffff8118e207: be 02 00 00 00 mov $0x2,%esi ffffffff8118e20c: 48 89 df mov %rbx,%rdi ffffffff8118e20f: e8 2c 80 91 00 callq ffffffff81aa6240 <__asan_report_load_n_noabort> ffffffff8118e214: e9 85 fe ff ff jmpq ffffffff8118e09e handle_external_interrupt_irqoff(): /usr/local/google/src/linux-trunk/./arch/x86/include/asm/desc_defs.h:93 ffffffff8118e219: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)