+
+#if __x86_64__
+#if !TARGET_IPHONE_SIMULATOR
+ .data
+ .align 3
+__dyld_start_static:
+ .quad __dyld_start
+#endif
+
+
+#if !TARGET_IPHONE_SIMULATOR
+ .text
+ .align 2,0x90
+ .globl __dyld_start
+__dyld_start:
+ popq %rdi # param1 = mh of app
+ pushq $0 # push a zero for debugger end of frames marker
+ movq %rsp,%rbp # pointer to base of kernel frame
+ andq $-16,%rsp # force SSE alignment
+ subq $16,%rsp # room for local variables
+
+ # call dyldbootstrap::start(app_mh, argc, argv, slide, dyld_mh, &startGlue)
+ movl 8(%rbp),%esi # param2 = argc into %esi
+ leaq 16(%rbp),%rdx # param3 = &argv[0] into %rdx
+ movq __dyld_start_static(%rip), %r8
+ leaq __dyld_start(%rip), %rcx
+ subq %r8, %rcx # param4 = slide into %rcx
+ leaq ___dso_handle(%rip),%r8 # param5 = dyldsMachHeader
+ leaq -8(%rbp),%r9
+ call __ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_Pm
+ movq -8(%rbp),%rdi
+ cmpq $0,%rdi
+ jne Lnew
+
+ # clean up stack and jump to "start" in main executable
+ movq %rbp,%rsp # restore the unaligned stack pointer
+ addq $8,%rsp # remove the mh argument, and debugger end frame marker
+ movq $0,%rbp # restore ebp back to zero
+ jmp *%rax # jump to the entry point
+
+ # LC_MAIN case, set up stack for call to main()
+Lnew: addq $16,%rsp # remove local variables
+ pushq %rdi # simulate return address into _start in libdyld
+ movq 8(%rbp),%rdi # main param1 = argc into %rdi
+ leaq 16(%rbp),%rsi # main param2 = &argv[0] into %rsi
+ leaq 0x8(%rsi,%rdi,8),%rdx # main param3 = &env[0] into %rdx
+ movq %rdx,%rcx
+Lapple: movq (%rcx),%r8
+ add $8,%rcx
+ testq %r8,%r8 # look for NULL ending env[] array
+ jne Lapple # main param4 = apple into %rcx
+ jmp *%rax # jump to main(argc,argv,env,apple) with return address set to _start
+
+#endif /* TARGET_IPHONE_SIMULATOR */
+#endif /* __x86_64__ */
+
+
+
+#if __arm__
+ .syntax unified