#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(
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"
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
PTR "L_good_methods \n"
#endif
PTR "0 \n"
- PTR "0 \n"
+ PTR "L_super_ivars \n"
PTR "0 \n"
PTR "0 \n"
""
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"
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
PTR "L_good_methods \n"
#endif
PTR "0 \n"
- PTR "0 \n"
+ PTR "L_sub_ivars \n"
PTR "0 \n"
PTR "0 \n"
""
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"