#if __OBJC2__ #include <mach/shared_region.h> #if __LP64__ # define PTR " .quad " #else # define PTR " .long " #endif #define str(x) #x #define str2(x) str(x) __BEGIN_DECLS void nop(void) { } __END_DECLS asm( ".globl _OBJC_CLASS_$_Super \n" ".section __DATA,__objc_data \n" ".align 3 \n" "_OBJC_CLASS_$_Super: \n" PTR "_OBJC_METACLASS_$_Super \n" PTR "0 \n" PTR "__objc_empty_cache \n" PTR "0 \n" PTR "L_ro \n" "" "_OBJC_METACLASS_$_Super: \n" PTR "_OBJC_METACLASS_$_Super \n" PTR "_OBJC_CLASS_$_Super \n" PTR "__objc_empty_cache \n" PTR "0 \n" PTR "L_meta_ro \n" "" "L_ro: \n" ".long 2 \n" ".long 0 \n" ".long 0 \n" #if __LP64__ ".long 0 \n" #endif PTR "0 \n" PTR "L_super_name \n" #if EVIL_SUPER PTR "L_evil_methods \n" #else PTR "L_good_methods \n" #endif PTR "0 \n" PTR "0 \n" PTR "0 \n" PTR "0 \n" "" "L_meta_ro: \n" ".long 3 \n" ".long 40 \n" ".long 40 \n" #if __LP64__ ".long 0 \n" #endif PTR "0 \n" PTR "L_super_name \n" #if EVIL_SUPER_META PTR "L_evil_methods \n" #else PTR "L_good_methods \n" #endif PTR "0 \n" PTR "0 \n" PTR "0 \n" PTR "0 \n" ".globl _OBJC_CLASS_$_Sub \n" ".section __DATA,__objc_data \n" ".align 3 \n" "_OBJC_CLASS_$_Sub: \n" PTR "_OBJC_METACLASS_$_Sub \n" PTR "_OBJC_CLASS_$_Super \n" PTR "__objc_empty_cache \n" PTR "0 \n" PTR "L_sub_ro \n" "" "_OBJC_METACLASS_$_Sub: \n" PTR "_OBJC_METACLASS_$_Super \n" PTR "_OBJC_METACLASS_$_Super \n" PTR "__objc_empty_cache \n" PTR "0 \n" PTR "L_sub_meta_ro \n" "" "L_sub_ro: \n" ".long 2 \n" ".long 0 \n" ".long 0 \n" #if __LP64__ ".long 0 \n" #endif PTR "0 \n" PTR "L_sub_name \n" #if EVIL_SUB PTR "L_evil_methods \n" #else PTR "L_good_methods \n" #endif PTR "0 \n" PTR "0 \n" PTR "0 \n" PTR "0 \n" "" "L_sub_meta_ro: \n" ".long 3 \n" ".long 40 \n" ".long 40 \n" #if __LP64__ ".long 0 \n" #endif PTR "0 \n" PTR "L_sub_name \n" #if EVIL_SUB_META PTR "L_evil_methods \n" #else PTR "L_good_methods \n" #endif PTR "0 \n" PTR "0 \n" PTR "0 \n" PTR "0 \n" "L_evil_methods: \n" ".long 24 \n" ".long 1 \n" PTR "L_load \n" PTR "L_load \n" PTR str2(SHARED_REGION_BASE+SHARED_REGION_SIZE-PAGE_SIZE) " \n" "L_good_methods: \n" ".long 24 \n" ".long 1 \n" PTR "L_load \n" PTR "L_load \n" PTR "_nop \n" ".cstring \n" "L_super_name: .ascii \"Super\\0\" \n" "L_sub_name: .ascii \"Sub\\0\" \n" "L_load: .ascii \"load\\0\" \n" ".section __DATA,__objc_classlist \n" #if !OMIT_SUPER PTR "_OBJC_CLASS_$_Super \n" #endif #if !OMIT_SUB PTR "_OBJC_CLASS_$_Sub \n" #endif ".section __DATA,__objc_nlclslist \n" #if !OMIT_NL_SUPER PTR "_OBJC_CLASS_$_Super \n" #endif #if !OMIT_NL_SUB PTR "_OBJC_CLASS_$_Sub \n" #endif ".text \n" ); // __OBJC2__ #endif void fn(void) { }