blob: 59256d41c38d3bdb593f2a76c41f0562a0a6983c [file] [log] [blame]
#include "libcflat.h"
#include "idt.h"
int test_ud2(void)
{
asm volatile(ASM_TRY("1f")
"ud2 \n\t"
"1:" :);
return exception_vector();
}
int test_gp(void)
{
unsigned long tmp;
asm volatile("mov $0xffffffff, %0 \n\t"
ASM_TRY("1f")
"mov %0, %%cr4\n\t"
"1:"
: "=a"(tmp));
return exception_vector();
}
static int nr_fail, nr_test;
static void report(int cond, const char *name)
{
++nr_test;
if (!cond) {
++nr_fail;
printf("%s: FAIL\n", name);
} else {
printf("%s: PASS\n", name);
}
}
int main(void)
{
int r;
printf("Starting IDT test\n");
setup_idt();
r = test_gp();
report(r == GP_VECTOR, "Testing #GP");
r = test_ud2();
report(r == UD_VECTOR, "Testing #UD");
printf("%d failures of %d tests\n", nr_fail, nr_test);
return !nr_fail ? 0 : 1;
}