Browse Source

arc: clone: Simplify CLONE_THREAD detection

This change was inspired by similar change in glibc:
https://sourceware.org/git/?p=glibc.git;a=commit;h=0cb313f7cb0e418b3d56f3a2ac69790522ab825d

Current Linux kernel requires CLONE_VM to be set with CLONE_THREAD
otherwise returning -EINVAL, see man clone2. This means we don't need
to check for both CLONE_THREAD and CLONE_VM instead we may simplify
code a lot and just check 1 bit (CLONE_THREAD).

Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
Acked-by: Vineet Gupta <vgupta@synopsys.com>
Alexey Brodkin 7 years ago
parent
commit
334ddb1b8f
1 changed files with 1 additions and 6 deletions
  1. 1 6
      libc/sysdeps/linux/arc/clone.S

+ 1 - 6
libc/sysdeps/linux/arc/clone.S

@@ -27,10 +27,7 @@
 ;		void *tls,
 ;		int __user *child_tidptr)
 
-#define CLONE_VM		0x00000100
-#define CLONE_THREAD		0x00010000
 #define CLONE_SETTLS		0x00080000
-#define CLONE_THREAD_N_VM	(CLONE_THREAD | CLONE_VM)
 
 ENTRY(clone)
 	cmp	r0, 0		; @fn can't be NULL
@@ -68,9 +65,7 @@ ENTRY(clone)
 
 .Lnext_clone_quirk:
 #ifdef RESET_PID
-	mov_s	r2, CLONE_THREAD_N_VM
-	and_s	r12, r12, r2
-	breq	r2, r12, .Lgo_thread
+	bbit1	r12, 16, .Lgo_thread	; CLONE_THREAD = (1 << 16)
 
 	mov	r8, __NR_getpid
 	ARC_TRAP_INSN		; r0 has PID