summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Brodkin <Alexey.Brodkin@synopsys.com>2016-07-29 12:17:20 +0300
committerWaldemar Brodkorb <wbx@uclibc-ng.org>2016-07-31 12:50:54 +0200
commit334ddb1b8fe5d4b473a9e410b882952f2075b417 (patch)
treea7710e67cd2314bf13d943aa5244e2f69e05ce87
parentb2c2bbcc8ccd0d0b281db653d22e568b8871ad46 (diff)
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>
-rw-r--r--libc/sysdeps/linux/arc/clone.S7
1 files changed, 1 insertions, 6 deletions
diff --git a/libc/sysdeps/linux/arc/clone.S b/libc/sysdeps/linux/arc/clone.S
index fc8dfcf2a..3942b88f7 100644
--- a/libc/sysdeps/linux/arc/clone.S
+++ b/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