1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #include "libcflat.h"
- #include "desc.h"
- int test_ud2(bool *rflags_rf)
- {
- asm volatile(ASM_TRY("1f")
- "ud2 \n\t"
- "1:" :);
- *rflags_rf = exception_rflags_rf();
- return exception_vector();
- }
- int test_gp(bool *rflags_rf)
- {
- unsigned long tmp;
- asm volatile("mov $0xffffffff, %0 \n\t"
- ASM_TRY("1f")
- "mov %0, %%cr4\n\t"
- "1:"
- : "=a"(tmp));
- *rflags_rf = exception_rflags_rf();
- return exception_vector();
- }
- int main(void)
- {
- int r;
- bool rflags_rf;
- printf("Starting IDT test\n");
- setup_idt();
- r = test_gp(&rflags_rf);
- report("Testing #GP", r == GP_VECTOR);
- report("Testing #GP rflags.rf", rflags_rf);
- r = test_ud2(&rflags_rf);
- report("Testing #UD", r == UD_VECTOR);
- report("Testing #UD rflags.rf", rflags_rf);
- return report_summary();
- }
|