diff options
author | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2012-02-23 23:52:26 -0500 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2012-05-25 00:40:23 -0400 |
commit | 8d95e1224afa22e7881fc823849342b5602d736e (patch) | |
tree | 20663d437e1df665ed06ebb934801fb0405c2c06 /arch | |
parent | d65987a88dc8b182ef933edf93c23cf4233dd8d5 (diff) |
microblaze: Add TLS support to sys_clone
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>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/microblaze/kernel/entry.S | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index 66e34a3bfe1b..288678c5fea6 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
@@ -493,10 +493,11 @@ C_ENTRY(sys_clone): | |||
493 | bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ | 493 | bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ |
494 | lwi r6, r1, PT_R1; /* If so, use paret's stack ptr */ | 494 | lwi r6, r1, PT_R1; /* If so, use paret's stack ptr */ |
495 | 1: addik r7, r1, 0; /* Arg 2: parent context */ | 495 | 1: addik r7, r1, 0; /* Arg 2: parent context */ |
496 | add r8, r0, r0; /* Arg 3: (unused) */ | 496 | lwi r9, r1, PT_R8; /* parent tid. */ |
497 | add r9, r0, r0; /* Arg 4: (unused) */ | 497 | lwi r10, r1, PT_R9; /* child tid. */ |
498 | /* do_fork will pick up TLS from regs->r10. */ | ||
498 | brid do_fork /* Do real work (tail-call) */ | 499 | brid do_fork /* Do real work (tail-call) */ |
499 | add r10, r0, r0; /* Arg 5: (unused) */ | 500 | add r8, r0, r0; /* Arg 3: (unused) */ |
500 | 501 | ||
501 | C_ENTRY(sys_execve): | 502 | C_ENTRY(sys_execve): |
502 | brid microblaze_execve; /* Do real work (tail-call).*/ | 503 | brid microblaze_execve; /* Do real work (tail-call).*/ |