xref: /kvm-unit-tests/x86/idt_test.c (revision e7c37968d5f9fd45e6e2f88b82562fd89128e365)
17d36db35SAvi Kivity #include "libcflat.h"
2*e7c37968SGleb 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 static int nr_fail, nr_test;
257d36db35SAvi Kivity 
267d36db35SAvi Kivity static void report(int cond, const char *name)
277d36db35SAvi Kivity {
287d36db35SAvi Kivity     ++nr_test;
297d36db35SAvi Kivity     if (!cond) {
307d36db35SAvi Kivity         ++nr_fail;
317d36db35SAvi Kivity         printf("%s: FAIL\n", name);
327d36db35SAvi Kivity     } else {
337d36db35SAvi Kivity         printf("%s: PASS\n", name);
347d36db35SAvi Kivity     }
357d36db35SAvi Kivity }
367d36db35SAvi Kivity 
377d36db35SAvi Kivity int main(void)
387d36db35SAvi Kivity {
397d36db35SAvi Kivity     int r;
407d36db35SAvi Kivity 
417d36db35SAvi Kivity     printf("Starting IDT test\n");
427d36db35SAvi Kivity     setup_idt();
437d36db35SAvi Kivity     r = test_gp();
447d36db35SAvi Kivity     report(r == GP_VECTOR, "Testing #GP");
457d36db35SAvi Kivity     r = test_ud2();
467d36db35SAvi Kivity     report(r == UD_VECTOR, "Testing #UD");
477d36db35SAvi Kivity     printf("%d failures of %d tests\n", nr_fail, nr_test);
487d36db35SAvi Kivity     return !nr_fail ? 0 : 1;
497d36db35SAvi Kivity }
50