xref: /kvm-unit-tests/x86/idt_test.c (revision f3cdd1591ac895d078481a12f2fb831d48e37174)
17d36db35SAvi Kivity #include "libcflat.h"
2e7c37968SGleb Natapov #include "desc.h"
37d36db35SAvi Kivity 
47d36db35SAvi Kivity int test_ud2(void)
57d36db35SAvi Kivity {
67d36db35SAvi Kivity     asm volatile(ASM_TRY("1f")
77d36db35SAvi Kivity                  "ud2 \n\t"
87d36db35SAvi Kivity                  "1:" :);
97d36db35SAvi Kivity     return exception_vector();
107d36db35SAvi Kivity }
117d36db35SAvi Kivity 
127d36db35SAvi Kivity int test_gp(void)
137d36db35SAvi Kivity {
147d36db35SAvi Kivity     unsigned long tmp;
157d36db35SAvi Kivity 
167d36db35SAvi Kivity     asm volatile("mov $0xffffffff, %0 \n\t"
177d36db35SAvi Kivity                  ASM_TRY("1f")
187d36db35SAvi Kivity 		 "mov %0, %%cr4\n\t"
197d36db35SAvi Kivity                  "1:"
207d36db35SAvi Kivity                  : "=a"(tmp));
217d36db35SAvi Kivity     return exception_vector();
227d36db35SAvi Kivity }
237d36db35SAvi Kivity 
247d36db35SAvi Kivity int main(void)
257d36db35SAvi Kivity {
267d36db35SAvi Kivity     int r;
277d36db35SAvi Kivity 
287d36db35SAvi Kivity     printf("Starting IDT test\n");
297d36db35SAvi Kivity     setup_idt();
307d36db35SAvi Kivity     r = test_gp();
31*f3cdd159SJan Kiszka     report("Testing #GP", r == GP_VECTOR);
327d36db35SAvi Kivity     r = test_ud2();
33*f3cdd159SJan Kiszka     report("Testing #UD", r == UD_VECTOR);
34*f3cdd159SJan Kiszka 
35*f3cdd159SJan Kiszka     return report_summary();
367d36db35SAvi Kivity }
37