17d36db35SAvi Kivity #include "libcflat.h" 2e7c37968SGleb Natapov #include "desc.h" 37d36db35SAvi Kivity 4*73f9822eSNadav Amit int test_ud2(bool *rflags_rf) 57d36db35SAvi Kivity { 67d36db35SAvi Kivity asm volatile(ASM_TRY("1f") 77d36db35SAvi Kivity "ud2 \n\t" 87d36db35SAvi Kivity "1:" :); 9*73f9822eSNadav Amit *rflags_rf = exception_rflags_rf(); 107d36db35SAvi Kivity return exception_vector(); 117d36db35SAvi Kivity } 127d36db35SAvi Kivity 13*73f9822eSNadav Amit int test_gp(bool *rflags_rf) 147d36db35SAvi Kivity { 157d36db35SAvi Kivity unsigned long tmp; 167d36db35SAvi Kivity 177d36db35SAvi Kivity asm volatile("mov $0xffffffff, %0 \n\t" 187d36db35SAvi Kivity ASM_TRY("1f") 197d36db35SAvi Kivity "mov %0, %%cr4\n\t" 207d36db35SAvi Kivity "1:" 217d36db35SAvi Kivity : "=a"(tmp)); 22*73f9822eSNadav Amit *rflags_rf = exception_rflags_rf(); 237d36db35SAvi Kivity return exception_vector(); 247d36db35SAvi Kivity } 257d36db35SAvi Kivity 267d36db35SAvi Kivity int main(void) 277d36db35SAvi Kivity { 287d36db35SAvi Kivity int r; 29*73f9822eSNadav Amit bool rflags_rf; 307d36db35SAvi Kivity 317d36db35SAvi Kivity printf("Starting IDT test\n"); 327d36db35SAvi Kivity setup_idt(); 33*73f9822eSNadav Amit r = test_gp(&rflags_rf); 34f3cdd159SJan Kiszka report("Testing #GP", r == GP_VECTOR); 35*73f9822eSNadav Amit report("Testing #GP rflags.rf", rflags_rf); 36*73f9822eSNadav Amit r = test_ud2(&rflags_rf); 37f3cdd159SJan Kiszka report("Testing #UD", r == UD_VECTOR); 38*73f9822eSNadav Amit report("Testing #UD rflags.rf", rflags_rf); 39f3cdd159SJan Kiszka 40f3cdd159SJan Kiszka return report_summary(); 417d36db35SAvi Kivity } 42