summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2014-04-05 11:56:17 -0700
committerDmitry V. Levin <ldv@altlinux.org>2014-04-09 12:33:12 +0000
commitb563325f0a5497b6134f24bea03a86b21272960f (patch)
tree79dac8a8cd9d52b5111bdad033c39bf8be94d607
parent391c0d8cc5d78b20025355025ba43f0c9897126d (diff)
downloadstrace-b563325f0a5497b6134f24bea03a86b21272960f.tar.gz
strace-b563325f0a5497b6134f24bea03a86b21272960f.tar.bz2
strace-b563325f0a5497b6134f24bea03a86b21272960f.tar.xz
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 <enh@google.com> Signed-off-by: Dmitry V. Levin <ldv@altlinux.org>
-rw-r--r--process.c10
1 files 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