entry.S (fd11ff7380fe7c61f55e6caf33982edeab3fbc19) entry.S (2319295dd8dbd076afa136bffb797ef726b605a0)
1/*
2 * Low-level system-call handling, trap handlers and context-switching
3 *
4 * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu>
5 * Copyright (C) 2008-2009 PetaLogix
6 * Copyright (C) 2003 John Williams <jwilliams@itee.uq.edu.au>
7 * Copyright (C) 2001,2002 NEC Corporation
8 * Copyright (C) 2001,2002 Miles Bader <miles@gnu.org>

--- 470 unchanged lines hidden (view full) ---

479 saved context). */
480C_ENTRY(ret_from_fork):
481 bralid r15, schedule_tail; /* ...which is schedule_tail's arg */
482 add r5, r3, r0; /* switch_thread returns the prev task */
483 /* ( in the delay slot ) */
484 brid ret_from_trap; /* Do normal trap return */
485 add r3, r0, r0; /* Child's fork call should return 0. */
486
1/*
2 * Low-level system-call handling, trap handlers and context-switching
3 *
4 * Copyright (C) 2008-2009 Michal Simek <monstr@monstr.eu>
5 * Copyright (C) 2008-2009 PetaLogix
6 * Copyright (C) 2003 John Williams <jwilliams@itee.uq.edu.au>
7 * Copyright (C) 2001,2002 NEC Corporation
8 * Copyright (C) 2001,2002 Miles Bader <miles@gnu.org>

--- 470 unchanged lines hidden (view full) ---

479 saved context). */
480C_ENTRY(ret_from_fork):
481 bralid r15, schedule_tail; /* ...which is schedule_tail's arg */
482 add r5, r3, r0; /* switch_thread returns the prev task */
483 /* ( in the delay slot ) */
484 brid ret_from_trap; /* Do normal trap return */
485 add r3, r0, r0; /* Child's fork call should return 0. */
486
487C_ENTRY(ret_from_kernel_thread):
488 bralid r15, schedule_tail; /* ...which is schedule_tail's arg */
489 add r5, r3, r0; /* switch_thread returns the prev task */
490 /* ( in the delay slot ) */
491 brald r15, r20 /* fn was left in r20 */
492 addk r5, r0, r19 /* ... and argument - in r19 */
493 brid sys_exit /* won't be returning... */
494 addk r5, r0, r0
495
487C_ENTRY(sys_vfork):
488 brid microblaze_vfork /* Do real work (tail-call) */
489 addik r5, r1, 0
490
491C_ENTRY(sys_clone):
492 bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */
493 lwi r6, r1, PT_R1; /* If so, use paret's stack ptr */
4941: addik r7, r1, 0; /* Arg 2: parent context */

--- 543 unchanged lines hidden ---
496C_ENTRY(sys_vfork):
497 brid microblaze_vfork /* Do real work (tail-call) */
498 addik r5, r1, 0
499
500C_ENTRY(sys_clone):
501 bnei r6, 1f; /* See if child SP arg (arg 1) is 0. */
502 lwi r6, r1, PT_R1; /* If so, use paret's stack ptr */
5031: addik r7, r1, 0; /* Arg 2: parent context */

--- 543 unchanged lines hidden ---