- ldr x0, [x28] // get app's mh into x0
- ldr x1, [x28, #8] // get argc into x1 (kernel passes 32-bit int argc as 64-bits on stack to keep alignment)
- add x2, x28, #16 // get argv into x2
- adrp x4,___dso_handle@page
- add x4,x4,___dso_handle@pageoff // get dyld's mh in to x4
- adrp x3,__dso_static@page
- ldr x3,[x3,__dso_static@pageoff] // get unslid start of dyld
- sub x3,x4,x3 // x3 now has slide of dyld
- mov x5,sp // x5 has &startGlue
-
- // call dyldbootstrap::start(app_mh, argc, argv, slide, dyld_mh, &startGlue)
- bl __ZN13dyldbootstrap5startEPK12macho_headeriPPKclS2_Pm
+#if __LP64__
+ ldr x0, [x28] // get app's mh into x0
+ ldr x1, [x28, #8] // get argc into x1 (kernel passes 32-bit int argc as 64-bits on stack to keep alignment)
+ add x2, x28, #16 // get argv into x2
+#else
+ ldr w0, [x28] // get app's mh into x0
+ ldr w1, [x28, #4] // get argc into x1 (kernel passes 32-bit int argc as 64-bits on stack to keep alignment)
+ add w2, w28, #8 // get argv into x2
+#endif
+ adrp x3,___dso_handle@page
+ add x3,x3,___dso_handle@pageoff // get dyld's mh in to x4
+ mov x4,sp // x5 has &startGlue
+
+ // call dyldbootstrap::start(app_mh, argc, argv, dyld_mh, &startGlue)
+ bl __ZN13dyldbootstrap5startEPKN5dyld311MachOLoadedEiPPKcS3_Pm