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