X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/36401178fd6817c043cc00b0c00c7f723e58efae..7e41aa883dd258f888d0470250eead40a53ef1f5:/libsyscall/custom/__getpid.s diff --git a/libsyscall/custom/__getpid.s b/libsyscall/custom/__getpid.s index 1299a1645..2768d9b82 100644 --- a/libsyscall/custom/__getpid.s +++ b/libsyscall/custom/__getpid.s @@ -28,51 +28,13 @@ #include "SYS.h" -#if defined(__ppc__) || defined(__ppc64__) - - .data - .globl __current_pid - .align 2 -__current_pid: - .long 0 - -MI_ENTRY_POINT(___getpid) -#if defined(__DYNAMIC__) - mflr r0 // note we cannot use MI_GET_ADDRESS... - bcl 20,31,1f // ...because we define __current_pid -1: - mflr r5 - mtlr r0 - addis r5, r5, ha16(__current_pid - 1b) - addi r5, r5, lo16(__current_pid - 1b) -#else - lis r5,hi16(__current_pid) - ori r5,r5,lo16(__current_pid) -#endif - lwz r3,0(r5) // get the cached pid - cmpwi r3,0 // if positive, - bgtlr++ // return it - - SYSCALL_NONAME(getpid, 0) - - lwarx r4,0,r5 // see if we can cache it - cmpwi r4,0 // we can't if there are any... - blt-- 1f // ...vforks in progress - - stwcx. r3,0,r5 // ignore cache conflicts - blr -1: - li r6,-4 // on 970, cancel the reservation using red zone... - stwcx. r3,r6,r1 // ...to avoid an errata - blr - -#elif defined(__i386__) +#if defined(__i386__) .data .private_extern __current_pid -__current_pid: +L__current_pid_addr: + __current_pid: .long 0 -L__current_pid_addr = __current_pid #if defined(__DYNAMIC__) #define GET_CURRENT_PID \ @@ -99,7 +61,7 @@ LEAF(___getpid, 0) jle 1f ret 1: - UNIX_SYSCALL_NONAME(getpid, 0) + UNIX_SYSCALL_NONAME(getpid, 0, cerror_nocancel) movl %eax, %edx xorl %eax, %eax GET_CURRENT_PID @@ -126,7 +88,7 @@ LEAF(___getpid, 0) jle 1f ret 1: - UNIX_SYSCALL_NONAME(getpid, 0) + UNIX_SYSCALL_NONAME(getpid, 0, cerror_nocancel) movl %eax, %edx xorl %eax, %eax leaq __current_pid(%rip), %rcx