forked from Minki/linux
bbc6f1ba50
Virtual memory m68k systems build with register a2 dedicated to being the current proc pointer (non-MMU don't do this). Add code to the ColdFire interrupt and exception processing to set this on entry, and at context switch time. We use the same GET_CURRENT() macro that MMU enabled code uses - modifying it so that the assembler is ColdFire clean. Signed-off-by: Greg Ungerer <gerg@uclinux.org> Acked-by: Matt Waddel <mwaddel@yahoo.com> Acked-by: Kurt Mahan <kmahan@xmission.com> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
131 lines
2.5 KiB
ArmAsm
131 lines
2.5 KiB
ArmAsm
/*
|
|
* linux/arch/m68knommu/kernel/entry.S
|
|
*
|
|
* Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com)
|
|
* Copyright (C) 1998 D. Jeff Dionne <jeff@lineo.ca>,
|
|
* Kenneth Albanowski <kjahds@kjahds.com>,
|
|
* Copyright (C) 2000 Lineo Inc. (www.lineo.com)
|
|
*
|
|
* Based on:
|
|
*
|
|
* linux/arch/m68k/kernel/entry.S
|
|
*
|
|
* Copyright (C) 1991, 1992 Linus Torvalds
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file README.legal in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Linux/m68k support by Hamish Macdonald
|
|
*
|
|
* 68060 fixes by Jesper Skov
|
|
* ColdFire support by Greg Ungerer (gerg@snapgear.com)
|
|
* 5307 fixes by David W. Miller
|
|
* linux 2.4 support David McCullough <davidm@snapgear.com>
|
|
*/
|
|
|
|
#include <linux/linkage.h>
|
|
#include <asm/errno.h>
|
|
#include <asm/setup.h>
|
|
#include <asm/segment.h>
|
|
#include <asm/asm-offsets.h>
|
|
#include <asm/entry.h>
|
|
#include <asm/unistd.h>
|
|
|
|
.text
|
|
|
|
.globl buserr
|
|
.globl trap
|
|
.globl ret_from_exception
|
|
.globl ret_from_signal
|
|
.globl sys_fork
|
|
.globl sys_clone
|
|
.globl sys_vfork
|
|
|
|
ENTRY(buserr)
|
|
SAVE_ALL_INT
|
|
GET_CURRENT(%d0)
|
|
movel %sp,%sp@- /* stack frame pointer argument */
|
|
jsr buserr_c
|
|
addql #4,%sp
|
|
jra ret_from_exception
|
|
|
|
ENTRY(trap)
|
|
SAVE_ALL_INT
|
|
GET_CURRENT(%d0)
|
|
movel %sp,%sp@- /* stack frame pointer argument */
|
|
jsr trap_c
|
|
addql #4,%sp
|
|
jra ret_from_exception
|
|
|
|
#ifdef TRAP_DBG_INTERRUPT
|
|
|
|
.globl dbginterrupt
|
|
ENTRY(dbginterrupt)
|
|
SAVE_ALL_INT
|
|
GET_CURRENT(%d0)
|
|
movel %sp,%sp@- /* stack frame pointer argument */
|
|
jsr dbginterrupt_c
|
|
addql #4,%sp
|
|
jra ret_from_exception
|
|
#endif
|
|
|
|
ENTRY(reschedule)
|
|
/* save top of frame */
|
|
pea %sp@
|
|
jbsr set_esp0
|
|
addql #4,%sp
|
|
pea ret_from_exception
|
|
jmp schedule
|
|
|
|
ENTRY(ret_from_fork)
|
|
movel %d1,%sp@-
|
|
jsr schedule_tail
|
|
addql #4,%sp
|
|
jra ret_from_exception
|
|
|
|
ENTRY(sys_fork)
|
|
SAVE_SWITCH_STACK
|
|
pea %sp@(SWITCH_STACK_SIZE)
|
|
jbsr m68k_fork
|
|
addql #4,%sp
|
|
RESTORE_SWITCH_STACK
|
|
rts
|
|
|
|
ENTRY(sys_vfork)
|
|
SAVE_SWITCH_STACK
|
|
pea %sp@(SWITCH_STACK_SIZE)
|
|
jbsr m68k_vfork
|
|
addql #4,%sp
|
|
RESTORE_SWITCH_STACK
|
|
rts
|
|
|
|
ENTRY(sys_clone)
|
|
SAVE_SWITCH_STACK
|
|
pea %sp@(SWITCH_STACK_SIZE)
|
|
jbsr m68k_clone
|
|
addql #4,%sp
|
|
RESTORE_SWITCH_STACK
|
|
rts
|
|
|
|
ENTRY(sys_sigreturn)
|
|
SAVE_SWITCH_STACK
|
|
jbsr do_sigreturn
|
|
RESTORE_SWITCH_STACK
|
|
rts
|
|
|
|
ENTRY(sys_rt_sigreturn)
|
|
SAVE_SWITCH_STACK
|
|
jbsr do_rt_sigreturn
|
|
RESTORE_SWITCH_STACK
|
|
rts
|
|
|
|
ENTRY(ret_from_user_signal)
|
|
moveq #__NR_sigreturn,%d0
|
|
trap #0
|
|
|
|
ENTRY(ret_from_user_rt_signal)
|
|
movel #__NR_rt_sigreturn,%d0
|
|
trap #0
|
|
|