Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
| 2 | * linux/arch/m68knommu/kernel/entry.S |
| 3 | * |
| 4 | * Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com) |
| 5 | * Copyright (C) 1998 D. Jeff Dionne <jeff@lineo.ca>, |
| 6 | * Kenneth Albanowski <kjahds@kjahds.com>, |
| 7 | * Copyright (C) 2000 Lineo Inc. (www.lineo.com) |
| 8 | * |
| 9 | * Based on: |
| 10 | * |
| 11 | * linux/arch/m68k/kernel/entry.S |
| 12 | * |
| 13 | * Copyright (C) 1991, 1992 Linus Torvalds |
| 14 | * |
| 15 | * This file is subject to the terms and conditions of the GNU General Public |
| 16 | * License. See the file README.legal in the main directory of this archive |
| 17 | * for more details. |
| 18 | * |
| 19 | * Linux/m68k support by Hamish Macdonald |
| 20 | * |
| 21 | * 68060 fixes by Jesper Skov |
| 22 | * ColdFire support by Greg Ungerer (gerg@snapgear.com) |
| 23 | * 5307 fixes by David W. Miller |
| 24 | * linux 2.4 support David McCullough <davidm@snapgear.com> |
| 25 | */ |
| 26 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 27 | #include <linux/sys.h> |
| 28 | #include <linux/linkage.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 29 | #include <asm/errno.h> |
| 30 | #include <asm/setup.h> |
| 31 | #include <asm/segment.h> |
| 32 | #include <asm/asm-offsets.h> |
| 33 | #include <asm/entry.h> |
Wilson Callan | 2d7f16d | 2008-05-01 12:16:28 +1000 | [diff] [blame] | 34 | #include <asm/unistd.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 35 | |
| 36 | .text |
| 37 | |
| 38 | .globl buserr |
| 39 | .globl trap |
| 40 | .globl ret_from_exception |
| 41 | .globl ret_from_signal |
| 42 | .globl sys_fork |
| 43 | .globl sys_clone |
| 44 | .globl sys_vfork |
| 45 | |
| 46 | ENTRY(buserr) |
| 47 | SAVE_ALL |
| 48 | moveq #-1,%d0 |
Greg Ungerer | c84b564 | 2009-09-20 21:32:32 +1000 | [diff] [blame] | 49 | movel %d0,%sp@(PT_OFF_ORIG_D0) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 50 | movel %sp,%sp@- /* stack frame pointer argument */ |
| 51 | jsr buserr_c |
| 52 | addql #4,%sp |
| 53 | jra ret_from_exception |
| 54 | |
| 55 | ENTRY(trap) |
| 56 | SAVE_ALL |
| 57 | moveq #-1,%d0 |
Greg Ungerer | c84b564 | 2009-09-20 21:32:32 +1000 | [diff] [blame] | 58 | movel %d0,%sp@(PT_OFF_ORIG_D0) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 59 | movel %sp,%sp@- /* stack frame pointer argument */ |
| 60 | jsr trap_c |
| 61 | addql #4,%sp |
| 62 | jra ret_from_exception |
| 63 | |
| 64 | #ifdef TRAP_DBG_INTERRUPT |
| 65 | |
| 66 | .globl dbginterrupt |
| 67 | ENTRY(dbginterrupt) |
| 68 | SAVE_ALL |
| 69 | moveq #-1,%d0 |
Greg Ungerer | c84b564 | 2009-09-20 21:32:32 +1000 | [diff] [blame] | 70 | movel %d0,%sp@(PT_OFF_ORIG_D0) |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 71 | movel %sp,%sp@- /* stack frame pointer argument */ |
| 72 | jsr dbginterrupt_c |
| 73 | addql #4,%sp |
| 74 | jra ret_from_exception |
| 75 | #endif |
| 76 | |
| 77 | ENTRY(reschedule) |
| 78 | /* save top of frame */ |
| 79 | pea %sp@ |
| 80 | jbsr set_esp0 |
| 81 | addql #4,%sp |
| 82 | pea ret_from_exception |
| 83 | jmp schedule |
| 84 | |
| 85 | ENTRY(ret_from_fork) |
| 86 | movel %d1,%sp@- |
| 87 | jsr schedule_tail |
| 88 | addql #4,%sp |
| 89 | jra ret_from_exception |
| 90 | |
| 91 | ENTRY(sys_fork) |
| 92 | SAVE_SWITCH_STACK |
| 93 | pea %sp@(SWITCH_STACK_SIZE) |
| 94 | jbsr m68k_fork |
| 95 | addql #4,%sp |
| 96 | RESTORE_SWITCH_STACK |
| 97 | rts |
| 98 | |
| 99 | ENTRY(sys_vfork) |
| 100 | SAVE_SWITCH_STACK |
| 101 | pea %sp@(SWITCH_STACK_SIZE) |
| 102 | jbsr m68k_vfork |
| 103 | addql #4,%sp |
| 104 | RESTORE_SWITCH_STACK |
| 105 | rts |
| 106 | |
| 107 | ENTRY(sys_clone) |
| 108 | SAVE_SWITCH_STACK |
| 109 | pea %sp@(SWITCH_STACK_SIZE) |
| 110 | jbsr m68k_clone |
| 111 | addql #4,%sp |
| 112 | RESTORE_SWITCH_STACK |
| 113 | rts |
| 114 | |
| 115 | ENTRY(sys_sigsuspend) |
| 116 | SAVE_SWITCH_STACK |
| 117 | pea %sp@(SWITCH_STACK_SIZE) |
| 118 | jbsr do_sigsuspend |
| 119 | addql #4,%sp |
| 120 | RESTORE_SWITCH_STACK |
| 121 | rts |
| 122 | |
| 123 | ENTRY(sys_rt_sigsuspend) |
| 124 | SAVE_SWITCH_STACK |
| 125 | pea %sp@(SWITCH_STACK_SIZE) |
| 126 | jbsr do_rt_sigsuspend |
| 127 | addql #4,%sp |
| 128 | RESTORE_SWITCH_STACK |
| 129 | rts |
| 130 | |
| 131 | ENTRY(sys_sigreturn) |
| 132 | SAVE_SWITCH_STACK |
| 133 | jbsr do_sigreturn |
| 134 | RESTORE_SWITCH_STACK |
| 135 | rts |
| 136 | |
| 137 | ENTRY(sys_rt_sigreturn) |
| 138 | SAVE_SWITCH_STACK |
| 139 | jbsr do_rt_sigreturn |
| 140 | RESTORE_SWITCH_STACK |
| 141 | rts |
| 142 | |
Wilson Callan | 2d7f16d | 2008-05-01 12:16:28 +1000 | [diff] [blame] | 143 | ENTRY(ret_from_user_signal) |
| 144 | moveq #__NR_sigreturn,%d0 |
| 145 | trap #0 |
| 146 | |
| 147 | ENTRY(ret_from_user_rt_signal) |
| 148 | move #__NR_rt_sigreturn,%d0 |
| 149 | trap #0 |
| 150 | |