|
|
@@ -528,6 +528,14 @@ GLOBAL(\label)
|
|
|
ALIGN
|
|
|
GLOBAL(stub32_clone)
|
|
|
leaq sys_clone(%rip), %rax
|
|
|
+ /*
|
|
|
+ * 32-bit clone API is clone(..., int tls_val, int *child_tidptr).
|
|
|
+ * 64-bit clone API is clone(..., int *child_tidptr, int tls_val).
|
|
|
+ * Native 64-bit kernel's sys_clone() implements the latter.
|
|
|
+ * We need to swap args here. But since tls_val is in fact ignored
|
|
|
+ * by sys_clone(), we can get away with an assignment
|
|
|
+ * (arg4 = arg5) instead of a full swap:
|
|
|
+ */
|
|
|
mov %r8, %rcx
|
|
|
jmp ia32_ptregs_common
|
|
|
|