From b563325f0a5497b6134f24bea03a86b21272960f Mon Sep 17 00:00:00 2001 From: Elliott Hughes Date: Sat, 5 Apr 2014 11:56:17 -0700 Subject: x86-64: fix clone(2) argument order for x86 processes Without this patch, strace claims that parent_tidptr == tls, which is clearly wrong. It is expected that parent_tidptr == child_tidptr. * process.c [X86_64] (ARG_CTID, ARG_TLS): Take current personality into account. Signed-off-by: Elliott Hughes Signed-off-by: Dmitry V. Levin --- process.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/process.c b/process.c index e3837da..442f001 100644 --- a/process.c +++ b/process.c @@ -512,8 +512,14 @@ extern void print_ldt_entry(); # define ARG_PTID 2 # define ARG_CTID 3 # define ARG_TLS 4 -#elif defined X86_64 || defined X32 || defined ALPHA || defined TILE \ - || defined OR1K +#elif defined X86_64 +/* x86 personality processes have the last two arguments flipped. */ +# define ARG_FLAGS 0 +# define ARG_STACK 1 +# define ARG_PTID 2 +# define ARG_CTID ((current_personality != 1) ? 3 : 4) +# define ARG_TLS ((current_personality != 1) ? 4 : 3) +#elif defined X32 || defined ALPHA || defined TILE || defined OR1K # define ARG_FLAGS 0 # define ARG_STACK 1 # define ARG_PTID 2 -- cgit v1.2.3