X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/2d21ac55c334faf3a56e5634905ed6987fc787d4..36401178fd6817c043cc00b0c00c7f723e58efae:/libsyscall/custom/__fork.s?ds=sidebyside diff --git a/libsyscall/custom/__fork.s b/libsyscall/custom/__fork.s index 227812ecc..baff6eb82 100644 --- a/libsyscall/custom/__fork.s +++ b/libsyscall/custom/__fork.s @@ -243,70 +243,6 @@ L2: addq $24, %rsp // restore the stack ret -#elif defined(__arm__) - - .globl cerror - MI_ENTRY_POINT(_fork) - stmfd sp!, {r4, r7, lr} - add r7, sp, #4 - MI_CALL_EXTERNAL(__cthread_fork_prepare) - mov r1, #1 // prime results - mov r12, #SYS_fork - swi #SWI_SYSCALL // make the syscall - bcs Lbotch // error? - cmp r1, #0 // parent (r1=0) or child(r1=1) - beq Lparent - - //child here... - MI_GET_ADDRESS(r3, __current_pid) - mov r0, #0 - str r0, [r3] // clear cached pid in child - -#if defined(__DYNAMIC__) -// Here on the child side of the fork we need to tell the dynamic linker that -// we have forked. To do this we call __dyld_fork_child in the dyanmic -// linker. But since we can't dynamicly bind anything until this is done we -// do this by using the private extern __dyld_func_lookup() function to get the -// address of __dyld_fork_child (the 'C' code equivlent): -// -// _dyld_func_lookup("__dyld_fork_child", &address); -// address(); -// - .cstring - .align 2 -LC0: - .ascii "__dyld_fork_child\0" -.text -.align 2 - sub sp, sp, #4 // allocate space for the address parameter - mov r1, sp // get the address of the allocated space - ldr r0, LP0 // get the name of the function to look up -L0: add r0, pc, r0 - bl __dyld_func_lookup - mov lr, pc - ldr pc, [sp], #4 // call __dyld_fork_child indirectly and pop -#endif - MI_CALL_EXTERNAL(__cthread_fork_child) // let child get ready - mov r0, #0 - ldmfd sp!, {r4, r7, pc} - -Lbotch: - MI_CALL_EXTERNAL(cerror) // jump here on error - mov r0,#-1 // set the error - // fall thru - -Lparent: - mov r4, r0 // save child pid - MI_CALL_EXTERNAL(__cthread_fork_parent) - mov r0, r4 // restore child pid - ldmfd sp!, {r4, r7, pc} // pop and return - - .align 2 -#if defined(__DYNAMIC__) -LP0: - .long LC0-(L0+8) -#endif - #else #error Unsupported architecture #endif