From 2a29ca73c9101ae46e85077178d3fcd1b38cfa0c Mon Sep 17 00:00:00 2001 From: bellard Date: Tue, 13 May 2003 00:29:04 +0000 Subject: [PATCH] more exception tests git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@159 c046a42c-6fe2-441c-8c8c-71466251a162 --- tests/testsig.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tests/testsig.c b/tests/testsig.c index 5f6d3705e5..2eb2bfc4ac 100644 --- a/tests/testsig.c +++ b/tests/testsig.c @@ -67,7 +67,7 @@ int tab[2]; int main(int argc, char **argv) { struct sigaction act; - int val; + volatile int val; act.sa_sigaction = sig_handler; sigemptyset(&act.sa_mask); @@ -75,6 +75,7 @@ int main(int argc, char **argv) sigaction(SIGFPE, &act, NULL); sigaction(SIGILL, &act, NULL); sigaction(SIGSEGV, &act, NULL); + sigaction(SIGTRAP, &act, NULL); /* test division by zero reporting */ if (setjmp(jmp_env) == 0) { @@ -112,6 +113,11 @@ int main(int argc, char **argv) asm volatile ("int $0xfd"); } + printf("INT3 exception:\n"); + if (setjmp(jmp_env) == 0) { + asm volatile ("int3"); + } + printf("CLI exception:\n"); if (setjmp(jmp_env) == 0) { asm volatile ("cli"); @@ -158,10 +164,20 @@ int main(int argc, char **argv) printf("HLT exception:\n"); if (setjmp(jmp_env) == 0) { - asm volatile ("hlt" : : "d" (0x4321), "D" (tab), "c" (1)); + asm volatile ("hlt"); } -#if 0 + printf("single step exception:\n"); + val = 0; + if (setjmp(jmp_env) == 0) { + asm volatile ("pushf\n" + "orl $0x00100, (%%esp)\n" + "popf\n" + "movl $0xabcd, %0\n" : "=m" (val) : : "cc", "memory"); + } + printf("val=0x%x\n", val); + +#if 1 { int i; act.sa_handler = alarm_handler; -- GitLab