]> git.saurik.com Git - apple/objc4.git/blobdiff - test/evil-class-def.m
objc4-646.tar.gz
[apple/objc4.git] / test / evil-class-def.m
index 392e524be28678c6926aff4663fcd6cbc4ac6e20..a5a5ba7e719252270f3979eae97285f4cc7d2d5d 100644 (file)
@@ -4,15 +4,19 @@
 
 #if __LP64__
 #   define PTR " .quad " 
+#   define PTRSIZE "8"
+#   define LOGPTRSIZE "3"
 #else
 #   define PTR " .long " 
+#   define PTRSIZE "4"
+#   define LOGPTRSIZE "2"
 #endif
 
 #define str(x) #x
 #define str2(x) str(x)
 
 __BEGIN_DECLS
-void nop(void) { }
+id nop(id self) { return self; }
 __END_DECLS
 
 asm(
@@ -25,6 +29,34 @@ asm(
     PTR "__objc_empty_cache \n"
     PTR "0 \n"
     PTR "L_ro \n"
+    // pad to OBJC_MAX_CLASS_SIZE
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
     ""
     "_OBJC_METACLASS_$_Super:          \n"
     PTR "_OBJC_METACLASS_$_Super   \n"
@@ -32,11 +64,39 @@ asm(
     PTR "__objc_empty_cache \n"
     PTR "0 \n"
     PTR "L_meta_ro \n"
+    // pad to OBJC_MAX_CLASS_SIZE
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
     ""
     "L_ro: \n"
     ".long 2 \n"
     ".long 0 \n"
-    ".long 0 \n"
+    ".long "PTRSIZE" \n"
 #if __LP64__
     ".long 0 \n"
 #endif
@@ -48,7 +108,7 @@ asm(
     PTR "L_good_methods \n"
 #endif
     PTR "0 \n"
-    PTR "0 \n"
+    PTR "L_super_ivars \n"
     PTR "0 \n"
     PTR "0 \n"
     ""
@@ -80,6 +140,34 @@ asm(
     PTR "__objc_empty_cache \n"
     PTR "0 \n"
     PTR "L_sub_ro \n"
+    // pad to OBJC_MAX_CLASS_SIZE
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
     ""
     "_OBJC_METACLASS_$_Sub:          \n"
     PTR "_OBJC_METACLASS_$_Super   \n"
@@ -87,11 +175,39 @@ asm(
     PTR "__objc_empty_cache \n"
     PTR "0 \n"
     PTR "L_sub_meta_ro \n"
+    // pad to OBJC_MAX_CLASS_SIZE
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
+    PTR "0 \n"
     ""
     "L_sub_ro: \n"
     ".long 2 \n"
     ".long 0 \n"
-    ".long 0 \n"
+    ".long "PTRSIZE" \n"
 #if __LP64__
     ".long 0 \n"
 #endif
@@ -103,7 +219,7 @@ asm(
     PTR "L_good_methods \n"
 #endif
     PTR "0 \n"
-    PTR "0 \n"
+    PTR "L_sub_ivars \n"
     PTR "0 \n"
     PTR "0 \n"
     ""
@@ -127,23 +243,54 @@ asm(
     PTR "0 \n"
 
     "L_evil_methods: \n"
-    ".long 24 \n"
+    ".long 3*"PTRSIZE" \n"
     ".long 1 \n"
     PTR "L_load \n"
     PTR "L_load \n"
-    PTR str2(SHARED_REGION_BASE+SHARED_REGION_SIZE-PAGE_SIZE) " \n"
+    PTR str2(SHARED_REGION_BASE+SHARED_REGION_SIZE-PAGE_MAX_SIZE) " \n"
 
     "L_good_methods: \n"
-    ".long 24 \n"
-    ".long 1 \n"
+    ".long 3*"PTRSIZE" \n"
+    ".long 2 \n"
     PTR "L_load \n"
     PTR "L_load \n"
     PTR "_nop \n"
+    PTR "L_self \n"
+    PTR "L_self \n"
+    PTR "_nop \n"
+
+    "L_super_ivars: \n"
+    ".long 4*"PTRSIZE" \n"
+    ".long 1 \n"
+    PTR "L_super_ivar_offset \n"
+    PTR "L_super_ivar_name \n"
+    PTR "L_super_ivar_type \n"
+    ".long "LOGPTRSIZE" \n"
+    ".long "PTRSIZE" \n"
+
+    "L_sub_ivars: \n"
+    ".long 4*"PTRSIZE" \n"
+    ".long 1 \n"
+    PTR "L_sub_ivar_offset \n"
+    PTR "L_sub_ivar_name \n"
+    PTR "L_sub_ivar_type \n"
+    ".long "LOGPTRSIZE" \n"
+    ".long "PTRSIZE" \n"
+
+    "L_super_ivar_offset: \n"
+    ".long 0 \n"
+    "L_sub_ivar_offset: \n"
+    ".long "PTRSIZE" \n"
 
     ".cstring \n"
-    "L_super_name: .ascii \"Super\\0\" \n"
-    "L_sub_name:   .ascii \"Sub\\0\" \n"
-    "L_load:       .ascii \"load\\0\" \n"
+    "L_super_name:       .ascii \"Super\\0\" \n"
+    "L_sub_name:         .ascii \"Sub\\0\" \n"
+    "L_load:             .ascii \"load\\0\" \n"
+    "L_self:             .ascii \"self\\0\" \n"
+    "L_super_ivar_name:  .ascii \"super_ivar\\0\" \n"
+    "L_super_ivar_type:  .ascii \"c\\0\" \n"
+    "L_sub_ivar_name:    .ascii \"sub_ivar\\0\" \n"
+    "L_sub_ivar_type:    .ascii \"@\\0\" \n"
 
 
     ".section __DATA,__objc_classlist \n"