@@ -12,6 +12,7 @@ tests = $(TEST_DIR)/access.flat $(TEST_DIR)/apic.flat \
$(TEST_DIR)/pcid.flat $(TEST_DIR)/debug.flat \
$(TEST_DIR)/ioapic.flat $(TEST_DIR)/memory.flat \
$(TEST_DIR)/pku.flat $(TEST_DIR)/hyperv_clock.flat
+tests += $(TEST_DIR)/syscall.flat
tests += $(TEST_DIR)/svm.flat
tests += $(TEST_DIR)/vmx.flat
tests += $(TEST_DIR)/tscdeadline_latency.flat
@@ -94,23 +94,6 @@ static void test_msr_rw(int msr_index, unsigned long long input, unsigned long l
report("%s", expected == r, sptr);
}
-static void test_syscall_lazy_load(void)
-{
-#ifdef __x86_64__
- extern void syscall_target();
- u16 cs = read_cs(), ss = read_ss();
- ulong tmp;
-
- wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_SCE);
- wrmsr(MSR_LSTAR, (ulong)syscall_target);
- wrmsr(MSR_STAR, (uint64_t)cs << 32);
- asm volatile("pushf; syscall; syscall_target: popf" : "=c"(tmp) : : "r11");
- write_ss(ss);
- // will crash horribly if broken
- report("MSR_*STAR eager loading", true);
-#endif
-}
-
int main(int ac, char **av)
{
int i, j;
@@ -124,8 +107,6 @@ int main(int ac, char **av)
}
}
- test_syscall_lazy_load();
-
return report_summary();
}
new file mode 100644
@@ -0,0 +1,28 @@
+/* msr tests */
+
+#include "libcflat.h"
+#include "processor.h"
+#include "msr.h"
+#include "desc.h"
+
+static void test_syscall_lazy_load(void)
+{
+ extern void syscall_target();
+ u16 cs = read_cs(), ss = read_ss();
+ ulong tmp;
+
+ wrmsr(MSR_EFER, rdmsr(MSR_EFER) | EFER_SCE);
+ wrmsr(MSR_LSTAR, (ulong)syscall_target);
+ wrmsr(MSR_STAR, (uint64_t)cs << 32);
+ asm volatile("pushf; syscall; syscall_target: popf" : "=c"(tmp) : : "r11");
+ write_ss(ss);
+ // will crash horribly if broken
+ report("MSR_*STAR eager loading", true);
+}
+
+int main(int ac, char **av)
+{
+ test_syscall_lazy_load();
+
+ return report_summary();
+}
@@ -151,6 +151,9 @@ file = s3.flat
[sieve]
file = sieve.flat
+[syscall]
+file = syscall.flat
+
[tsc]
file = tsc.flat
extra_params = -cpu kvm64,+rdtscp