aboutsummaryrefslogtreecommitdiffstats
path: root/arch/microblaze
diff options
context:
space:
mode:
authorMichal Simek <monstr@monstr.eu>2010-06-04 07:06:27 -0400
committerMichal Simek <monstr@monstr.eu>2010-08-04 04:22:32 -0400
commit570e3e236efdf5bb4a023ecc3601dad9273a011e (patch)
tree3f5d51d66dfca708a39b568f00384195936285a6 /arch/microblaze
parent79aac889037027bebf7fcfc4cf9f2eb25f4f8075 (diff)
microblaze: Fix sys_clone syscall
sys_clone syscall ignored args which this patch mapped to args which are passing from glibc. Here is the origin problem description. "I ran the static libgcc tests (very few of them are there, they are mostly dynamically linked) and some of them fail with an assertion in fork() system call (tid != pid), I looked at the microblaze/entry.S file and it looks suspicious (ignores arguments 3-5)" Arg mapping should be: glibc ARCH_FORK(...) -> do_fork(...) r5 -> r5 (clone_flags) r6 -> r6 (stack_start, use parent->stack if NULL) pt_regs -> r7 (pt_regs) r7 -> r8 (stack_size) r8 -> r9 (parent_tidptr) r9 -> r10 (child_tidptr) Signed-off-by: John Williams <john.williams@petalogix.com> Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch/microblaze')
-rw-r--r--arch/microblaze/kernel/entry.S14
1 files changed, 7 insertions, 7 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S
index c0ede25c5b99..077377a5d0ca 100644
--- a/arch/microblaze/kernel/entry.S
+++ b/arch/microblaze/kernel/entry.S
@@ -476,13 +476,13 @@ C_ENTRY(sys_vfork):
476 476
477C_ENTRY(sys_clone): 477C_ENTRY(sys_clone):
478 bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */ 478 bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */
479 lwi r6, r1, PTO+PT_R1; /* If so, use paret's stack ptr */ 479 lwi r6, r1, PTO + PT_R1; /* If so, use paret's stack ptr */
4801: la r7, r1, PTO; /* Arg 2: parent context */ 4801: add r10, r0, r9; /* Arg 6: (child_tidptr) */
481 add r8, r0, r0; /* Arg 3: (unused) */ 481 add r9, r0, r8; /* Arg 5: (parent_tidptr) */
482 add r9, r0, r0; /* Arg 4: (unused) */ 482 add r8, r0, r7; /* Arg 4: (stack_size) */
483 add r10, r0, r0; /* Arg 5: (unused) */ 483 la r7, r1, PTO; /* Arg 3: pt_regs */
484 brid do_fork /* Do real work (tail-call) */ 484 brid do_fork /* Do real work (tail-call) */
485 nop; 485 nop
486 486
487C_ENTRY(sys_execve): 487C_ENTRY(sys_execve):
488 la r8, r1, PTO; /* add user context as 4th arg */ 488 la r8, r1, PTO; /* add user context as 4th arg */