diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-05-13 00:29:04 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2003-05-13 00:29:04 +0000 |
commit | 2a29ca73c9101ae46e85077178d3fcd1b38cfa0c (patch) | |
tree | 6783f1d17657ea02c285f359b91dc433e7e871fc | |
parent | 54936004fddc52c321cb3f9a9a51140e782bed5d (diff) | |
download | qemu-2a29ca73c9101ae46e85077178d3fcd1b38cfa0c.zip qemu-2a29ca73c9101ae46e85077178d3fcd1b38cfa0c.tar.gz qemu-2a29ca73c9101ae46e85077178d3fcd1b38cfa0c.tar.bz2 |
more exception tests
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@159 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | tests/testsig.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/tests/testsig.c b/tests/testsig.c index 5f6d370..2eb2bfc 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; |