more exception tests
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 13 May 2003 00:29:04 +0000 (00:29 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 13 May 2003 00:29:04 +0000 (00:29 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@159 c046a42c-6fe2-441c-8c8c-71466251a162

tests/testsig.c

index 5f6d370..2eb2bfc 100644 (file)
@@ -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;