about summary refs log tree commit diff
path: root/include/sched.h
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2011-09-18 10:14:37 -0400
committerRich Felker <dalias@aerifal.cx>2011-09-18 10:14:37 -0400
commit3f72cdac73030761120cf32aeef44e7d03e2f1fa (patch)
treed52dde9adbb8386100d98371d4e954fb88af2c41 /include/sched.h
parent455fc98389fac09d8cf7ec4cde310a5b7ca47485 (diff)
downloadmusl-3f72cdac73030761120cf32aeef44e7d03e2f1fa.tar.gz
musl-3f72cdac73030761120cf32aeef44e7d03e2f1fa.tar.xz
musl-3f72cdac73030761120cf32aeef44e7d03e2f1fa.zip
overhaul clone syscall wrapping
several things are changed. first, i have removed the old __uniclone
function signature and replaced it with the "standard" linux
__clone/clone signature. this was necessary to expose clone to
applications anyway, and it makes it easier to port __clone to new
archs, since it's now testable independently of pthread_create.

secondly, i have removed all references to the ugly ldt descriptor
structure (i386 only) from the c code and pthread structure. in places
where it is needed, it is now created on the stack just when it's
needed, in assembly code. thus, the i386 __clone function takes the
desired thread pointer as its argument, rather than an ldt descriptor
pointer, just like on all other sane archs. this should not affect
applications since there is really no way an application can use clone
with threads/tls in a way that doesn't horribly conflict with and
clobber the underlying implementation's use. applications are expected
to use clone only for creating actual processes, possibly with new
namespace features and whatnot.
Diffstat (limited to 'include/sched.h')
-rw-r--r--include/sched.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/include/sched.h b/include/sched.h
index 4d8bd3db..7b3f1600 100644
--- a/include/sched.h
+++ b/include/sched.h
@@ -31,6 +31,33 @@ int     sched_yield(void);
 #define SCHED_FIFO 1
 #define SCHED_RR 2
 
+#ifdef _GNU_SOURCE
+#define CSIGNAL		0x000000ff
+#define CLONE_VM	0x00000100
+#define CLONE_FS	0x00000200
+#define CLONE_FILES	0x00000400
+#define CLONE_SIGHAND	0x00000800
+#define CLONE_PTRACE	0x00002000
+#define CLONE_VFORK	0x00004000
+#define CLONE_PARENT	0x00008000
+#define CLONE_THREAD	0x00010000
+#define CLONE_NEWNS	0x00020000
+#define CLONE_SYSVSEM	0x00040000
+#define CLONE_SETTLS	0x00080000
+#define CLONE_PARENT_SETTID	0x00100000
+#define CLONE_CHILD_CLEARTID	0x00200000
+#define CLONE_DETACHED	0x00400000
+#define CLONE_UNTRACED	0x00800000
+#define CLONE_CHILD_SETTID	0x01000000
+#define CLONE_NEWUTS	0x04000000
+#define CLONE_NEWIPC	0x08000000
+#define CLONE_NEWUSER	0x10000000
+#define CLONE_NEWPID	0x20000000
+#define CLONE_NEWNET	0x40000000
+#define CLONE_IO	0x80000000
+int clone (int (*)(void *), void *, int, void *, ...);
+#endif
+
 #ifdef __cplusplus
 }
 #endif