diff options
Diffstat (limited to 'libc/sysdeps/linux/arc')
-rw-r--r-- | libc/sysdeps/linux/arc/clone.S | 13 | ||||
-rw-r--r-- | libc/sysdeps/linux/arc/vfork.S | 13 |
2 files changed, 1 insertions, 25 deletions
diff --git a/libc/sysdeps/linux/arc/clone.S b/libc/sysdeps/linux/arc/clone.S index 3942b88f7..c2ce906c9 100644 --- a/libc/sysdeps/linux/arc/clone.S +++ b/libc/sysdeps/linux/arc/clone.S @@ -61,20 +61,9 @@ ENTRY(clone) ; Setup TP register (since kernel doesn't do that) and.f 0, r12, CLONE_SETTLS bz .Lnext_clone_quirk - SET_TP r9 + mov r25, r9 .Lnext_clone_quirk: -#ifdef RESET_PID - bbit1 r12, 16, .Lgo_thread ; CLONE_THREAD = (1 << 16) - - mov r8, __NR_getpid - ARC_TRAP_INSN ; r0 has PID - THREAD_SELF r1 ; Get to struct pthread (just before TCB) - st r0, [r1, PTHREAD_PID] - st r0, [r1, PTHREAD_TID] - -.Lgo_thread: -#endif #endif ; child jumps off to @fn with @arg as argument, and returns here jl.d [r10] diff --git a/libc/sysdeps/linux/arc/vfork.S b/libc/sysdeps/linux/arc/vfork.S index 573a29f26..11959b66b 100644 --- a/libc/sysdeps/linux/arc/vfork.S +++ b/libc/sysdeps/linux/arc/vfork.S @@ -16,25 +16,12 @@ #define CLONE_FLAGS_FOR_VFORK (CLONE_VM|CLONE_VFORK|SIGCHLD) ENTRY(__vfork) -#ifdef SAVE_PID - THREAD_SELF r1 ; Get to struct pthread (just before TCB) - ld r2, [r1, PTHREAD_PID] - neg.f r3, r2 - bset.z r3, r3, 31 - st r3, [r1, PTHREAD_PID] -#endif mov r0, CLONE_FLAGS_FOR_VFORK mov_s r1, sp mov r8, __NR_clone ARC_TRAP_INSN cmp r0, 0 -#ifdef RESTORE_PID - bz 1f ; child continues - THREAD_SELF r1 ; Get to struct pthread (just before TCB) - st r2, [r1, PTHREAD_PID] -1: -#endif jge [blink] ; pid >=0 return, else detour via tailcall to errno b __syscall_error |