17d36db35SAvi Kivity #include "libcflat.h" 2*2b934609SXiaoyao Li #include "processor.h" 3e7c37968SGleb Natapov #include "desc.h" 47d36db35SAvi Kivity test_ud2(bool * rflags_rf)5db4898e8SThomas Huthstatic int test_ud2(bool *rflags_rf) 67d36db35SAvi Kivity { 77d36db35SAvi Kivity asm volatile(ASM_TRY("1f") 87d36db35SAvi Kivity "ud2 \n\t" 97d36db35SAvi Kivity "1:" :); 1073f9822eSNadav Amit *rflags_rf = exception_rflags_rf(); 117d36db35SAvi Kivity return exception_vector(); 127d36db35SAvi Kivity } 137d36db35SAvi Kivity test_gp(bool * rflags_rf)14db4898e8SThomas Huthstatic int test_gp(bool *rflags_rf) 157d36db35SAvi Kivity { 167d36db35SAvi Kivity unsigned long tmp; 177d36db35SAvi Kivity 187d36db35SAvi Kivity asm volatile("mov $0xffffffff, %0 \n\t" 197d36db35SAvi Kivity ASM_TRY("1f") 207d36db35SAvi Kivity "mov %0, %%cr4\n\t" 217d36db35SAvi Kivity "1:" 227d36db35SAvi Kivity : "=a"(tmp)); 2373f9822eSNadav Amit *rflags_rf = exception_rflags_rf(); 247d36db35SAvi Kivity return exception_vector(); 257d36db35SAvi Kivity } 267d36db35SAvi Kivity main(void)277d36db35SAvi Kivityint main(void) 287d36db35SAvi Kivity { 297d36db35SAvi Kivity int r; 3073f9822eSNadav Amit bool rflags_rf; 317d36db35SAvi Kivity 327d36db35SAvi Kivity printf("Starting IDT test\n"); 3373f9822eSNadav Amit r = test_gp(&rflags_rf); 34a299895bSThomas Huth report(r == GP_VECTOR, "Testing #GP"); 35a299895bSThomas Huth report(rflags_rf, "Testing #GP rflags.rf"); 3673f9822eSNadav Amit r = test_ud2(&rflags_rf); 37a299895bSThomas Huth report(r == UD_VECTOR, "Testing #UD"); 38a299895bSThomas Huth report(rflags_rf, "Testing #UD rflags.rf"); 39f3cdd159SJan Kiszka 40f3cdd159SJan Kiszka return report_summary(); 417d36db35SAvi Kivity } 42