self modifying code also tests translation block chaining invalidation
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 25 May 2003 16:47:16 +0000 (16:47 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 25 May 2003 16:47:16 +0000 (16:47 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@184 c046a42c-6fe2-441c-8c8c-71466251a162

tests/test-i386.c

index 50c2d5b2cb387fb446826b308eab40c6f6faae93..4629105c770ee6bd1d55344713e02a0250a48cf1 100644 (file)
@@ -1218,15 +1218,18 @@ uint8_t code[] = {
     0xc3, /* ret */
 };
 
+typedef int FuncType(void);
+
 void test_self_modifying_code(void)
 {
-    int (*func)(void);
+    int i;
 
-    func = (void *)code;
     printf("self modifying code:\n");
-    printf("func1 = 0x%x\n", func());
-    code[1] = 0x2;
-    printf("func1 = 0x%x\n", func());
+    printf("func1 = 0x%x\n", ((FuncType *)code)());
+    for(i = 2; i <= 4; i++) {
+        code[1] = i;
+        printf("func%d = 0x%x\n", i, ((FuncType *)code)());
+    }
 }
     
 static void *call_end __init_call = NULL;