microblaze: Add TLS support to sys_clone
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>
Fri, 24 Feb 2012 04:52:26 +0000 (14:52 +1000)
committerMichal Simek <monstr@monstr.eu>
Fri, 25 May 2012 04:40:23 +0000 (06:40 +0200)
Formerly unused Args 4/5 now load parent tid / child tid so the brid to
do_fork can pick up TLS from r10. Arg 3 still unused

There is also necessary to fix old glibc which do not setup r9/r10 (arg 4/5).
Simple clearing them is fine.

Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
Signed-off-by: David Holsgrove <david.holsgrove@petalogix.com>
Signed-off-by: Michal Simek <monstr@monstr.eu>
arch/microblaze/kernel/entry.S

index 66e34a3..288678c 100644 (file)
@@ -493,10 +493,11 @@ C_ENTRY(sys_clone):
        bnei    r6, 1f;                 /* See if child SP arg (arg 1) is 0. */
        lwi     r6, r1, PT_R1;  /* If so, use paret's stack ptr */
 1:     addik   r7, r1, 0;                      /* Arg 2: parent context */
-       add     r8, r0, r0;                     /* Arg 3: (unused) */
-       add     r9, r0, r0;                     /* Arg 4: (unused) */
+       lwi     r9, r1, PT_R8;          /* parent tid.  */
+       lwi     r10, r1, PT_R9;         /* child tid.  */
+       /* do_fork will pick up TLS from regs->r10.  */
        brid    do_fork         /* Do real work (tail-call) */
-       add     r10, r0, r0;                    /* Arg 5: (unused) */
+       add     r8, r0, r0;             /* Arg 3: (unused) */
 
 C_ENTRY(sys_execve):
        brid    microblaze_execve;      /* Do real work (tail-call).*/